upgrade to fedora-2.6.12-1.1398.FC4 + vserver 2.0.rc7
[linux-2.6.git] / drivers / scsi / qla2xxx / qla_mbx.c
index db38541..15f6aca 100644 (file)
@@ -53,7 +53,7 @@ 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;
@@ -675,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.
@@ -987,8 +858,7 @@ qla2x00_abort_command(scsi_qla_host_t *ha, srb_t *sp)
 
        DEBUG11(printk("qla2x00_abort_command(%ld): entered.\n", ha->host_no);)
 
-       fcport = sp->fclun->fcport;
-
+       fcport = sp->fcport;
        if (atomic_read(&ha->loop_state) == LOOP_DOWN ||
            atomic_read(&fcport->state) == FCS_DEVICE_LOST) {
                return 1;
@@ -1013,7 +883,7 @@ qla2x00_abort_command(scsi_qla_host_t *ha, srb_t *sp)
                mcp->mb[1] = fcport->loop_id << 8;
        mcp->mb[2] = (uint16_t)handle;
        mcp->mb[3] = (uint16_t)(handle >> 16);
-       mcp->mb[6] = (uint16_t)sp->fclun->lun;
+       mcp->mb[6] = (uint16_t)sp->cmd->device->lun;
        mcp->out_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
        mcp->in_mb = MBX_0;
        mcp->tov = 30;
@@ -1032,62 +902,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
@@ -1165,30 +979,22 @@ qla2x00_abort_target(fc_port_t *fcport)
  *     Kernel context.
  */
 int
-qla2x00_target_reset(scsi_qla_host_t *ha, uint16_t b, uint16_t t)
+qla2x00_target_reset(scsi_qla_host_t *ha, struct fc_port *fcport)
 {
        int rval;
        mbx_cmd_t mc;
        mbx_cmd_t *mcp = &mc;
-       os_tgt_t *tgt;
 
        DEBUG11(printk("qla2x00_target_reset(%ld): entered.\n", ha->host_no);)
 
-       tgt = TGT_Q(ha, t);
-       if (tgt->fcport == NULL) {
-               /* no target to abort */
+       if (atomic_read(&fcport->state) != FCS_ONLINE)
                return 0;
-       }
-       if (atomic_read(&tgt->fcport->state) != FCS_ONLINE) {
-               /* target not online */
-               return 0;
-       }
 
        mcp->mb[0] = MBC_TARGET_RESET;
        if (HAS_EXTENDED_IDS(ha))
-               mcp->mb[1] = tgt->fcport->loop_id;
+               mcp->mb[1] = fcport->loop_id;
        else
-               mcp->mb[1] = tgt->fcport->loop_id << 8;
+               mcp->mb[1] = fcport->loop_id << 8;
        mcp->mb[2] = ha->loop_reset_delay;
        mcp->out_mb = MBX_2|MBX_1|MBX_0;
        mcp->in_mb = MBX_0;
@@ -1598,101 +1404,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 stat_buf_dma;
-
-       DEBUG11(printk("qla2x00_get_link_status(%ld): entered.\n",
-           ha->host_no);)
-
-       stat_buf = dma_pool_alloc(ha->s_dma_pool, GFP_ATOMIC, &stat_buf_dma);
-       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(stat_buf_dma);
-       mcp->mb[3] = LSW(stat_buf_dma);
-       mcp->mb[6] = MSW(MSD(stat_buf_dma));
-       mcp->mb[7] = LSW(MSD(stat_buf_dma));
-
-       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;
-       }
-
-       dma_pool_free(ha->s_dma_pool, stat_buf, stat_buf_dma);
-
-       return rval;
-}
-
 /*
  * qla2x00_lip_reset
  *     Issue LIP reset mailbox command.
@@ -2110,227 +1821,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.