linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / scsi / qla2xxx / ql2400.c
1 /*
2  * QLogic Fibre Channel HBA Driver
3  * Copyright (c)  2003-2005 QLogic Corporation
4  *
5  * See LICENSE.qla2xxx for copyright and licensing details.
6  */
7 #include <linux/init.h>
8 #include <linux/module.h>
9 #include <linux/pci.h>
10
11 #include "qla_def.h"
12
13 static char qla_driver_name[] = "qla2400";
14
15 extern uint32_t fw2400_version_str[];
16 extern uint32_t fw2400_addr01;
17 extern uint32_t fw2400_code01[];
18 extern uint32_t fw2400_length01;
19 extern uint32_t fw2400_addr02;
20 extern uint32_t fw2400_code02[];
21 extern uint32_t fw2400_length02;
22
23 static struct qla_fw_info qla_fw_tbl[] = {
24         {
25                 .addressing     = FW_INFO_ADDR_EXTENDED,
26                 .fwcode         = (unsigned short *)&fw2400_code01[0],
27                 .fwlen          = (unsigned short *)&fw2400_length01,
28                 .lfwstart       = (unsigned long *)&fw2400_addr01,
29         },
30         {
31                 .addressing     = FW_INFO_ADDR_EXTENDED,
32                 .fwcode         = (unsigned short *)&fw2400_code02[0],
33                 .fwlen          = (unsigned short *)&fw2400_length02,
34                 .lfwstart       = (unsigned long *)&fw2400_addr02,
35         },
36         { FW_INFO_ADDR_NOMORE, },
37 };
38
39 static struct qla_board_info qla_board_tbl[] = {
40         {
41                 .drv_name       = qla_driver_name,
42                 .isp_name       = "ISP2422",
43                 .fw_info        = qla_fw_tbl,
44                 .fw_fname       = "ql2400_fw.bin",
45         },
46         {
47                 .drv_name       = qla_driver_name,
48                 .isp_name       = "ISP2432",
49                 .fw_info        = qla_fw_tbl,
50                 .fw_fname       = "ql2400_fw.bin",
51         },
52 };
53
54 static struct pci_device_id qla24xx_pci_tbl[] = {
55         {
56                 .vendor         = PCI_VENDOR_ID_QLOGIC,
57                 .device         = PCI_DEVICE_ID_QLOGIC_ISP2422,
58                 .subvendor      = PCI_ANY_ID,
59                 .subdevice      = PCI_ANY_ID,
60                 .driver_data    = (unsigned long)&qla_board_tbl[0],
61         },
62         {
63                 .vendor         = PCI_VENDOR_ID_QLOGIC,
64                 .device         = PCI_DEVICE_ID_QLOGIC_ISP2432,
65                 .subvendor      = PCI_ANY_ID,
66                 .subdevice      = PCI_ANY_ID,
67                 .driver_data    = (unsigned long)&qla_board_tbl[1],
68         },
69         {0, 0},
70 };
71 MODULE_DEVICE_TABLE(pci, qla24xx_pci_tbl);
72
73 static int __devinit
74 qla24xx_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
75 {
76         return qla2x00_probe_one(pdev,
77             (struct qla_board_info *)id->driver_data);
78 }
79
80 static void __devexit
81 qla24xx_remove_one(struct pci_dev *pdev)
82 {
83         qla2x00_remove_one(pdev);
84 }
85
86 static struct pci_driver qla24xx_pci_driver = {
87         .name           = "qla2400",
88         .id_table       = qla24xx_pci_tbl,
89         .probe          = qla24xx_probe_one,
90         .remove         = __devexit_p(qla24xx_remove_one),
91 };
92
93 static int __init
94 qla24xx_init(void)
95 {
96         return pci_module_init(&qla24xx_pci_driver);
97 }
98
99 static void __exit
100 qla24xx_exit(void)
101 {
102         pci_unregister_driver(&qla24xx_pci_driver);
103 }
104
105 module_init(qla24xx_init);
106 module_exit(qla24xx_exit);
107
108 MODULE_AUTHOR("QLogic Corporation");
109 MODULE_DESCRIPTION("QLogic ISP24xx FC-SCSI Host Bus Adapter driver");
110 MODULE_LICENSE("GPL");
111 MODULE_VERSION(QLA2XXX_VERSION);