static int tape_loaded(uint8_t *sam_stat) { if (datafile != -1) return 1; sam_not_ready(E_MEDIUM_NOT_PRESENT, sam_stat); return 0; }
static int tape_loaded(uint8_t *sam_stat) { MHVTL_DBG(1, "tape_loaded"); switch (datafile != -1) { return 1; } sam_not_ready(E_MEDIUM_NOT_PRESENT, sam_stat); return 0; }
/* * * Process the SCSI command * * Called with: * cdev -> Char dev file handle, * cdb -> SCSI Command buffer pointer, * struct vtl_ds -> general purpose data structure... Need better name * * Return: * SAM status returned in struct vtl_ds.sam_stat */ static void processCommand(int cdev, uint8_t *cdb, struct vtl_ds *dbuf_p, useconds_t pollInterval) { int err = 0; struct scsi_cmd _cmd; struct scsi_cmd *cmd; cmd = &_cmd; cmd->scb = cdb; cmd->scb_len = 16; /* fixme */ cmd->dbuf_p = dbuf_p; cmd->lu = &lunit; cmd->pollInterval = pollInterval; cmd->cdev = cdev; MHVTL_DBG_PRT_CDB(1, cmd); switch (cdb[0]) { case REPORT_LUNS: case REQUEST_SENSE: case MODE_SELECT: case INQUIRY: dbuf_p->sam_stat = SAM_STAT_GOOD; break; default: if (cmd->lu->online == 0) { sam_not_ready(E_OFFLINE, &dbuf_p->sam_stat); return; } if (check_reset(&dbuf_p->sam_stat)) return; } /* Skip main op code processing if pre-cmd returns non-zero */ if (cmd->lu->scsi_ops->ops[cdb[0]].pre_cmd_perform) err = cmd->lu->scsi_ops->ops[cdb[0]].pre_cmd_perform(cmd, NULL); if (!err) dbuf_p->sam_stat = cmd->lu->scsi_ops->ops[cdb[0]].cmd_perform(cmd); /* Post op code processing regardless */ if (cmd->lu->scsi_ops->ops[cdb[0]].post_cmd_perform) cmd->lu->scsi_ops->ops[cdb[0]].post_cmd_perform(cmd, NULL); return; }