Chip is similar in form to our ISP24xx offering.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
                .fw_info        = qla_fw_tbl,
                .fw_fname       = "ql2400_fw.bin",
        },
+       {
+               .drv_name       = qla_driver_name,
+               .isp_name       = "ISP5422",
+               .fw_info        = qla_fw_tbl,
+               .fw_fname       = "ql2400_fw.bin",
+       },
+       {
+               .drv_name       = qla_driver_name,
+               .isp_name       = "ISP5432",
+               .fw_info        = qla_fw_tbl,
+               .fw_fname       = "ql2400_fw.bin",
+       },
 };
 
 static struct pci_device_id qla24xx_pci_tbl[] = {
                .subdevice      = PCI_ANY_ID,
                .driver_data    = (unsigned long)&qla_board_tbl[1],
        },
+       {
+               .vendor         = PCI_VENDOR_ID_QLOGIC,
+               .device         = PCI_DEVICE_ID_QLOGIC_ISP5422,
+               .subvendor      = PCI_ANY_ID,
+               .subdevice      = PCI_ANY_ID,
+               .driver_data    = (unsigned long)&qla_board_tbl[2],
+       },
+       {
+               .vendor         = PCI_VENDOR_ID_QLOGIC,
+               .device         = PCI_DEVICE_ID_QLOGIC_ISP5432,
+               .subvendor      = PCI_ANY_ID,
+               .subdevice      = PCI_ANY_ID,
+               .driver_data    = (unsigned long)&qla_board_tbl[3],
+       },
+
        {0, 0},
 };
 MODULE_DEVICE_TABLE(pci, qla24xx_pci_tbl);
 
                            ha->host_no);
 
                        vfree(ha->fw_dump_buffer);
-                       if (!IS_QLA24XX(ha) && !IS_QLA25XX(ha))
+                       if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha))
                                free_pages((unsigned long)ha->fw_dump,
                                    ha->fw_dump_order);
 
                if ((ha->fw_dump || ha->fw_dumped) && !ha->fw_dump_reading) {
                        ha->fw_dump_reading = 1;
 
-                       if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+                       if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                                dump_size = FW_DUMP_SIZE_24XX;
                        else {
                                dump_size = FW_DUMP_SIZE_1M;
                return 0;
 
        /* Checksum NVRAM. */
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                uint32_t *iter;
                uint32_t chksum;
 
        pfc_host_stat = &ha->fc_host_stat;
        memset(pfc_host_stat, -1, sizeof(struct fc_host_statistics));
 
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                rval = qla24xx_get_isp_stats(ha, (uint32_t *)&stat_buf,
                    sizeof(stat_buf) / 4, mb_stat);
        } else {
 
 #define DT_ISP6322                     BIT_6
 #define DT_ISP2422                     BIT_7
 #define DT_ISP2432                     BIT_8
-#define DT_ISP2512                     BIT_9
-#define DT_ISP2522                     BIT_10
-#define DT_ISP_LAST                    (DT_ISP2522 << 1)
+#define DT_ISP5422                     BIT_9
+#define DT_ISP5432                     BIT_10
+#define DT_ISP_LAST                    (DT_ISP5432 << 1)
 
 #define DT_OEM_001                     BIT_29
 #define DT_ISP2200A                    BIT_30
 #define IS_QLA6322(ha) (DT_MASK(ha) & DT_ISP6322)
 #define IS_QLA2422(ha) (DT_MASK(ha) & DT_ISP2422)
 #define IS_QLA2432(ha) (DT_MASK(ha) & DT_ISP2432)
-#define IS_QLA2512(ha) (DT_MASK(ha) & DT_ISP2512)
-#define IS_QLA2522(ha) (DT_MASK(ha) & DT_ISP2522)
+#define IS_QLA5422(ha) (DT_MASK(ha) & DT_ISP5422)
+#define IS_QLA5432(ha) (DT_MASK(ha) & DT_ISP5432)
 
 #define IS_QLA23XX(ha) (IS_QLA2300(ha) || IS_QLA2312(ha) || IS_QLA2322(ha) || \
                         IS_QLA6312(ha) || IS_QLA6322(ha))
 #define IS_QLA24XX(ha) (IS_QLA2422(ha) || IS_QLA2432(ha))
-#define IS_QLA25XX(ha) (IS_QLA2512(ha) || IS_QLA2522(ha))
+#define IS_QLA54XX(ha) (IS_QLA5422(ha) || IS_QLA5432(ha))
 
 #define IS_OEM_001(ha)         ((ha)->device_type & DT_OEM_001)
 #define HAS_EXTENDED_IDS(ha)   ((ha)->device_type & DT_EXTENDED_IDS)
 
                DEBUG2_3(printk("scsi(%ld): %s failed, error status (%x).\n",
                    ha->host_no, routine, ms_pkt->entry_status));
        } else {
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                        comp_status =
                            ((struct ct_entry_24xx *)ms_pkt)->comp_status;
                else
        ms_iocb_entry_t *ms_pkt = ha->ms_iocb;
        struct ct_entry_24xx *ct_pkt = (struct ct_entry_24xx *)ha->ms_iocb;
 
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                ct_pkt->cmd_byte_count = cpu_to_le32(req_size);
                ct_pkt->dseg_0_len = ct_pkt->cmd_byte_count;
        } else {
        eiter = (struct ct_fdmi_port_attr *) (entries + size);
        eiter->type = __constant_cpu_to_be16(FDMI_PORT_SUPPORT_SPEED);
        eiter->len = __constant_cpu_to_be16(4 + 4);
-       if (IS_QLA25XX(ha))
-               eiter->a.sup_speed = __constant_cpu_to_be32(8);
-       else if (IS_QLA24XX(ha))
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                eiter->a.sup_speed = __constant_cpu_to_be32(4);
        else if (IS_QLA23XX(ha))
                eiter->a.sup_speed = __constant_cpu_to_be32(2);
        eiter = (struct ct_fdmi_port_attr *) (entries + size);
        eiter->type = __constant_cpu_to_be16(FDMI_PORT_MAX_FRAME_SIZE);
        eiter->len = __constant_cpu_to_be16(4 + 4);
-       max_frame_size = IS_QLA24XX(ha) || IS_QLA25XX(ha) ?
+       max_frame_size = IS_QLA24XX(ha) || IS_QLA54XX(ha) ?
                (uint32_t) icb24->frame_payload_size:
                (uint32_t) ha->init_cb->frame_payload_size;
        eiter->a.max_frame_size = cpu_to_be32(max_frame_size);
 
 
                /* Verify checksum of loaded RISC code. */
                rval = qla2x00_verify_checksum(ha,
-                   IS_QLA24XX(ha) || IS_QLA25XX(ha) ? RISC_SADDRESS :
+                   IS_QLA24XX(ha) || IS_QLA54XX(ha) ? RISC_SADDRESS :
                    *ha->brd_info->fw_info[0].fwstart);
        }
 
        if (IS_QLA2100(ha) || IS_QLA2200(ha))
                return;
 
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                qla2x00_alloc_fw_dump(ha);
 
        /* Retrieve IOCB counts available to the firmware. */
        LIST_HEAD(new_fcports);
 
        /* If FL port exists, then SNS is present */
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                loop_id = NPH_F_PORT;
        else
                loop_id = SNS_FL_PORT;
                        qla2x00_fdmi_register(ha);
 
                /* Ensure we are logged into the SNS. */
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                        loop_id = NPH_SNS;
                else
                        loop_id = SIMPLE_NAME_SERVER;
                        if (ql2xprocessrscn &&
                            !IS_QLA2100(ha) && !IS_QLA2200(ha) &&
                            !IS_QLA6312(ha) && !IS_QLA6322(ha) &&
-                           !IS_QLA24XX(ha) && !IS_QLA25XX(ha) &&
+                           !IS_QLA24XX(ha) && !IS_QLA54XX(ha) &&
                            ha->flags.init_done) {
                                /* Handle port RSCN via asyncronous IOCBs */
                                rval2 = qla2x00_handle_port_rscn(ha, rscn_entry,
 
                        spin_lock_irqsave(&ha->hardware_lock, flags);
 
-                       if (!IS_QLA24XX(ha) && !IS_QLA25XX(ha)) {
+                       if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha)) {
                                /*
                                 * Disable SRAM, Instruction RAM and GP RAM
                                 * parity.
 
                        spin_lock_irqsave(&ha->hardware_lock, flags);
 
-                       if (!IS_QLA24XX(ha) && !IS_QLA25XX(ha)) {
+                       if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha)) {
                                /* Enable proper parity */
                                if (IS_QLA2300(ha))
                                        /* SRAM parity */
 
 static inline int
 qla2x00_is_reserved_id(scsi_qla_host_t *ha, uint16_t loop_id)
 {
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                return (loop_id > NPH_LAST_HANDLE);
 
        return ((loop_id > ha->last_loop_id && loop_id < SNS_FIRST_LOOP_ID) ||
 
        mrk->entry_type = MARKER_TYPE;
        mrk->modifier = type;
        if (type != MK_SYNC_ALL) {
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                        mrk24 = (struct mrk_entry_24xx *) mrk;
                        mrk24->nport_handle = cpu_to_le16(loop_id);
                        mrk24->lun[1] = LSB(lun);
        for (timer = HZ; timer; timer--) {
                if ((req_cnt + 2) >= ha->req_q_cnt) {
                        /* Calculate number of free request entries. */
-                       if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+                       if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                                cnt = (uint16_t)RD_REG_DWORD(
                                    ®->isp24.req_q_out);
                        else
                ha->request_ring_ptr++;
 
        /* Set chip new ring index. */
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                WRT_REG_DWORD(®->isp24.req_q_in, ha->req_ring_index);
                RD_REG_DWORD_RELAXED(®->isp24.req_q_in);
        } else {
 
 
                ha->isp_ops.fw_dump(ha, 1);
 
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                        if (mb[1] == 0 && mb[2] == 0) {
                                qla_printk(KERN_ERR, ha,
                                    "Unrecoverable Hardware Error: adapter "
                 */
                if (ql2xprocessrscn &&
                    !IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA6312(ha) &&
-                   !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA25XX(ha) &&
+                   !IS_QLA6322(ha) && !IS_QLA24XX(ha) && !IS_QLA54XX(ha) &&
                    ha->flags.init_done && mb[1] != 0xffff &&
                    ((ha->operating_mode == P2P && mb[1] != 0) ||
                    (ha->operating_mode != P2P && mb[1] !=
                    "scsi(%ld): [R|Z]IO update completion.\n",
                    ha->host_no));
 
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                        qla24xx_process_response_queue(ha);
                else
                        qla2x00_process_response_queue(ha);
 
        sts = (sts_entry_t *) pkt;
        sts24 = (struct sts_entry_24xx *) pkt;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                comp_status = le16_to_cpu(sts24->comp_status);
                scsi_status = le16_to_cpu(sts24->scsi_status) & SS_MASK;
        } else {
        fcport = sp->fcport;
 
        sense_len = rsp_info_len = resid_len = 0;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                sense_len = le32_to_cpu(sts24->sense_len);
                rsp_info_len = le32_to_cpu(sts24->rsp_data_len);
                resid_len = le32_to_cpu(sts24->rsp_residual_count);
        /* Check for any FCP transport errors. */
        if (scsi_status & SS_RESPONSE_INFO_LEN_VALID) {
                /* Sense data lies beyond any FCP RESPONSE data. */
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                        sense_data += rsp_info_len;
                if (rsp_info_len > 3 && rsp_info[3]) {
                        DEBUG2(printk("scsi(%ld:%d:%d:%d) FCP I/O protocol "
        case CS_TIMEOUT:
                cp->result = DID_BUS_BUSY << 16;
 
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                        DEBUG2(printk(KERN_INFO
                            "scsi(%ld:%d:%d:%d): TIMEOUT status detected "
                            "0x%x-0x%x\n", ha->host_no, cp->device->channel,
                }
 
                /* Move sense data. */
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                        host_to_fcp_swap(pkt->data, sizeof(pkt->data));
                memcpy(sp->request_sense_ptr, pkt->data, sense_sz);
                DEBUG5(qla2x00_dump_buffer(sp->request_sense_ptr, sense_sz));
 
        spin_lock_irqsave(&ha->hardware_lock, flags);
 
        /* Load mailbox registers. */
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                optr = (uint16_t __iomem *)®->isp24.mailbox0;
        else
                optr = (uint16_t __iomem *)MAILBOX_REG(ha, ®->isp, 0);
 
                set_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags);
 
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                        WRT_REG_DWORD(®->isp24.hccr, HCCRX_SET_HOST_INT);
                else
                        WRT_REG_WORD(®->isp.hccr, HCCR_SET_HOST_INT);
                DEBUG3_11(printk("%s(%ld): cmd=%x POLLING MODE.\n", __func__,
                    ha->host_no, command);)
 
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha))
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha))
                        WRT_REG_DWORD(®->isp24.hccr, HCCRX_SET_HOST_INT);
                else
                        WRT_REG_WORD(®->isp.hccr, HCCR_SET_HOST_INT);
                uint16_t mb0;
                uint32_t ictrl;
 
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                        mb0 = RD_REG_WORD(®->isp24.mailbox0);
                        ictrl = RD_REG_DWORD(®->isp24.ictrl);
                } else {
 
        DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
 
-       if (MSW(risc_addr) || IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (MSW(risc_addr) || IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[0] = MBC_LOAD_RISC_RAM_EXTENDED;
                mcp->mb[8] = MSW(risc_addr);
                mcp->out_mb = MBX_8|MBX_0;
        mcp->mb[6] = MSW(MSD(req_dma));
        mcp->mb[7] = LSW(MSD(req_dma));
        mcp->out_mb |= MBX_7|MBX_6|MBX_3|MBX_2|MBX_1;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[4] = MSW(risc_code_size);
                mcp->mb[5] = LSW(risc_code_size);
                mcp->out_mb |= MBX_5|MBX_4;
        mcp->mb[0] = MBC_EXECUTE_FIRMWARE;
        mcp->out_mb = MBX_0;
        mcp->in_mb = MBX_0;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[1] = MSW(risc_addr);
                mcp->mb[2] = LSW(risc_addr);
                mcp->mb[3] = 0;
                DEBUG2_3_11(printk("%s(%ld): failed=%x mb[0]=%x.\n", __func__,
                    ha->host_no, rval, mcp->mb[0]));
        } else {
-               if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+               if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                        DEBUG11(printk("%s(%ld): done exchanges=%x.\n",
                            __func__, ha->host_no, mcp->mb[1]);)
                } else {
        mcp->mb[3] = fwopts[3];
        mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
        mcp->in_mb = MBX_0;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->in_mb |= MBX_1;
        } else {
                mcp->mb[10] = fwopts[10];
        mcp->mb[0] = MBC_VERIFY_CHECKSUM;
        mcp->out_mb = MBX_0;
        mcp->in_mb = MBX_0;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[1] = MSW(risc_addr);
                mcp->mb[2] = LSW(risc_addr);
                mcp->out_mb |= MBX_2|MBX_1;
 
        if (rval != QLA_SUCCESS) {
                DEBUG2_3_11(printk("%s(%ld): failed=%x chk sum=%x.\n", __func__,
-                   ha->host_no, rval, (IS_QLA24XX(ha) || IS_QLA25XX(ha) ?
+                   ha->host_no, rval, (IS_QLA24XX(ha) || IS_QLA54XX(ha) ?
                    (mcp->mb[2] << 16) | mcp->mb[1]: mcp->mb[1]));)
        } else {
                DEBUG11(printk("%s(%ld): done.\n", __func__, ha->host_no);)
 
                /* Mask reserved bits. */
                sts_entry->entry_status &=
-                   IS_QLA24XX(ha) || IS_QLA25XX(ha) ? RF_MASK_24XX :RF_MASK;
+                   IS_QLA24XX(ha) || IS_QLA54XX(ha) ? RF_MASK_24XX :RF_MASK;
        }
 
        return rval;
        memset(pd, 0, max(PORT_DATABASE_SIZE, PORT_DATABASE_24XX_SIZE));
 
        mcp->mb[0] = MBC_GET_PORT_DATABASE;
-       if (opt != 0 && !IS_QLA24XX(ha) && !IS_QLA25XX(ha))
+       if (opt != 0 && !IS_QLA24XX(ha) && !IS_QLA54XX(ha))
                mcp->mb[0] = MBC_ENHANCED_GET_PORT_DATABASE;
        mcp->mb[2] = MSW(pd_dma);
        mcp->mb[3] = LSW(pd_dma);
        mcp->mb[7] = LSW(MSD(pd_dma));
        mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
        mcp->in_mb = MBX_0;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[1] = fcport->loop_id;
                mcp->mb[10] = opt;
                mcp->out_mb |= MBX_10|MBX_1;
                mcp->mb[1] = fcport->loop_id << 8 | opt;
                mcp->out_mb |= MBX_1;
        }
-       mcp->buf_size = (IS_QLA24XX(ha) || IS_QLA25XX(ha) ?
+       mcp->buf_size = (IS_QLA24XX(ha) || IS_QLA54XX(ha) ?
            PORT_DATABASE_24XX_SIZE : PORT_DATABASE_SIZE);
        mcp->flags = MBX_DMA_IN;
        mcp->tov = (ha->login_timeout * 2) + (ha->login_timeout / 2);
        if (rval != QLA_SUCCESS)
                goto gpd_error_out;
 
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                pd24 = (struct port_database_24xx *) pd;
 
                /* Check for logged in state. */
 
        DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
 
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[0] = MBC_LIP_FULL_LOGIN;
                mcp->mb[1] = BIT_0;
                mcp->mb[2] = 0xff;
 
        mcp->mb[0] = MBC_GET_ID_LIST;
        mcp->out_mb = MBX_0;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[2] = MSW(id_list_dma);
                mcp->mb[3] = LSW(id_list_dma);
                mcp->mb[6] = MSW(MSD(id_list_dma));
        mcp->mb[7] = LSW(MSD(stat_buf_dma));
        mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
        mcp->in_mb = MBX_0;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                mcp->mb[1] = loop_id;
                mcp->mb[4] = 0;
                mcp->mb[10] = 0;
        mbx_cmd_t mc;
        mbx_cmd_t *mcp = &mc;
 
-       if (!IS_QLA24XX(ha) && !IS_QLA25XX(ha))
+       if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha))
                return QLA_FUNCTION_FAILED;
 
        DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
        mbx_cmd_t mc;
        mbx_cmd_t *mcp = &mc;
 
-       if (!IS_QLA24XX(ha) && !IS_QLA25XX(ha))
+       if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha))
                return QLA_FUNCTION_FAILED;
 
        DEBUG11(printk("%s(%ld): entered.\n", __func__, ha->host_no));
 
        case PCI_DEVICE_ID_QLOGIC_ISP2432:
                ha->device_type |= DT_ISP2432;
                break;
-       case PCI_DEVICE_ID_QLOGIC_ISP2512:
-               ha->device_type |= DT_ISP2512;
+       case PCI_DEVICE_ID_QLOGIC_ISP5422:
+               ha->device_type |= DT_ISP5422;
                break;
-       case PCI_DEVICE_ID_QLOGIC_ISP2522:
-               ha->device_type |= DT_ISP2522;
+       case PCI_DEVICE_ID_QLOGIC_ISP5432:
+               ha->device_type |= DT_ISP5432;
                break;
        }
 }
                ha->gid_list_info_size = 6;
                if (IS_QLA2322(ha) || IS_QLA6322(ha))
                        ha->optrom_size = OPTROM_SIZE_2322;
-       } else if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       } else if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                host->max_id = MAX_TARGETS_2200;
                ha->mbx_count = MAILBOX_REGISTER_COUNT;
                ha->request_q_length = REQUEST_ENTRY_CNT_24XX;
 
        spin_lock_irqsave(&ha->hardware_lock, flags);
        reg = ha->iobase;
-       if (IS_QLA24XX(ha) || IS_QLA25XX(ha)) {
+       if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                WRT_REG_DWORD(®->isp24.hccr, HCCRX_CLR_HOST_INT);
                WRT_REG_DWORD(®->isp24.hccr, HCCRX_CLR_RISC_INT);
        } else {
                blob = &qla_fw_blobs[FW_ISP2322];
        } else if (IS_QLA6312(ha) || IS_QLA6322(ha)) {
                blob = &qla_fw_blobs[FW_ISP63XX];
-       } else if (IS_QLA24XX(ha)) {
+       } else if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
                blob = &qla_fw_blobs[FW_ISP24XX];
        }
 
                PCI_ANY_ID, PCI_ANY_ID, },
        { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2432,
                PCI_ANY_ID, PCI_ANY_ID, },
+       { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5422,
+               PCI_ANY_ID, PCI_ANY_ID, },
+       { PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5432,
+               PCI_ANY_ID, PCI_ANY_ID, },
        { 0 },
 };
 MODULE_DEVICE_TABLE(pci, qla2xxx_pci_tbl);
 
 #define PCI_DEVICE_ID_QLOGIC_ISP2432   0x2432
 #define PCI_DEVICE_ID_QLOGIC_ISP2512   0x2512
 #define PCI_DEVICE_ID_QLOGIC_ISP2522   0x2522
+#define PCI_DEVICE_ID_QLOGIC_ISP5422   0x5422
+#define PCI_DEVICE_ID_QLOGIC_ISP5432   0x5432
 
 #define PCI_VENDOR_ID_CYRIX            0x1078
 #define PCI_DEVICE_ID_CYRIX_5510       0x0000