X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fscsi%2Fqla2xxx%2Fqla_mbx.c;h=c04fbcd75235a9e8817a03cfe0399901e087473b;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=eadc3d4d2d785ad0c0855ba92b3f26a0aa408f98;hpb=87fc8d1bb10cd459024a742c6a10961fefcef18f;p=linux-2.6.git diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index eadc3d4d2..c04fbcd75 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -53,17 +53,18 @@ qla2x00_mbx_sem_timeout(unsigned long data) * Context: * Kernel context. */ -int +static int qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp) { int rval; unsigned long flags = 0; - device_reg_t *reg = ha->iobase; + device_reg_t __iomem *reg = ha->iobase; struct timer_list tmp_intr_timer; uint8_t abort_active = test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags); uint8_t io_lock_on = ha->flags.init_done; uint16_t command; - uint16_t *iptr, *optr; + uint16_t *iptr; + uint16_t __iomem *optr; uint32_t cnt; uint32_t mboxes; unsigned long mbx_flags = 0; @@ -101,7 +102,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp) spin_lock_irqsave(&ha->hardware_lock, flags); /* Load mailbox registers. */ - optr = (uint16_t *)MAILBOX_REG(ha, reg, 0); + optr = (uint16_t __iomem *)MAILBOX_REG(ha, reg, 0); iptr = mcp->mb; command = mcp->mb[0]; @@ -109,7 +110,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp) for (cnt = 0; cnt < ha->mbx_count; cnt++) { if (IS_QLA2200(ha) && cnt == 8) - optr = (uint16_t *)MAILBOX_REG(ha, reg, 8); + optr = (uint16_t __iomem *)MAILBOX_REG(ha, reg, 8); if (mboxes & BIT_0) WRT_REG_WORD(optr, *iptr); @@ -209,6 +210,7 @@ qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp) /* Check whether we timed out */ if (ha->flags.mbox_int) { + uint16_t *iptr2; DEBUG3_11(printk("qla2x00_mailbox_cmd: cmd %x completed.\n", command);) @@ -223,15 +225,15 @@ qla2x00_mailbox_command(scsi_qla_host_t *ha, mbx_cmd_t *mcp) } /* Load return mailbox registers. */ - optr = mcp->mb; + iptr2 = mcp->mb; iptr = (uint16_t *)&ha->mailbox_out[0]; mboxes = mcp->in_mb; for (cnt = 0; cnt < ha->mbx_count; cnt++) { if (mboxes & BIT_0) - *optr = *iptr; + *iptr2 = *iptr; mboxes >>= 1; - optr++; + iptr2++; iptr++; } } else { @@ -673,135 +675,6 @@ qla2x00_set_fw_options(scsi_qla_host_t *ha, uint16_t *fwopts) return rval; } -/* - * qla2x00_read_ram_word - * - * Input: - * ha = adapter block pointer. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_read_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t *data) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - DEBUG11(printk("qla2x00_read_ram_word(%ld): entered.\n", ha->host_no);) - - mcp->mb[0] = MBC_READ_RAM_WORD; - mcp->mb[1] = addr; - mcp->out_mb = MBX_1|MBX_0; - mcp->in_mb = MBX_0|MBX_2; - mcp->tov = 30; - mcp->flags = 0; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval != QLA_SUCCESS) { - /*EMPTY*/ - DEBUG2_3_11(printk("qla2x00_read_ram_word(%ld): failed=%x.\n", - ha->host_no, rval);) - } else { - *data = mcp->mb[2]; - DEBUG11(printk("qla2x00_read_ram_word(%ld): done.\n", - ha->host_no);) - } - - return rval; -} - -/* - * qla2x00_write_ram_word - * - * Input: - * ha = adapter block pointer. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_write_ram_word(scsi_qla_host_t *ha, uint16_t addr, uint16_t data) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - DEBUG11(printk("qla2x00_write_ram_word(%ld): entered.\n", - ha->host_no);) - - mcp->mb[0] = MBC_WRITE_RAM_WORD; - mcp->mb[1] = addr; - mcp->mb[2] = data; - mcp->out_mb = MBX_2|MBX_1|MBX_0; - mcp->in_mb = MBX_0; - mcp->tov = 30; - mcp->flags = 0; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval != QLA_SUCCESS) { - /*EMPTY*/ - DEBUG2_3_11(printk("qla2x00_write_ram_word(%ld): failed=%x.\n", - ha->host_no, rval);) - } else { - /*EMPTY*/ - DEBUG11(printk("qla2x00_write_ram_word(%ld): done.\n", - ha->host_no);) - } - - return rval; -} - -/* - * qla2x00_write_ram_word_ext - * - * Input: - * ha = adapter block pointer. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_write_ram_word_ext(scsi_qla_host_t *ha, uint32_t addr, uint16_t data) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no)); - - mcp->mb[0] = MBC_WRITE_RAM_WORD_EXTENDED; - mcp->mb[1] = LSW(addr); - mcp->mb[2] = data; - mcp->mb[8] = MSW(addr); - mcp->out_mb = MBX_8|MBX_2|MBX_1|MBX_0; - mcp->in_mb = MBX_0; - mcp->tov = 30; - mcp->flags = 0; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval != QLA_SUCCESS) { - /*EMPTY*/ - DEBUG2_3_11(printk("%s(%ld): failed=%x.\n", __func__, - ha->host_no, rval)); - } else { - /*EMPTY*/ - DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no)); - } - - return rval; -} - /* * qla2x00_mbx_reg_test * Mailbox register wrap test. @@ -1030,62 +903,6 @@ qla2x00_abort_command(scsi_qla_host_t *ha, srb_t *sp) return rval; } -/* - * qla2x00_abort_device - * - * Input: - * ha = adapter block pointer. - * loop_id = FC loop ID - * lun = SCSI LUN. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_abort_device(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - DEBUG11(printk("qla2x00_abort_device(%ld): entered.\n", ha->host_no);) - - mcp->mb[0] = MBC_ABORT_DEVICE; - if (HAS_EXTENDED_IDS(ha)) - mcp->mb[1] = loop_id; - else - mcp->mb[1] = loop_id << 8; - mcp->mb[2] = lun; - mcp->out_mb = MBX_2|MBX_1|MBX_0; - mcp->in_mb = MBX_0; - mcp->tov = 30; - mcp->flags = 0; - rval = qla2x00_mailbox_command(ha, mcp); - - /* Issue marker command. */ - qla2x00_marker(ha, loop_id, lun, MK_SYNC_ID_LUN); - - if (rval != QLA_SUCCESS) { - qla_printk(KERN_WARNING, ha, - "Failed Abort Device Mailbox command. Scheduling ISP " - "abort.\n"); - set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); - if (ha->dpc_wait && !ha->dpc_active) - up(ha->dpc_wait); - DEBUG2_3_11(printk("qla2x00_abort_device(%ld): failed=%x.\n", - ha->host_no, rval);) - } else { - /*EMPTY*/ - DEBUG11(printk("qla2x00_abort_device(%ld): done.\n", - ha->host_no);) - } - - return rval; -} - #if USE_ABORT_TGT /* * qla2x00_abort_target @@ -1403,7 +1220,7 @@ qla2x00_get_port_database(scsi_qla_host_t *ha, fc_port_t *fcport, uint8_t opt) DEBUG11(printk("qla2x00_get_port_database(%ld): entered.\n", ha->host_no);) - pd = pci_alloc_consistent(ha->pdev, PORT_DATABASE_SIZE, &pd_dma); + pd = dma_pool_alloc(ha->s_dma_pool, GFP_ATOMIC, &pd_dma); if (pd == NULL) { DEBUG2_3_11(printk("qla2x00_get_port_database(%ld): **** " "Mem Alloc Failed ****", ha->host_no);) @@ -1464,7 +1281,7 @@ qla2x00_get_port_database(scsi_qla_host_t *ha, fc_port_t *fcport, uint8_t opt) fcport->port_type = FCT_TARGET; gpd_error_out: - pci_free_consistent(ha->pdev, PORT_DATABASE_SIZE, pd, pd_dma); + dma_pool_free(ha->s_dma_pool, pd, pd_dma); if (rval != QLA_SUCCESS) { /*EMPTY*/ @@ -1596,104 +1413,6 @@ qla2x00_get_port_name(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t *name, return rval; } -/* - * qla2x00_get_link_status - * - * Input: - * ha = adapter block pointer. - * loop_id = device loop ID. - * ret_buf = pointer to link status return buffer. - * - * Returns: - * 0 = success. - * BIT_0 = mem alloc error. - * BIT_1 = mailbox error. - */ -uint8_t -qla2x00_get_link_status(scsi_qla_host_t *ha, uint16_t loop_id, - link_stat_t *ret_buf, uint16_t *status) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - link_stat_t *stat_buf; - dma_addr_t phys_address = 0; - - - DEBUG11(printk("qla2x00_get_link_status(%ld): entered.\n", - ha->host_no);) - - stat_buf = pci_alloc_consistent(ha->pdev, sizeof(link_stat_t), - &phys_address); - if (stat_buf == NULL) { - DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): Failed to " - "allocate memory.\n", ha->host_no)); - return BIT_0; - } - memset(stat_buf, 0, sizeof(link_stat_t)); - - mcp->mb[0] = MBC_GET_LINK_STATUS; - mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; - if (HAS_EXTENDED_IDS(ha)) { - mcp->mb[1] = loop_id; - mcp->mb[10] = 0; - mcp->out_mb |= MBX_10; - } else { - mcp->mb[1] = loop_id << 8; - } - mcp->mb[2] = MSW(phys_address); - mcp->mb[3] = LSW(phys_address); - mcp->mb[6] = MSW(MSD(phys_address)); - mcp->mb[7] = LSW(MSD(phys_address)); - - mcp->in_mb = MBX_0; - mcp->tov = 30; - mcp->flags = IOCTL_CMD; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval == QLA_SUCCESS) { - if (mcp->mb[0] != MBS_COMMAND_COMPLETE) { - DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): cmd " - "failed. mbx0=%x.\n", ha->host_no, mcp->mb[0]);) - status[0] = mcp->mb[0]; - rval = BIT_1; - } else { - /* copy over data -- firmware data is LE. */ - ret_buf->link_fail_cnt = - le32_to_cpu(stat_buf->link_fail_cnt); - ret_buf->loss_sync_cnt = - le32_to_cpu(stat_buf->loss_sync_cnt); - ret_buf->loss_sig_cnt = - le32_to_cpu(stat_buf->loss_sig_cnt); - ret_buf->prim_seq_err_cnt = - le32_to_cpu(stat_buf->prim_seq_err_cnt); - ret_buf->inval_xmit_word_cnt = - le32_to_cpu(stat_buf->inval_xmit_word_cnt); - ret_buf->inval_crc_cnt = - le32_to_cpu(stat_buf->inval_crc_cnt); - - DEBUG11(printk("qla2x00_get_link_status(%ld): stat " - "dump: fail_cnt=%d loss_sync=%d loss_sig=%d " - "seq_err=%d inval_xmt_word=%d inval_crc=%d.\n", - ha->host_no, - stat_buf->link_fail_cnt, stat_buf->loss_sync_cnt, - stat_buf->loss_sig_cnt, stat_buf->prim_seq_err_cnt, - stat_buf->inval_xmit_word_cnt, - stat_buf->inval_crc_cnt);) - } - } else { - /* Failed. */ - DEBUG2_3_11(printk("qla2x00_get_link_status(%ld): failed=%x.\n", - ha->host_no, rval);) - rval = BIT_1; - } - - pci_free_consistent(ha->pdev, sizeof(link_stat_t), stat_buf, - phys_address); - - return rval; -} - /* * qla2x00_lip_reset * Issue LIP reset mailbox command. @@ -2111,227 +1830,6 @@ qla2x00_get_id_list(scsi_qla_host_t *ha, void *id_list, dma_addr_t id_list_dma, return rval; } -/* - * qla2x00_lun_reset - * Issue lun reset mailbox command. - * - * Input: - * ha = adapter block pointer. - * loop_id = device loop ID. - * lun = lun to be reset. - * TARGET_QUEUE_LOCK must be released. - * ADAPTER_STATE_LOCK must be released. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_lun_reset(scsi_qla_host_t *ha, uint16_t loop_id, uint16_t lun) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - mcp->mb[0] = MBC_LUN_RESET; - if (HAS_EXTENDED_IDS(ha)) - mcp->mb[1] = loop_id; - else - mcp->mb[1] = loop_id << 8; - mcp->mb[2] = lun; - mcp->out_mb = MBX_2|MBX_1|MBX_0; - mcp->in_mb = MBX_0; - mcp->tov = 30; - mcp->flags = 0; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval != QLA_SUCCESS) { - /*EMPTY*/ - printk(KERN_WARNING "qla2x00_lun_reset(%d): failed = %d", - (int)ha->instance, rval); - } else { - /*EMPTY*/ - } - - return rval; -} - -/* - * qla2x00_send_rnid_mbx - * Issue RNID ELS using mailbox command - * - * Input: - * ha = adapter state pointer. - * loop_id = loop ID of the target device. - * data_fmt = currently supports only 0xDF. - * buffer = buffer pointer. - * buf_size = size of buffer. - * mb_reg = pointer to return mailbox registers. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_send_rnid_mbx(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t data_fmt, - dma_addr_t buf_phys_addr, size_t buf_size, uint16_t *mb_reg) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - DEBUG11(printk("qla2x00_send_rnid_mbx(%ld): entered.\n", - ha->host_no);) - - mcp->mb[0] = MBC_SEND_RNID_ELS; - mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; - if (HAS_EXTENDED_IDS(ha)) { - mcp->mb[1] = loop_id; - mcp->mb[10] = data_fmt; - mcp->out_mb |= MBX_10; - } else { - mcp->mb[1] = (loop_id << 8) | data_fmt; - } - mcp->mb[2] = MSW(buf_phys_addr); - mcp->mb[3] = LSW(buf_phys_addr); - mcp->mb[6] = MSW(MSD(buf_phys_addr)); - mcp->mb[7] = LSW(MSD(buf_phys_addr)); - - mcp->in_mb = MBX_1|MBX_0; - mcp->buf_size = buf_size; - mcp->flags = MBX_DMA_IN; - mcp->tov = 30; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval != QLA_SUCCESS) { - memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */ - - DEBUG2_3_11(printk("qla2x00_send_rnid_mbx(%ld): failed=%x " - "mb[1]=%x.\n", - ha->host_no, mcp->mb[0], mcp->mb[1]);) - } else { - /*EMPTY*/ - DEBUG11(printk("qla2x00_send_rnid_mbx(%ld): done.\n", - ha->host_no);) - } - - return (rval); -} - -/* - * qla2x00_set_rnid_params_mbx - * Set RNID parameters using mailbox command - * - * Input: - * ha = adapter state pointer. - * buffer = buffer pointer. - * buf_size = size of buffer. - * mb_reg = pointer to return mailbox registers. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_set_rnid_params_mbx(scsi_qla_host_t *ha, dma_addr_t buf_phys_addr, - size_t buf_size, uint16_t *mb_reg) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - DEBUG11(printk("qla2x00_set_rnid_params_mbx(%ld): entered.\n", - ha->host_no);) - - mcp->mb[0] = MBC_SET_RNID_PARAMS; - mcp->mb[1] = 0; - mcp->mb[2] = MSW(buf_phys_addr); - mcp->mb[3] = LSW(buf_phys_addr); - mcp->mb[6] = MSW(MSD(buf_phys_addr)); - mcp->mb[7] = LSW(MSD(buf_phys_addr)); - mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; - mcp->in_mb = MBX_1|MBX_0; - mcp->buf_size = buf_size; - mcp->flags = MBX_DMA_OUT; - mcp->tov = 30; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval != QLA_SUCCESS) { - memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */ - - DEBUG2_3_11(printk("qla2x00_set_rnid_params_mbx(%ld): " - "failed=%x mb[1]=%x.\n", ha->host_no, mcp->mb[0], - mcp->mb[1]);) - } else { - /*EMPTY*/ - DEBUG11(printk("qla2x00_set_rnid_params_mbx(%ld): done.\n", - ha->host_no);) - } - - return (rval); -} - -/* - * qla2x00_get_rnid_params_mbx - * Get RNID parameters using mailbox command - * - * Input: - * ha = adapter state pointer. - * buffer = buffer pointer. - * buf_size = size of buffer. - * mb_reg = pointer to return mailbox registers. - * - * Returns: - * qla2x00 local function return status code. - * - * Context: - * Kernel context. - */ -int -qla2x00_get_rnid_params_mbx(scsi_qla_host_t *ha, dma_addr_t buf_phys_addr, - size_t buf_size, uint16_t *mb_reg) -{ - int rval; - mbx_cmd_t mc; - mbx_cmd_t *mcp = &mc; - - DEBUG11(printk("qla2x00_get_rnid_params_mbx(%ld): entered.\n", - ha->host_no);) - - mcp->mb[0] = MBC_GET_RNID_PARAMS; - mcp->mb[1] = 0; - mcp->mb[2] = MSW(buf_phys_addr); - mcp->mb[3] = LSW(buf_phys_addr); - mcp->mb[6] = MSW(MSD(buf_phys_addr)); - mcp->mb[7] = LSW(MSD(buf_phys_addr)); - mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; - mcp->in_mb = MBX_1|MBX_0; - mcp->buf_size = buf_size; - mcp->flags = MBX_DMA_IN; - mcp->tov = 30; - rval = qla2x00_mailbox_command(ha, mcp); - - if (rval != QLA_SUCCESS) { - memcpy(mb_reg, mcp->mb, 2 * 2); /* 2 status regs */ - - DEBUG2_3_11(printk("qla2x00_get_rnid_params_mbx(%ld): " - "failed=%x mb[1]=%x.\n", ha->host_no, mcp->mb[0], - mcp->mb[1]);) - } else { - /*EMPTY*/ - DEBUG11(printk("qla2x00_get_rnid_params_mbx(%ld): done.\n", - ha->host_no);) - } - - return (rval); -} - /* * qla2x00_get_resource_cnts * Get current firmware resource counts. @@ -2409,7 +1907,7 @@ qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map) char *pmap; dma_addr_t pmap_dma; - pmap = pci_alloc_consistent(ha->pdev, FCAL_MAP_SIZE, &pmap_dma); + pmap = dma_pool_alloc(ha->s_dma_pool, GFP_ATOMIC, &pmap_dma); if (pmap == NULL) { DEBUG2_3_11(printk("%s(%ld): **** Mem Alloc Failed ****", __func__, ha->host_no)); @@ -2438,7 +1936,7 @@ qla2x00_get_fcal_position_map(scsi_qla_host_t *ha, char *pos_map) if (pos_map) memcpy(pos_map, pmap, FCAL_MAP_SIZE); } - pci_free_consistent(ha->pdev, FCAL_MAP_SIZE, pmap, pmap_dma); + dma_pool_free(ha->s_dma_pool, pmap, pmap_dma); if (rval != QLA_SUCCESS) { DEBUG2_3_11(printk("%s(%ld): failed=%x.\n", __func__,