• Home
  • Raw
  • Download

Lines Matching full:cmd

29 void ide_tf_readback(ide_drive_t *drive, struct ide_cmd *cmd)  in ide_tf_readback()  argument
37 tp_ops->tf_read(drive, &cmd->tf, cmd->valid.in.tf); in ide_tf_readback()
39 if (cmd->tf_flags & IDE_TFLAG_LBA48) { in ide_tf_readback()
42 tp_ops->tf_read(drive, &cmd->hob, cmd->valid.in.hob); in ide_tf_readback()
46 void ide_tf_dump(const char *s, struct ide_cmd *cmd) in ide_tf_dump() argument
50 "lbam 0x%02x lbah 0x%02x dev 0x%02x cmd 0x%02x\n", in ide_tf_dump()
51 s, cmd->tf.feature, cmd->tf.nsect, in ide_tf_dump()
52 cmd->tf.lbal, cmd->tf.lbam, cmd->tf.lbah, in ide_tf_dump()
53 cmd->tf.device, cmd->tf.command); in ide_tf_dump()
55 s, cmd->hob.nsect, cmd->hob.lbal, cmd->hob.lbam, cmd->hob.lbah); in ide_tf_dump()
61 struct ide_cmd cmd; in taskfile_lib_get_identify() local
63 memset(&cmd, 0, sizeof(cmd)); in taskfile_lib_get_identify()
64 cmd.tf.nsect = 0x01; in taskfile_lib_get_identify()
66 cmd.tf.command = ATA_CMD_ID_ATA; in taskfile_lib_get_identify()
68 cmd.tf.command = ATA_CMD_ID_ATAPI; in taskfile_lib_get_identify()
69 cmd.valid.out.tf = IDE_VALID_OUT_TF | IDE_VALID_DEVICE; in taskfile_lib_get_identify()
70 cmd.valid.in.tf = IDE_VALID_IN_TF | IDE_VALID_DEVICE; in taskfile_lib_get_identify()
71 cmd.protocol = ATA_PROT_PIO; in taskfile_lib_get_identify()
73 return ide_raw_taskfile(drive, &cmd, buf, 1); in taskfile_lib_get_identify()
83 struct ide_cmd *cmd = &hwif->cmd; in do_rw_taskfile() local
84 struct ide_taskfile *tf = &cmd->tf; in do_rw_taskfile()
99 memcpy(cmd, orig_cmd, sizeof(*cmd)); in do_rw_taskfile()
101 if ((cmd->tf_flags & IDE_TFLAG_DMA_PIO_FALLBACK) == 0) { in do_rw_taskfile()
102 ide_tf_dump(drive->name, cmd); in do_rw_taskfile()
105 if (cmd->ftf_flags & IDE_FTFLAG_OUT_DATA) { in do_rw_taskfile()
106 u8 data[2] = { cmd->tf.data, cmd->hob.data }; in do_rw_taskfile()
108 tp_ops->output_data(drive, cmd, data, 2); in do_rw_taskfile()
111 if (cmd->valid.out.tf & IDE_VALID_DEVICE) { in do_rw_taskfile()
112 u8 HIHI = (cmd->tf_flags & IDE_TFLAG_LBA48) ? in do_rw_taskfile()
115 if (!(cmd->ftf_flags & IDE_FTFLAG_FLAGGED)) in do_rw_taskfile()
116 cmd->tf.device &= HIHI; in do_rw_taskfile()
117 cmd->tf.device |= drive->select; in do_rw_taskfile()
120 tp_ops->tf_load(drive, &cmd->hob, cmd->valid.out.hob); in do_rw_taskfile()
121 tp_ops->tf_load(drive, &cmd->tf, cmd->valid.out.tf); in do_rw_taskfile()
124 switch (cmd->protocol) { in do_rw_taskfile()
126 if (cmd->tf_flags & IDE_TFLAG_WRITE) { in do_rw_taskfile()
129 return pre_task_out_intr(drive, cmd); in do_rw_taskfile()
136 ide_execute_command(drive, cmd, handler, WAIT_WORSTCASE); in do_rw_taskfile()
139 if (ide_dma_prepare(drive, cmd)) in do_rw_taskfile()
142 ide_execute_command(drive, cmd, ide_dma_intr, 2 * WAIT_CMD); in do_rw_taskfile()
154 struct ide_cmd *cmd = &hwif->cmd; in task_no_data_intr() local
155 struct ide_taskfile *tf = &cmd->tf; in task_no_data_intr()
156 int custom = (cmd->tf_flags & IDE_TFLAG_CUSTOM_HANDLER) ? 1 : 0; in task_no_data_intr()
195 ide_finish_cmd(drive, cmd, stat); in task_no_data_intr()
226 void ide_pio_bytes(ide_drive_t *drive, struct ide_cmd *cmd, in ide_pio_bytes() argument
231 struct scatterlist *cursg = cmd->cursg; in ide_pio_bytes()
237 cursg = cmd->cursg = sg; in ide_pio_bytes()
240 unsigned nr_bytes = min(len, cursg->length - cmd->cursg_ofs); in ide_pio_bytes()
243 offset = cursg->offset + cmd->cursg_ofs; in ide_pio_bytes()
253 cmd->nleft -= nr_bytes; in ide_pio_bytes()
254 cmd->cursg_ofs += nr_bytes; in ide_pio_bytes()
256 if (cmd->cursg_ofs == cursg->length) { in ide_pio_bytes()
257 cursg = cmd->cursg = sg_next(cmd->cursg); in ide_pio_bytes()
258 cmd->cursg_ofs = 0; in ide_pio_bytes()
263 hwif->tp_ops->output_data(drive, cmd, buf, nr_bytes); in ide_pio_bytes()
265 hwif->tp_ops->input_data(drive, cmd, buf, nr_bytes); in ide_pio_bytes()
274 static void ide_pio_datablock(ide_drive_t *drive, struct ide_cmd *cmd, in ide_pio_datablock() argument
281 if (cmd->tf_flags & IDE_TFLAG_FS) in ide_pio_datablock()
282 scsi_req(cmd->rq)->result = 0; in ide_pio_datablock()
284 if (cmd->tf_flags & IDE_TFLAG_IO_16BIT) in ide_pio_datablock()
289 if (cmd->tf_flags & IDE_TFLAG_MULTI_PIO) in ide_pio_datablock()
290 nr_bytes = min_t(unsigned, cmd->nleft, drive->mult_count << 9); in ide_pio_datablock()
294 ide_pio_bytes(drive, cmd, write, nr_bytes); in ide_pio_datablock()
299 static void ide_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd) in ide_error_cmd() argument
301 if (cmd->tf_flags & IDE_TFLAG_FS) { in ide_error_cmd()
302 int nr_bytes = cmd->nbytes - cmd->nleft; in ide_error_cmd()
304 if (cmd->protocol == ATA_PROT_PIO && in ide_error_cmd()
305 ((cmd->tf_flags & IDE_TFLAG_WRITE) || cmd->nleft == 0)) { in ide_error_cmd()
306 if (cmd->tf_flags & IDE_TFLAG_MULTI_PIO) in ide_error_cmd()
317 void ide_finish_cmd(ide_drive_t *drive, struct ide_cmd *cmd, u8 stat) in ide_finish_cmd() argument
320 u8 err = ide_read_error(drive), nsect = cmd->tf.nsect; in ide_finish_cmd()
321 u8 set_xfer = !!(cmd->tf_flags & IDE_TFLAG_SET_XFER); in ide_finish_cmd()
323 ide_complete_cmd(drive, cmd, stat, err); in ide_finish_cmd()
340 struct ide_cmd *cmd = &drive->hwif->cmd; in task_pio_intr() local
342 u8 write = !!(cmd->tf_flags & IDE_TFLAG_WRITE); in task_pio_intr()
363 if (((stat & ATA_DRQ) == 0) ^ (cmd->nleft == 0)) in task_pio_intr()
367 if (write && cmd->nleft == 0) in task_pio_intr()
371 ide_pio_datablock(drive, cmd, write); in task_pio_intr()
374 if (write == 0 && cmd->nleft == 0) { in task_pio_intr()
386 if ((cmd->tf_flags & IDE_TFLAG_FS) == 0) in task_pio_intr()
387 ide_finish_cmd(drive, cmd, stat); in task_pio_intr()
389 ide_complete_rq(drive, BLK_STS_OK, blk_rq_sectors(cmd->rq) << 9); in task_pio_intr()
392 ide_error_cmd(drive, cmd); in task_pio_intr()
397 struct ide_cmd *cmd) in pre_task_out_intr() argument
404 (cmd->tf_flags & IDE_TFLAG_MULTI_PIO) ? "MULT" : "", in pre_task_out_intr()
414 ide_pio_datablock(drive, cmd, 1); in pre_task_out_intr()
419 int ide_raw_taskfile(ide_drive_t *drive, struct ide_cmd *cmd, u8 *buf, in ide_raw_taskfile() argument
426 (cmd->tf_flags & IDE_TFLAG_WRITE) ? in ide_raw_taskfile()
443 ide_req(rq)->special = cmd; in ide_raw_taskfile()
444 cmd->rq = rq; in ide_raw_taskfile()
454 int ide_no_data_taskfile(ide_drive_t *drive, struct ide_cmd *cmd) in ide_no_data_taskfile() argument
456 cmd->protocol = ATA_PROT_NODATA; in ide_no_data_taskfile()
458 return ide_raw_taskfile(drive, cmd, NULL, 0); in ide_no_data_taskfile()
466 struct ide_cmd cmd; in ide_taskfile_ioctl() local
515 memset(&cmd, 0, sizeof(cmd)); in ide_taskfile_ioctl()
517 memcpy(&cmd.hob, req_task->hob_ports, HDIO_DRIVE_HOB_HDR_SIZE - 2); in ide_taskfile_ioctl()
518 memcpy(&cmd.tf, req_task->io_ports, HDIO_DRIVE_TASK_HDR_SIZE); in ide_taskfile_ioctl()
520 cmd.valid.out.tf = IDE_VALID_DEVICE; in ide_taskfile_ioctl()
521 cmd.valid.in.tf = IDE_VALID_DEVICE | IDE_VALID_IN_TF; in ide_taskfile_ioctl()
522 cmd.tf_flags = IDE_TFLAG_IO_16BIT; in ide_taskfile_ioctl()
525 cmd.tf_flags |= IDE_TFLAG_LBA48; in ide_taskfile_ioctl()
526 cmd.valid.in.hob = IDE_VALID_IN_HOB; in ide_taskfile_ioctl()
530 cmd.ftf_flags |= IDE_FTFLAG_FLAGGED; in ide_taskfile_ioctl()
533 cmd.ftf_flags |= IDE_FTFLAG_OUT_DATA; in ide_taskfile_ioctl()
536 cmd.valid.out.hob |= IDE_VALID_NSECT; in ide_taskfile_ioctl()
538 cmd.valid.out.hob |= IDE_VALID_LBAL; in ide_taskfile_ioctl()
540 cmd.valid.out.hob |= IDE_VALID_LBAM; in ide_taskfile_ioctl()
542 cmd.valid.out.hob |= IDE_VALID_LBAH; in ide_taskfile_ioctl()
545 cmd.valid.out.tf |= IDE_VALID_FEATURE; in ide_taskfile_ioctl()
547 cmd.valid.out.tf |= IDE_VALID_NSECT; in ide_taskfile_ioctl()
549 cmd.valid.out.tf |= IDE_VALID_LBAL; in ide_taskfile_ioctl()
551 cmd.valid.out.tf |= IDE_VALID_LBAM; in ide_taskfile_ioctl()
553 cmd.valid.out.tf |= IDE_VALID_LBAH; in ide_taskfile_ioctl()
555 cmd.valid.out.tf |= IDE_VALID_OUT_TF; in ide_taskfile_ioctl()
556 if (cmd.tf_flags & IDE_TFLAG_LBA48) in ide_taskfile_ioctl()
557 cmd.valid.out.hob |= IDE_VALID_OUT_HOB; in ide_taskfile_ioctl()
561 cmd.ftf_flags |= IDE_FTFLAG_IN_DATA; in ide_taskfile_ioctl()
567 cmd.tf_flags |= IDE_TFLAG_WRITE; in ide_taskfile_ioctl()
570 cmd.protocol = ATA_PROT_DMA; in ide_taskfile_ioctl()
581 cmd.tf_flags |= IDE_TFLAG_MULTI_PIO; in ide_taskfile_ioctl()
584 cmd.protocol = ATA_PROT_PIO; in ide_taskfile_ioctl()
588 cmd.tf_flags |= IDE_TFLAG_WRITE; in ide_taskfile_ioctl()
600 cmd.tf_flags |= IDE_TFLAG_MULTI_PIO; in ide_taskfile_ioctl()
603 cmd.protocol = ATA_PROT_PIO; in ide_taskfile_ioctl()
611 cmd.protocol = ATA_PROT_NODATA; in ide_taskfile_ioctl()
621 nsect = (cmd.hob.nsect << 8) | cmd.tf.nsect; in ide_taskfile_ioctl()
631 err = ide_raw_taskfile(drive, &cmd, data_buf, nsect); in ide_taskfile_ioctl()
633 memcpy(req_task->hob_ports, &cmd.hob, HDIO_DRIVE_HOB_HDR_SIZE - 2); in ide_taskfile_ioctl()
634 memcpy(req_task->io_ports, &cmd.tf, HDIO_DRIVE_TASK_HDR_SIZE); in ide_taskfile_ioctl()
636 if ((cmd.ftf_flags & IDE_FTFLAG_SET_IN_FLAGS) && in ide_taskfile_ioctl()