diff options
Diffstat (limited to 'drivers/scsi/initio.c')
-rw-r--r-- | drivers/scsi/initio.c | 124 |
1 files changed, 54 insertions, 70 deletions
diff --git a/drivers/scsi/initio.c b/drivers/scsi/initio.c index 1d39628ac947..375261d67619 100644 --- a/drivers/scsi/initio.c +++ b/drivers/scsi/initio.c @@ -546,7 +546,6 @@ static int initio_reset_scsi(struct initio_host * host, int seconds) /** * initio_init - set up an InitIO host adapter * @host: InitIO host adapter - * @num_scbs: Number of SCBS * @bios_addr: BIOS address * * Set up the host adapter and devices according to the configuration @@ -866,17 +865,16 @@ static void initio_unlink_busy_scb(struct initio_host * host, struct scsi_ctrl_b struct scsi_ctrl_blk *initio_find_busy_scb(struct initio_host * host, u16 tarlun) { - struct scsi_ctrl_blk *tmp, *prev; + struct scsi_ctrl_blk *tmp; u16 scbp_tarlun; - prev = tmp = host->first_busy; + tmp = host->first_busy; while (tmp != NULL) { scbp_tarlun = (tmp->lun << 8) | (tmp->target); if (scbp_tarlun == tarlun) { /* Unlink this SCB */ break; } - prev = tmp; tmp = tmp->next; } #if DEBUG_QUEUE @@ -1168,7 +1166,7 @@ static void tulip_scsi(struct initio_host * host) return; } if (host->jsint & (TSS_FUNC_COMP | TSS_BUS_SERV)) { /* func complete or Bus service */ - if ((scb = host->active) != NULL) + if (host->active) initio_next_state(host); return; } @@ -1315,15 +1313,15 @@ static int initio_state_1(struct initio_host * host) } if ((active_tc->flags & (TCF_WDTR_DONE | TCF_NO_WDTR)) == 0) { active_tc->flags |= TCF_WDTR_DONE; - outb(MSG_EXTEND, host->addr + TUL_SFifo); + outb(EXTENDED_MESSAGE, host->addr + TUL_SFifo); outb(2, host->addr + TUL_SFifo); /* Extended msg length */ - outb(3, host->addr + TUL_SFifo); /* Sync request */ + outb(EXTENDED_SDTR, host->addr + TUL_SFifo); /* Sync request */ outb(1, host->addr + TUL_SFifo); /* Start from 16 bits */ } else if ((active_tc->flags & (TCF_SYNC_DONE | TCF_NO_SYNC_NEGO)) == 0) { active_tc->flags |= TCF_SYNC_DONE; - outb(MSG_EXTEND, host->addr + TUL_SFifo); + outb(EXTENDED_MESSAGE, host->addr + TUL_SFifo); outb(3, host->addr + TUL_SFifo); /* extended msg length */ - outb(1, host->addr + TUL_SFifo); /* sync request */ + outb(EXTENDED_SDTR, host->addr + TUL_SFifo); /* sync request */ outb(initio_rate_tbl[active_tc->flags & TCF_SCSI_RATE], host->addr + TUL_SFifo); outb(MAX_OFFSET, host->addr + TUL_SFifo); /* REQ/ACK offset */ } @@ -1409,16 +1407,16 @@ static int initio_state_3(struct initio_host * host) case MSG_OUT: /* Message out phase */ if (active_tc->flags & (TCF_SYNC_DONE | TCF_NO_SYNC_NEGO)) { - outb(MSG_NOP, host->addr + TUL_SFifo); /* msg nop */ + outb(NOP, host->addr + TUL_SFifo); /* msg nop */ outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); if (wait_tulip(host) == -1) return -1; } else { active_tc->flags |= TCF_SYNC_DONE; - outb(MSG_EXTEND, host->addr + TUL_SFifo); + outb(EXTENDED_MESSAGE, host->addr + TUL_SFifo); outb(3, host->addr + TUL_SFifo); /* ext. msg len */ - outb(1, host->addr + TUL_SFifo); /* sync request */ + outb(EXTENDED_SDTR, host->addr + TUL_SFifo); /* sync request */ outb(initio_rate_tbl[active_tc->flags & TCF_SCSI_RATE], host->addr + TUL_SFifo); outb(MAX_OFFSET, host->addr + TUL_SFifo); /* REQ/ACK offset */ outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); @@ -1479,7 +1477,7 @@ static int initio_state_4(struct initio_host * host) return -1; return 6; } else { - outb(MSG_NOP, host->addr + TUL_SFifo); /* msg nop */ + outb(NOP, host->addr + TUL_SFifo); /* msg nop */ outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); if (wait_tulip(host) == -1) return -1; @@ -1616,7 +1614,7 @@ static int initio_state_6(struct initio_host * host) break; case MSG_OUT: /* Message out phase */ - outb(MSG_NOP, host->addr + TUL_SFifo); /* msg nop */ + outb(NOP, host->addr + TUL_SFifo); /* msg nop */ outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); if (wait_tulip(host) == -1) return -1; @@ -1789,9 +1787,9 @@ int initio_status_msg(struct initio_host * host) if (host->phase == MSG_OUT) { if (host->jsstatus0 & TSS_PAR_ERROR) - outb(MSG_PARITY, host->addr + TUL_SFifo); + outb(MSG_PARITY_ERROR, host->addr + TUL_SFifo); else - outb(MSG_NOP, host->addr + TUL_SFifo); + outb(NOP, host->addr + TUL_SFifo); outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return wait_tulip(host); } @@ -1802,7 +1800,7 @@ int initio_status_msg(struct initio_host * host) return -1; if (host->phase != MSG_OUT) return initio_bad_seq(host); - outb(MSG_PARITY, host->addr + TUL_SFifo); + outb(MSG_PARITY_ERROR, host->addr + TUL_SFifo); outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return wait_tulip(host); } @@ -1815,7 +1813,8 @@ int initio_status_msg(struct initio_host * host) return initio_wait_done_disc(host); } - if (msg == MSG_LINK_COMP || msg == MSG_LINK_FLAG) { + if (msg == LINKED_CMD_COMPLETE || + msg == LINKED_FLG_CMD_COMPLETE) { if ((scb->tastat & 0x18) == 0x10) return initio_msgin_accept(host); } @@ -1887,7 +1886,7 @@ static int int_initio_scsi_rst(struct initio_host * host) } /** - * int_initio_scsi_resel - Reselection occurred + * int_initio_resel - Reselection occurred * @host: InitIO host adapter * * A SCSI reselection event has been signalled and the interrupt @@ -1930,7 +1929,8 @@ int int_initio_resel(struct initio_host * host) return -1; msg = inb(host->addr + TUL_SFifo); /* Read Tag Message */ - if (msg < MSG_STAG || msg > MSG_OTAG) /* Is simple Tag */ + if (msg < SIMPLE_QUEUE_TAG || msg > ORDERED_QUEUE_TAG) + /* Is simple Tag */ goto no_tag; if (initio_msgin_accept(host) == -1) @@ -2010,7 +2010,7 @@ static int initio_msgout_abort_targ(struct initio_host * host) if (host->phase != MSG_OUT) return initio_bad_seq(host); - outb(MSG_ABORT, host->addr + TUL_SFifo); + outb(ABORT_TASK_SET, host->addr + TUL_SFifo); outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return initio_wait_disc(host); @@ -2033,7 +2033,7 @@ static int initio_msgout_abort_tag(struct initio_host * host) if (host->phase != MSG_OUT) return initio_bad_seq(host); - outb(MSG_ABORT_TAG, host->addr + TUL_SFifo); + outb(ABORT_TASK, host->addr + TUL_SFifo); outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return initio_wait_disc(host); @@ -2059,15 +2059,15 @@ static int initio_msgin(struct initio_host * host) return -1; switch (inb(host->addr + TUL_SFifo)) { - case MSG_DISC: /* Disconnect msg */ + case DISCONNECT: /* Disconnect msg */ outb(TSC_MSG_ACCEPT, host->addr + TUL_SCmd); return initio_wait_disc(host); - case MSG_SDP: - case MSG_RESTORE: - case MSG_NOP: + case SAVE_POINTERS: + case RESTORE_POINTERS: + case NOP: initio_msgin_accept(host); break; - case MSG_REJ: /* Clear ATN first */ + case MESSAGE_REJECT: /* Clear ATN first */ outb((inb(host->addr + TUL_SSignal) & (TSC_SET_ACK | 7)), host->addr + TUL_SSignal); active_tc = host->active_tc; @@ -2076,13 +2076,13 @@ static int initio_msgin(struct initio_host * host) host->addr + TUL_SSignal); initio_msgin_accept(host); break; - case MSG_EXTEND: /* extended msg */ + case EXTENDED_MESSAGE: /* extended msg */ initio_msgin_extend(host); break; - case MSG_IGNOREWIDE: + case IGNORE_WIDE_RESIDUE: initio_msgin_accept(host); break; - case MSG_COMP: + case COMMAND_COMPLETE: outb(TSC_FLUSH_FIFO, host->addr + TUL_SCtrl0); outb(TSC_MSG_ACCEPT, host->addr + TUL_SCmd); return initio_wait_done_disc(host); @@ -2104,7 +2104,7 @@ static int initio_msgout_reject(struct initio_host * host) return -1; if (host->phase == MSG_OUT) { - outb(MSG_REJ, host->addr + TUL_SFifo); /* Msg reject */ + outb(MESSAGE_REJECT, host->addr + TUL_SFifo); /* Msg reject */ outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return wait_tulip(host); } @@ -2113,7 +2113,7 @@ static int initio_msgout_reject(struct initio_host * host) static int initio_msgout_ide(struct initio_host * host) { - outb(MSG_IDE, host->addr + TUL_SFifo); /* Initiator Detected Error */ + outb(INITIATOR_ERROR, host->addr + TUL_SFifo); /* Initiator Detected Error */ outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return wait_tulip(host); } @@ -2167,9 +2167,9 @@ static int initio_msgin_extend(struct initio_host * host) initio_sync_done(host); - outb(MSG_EXTEND, host->addr + TUL_SFifo); + outb(EXTENDED_MESSAGE, host->addr + TUL_SFifo); outb(3, host->addr + TUL_SFifo); - outb(1, host->addr + TUL_SFifo); + outb(EXTENDED_SDTR, host->addr + TUL_SFifo); outb(host->msg[2], host->addr + TUL_SFifo); outb(host->msg[3], host->addr + TUL_SFifo); outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); @@ -2199,9 +2199,9 @@ static int initio_msgin_extend(struct initio_host * host) if (initio_msgin_accept(host) != MSG_OUT) return host->phase; /* WDTR msg out */ - outb(MSG_EXTEND, host->addr + TUL_SFifo); + outb(EXTENDED_MESSAGE, host->addr + TUL_SFifo); outb(2, host->addr + TUL_SFifo); - outb(3, host->addr + TUL_SFifo); + outb(EXTENDED_WDTR, host->addr + TUL_SFifo); outb(host->msg[2], host->addr + TUL_SFifo); outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return wait_tulip(host); @@ -2391,7 +2391,7 @@ int initio_bus_device_reset(struct initio_host * host) } tmp = tmp->next; } - outb(MSG_DEVRST, host->addr + TUL_SFifo); + outb(TARGET_RESET, host->addr + TUL_SFifo); outb(TSC_XF_FIFO_OUT, host->addr + TUL_SCmd); return initio_wait_disc(host); @@ -2553,7 +2553,7 @@ static void initio_build_scb(struct initio_host * host, struct scsi_ctrl_blk * c SENSE_SIZE, DMA_FROM_DEVICE); cblk->senseptr = (u32)dma_addr; cblk->senselen = SENSE_SIZE; - cmnd->SCp.ptr = (char *)(unsigned long)dma_addr; + initio_priv(cmnd)->sense_dma_addr = dma_addr; cblk->cdblen = cmnd->cmd_len; /* Clear the returned status */ @@ -2577,7 +2577,7 @@ static void initio_build_scb(struct initio_host * host, struct scsi_ctrl_blk * c sizeof(struct sg_entry) * TOTAL_SG_ENTRY, DMA_BIDIRECTIONAL); cblk->bufptr = (u32)dma_addr; - cmnd->SCp.dma_handle = dma_addr; + initio_priv(cmnd)->sglist_dma_addr = dma_addr; cblk->sglen = nseg; @@ -2600,23 +2600,18 @@ static void initio_build_scb(struct initio_host * host, struct scsi_ctrl_blk * c } /** - * i91u_queuecommand - Queue a new command if possible + * i91u_queuecommand_lck - Queue a new command if possible * @cmd: SCSI command block from the mid layer - * @done: Completion handler * * Attempts to queue a new command with the host adapter. Will return * zero if successful or indicate a host busy condition if not (which * will cause the mid layer to call us again later with the command) */ - -static int i91u_queuecommand_lck(struct scsi_cmnd *cmd, - void (*done)(struct scsi_cmnd *)) +static int i91u_queuecommand_lck(struct scsi_cmnd *cmd) { struct initio_host *host = (struct initio_host *) cmd->device->host->hostdata; struct scsi_ctrl_blk *cmnd; - cmd->scsi_done = done; - cmnd = initio_alloc_scb(host); if (!cmnd) return SCSI_MLQUEUE_HOST_BUSY; @@ -2649,9 +2644,9 @@ static int i91u_bus_reset(struct scsi_cmnd * cmnd) } /** - * i91u_biospararm - return the "logical geometry + * i91u_biosparam - return the "logical geometry * @sdev: SCSI device - * @dev; Matching block device + * @dev: Matching block device * @capacity: Sector size of drive * @info_array: Return space for BIOS geometry * @@ -2709,16 +2704,17 @@ static int i91u_biosparam(struct scsi_device *sdev, struct block_device *dev, static void i91u_unmap_scb(struct pci_dev *pci_dev, struct scsi_cmnd *cmnd) { /* auto sense buffer */ - if (cmnd->SCp.ptr) { + if (initio_priv(cmnd)->sense_dma_addr) { dma_unmap_single(&pci_dev->dev, - (dma_addr_t)((unsigned long)cmnd->SCp.ptr), + initio_priv(cmnd)->sense_dma_addr, SENSE_SIZE, DMA_FROM_DEVICE); - cmnd->SCp.ptr = NULL; + initio_priv(cmnd)->sense_dma_addr = 0; } /* request buffer */ if (scsi_sg_count(cmnd)) { - dma_unmap_single(&pci_dev->dev, cmnd->SCp.dma_handle, + dma_unmap_single(&pci_dev->dev, + initio_priv(cmnd)->sglist_dma_addr, sizeof(struct sg_entry) * TOTAL_SG_ENTRY, DMA_BIDIRECTIONAL); @@ -2726,10 +2722,8 @@ static void i91u_unmap_scb(struct pci_dev *pci_dev, struct scsi_cmnd *cmnd) } } -/** +/* * i91uSCBPost - SCSI callback - * @host: Pointer to host adapter control block. - * @cmnd: Pointer to SCSI control block. * * This is callback routine be called when tulip finish one * SCSI command. @@ -2790,7 +2784,7 @@ static void i91uSCBPost(u8 * host_mem, u8 * cblk_mem) cmnd->result = cblk->tastat | (cblk->hastat << 16); i91u_unmap_scb(host->pci_dev, cmnd); - cmnd->scsi_done(cmnd); /* Notify system DONE */ + scsi_done(cmnd); /* Notify system DONE */ initio_release_scb(host, cblk); /* Release SCB for current channel */ } @@ -2803,6 +2797,7 @@ static struct scsi_host_template initio_template = { .can_queue = MAX_TARGETS * i91u_MAXQUEUE, .this_id = 1, .sg_tablesize = SG_ALL, + .cmd_size = sizeof(struct initio_cmd_priv), }; static int initio_probe_one(struct pci_dev *pdev, @@ -2854,7 +2849,8 @@ static int initio_probe_one(struct pci_dev *pdev, for (; num_scb >= MAX_TARGETS + 3; num_scb--) { i = num_scb * sizeof(struct scsi_ctrl_blk); - if ((scb = kzalloc(i, GFP_DMA)) != NULL) + scb = kzalloc(i, GFP_KERNEL); + if (scb) break; } @@ -2962,20 +2958,8 @@ static struct pci_driver initio_pci_driver = { .probe = initio_probe_one, .remove = initio_remove_one, }; - -static int __init initio_init_driver(void) -{ - return pci_register_driver(&initio_pci_driver); -} - -static void __exit initio_exit_driver(void) -{ - pci_unregister_driver(&initio_pci_driver); -} +module_pci_driver(initio_pci_driver); MODULE_DESCRIPTION("Initio INI-9X00U/UW SCSI device driver"); MODULE_AUTHOR("Initio Corporation"); MODULE_LICENSE("GPL"); - -module_init(initio_init_driver); -module_exit(initio_exit_driver); |