qla2xxx: config support for QLA8432 using SCSI Netlink Transport
Subsystems (2)
PATCH 1/1 qla2xxx: config support for QLA8432 using SCSI Netlink Transport
his patch adds support for managing Qlogic's QLA84xx HBA using netlink messages via SCSI Netlink Transport. This is essentially a repost of the patch
http://marc.info/?l=linux-scsi&m=121745486321823&w=2 using the new scheme. The patch is against scsi-misc
Signed-off-by David C Somayajulu <[email protected]>
--- drivers/scsi/qla2xxx/Makefile | 2 +- drivers/scsi/qla2xxx/qla_def.h | 8 + drivers/scsi/qla2xxx/qla_gbl.h | 13 ++ drivers/scsi/qla2xxx/qla_mbx.c | 25 +++- drivers/scsi/qla2xxx/qla_nlnk.c | 323 +++++++++++++++++++++++++++++++++++++++ drivers/scsi/qla2xxx/qla_nlnk.h | 166 ++++++++++++++++++++ drivers/scsi/qla2xxx/qla_os.c | 9 + 7 files changed, 544 insertions(+), 2 deletions(-)
drivers/scsi/qla2xxx/Makefile +1 -1
@@ -1,4 +1,4 @@ qla2xxx-y := qla_os.o qla_init.o qla_mbx.o qla_iocb.o qla_isr.o qla_gs.o \ - qla_dbg.o qla_sup.o qla_attr.o qla_mid.o qla_dfs.o + qla_dbg.o qla_sup.o qla_attr.o qla_mid.o qla_dfs.o qla_nlnk.o obj-$(CONFIG_SCSI_QLA_FC) += qla2xxx.o
drivers/scsi/qla2xxx/qla_def.h +8 -0
@@ -2160,6 +2160,13 @@ struct qla_statistics {uint64_t output_bytes; }; +/* place holder for fw buffer parameters for netlink */ +struct qlfc_fw { +void *fw_buf; +dma_addr_t fw_dma; +uint32_t len; +}; +/* * Linux Host Adapter structure */
@@ -2610,6 +2617,7 @@ typedef struct scsi_qla_host {struct qla_chip_state_84xx *cs84xx;struct qla_statistics qla_stats; +struct qlfc_fw fw_buf; } scsi_qla_host_t;
drivers/scsi/qla2xxx/qla_gbl.h +13 -0
@@ -258,6 +258,11 @@ qla2x00_set_idma_speed(scsi_qla_host_t *, uint16_t, uint16_t, uint16_t *);extern int qla84xx_verify_chip (struct scsi_qla_host *,uint16_t *); +extern int qla84xx_reset (struct scsi_qla_host *,uint32_t ); + +extern int qla2x00_issue_iocb_timeout (scsi_qla_host_t *,void *,dma_addr_t , +size_t ,uint32_t ); +/* * Global Function Prototypes in qla_isr.c source file. */
@@ -367,4 +372,12 @@ extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *);*/ extern int qla2x00_dfs_setup (scsi_qla_host_t *);extern int qla2x00_dfs_remove (scsi_qla_host_t *); + +/* +* Global functions in qla_nlk.c +*/ +extern int ql_nl_register (struct Scsi_Host *,struct scsi_host_template *); +extern void ql_nl_unregister (void ); +extern void qla_free_nlnk_dmabuf (scsi_qla_host_t *); +#endif /* _QLA_GBL_H */
drivers/scsi/qla2xxx/qla_mbx.c +24 -1
@@ -681,7 +681,7 @@ qla2x00_verify_checksum(scsi_qla_host_t *ha, uint32_t risc_addr)* Context: * Kernel context. */ -static int +int qla2x00_issue_iocb_timeout (scsi_qla_host_t *ha,void *buffer,dma_addr_t phys_addr,size_t size,uint32_t tov) {
@@ -2946,6 +2946,29 @@ qla2x00_dump_ram(scsi_qla_host_t *ha, dma_addr_t req_dma, uint32_t addr,/* 84XX Support **************************************************************/ +int +qla84xx_reset (struct scsi_qla_host *vha,uint32_t diag_fw) +{ +int rval; +mbx_cmd_t mc; +mbx_cmd_t *mcp = &mc; + + mcp->mb[0 ] =MBC_ISP84XX_RESET ; + mcp->mb[1 ] = diag_fw; + mcp->out_mb =MBX_1 |MBX_0 ; + mcp->in_mb =MBX_1 |MBX_0 ; + mcp->tov =MBX_TOV_SECONDS ; + mcp->flags =0 ; + + rval =qla2x00_mailbox_command (vha, mcp); + +if (rval !=QLA_SUCCESS ) +printk ("%s(%ld): failed mb[0]=0x%x mb[1]=0x%x\n" , + __func__, vha->host_no, mcp->mb[0 ], mcp->mb[1 ]); + +return (rval); +} +struct cs84xx_mgmt_cmd {union {struct verify_chip_entry_84xx req;
drivers/scsi/qla2xxx/qla_nlnk.c new file +323 -0
323 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_nlnk.h new file +166 -0
166 lines not on this page · raw message
drivers/scsi/qla2xxx/qla_os.c +9 -0
@@ -1741,6 +1741,9 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)scsi_scan_host (host); +if (ql_nl_register (host, sht)) + goto nl_reg_failed; +qla2x00_alloc_sysfs_attr (ha);qla2x00_init_host_attr (ha);
@@ -1759,6 +1762,9 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)return 0 ; +nl_reg_failed: +scsi_remove_host (host); + probe_failed:qla2x00_free_device (ha);
@@ -1789,6 +1795,8 @@ qla2x00_remove_one(struct pci_dev *pdev)qla2x00_free_sysfs_attr (ha); +qla_free_nlnk_dmabuf (ha); +fc_remove_host (ha->host);scsi_remove_host (ha->host);
@@ -2921,6 +2929,7 @@ qla2x00_module_exit(void) {pci_unregister_driver (&qla2xxx_pci_driver);qla2x00_release_firmware (); +ql_nl_unregister ();kmem_cache_destroy (srb_cachep);fc_release_transport (qla2xxx_transport_template);fc_release_transport (qla2xxx_transport_vport_template);