Lines Matching defs:cmd
214 static void fdomain_read_data(struct scsi_cmnd *cmd)
216 struct fdomain *fd = shost_priv(cmd->device->host);
221 offset = scsi_bufflen(cmd) - scsi_get_resid(cmd);
222 virt = scsi_kmap_atomic_sg(scsi_sglist(cmd), scsi_sg_count(cmd),
229 scsi_set_resid(cmd, scsi_get_resid(cmd) - len);
234 static void fdomain_write_data(struct scsi_cmnd *cmd)
236 struct fdomain *fd = shost_priv(cmd->device->host);
243 offset = scsi_bufflen(cmd) - scsi_get_resid(cmd);
244 if (len + offset > scsi_bufflen(cmd)) {
245 len = scsi_bufflen(cmd) - offset;
249 virt = scsi_kmap_atomic_sg(scsi_sglist(cmd), scsi_sg_count(cmd),
256 scsi_set_resid(cmd, scsi_get_resid(cmd) - len);
266 struct scsi_cmnd *cmd = fd->cur_cmd;
273 if (cmd->SCp.phase & in_arbitration) {
279 cmd->SCp.phase = in_selection;
283 outb(BIT(cmd->device->host->this_id) | BIT(scmd_id(cmd)),
288 } else if (cmd->SCp.phase & in_selection) {
292 if (fdomain_select(cmd->device->host, scmd_id(cmd))) {
299 cmd->SCp.phase = in_other;
311 outb(cmd->cmnd[cmd->SCp.sent_command++],
315 if (fd->chip != tmc1800 && !cmd->SCp.have_data_in) {
316 cmd->SCp.have_data_in = -1;
322 if (fd->chip != tmc1800 && !cmd->SCp.have_data_in) {
323 cmd->SCp.have_data_in = 1;
329 cmd->SCp.Status = inb(fd->base + REG_SCSI_DATA);
335 cmd->SCp.Message = inb(fd->base + REG_SCSI_DATA);
336 if (!cmd->SCp.Message)
342 if (fd->chip == tmc1800 && !cmd->SCp.have_data_in &&
343 cmd->SCp.sent_command >= cmd->cmd_len) {
344 if (cmd->sc_data_direction == DMA_TO_DEVICE) {
345 cmd->SCp.have_data_in = -1;
349 cmd->SCp.have_data_in = 1;
355 if (cmd->SCp.have_data_in == -1) /* DATA OUT */
356 fdomain_write_data(cmd);
358 if (cmd->SCp.have_data_in == 1) /* DATA IN */
359 fdomain_read_data(cmd);
362 fdomain_finish_cmd(fd, (cmd->SCp.Status & 0xff) |
363 ((cmd->SCp.Message & 0xff) << 8) |
366 if (cmd->SCp.phase & disconnect) {
397 static int fdomain_queue(struct Scsi_Host *sh, struct scsi_cmnd *cmd)
399 struct fdomain *fd = shost_priv(cmd->device->host);
402 cmd->SCp.Status = 0;
403 cmd->SCp.Message = 0;
404 cmd->SCp.have_data_in = 0;
405 cmd->SCp.sent_command = 0;
406 cmd->SCp.phase = in_arbitration;
407 scsi_set_resid(cmd, scsi_bufflen(cmd));
411 fd->cur_cmd = cmd;
419 outb(BIT(cmd->device->host->this_id), fd->base + REG_SCSI_DATA_NOACK);
429 static int fdomain_abort(struct scsi_cmnd *cmd)
431 struct Scsi_Host *sh = cmd->device->host;
450 static int fdomain_host_reset(struct scsi_cmnd *cmd)
452 struct Scsi_Host *sh = cmd->device->host;