[PATCH 3/6] qla2xxx: Enable target mode support for ISP83xx.
From: Arun Easi arun.e...@qlogic.com Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c|2 +- drivers/scsi/qla2xxx/qla_def.h|8 ++ drivers/scsi/qla2xxx/qla_fw.h |3 +- drivers/scsi/qla2xxx/qla_init.c |6 +- drivers/scsi/qla2xxx/qla_isr.c| 16 +++- drivers/scsi/qla2xxx/qla_os.c |4 + drivers/scsi/qla2xxx/qla_target.c | 159 + drivers/scsi/qla2xxx/qla_target.h | 14 +++- 8 files changed, 187 insertions(+), 25 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index f7cdd25..e690d05 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -39,7 +39,7 @@ * | MultiQ | 0xc00c | | * | Misc | 0xd010 | | * | Target Mode | 0xe06f || - * | Target Mode Management | 0xf071 || + * | Target Mode Management | 0xf072 || * | Target Mode Task Management | 0x1000b || * -- */ diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 06c6271..b5fc478 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -537,6 +537,8 @@ struct device_reg_25xxmq { uint32_t req_q_out; uint32_t rsp_q_in; uint32_t rsp_q_out; + uint32_t atio_q_in; + uint32_t atio_q_out; }; typedef union { @@ -563,6 +565,9 @@ typedef union { (reg)-u.isp2100.mailbox5 : \ (reg)-u.isp2300.rsp_q_out) +#define ISP_ATIO_Q_IN(vha) (vha-hw-tgt.atio_q_in) +#define ISP_ATIO_Q_OUT(vha) (vha-hw-tgt.atio_q_out) + #define MAILBOX_REG(ha, reg, num) \ (IS_QLA2100(ha) || IS_QLA2200(ha) ? \ (num 8 ? \ @@ -2559,6 +2564,8 @@ struct qlt_hw_data { struct atio *atio_ring_ptr; /* Current address. */ uint16_t atio_ring_index; /* Current index. */ uint16_t atio_q_length; + uint32_t __iomem *atio_q_in; + uint32_t __iomem *atio_q_out; void *target_lport_ptr; struct qla_tgt_func_tmpl *tgt_ops; @@ -2790,6 +2797,7 @@ struct qla_hw_data { #define IS_PI_SPLIT_DET_CAPABLE_HBA(ha)(IS_QLA83XX(ha)) #define IS_PI_SPLIT_DET_CAPABLE(ha)(IS_PI_SPLIT_DET_CAPABLE_HBA(ha) \ (((ha)-fw_attributes_h 16 | (ha)-fw_attributes) BIT_22)) +#define IS_ATIO_MSIX_CAPABLE(ha) (IS_QLA83XX(ha)) /* HBA serial number */ uint8_t serial0; diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index be6d61a..7105d5e 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -300,7 +300,8 @@ struct init_cb_24xx { uint32_t prio_request_q_address[2]; uint16_t msix; - uint8_t reserved_2[6]; + uint16_t msix_atio; + uint8_t reserved_2[4]; uint16_t atio_q_inpointer; uint16_t atio_q_length; diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 81e8cca..a581c85 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -1964,7 +1964,7 @@ qla24xx_config_rings(struct scsi_qla_host *vha) WRT_REG_DWORD(reg-isp24.rsp_q_in, 0); WRT_REG_DWORD(reg-isp24.rsp_q_out, 0); } - qlt_24xx_config_rings(vha, reg); + qlt_24xx_config_rings(vha); /* PCI posting */ RD_REG_DWORD(ioreg-hccr); @@ -5579,6 +5579,8 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) if (IS_T10_PI_CAPABLE(ha)) nv-frame_payload_size = ~7; + qlt_81xx_config_nvram_stage1(vha, nv); + /* Reset Initialization control block */ memset(icb, 0, ha-init_cb_size); @@ -5619,6 +5621,8 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) qla2x00_set_model_info(vha, nv-model_name, sizeof(nv-model_name), QLE8XXX); + qlt_81xx_config_nvram_stage2(vha, icb); + /* Use alternate WWN? */ if (nv-host_p __constant_cpu_to_le32(BIT_15)) { memcpy(icb-node_name, nv-alternate_node_name, WWN_SIZE); diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 1b192c8..26a3086 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -13,6 +13,8 @@ #include scsi/scsi_bsg_fc.h #include scsi/scsi_eh.h +#include qla_target.h + static void qla2x00_mbx_completion(scsi_qla_host_t *, uint16_t); static void qla2x00_process_completed_request(struct scsi_qla_host *, struct req_que *, uint32_t); @@ -2751,6 +2753,12 @@ static struct qla_init_msix_entry qla82xx_msix_entries[2] = { { qla2xxx (rsp_q), qla82xx_msix_rsp_q }, }; +static struct qla_init_msix_entry
Re: [PATCH 3/6] qla2xxx: Enable target mode support for ISP83xx.
Hi Saurav, Arun Co, Very exciting to see this code submitted to linux-scsi for-3.8 On Fri, 2012-12-07 at 02:30 -0500, Saurav Kashyap wrote: From: Arun Easi arun.e...@qlogic.com Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c|2 +- drivers/scsi/qla2xxx/qla_def.h|8 ++ drivers/scsi/qla2xxx/qla_fw.h |3 +- drivers/scsi/qla2xxx/qla_init.c |6 +- drivers/scsi/qla2xxx/qla_isr.c| 16 +++- drivers/scsi/qla2xxx/qla_os.c |4 + drivers/scsi/qla2xxx/qla_target.c | 159 + drivers/scsi/qla2xxx/qla_target.h | 14 +++- 8 files changed, 187 insertions(+), 25 deletions(-) For the 83xx target LLD specific pieces: Acked-by: Nicholas Bellinger n...@linux-iscsi.org Thank you! diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index f7cdd25..e690d05 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -39,7 +39,7 @@ * | MultiQ | 0xc00c | | * | Misc | 0xd010 | | * | Target Mode | 0xe06f || - * | Target Mode Management| 0xf071 || + * | Target Mode Management| 0xf072 || * | Target Mode Task Management |0x1000b || * -- */ diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 06c6271..b5fc478 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -537,6 +537,8 @@ struct device_reg_25xxmq { uint32_t req_q_out; uint32_t rsp_q_in; uint32_t rsp_q_out; + uint32_t atio_q_in; + uint32_t atio_q_out; }; typedef union { @@ -563,6 +565,9 @@ typedef union { (reg)-u.isp2100.mailbox5 : \ (reg)-u.isp2300.rsp_q_out) +#define ISP_ATIO_Q_IN(vha) (vha-hw-tgt.atio_q_in) +#define ISP_ATIO_Q_OUT(vha) (vha-hw-tgt.atio_q_out) + #define MAILBOX_REG(ha, reg, num) \ (IS_QLA2100(ha) || IS_QLA2200(ha) ? \ (num 8 ? \ @@ -2559,6 +2564,8 @@ struct qlt_hw_data { struct atio *atio_ring_ptr; /* Current address. */ uint16_t atio_ring_index; /* Current index. */ uint16_t atio_q_length; + uint32_t __iomem *atio_q_in; + uint32_t __iomem *atio_q_out; void *target_lport_ptr; struct qla_tgt_func_tmpl *tgt_ops; @@ -2790,6 +2797,7 @@ struct qla_hw_data { #define IS_PI_SPLIT_DET_CAPABLE_HBA(ha) (IS_QLA83XX(ha)) #define IS_PI_SPLIT_DET_CAPABLE(ha) (IS_PI_SPLIT_DET_CAPABLE_HBA(ha) \ (((ha)-fw_attributes_h 16 | (ha)-fw_attributes) BIT_22)) +#define IS_ATIO_MSIX_CAPABLE(ha) (IS_QLA83XX(ha)) /* HBA serial number */ uint8_t serial0; diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index be6d61a..7105d5e 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -300,7 +300,8 @@ struct init_cb_24xx { uint32_t prio_request_q_address[2]; uint16_t msix; - uint8_t reserved_2[6]; + uint16_t msix_atio; + uint8_t reserved_2[4]; uint16_t atio_q_inpointer; uint16_t atio_q_length; diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 81e8cca..a581c85 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -1964,7 +1964,7 @@ qla24xx_config_rings(struct scsi_qla_host *vha) WRT_REG_DWORD(reg-isp24.rsp_q_in, 0); WRT_REG_DWORD(reg-isp24.rsp_q_out, 0); } - qlt_24xx_config_rings(vha, reg); + qlt_24xx_config_rings(vha); /* PCI posting */ RD_REG_DWORD(ioreg-hccr); @@ -5579,6 +5579,8 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) if (IS_T10_PI_CAPABLE(ha)) nv-frame_payload_size = ~7; + qlt_81xx_config_nvram_stage1(vha, nv); + /* Reset Initialization control block */ memset(icb, 0, ha-init_cb_size); @@ -5619,6 +5621,8 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) qla2x00_set_model_info(vha, nv-model_name, sizeof(nv-model_name), QLE8XXX); + qlt_81xx_config_nvram_stage2(vha, icb); + /* Use alternate WWN? */ if (nv-host_p __constant_cpu_to_le32(BIT_15)) { memcpy(icb-node_name, nv-alternate_node_name, WWN_SIZE); diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 1b192c8..26a3086 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -13,6 +13,8 @@ #include scsi/scsi_bsg_fc.h #include scsi/scsi_eh.h +#include qla_target.h + static void qla2x00_mbx_completion(scsi_qla_host_t *, uint16_t); static void
[PATCH 3/6] qla2xxx: Enable target mode support for ISP83xx.
From: Arun Easi arun.e...@qlogic.com Signed-off-by: Arun Easi arun.e...@qlogic.com Signed-off-by: Saurav Kashyap saurav.kash...@qlogic.com --- drivers/scsi/qla2xxx/qla_dbg.c|2 +- drivers/scsi/qla2xxx/qla_def.h|8 ++ drivers/scsi/qla2xxx/qla_fw.h |3 +- drivers/scsi/qla2xxx/qla_init.c |6 +- drivers/scsi/qla2xxx/qla_isr.c| 16 +++- drivers/scsi/qla2xxx/qla_os.c |4 + drivers/scsi/qla2xxx/qla_target.c | 159 + drivers/scsi/qla2xxx/qla_target.h | 14 +++- 8 files changed, 187 insertions(+), 25 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index f7cdd25..e690d05 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -39,7 +39,7 @@ * | MultiQ | 0xc00c | | * | Misc | 0xd010 | | * | Target Mode | 0xe06f || - * | Target Mode Management | 0xf071 || + * | Target Mode Management | 0xf072 || * | Target Mode Task Management | 0x1000b || * -- */ diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 06c6271..b5fc478 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -537,6 +537,8 @@ struct device_reg_25xxmq { uint32_t req_q_out; uint32_t rsp_q_in; uint32_t rsp_q_out; + uint32_t atio_q_in; + uint32_t atio_q_out; }; typedef union { @@ -563,6 +565,9 @@ typedef union { (reg)-u.isp2100.mailbox5 : \ (reg)-u.isp2300.rsp_q_out) +#define ISP_ATIO_Q_IN(vha) (vha-hw-tgt.atio_q_in) +#define ISP_ATIO_Q_OUT(vha) (vha-hw-tgt.atio_q_out) + #define MAILBOX_REG(ha, reg, num) \ (IS_QLA2100(ha) || IS_QLA2200(ha) ? \ (num 8 ? \ @@ -2559,6 +2564,8 @@ struct qlt_hw_data { struct atio *atio_ring_ptr; /* Current address. */ uint16_t atio_ring_index; /* Current index. */ uint16_t atio_q_length; + uint32_t __iomem *atio_q_in; + uint32_t __iomem *atio_q_out; void *target_lport_ptr; struct qla_tgt_func_tmpl *tgt_ops; @@ -2790,6 +2797,7 @@ struct qla_hw_data { #define IS_PI_SPLIT_DET_CAPABLE_HBA(ha)(IS_QLA83XX(ha)) #define IS_PI_SPLIT_DET_CAPABLE(ha)(IS_PI_SPLIT_DET_CAPABLE_HBA(ha) \ (((ha)-fw_attributes_h 16 | (ha)-fw_attributes) BIT_22)) +#define IS_ATIO_MSIX_CAPABLE(ha) (IS_QLA83XX(ha)) /* HBA serial number */ uint8_t serial0; diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index be6d61a..7105d5e 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -300,7 +300,8 @@ struct init_cb_24xx { uint32_t prio_request_q_address[2]; uint16_t msix; - uint8_t reserved_2[6]; + uint16_t msix_atio; + uint8_t reserved_2[4]; uint16_t atio_q_inpointer; uint16_t atio_q_length; diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 81e8cca..a581c85 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -1964,7 +1964,7 @@ qla24xx_config_rings(struct scsi_qla_host *vha) WRT_REG_DWORD(reg-isp24.rsp_q_in, 0); WRT_REG_DWORD(reg-isp24.rsp_q_out, 0); } - qlt_24xx_config_rings(vha, reg); + qlt_24xx_config_rings(vha); /* PCI posting */ RD_REG_DWORD(ioreg-hccr); @@ -5579,6 +5579,8 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) if (IS_T10_PI_CAPABLE(ha)) nv-frame_payload_size = ~7; + qlt_81xx_config_nvram_stage1(vha, nv); + /* Reset Initialization control block */ memset(icb, 0, ha-init_cb_size); @@ -5619,6 +5621,8 @@ qla81xx_nvram_config(scsi_qla_host_t *vha) qla2x00_set_model_info(vha, nv-model_name, sizeof(nv-model_name), QLE8XXX); + qlt_81xx_config_nvram_stage2(vha, icb); + /* Use alternate WWN? */ if (nv-host_p __constant_cpu_to_le32(BIT_15)) { memcpy(icb-node_name, nv-alternate_node_name, WWN_SIZE); diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 1b192c8..26a3086 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -13,6 +13,8 @@ #include scsi/scsi_bsg_fc.h #include scsi/scsi_eh.h +#include qla_target.h + static void qla2x00_mbx_completion(scsi_qla_host_t *, uint16_t); static void qla2x00_process_completed_request(struct scsi_qla_host *, struct req_que *, uint32_t); @@ -2751,6 +2753,12 @@ static struct qla_init_msix_entry qla82xx_msix_entries[2] = { { qla2xxx (rsp_q), qla82xx_msix_rsp_q }, }; +static struct qla_init_msix_entry