Lines Matching +full:sub +full:- +full:mailboxes

1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Copyright (c) 2003-2004 LSI Logic Corporation.
20 * --- ------------ --- --- ---- ----
37 * LSI MegaRAID SCSI 320-0 1000 1960 1000 A520
38 * LSI MegaRAID SCSI 320-1 1000 1960 1000 0520
39 * LSI MegaRAID SCSI 320-2 1000 1960 1000 0518
40 * LSI MegaRAID SCSI 320-0X 1000 0407 1000 0530
41 * LSI MegaRAID SCSI 320-2X 1000 0407 1000 0532
42 * LSI MegaRAID SCSI 320-4X 1000 0407 1000 0531
43 * LSI MegaRAID SCSI 320-1E 1000 0408 1000 0001
44 * LSI MegaRAID SCSI 320-2E 1000 0408 1000 0002
45 * LSI MegaRAID SATA 150-4 1000 1960 1000 4523
46 * LSI MegaRAID SATA 150-6 1000 1960 1000 0523
47 * LSI MegaRAID SATA 300-4X 1000 0409 1000 3004
48 * LSI MegaRAID SATA 300-8X 1000 0409 1000 3008
61 * ACER MegaRAID ROMB-2E 1000 0408 1025 004D
181 * This would result in non-disk devices being skipped during driver load
191 * mraid_debug level - threshold for amount of information to be displayed by
340 * megaraid_init - module load hook
365 // register as a PCI hot-plug driver module in megaraid_init()
377 * megaraid_exit - driver unload entry point
394 * megaraid_probe_one - PCI hotplug entry point
410 pdev->vendor, pdev->device, pdev->subsystem_vendor, in megaraid_probe_one()
411 pdev->subsystem_device)); in megaraid_probe_one()
413 con_log(CL_ANN, ("bus %d:slot %d:func %d\n", pdev->bus->number, in megaraid_probe_one()
414 PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn))); in megaraid_probe_one()
420 return -ENODEV; in megaraid_probe_one()
423 // Enable bus-mastering on this controller in megaraid_probe_one()
437 // set up PCI related soft state and other pre-known parameters in megaraid_probe_one()
438 adapter->unique_id = pdev->bus->number << 8 | pdev->devfn; in megaraid_probe_one()
439 adapter->irq = pdev->irq; in megaraid_probe_one()
440 adapter->pdev = pdev; in megaraid_probe_one()
442 atomic_set(&adapter->being_detached, 0); in megaraid_probe_one()
446 if (dma_set_mask(&adapter->pdev->dev, DMA_BIT_MASK(32))) { in megaraid_probe_one()
455 spin_lock_init(&adapter->lock); in megaraid_probe_one()
459 INIT_LIST_HEAD(&adapter->kscb_pool); in megaraid_probe_one()
462 INIT_LIST_HEAD(&adapter->pend_list); in megaraid_probe_one()
465 INIT_LIST_HEAD(&adapter->completed_list); in megaraid_probe_one()
489 // attach with scsi mid-layer in megaraid_probe_one()
508 return -ENODEV; in megaraid_probe_one()
513 * megaraid_detach_one - release framework resources and call LLD release routine
535 pdev->vendor, pdev->device, pdev->subsystem_vendor, in megaraid_detach_one()
536 pdev->subsystem_device)); in megaraid_detach_one()
543 pdev->vendor, pdev->device, pdev->subsystem_vendor, in megaraid_detach_one()
544 pdev->subsystem_device)); in megaraid_detach_one()
548 host = adapter->host; in megaraid_detach_one()
554 atomic_set(&adapter->being_detached, 1); in megaraid_detach_one()
556 // detach from the IO sub-system in megaraid_detach_one()
579 * megaraid_mbox_shutdown - PCI shutdown for megaraid HBA
607 * megaraid_io_attach - attach a device with the IO subsystem
623 return -1; in megaraid_io_attach()
627 adapter->host = host; in megaraid_io_attach()
629 host->irq = adapter->irq; in megaraid_io_attach()
630 host->unique_id = adapter->unique_id; in megaraid_io_attach()
631 host->can_queue = adapter->max_cmds; in megaraid_io_attach()
632 host->this_id = adapter->init_id; in megaraid_io_attach()
633 host->sg_tablesize = adapter->sglen; in megaraid_io_attach()
634 host->max_sectors = adapter->max_sectors; in megaraid_io_attach()
635 host->cmd_per_lun = adapter->cmd_per_lun; in megaraid_io_attach()
636 host->max_channel = adapter->max_channel; in megaraid_io_attach()
637 host->max_id = adapter->max_target; in megaraid_io_attach()
638 host->max_lun = adapter->max_lun; in megaraid_io_attach()
641 // notify mid-layer about the new controller in megaraid_io_attach()
642 if (scsi_add_host(host, &adapter->pdev->dev)) { in megaraid_io_attach()
649 return -1; in megaraid_io_attach()
659 * megaraid_io_detach - detach a device from the IO subsystem
671 host = adapter->host; in megaraid_io_detach()
686 * megaraid_init_mbox - initialize controller
689 * - Allocate 16-byte aligned mailbox memory for firmware handshake
690 * - Allocate controller's memory resources
691 * - Find out all initialization data
692 * - Allocate memory required for all the commands
693 * - Use internal library of FW routines, build up complete soft state
704 adapter->ito = MBOX_TIMEOUT; in megaraid_init_mbox()
705 pdev = adapter->pdev; in megaraid_init_mbox()
712 if (raid_dev == NULL) return -1; in megaraid_init_mbox()
718 adapter->raid_device = (caddr_t)raid_dev; in megaraid_init_mbox()
719 raid_dev->fast_load = megaraid_fast_load; in megaraid_init_mbox()
723 raid_dev->baseport = pci_resource_start(pdev, 0); in megaraid_init_mbox()
733 raid_dev->baseaddr = ioremap(raid_dev->baseport, 128); in megaraid_init_mbox()
735 if (!raid_dev->baseaddr) { in megaraid_init_mbox()
744 spin_lock_init(&raid_dev->mailbox_lock); in megaraid_init_mbox()
764 if (request_irq(adapter->irq, megaraid_isr, IRQF_SHARED, "megaraid", in megaraid_init_mbox()
768 "megaraid: Couldn't register IRQ %d!\n", adapter->irq)); in megaraid_init_mbox()
778 adapter->max_cdb_sz = 10; in megaraid_init_mbox()
780 adapter->max_cdb_sz = 16; in megaraid_init_mbox()
786 * NOTE: In a non-cluster aware firmware environment, the LLD should in megaraid_init_mbox()
789 adapter->ha = 0; in megaraid_init_mbox()
790 adapter->init_id = -1; in megaraid_init_mbox()
791 if (megaraid_mbox_support_ha(adapter, &adapter->init_id) == 0) { in megaraid_init_mbox()
792 adapter->ha = 1; in megaraid_init_mbox()
810 adapter->device_ids[adapter->max_channel][i] += 0x80; in megaraid_init_mbox()
812 adapter->device_ids[adapter->max_channel][adapter->init_id] = in megaraid_init_mbox()
815 raid_dev->random_del_supported = 1; in megaraid_init_mbox()
819 * find out the maximum number of scatter-gather elements supported by in megaraid_init_mbox()
822 adapter->sglen = megaraid_mbox_get_max_sg(adapter); in megaraid_init_mbox()
833 adapter->max_sectors = megaraid_max_sectors; in megaraid_init_mbox()
838 adapter->cmd_per_lun = megaraid_cmd_per_lun; in megaraid_init_mbox()
847 // Set the DMA mask to 64-bit. All supported controllers as capable of in megaraid_init_mbox()
849 pci_read_config_dword(adapter->pdev, PCI_CONF_AMISIG64, &magic64); in megaraid_init_mbox()
852 ((adapter->pdev->subsystem_device != in megaraid_init_mbox()
854 (adapter->pdev->subsystem_device != in megaraid_init_mbox()
856 (adapter->pdev->vendor == PCI_VENDOR_ID_LSI_LOGIC && in megaraid_init_mbox()
857 adapter->pdev->device == PCI_DEVICE_ID_VERDE) || in megaraid_init_mbox()
858 (adapter->pdev->vendor == PCI_VENDOR_ID_LSI_LOGIC && in megaraid_init_mbox()
859 adapter->pdev->device == PCI_DEVICE_ID_DOBSON) || in megaraid_init_mbox()
860 (adapter->pdev->vendor == PCI_VENDOR_ID_LSI_LOGIC && in megaraid_init_mbox()
861 adapter->pdev->device == PCI_DEVICE_ID_LINDSAY) || in megaraid_init_mbox()
862 (adapter->pdev->vendor == PCI_VENDOR_ID_DELL && in megaraid_init_mbox()
863 adapter->pdev->device == PCI_DEVICE_ID_PERC4_DI_EVERGLADES) || in megaraid_init_mbox()
864 (adapter->pdev->vendor == PCI_VENDOR_ID_DELL && in megaraid_init_mbox()
865 adapter->pdev->device == PCI_DEVICE_ID_PERC4E_DI_KOBUK)) { in megaraid_init_mbox()
866 if (dma_set_mask(&adapter->pdev->dev, DMA_BIT_MASK(64))) { in megaraid_init_mbox()
868 "megaraid: DMA mask for 64-bit failed\n")); in megaraid_init_mbox()
870 if (dma_set_mask(&adapter->pdev->dev, in megaraid_init_mbox()
873 "megaraid: 32-bit DMA mask failed\n")); in megaraid_init_mbox()
880 tasklet_init(&adapter->dpc_h, megaraid_mbox_dpc, in megaraid_init_mbox()
891 free_irq(adapter->irq, adapter); in megaraid_init_mbox()
895 iounmap(raid_dev->baseaddr); in megaraid_init_mbox()
901 return -1; in megaraid_init_mbox()
906 * megaraid_fini_mbox - undo controller initialization
917 tasklet_kill(&adapter->dpc_h); in megaraid_fini_mbox()
923 free_irq(adapter->irq, adapter); in megaraid_fini_mbox()
925 iounmap(raid_dev->baseaddr); in megaraid_fini_mbox()
927 pci_release_regions(adapter->pdev); in megaraid_fini_mbox()
936 * megaraid_alloc_cmd_packets - allocate shared mailbox
957 pdev = adapter->pdev; in megaraid_alloc_cmd_packets()
961 * Allocate the common 16-byte aligned memory for the handshake in megaraid_alloc_cmd_packets()
964 raid_dev->una_mbox64 = dma_alloc_coherent(&adapter->pdev->dev, in megaraid_alloc_cmd_packets()
966 &raid_dev->una_mbox64_dma, in megaraid_alloc_cmd_packets()
969 if (!raid_dev->una_mbox64) { in megaraid_alloc_cmd_packets()
973 return -1; in megaraid_alloc_cmd_packets()
977 * Align the mailbox at 16-byte boundary in megaraid_alloc_cmd_packets()
979 raid_dev->mbox = &raid_dev->una_mbox64->mbox32; in megaraid_alloc_cmd_packets()
981 raid_dev->mbox = (mbox_t *)((((unsigned long)raid_dev->mbox) + 15) & in megaraid_alloc_cmd_packets()
984 raid_dev->mbox64 = (mbox64_t *)(((unsigned long)raid_dev->mbox) - 8); in megaraid_alloc_cmd_packets()
986 align = ((void *)raid_dev->mbox - in megaraid_alloc_cmd_packets()
987 ((void *)&raid_dev->una_mbox64->mbox32)); in megaraid_alloc_cmd_packets()
989 raid_dev->mbox_dma = (unsigned long)raid_dev->una_mbox64_dma + 8 + in megaraid_alloc_cmd_packets()
993 adapter->ibuf = dma_alloc_coherent(&pdev->dev, MBOX_IBUF_SIZE, in megaraid_alloc_cmd_packets()
994 &adapter->ibuf_dma_h, GFP_KERNEL); in megaraid_alloc_cmd_packets()
995 if (!adapter->ibuf) { in megaraid_alloc_cmd_packets()
1015 adapter->kscb_list = kcalloc(MBOX_MAX_SCSI_CMDS, sizeof(scb_t), GFP_KERNEL); in megaraid_alloc_cmd_packets()
1017 if (adapter->kscb_list == NULL) { in megaraid_alloc_cmd_packets()
1033 epthru_pci_blk = raid_dev->epthru_pool; in megaraid_alloc_cmd_packets()
1034 sg_pci_blk = raid_dev->sg_pool; in megaraid_alloc_cmd_packets()
1035 mbox_pci_blk = raid_dev->mbox_pool; in megaraid_alloc_cmd_packets()
1038 scb = adapter->kscb_list + i; in megaraid_alloc_cmd_packets()
1039 ccb = raid_dev->ccb_list + i; in megaraid_alloc_cmd_packets()
1041 ccb->mbox = (mbox_t *)(mbox_pci_blk[i].vaddr + 16); in megaraid_alloc_cmd_packets()
1042 ccb->raw_mbox = (uint8_t *)ccb->mbox; in megaraid_alloc_cmd_packets()
1043 ccb->mbox64 = (mbox64_t *)(mbox_pci_blk[i].vaddr + 8); in megaraid_alloc_cmd_packets()
1044 ccb->mbox_dma_h = (unsigned long)mbox_pci_blk[i].dma_addr + 16; in megaraid_alloc_cmd_packets()
1047 if (ccb->mbox_dma_h & 0x0F) { in megaraid_alloc_cmd_packets()
1049 "megaraid mbox: not aligned on 16-bytes\n")); in megaraid_alloc_cmd_packets()
1054 ccb->epthru = (mraid_epassthru_t *) in megaraid_alloc_cmd_packets()
1056 ccb->epthru_dma_h = epthru_pci_blk[i].dma_addr; in megaraid_alloc_cmd_packets()
1057 ccb->pthru = (mraid_passthru_t *)ccb->epthru; in megaraid_alloc_cmd_packets()
1058 ccb->pthru_dma_h = ccb->epthru_dma_h; in megaraid_alloc_cmd_packets()
1061 ccb->sgl64 = (mbox_sgl64 *)sg_pci_blk[i].vaddr; in megaraid_alloc_cmd_packets()
1062 ccb->sgl_dma_h = sg_pci_blk[i].dma_addr; in megaraid_alloc_cmd_packets()
1063 ccb->sgl32 = (mbox_sgl32 *)ccb->sgl64; in megaraid_alloc_cmd_packets()
1065 scb->ccb = (caddr_t)ccb; in megaraid_alloc_cmd_packets()
1066 scb->gp = 0; in megaraid_alloc_cmd_packets()
1068 scb->sno = i; // command index in megaraid_alloc_cmd_packets()
1070 scb->scp = NULL; in megaraid_alloc_cmd_packets()
1071 scb->state = SCB_FREE; in megaraid_alloc_cmd_packets()
1072 scb->dma_direction = DMA_NONE; in megaraid_alloc_cmd_packets()
1073 scb->dma_type = MRAID_DMA_NONE; in megaraid_alloc_cmd_packets()
1074 scb->dev_channel = -1; in megaraid_alloc_cmd_packets()
1075 scb->dev_target = -1; in megaraid_alloc_cmd_packets()
1078 list_add_tail(&scb->list, &adapter->kscb_pool); in megaraid_alloc_cmd_packets()
1086 kfree(adapter->kscb_list); in megaraid_alloc_cmd_packets()
1088 dma_free_coherent(&pdev->dev, MBOX_IBUF_SIZE, (void *)adapter->ibuf, in megaraid_alloc_cmd_packets()
1089 adapter->ibuf_dma_h); in megaraid_alloc_cmd_packets()
1091 dma_free_coherent(&adapter->pdev->dev, sizeof(mbox64_t), in megaraid_alloc_cmd_packets()
1092 (caddr_t)raid_dev->una_mbox64, raid_dev->una_mbox64_dma); in megaraid_alloc_cmd_packets()
1094 return -1; in megaraid_alloc_cmd_packets()
1099 * megaraid_free_cmd_packets - free memory
1111 kfree(adapter->kscb_list); in megaraid_free_cmd_packets()
1113 dma_free_coherent(&adapter->pdev->dev, MBOX_IBUF_SIZE, in megaraid_free_cmd_packets()
1114 (void *)adapter->ibuf, adapter->ibuf_dma_h); in megaraid_free_cmd_packets()
1116 dma_free_coherent(&adapter->pdev->dev, sizeof(mbox64_t), in megaraid_free_cmd_packets()
1117 (caddr_t)raid_dev->una_mbox64, raid_dev->una_mbox64_dma); in megaraid_free_cmd_packets()
1123 * megaraid_mbox_setup_dma_pools - setup dma pool for command packets
1127 * and scatter-gather lists.
1140 // Allocate memory for 16-bytes aligned mailboxes in megaraid_mbox_setup_dma_pools()
1141 raid_dev->mbox_pool_handle = dma_pool_create("megaraid mbox pool", in megaraid_mbox_setup_dma_pools()
1142 &adapter->pdev->dev, in megaraid_mbox_setup_dma_pools()
1146 if (raid_dev->mbox_pool_handle == NULL) { in megaraid_mbox_setup_dma_pools()
1150 mbox_pci_blk = raid_dev->mbox_pool; in megaraid_mbox_setup_dma_pools()
1153 raid_dev->mbox_pool_handle, in megaraid_mbox_setup_dma_pools()
1169 raid_dev->epthru_pool_handle = dma_pool_create("megaraid mbox pthru", in megaraid_mbox_setup_dma_pools()
1170 &adapter->pdev->dev, sizeof(mraid_epassthru_t), 128, 0); in megaraid_mbox_setup_dma_pools()
1172 if (raid_dev->epthru_pool_handle == NULL) { in megaraid_mbox_setup_dma_pools()
1176 epthru_pci_blk = raid_dev->epthru_pool; in megaraid_mbox_setup_dma_pools()
1179 raid_dev->epthru_pool_handle, in megaraid_mbox_setup_dma_pools()
1188 // Allocate memory for each scatter-gather list. Request for 512 bytes in megaraid_mbox_setup_dma_pools()
1190 raid_dev->sg_pool_handle = dma_pool_create("megaraid mbox sg", in megaraid_mbox_setup_dma_pools()
1191 &adapter->pdev->dev, in megaraid_mbox_setup_dma_pools()
1195 if (raid_dev->sg_pool_handle == NULL) { in megaraid_mbox_setup_dma_pools()
1199 sg_pci_blk = raid_dev->sg_pool; in megaraid_mbox_setup_dma_pools()
1202 raid_dev->sg_pool_handle, in megaraid_mbox_setup_dma_pools()
1214 return -1; in megaraid_mbox_setup_dma_pools()
1219 * megaraid_mbox_teardown_dma_pools - teardown dma pools for command packets
1223 * structures, and scatter-gather lists.
1235 sg_pci_blk = raid_dev->sg_pool; in megaraid_mbox_teardown_dma_pools()
1237 dma_pool_free(raid_dev->sg_pool_handle, sg_pci_blk[i].vaddr, in megaraid_mbox_teardown_dma_pools()
1240 dma_pool_destroy(raid_dev->sg_pool_handle); in megaraid_mbox_teardown_dma_pools()
1243 epthru_pci_blk = raid_dev->epthru_pool; in megaraid_mbox_teardown_dma_pools()
1245 dma_pool_free(raid_dev->epthru_pool_handle, in megaraid_mbox_teardown_dma_pools()
1248 dma_pool_destroy(raid_dev->epthru_pool_handle); in megaraid_mbox_teardown_dma_pools()
1251 mbox_pci_blk = raid_dev->mbox_pool; in megaraid_mbox_teardown_dma_pools()
1253 dma_pool_free(raid_dev->mbox_pool_handle, in megaraid_mbox_teardown_dma_pools()
1256 dma_pool_destroy(raid_dev->mbox_pool_handle); in megaraid_mbox_teardown_dma_pools()
1263 * megaraid_alloc_scb - detach and return a scb from the free list
1273 struct list_head *head = &adapter->kscb_pool; in megaraid_alloc_scb()
1285 scb = list_entry(head->next, scb_t, list); in megaraid_alloc_scb()
1286 list_del_init(&scb->list); in megaraid_alloc_scb()
1290 scb->state = SCB_ACTIVE; in megaraid_alloc_scb()
1291 scb->scp = scp; in megaraid_alloc_scb()
1292 scb->dma_type = MRAID_DMA_NONE; in megaraid_alloc_scb()
1299 * megaraid_dealloc_scb - return the scb to the free pool
1314 scb->state = SCB_FREE; in megaraid_dealloc_scb()
1315 scb->scp = NULL; in megaraid_dealloc_scb()
1318 list_add(&scb->list, &adapter->kscb_pool); in megaraid_dealloc_scb()
1327 * megaraid_mbox_mksgl - make the scatter-gather list
1331 * Prepare the scatter-gather list.
1343 scp = scb->scp; in megaraid_mbox_mksgl()
1344 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_mksgl()
1347 BUG_ON(sgcnt < 0 || sgcnt > adapter->sglen); in megaraid_mbox_mksgl()
1353 scb->dma_type = MRAID_DMA_WSG; in megaraid_mbox_mksgl()
1356 ccb->sgl64[i].address = sg_dma_address(sgl); in megaraid_mbox_mksgl()
1357 ccb->sgl64[i].length = sg_dma_len(sgl); in megaraid_mbox_mksgl()
1366 * mbox_post_cmd - issue a mailbox command
1383 ccb = (mbox_ccb_t *)scb->ccb; in mbox_post_cmd()
1384 mbox = raid_dev->mbox; in mbox_post_cmd()
1385 mbox64 = raid_dev->mbox64; in mbox_post_cmd()
1388 * Check for busy mailbox. If it is, return failure - the caller in mbox_post_cmd()
1393 if (unlikely(mbox->busy)) { in mbox_post_cmd()
1398 } while(mbox->busy && (i < max_mbox_busy_wait)); in mbox_post_cmd()
1400 if (mbox->busy) { in mbox_post_cmd()
1404 return -1; in mbox_post_cmd()
1410 memcpy((caddr_t)mbox64, (caddr_t)ccb->mbox64, 22); in mbox_post_cmd()
1411 mbox->cmdid = scb->sno; in mbox_post_cmd()
1413 adapter->outstanding_cmds++; in mbox_post_cmd()
1415 mbox->busy = 1; // Set busy in mbox_post_cmd()
1416 mbox->poll = 0; in mbox_post_cmd()
1417 mbox->ack = 0; in mbox_post_cmd()
1420 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in mbox_post_cmd()
1429 * megaraid_queue_command_lck - generic queue entry point for all LLDs
1443 scp->scsi_done = done; in megaraid_queue_command_lck()
1444 scp->result = 0; in megaraid_queue_command_lck()
1449 * not allocate scb. We will return non-zero status in that case. in megaraid_queue_command_lck()
1468 * megaraid_mbox_build_cmd - transform the mid-layer scsi commands in DEF_SCSI_QCMD()
1470 * @scp : mid-layer scsi command pointer in DEF_SCSI_QCMD()
1474 * Transform the mid-layer scsi command to megaraid firmware lingua. in DEF_SCSI_QCMD()
1475 * Convert the command issued by mid-layer to format understood by megaraid in DEF_SCSI_QCMD()
1505 switch (scp->cmnd[0]) { in DEF_SCSI_QCMD()
1511 if (!adapter->ha) { in DEF_SCSI_QCMD()
1512 scp->result = (DID_OK << 16); in DEF_SCSI_QCMD()
1517 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1522 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1523 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1524 scb->dev_target = target; in DEF_SCSI_QCMD()
1525 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1531 ccb->raw_mbox[0] = CLUSTER_CMD; in DEF_SCSI_QCMD()
1532 ccb->raw_mbox[2] = RESERVATION_STATUS; in DEF_SCSI_QCMD()
1533 ccb->raw_mbox[3] = target; in DEF_SCSI_QCMD()
1546 memset(vaddr, 0, scp->cmnd[4]); in DEF_SCSI_QCMD()
1554 scp->result = (DID_OK << 16); in DEF_SCSI_QCMD()
1562 if (!(rdev->last_disp & (1L << SCP2CHANNEL(scp)))) { in DEF_SCSI_QCMD()
1566 adapter->host->host_no, in DEF_SCSI_QCMD()
1572 rdev->last_disp |= (1L << SCP2CHANNEL(scp)); in DEF_SCSI_QCMD()
1575 if (scp->cmnd[1] & MEGA_SCSI_INQ_EVPD) { in DEF_SCSI_QCMD()
1589 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1593 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1600 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1605 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1606 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1607 scb->dev_target = target; in DEF_SCSI_QCMD()
1608 pthru = ccb->pthru; in DEF_SCSI_QCMD()
1609 mbox = ccb->mbox; in DEF_SCSI_QCMD()
1610 mbox64 = ccb->mbox64; in DEF_SCSI_QCMD()
1612 pthru->timeout = 0; in DEF_SCSI_QCMD()
1613 pthru->ars = 1; in DEF_SCSI_QCMD()
1614 pthru->reqsenselen = 14; in DEF_SCSI_QCMD()
1615 pthru->islogical = 1; in DEF_SCSI_QCMD()
1616 pthru->logdrv = target; in DEF_SCSI_QCMD()
1617 pthru->cdblen = scp->cmd_len; in DEF_SCSI_QCMD()
1618 memcpy(pthru->cdb, scp->cmnd, scp->cmd_len); in DEF_SCSI_QCMD()
1620 mbox->cmd = MBOXCMD_PASSTHRU64; in DEF_SCSI_QCMD()
1621 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1623 pthru->dataxferlen = scsi_bufflen(scp); in DEF_SCSI_QCMD()
1624 pthru->dataxferaddr = ccb->sgl_dma_h; in DEF_SCSI_QCMD()
1625 pthru->numsge = megaraid_mbox_mksgl(adapter, in DEF_SCSI_QCMD()
1628 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1629 mbox64->xferaddr_lo = (uint32_t )ccb->pthru_dma_h; in DEF_SCSI_QCMD()
1630 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1645 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1649 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1650 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1651 scb->dev_target = target; in DEF_SCSI_QCMD()
1652 mbox = ccb->mbox; in DEF_SCSI_QCMD()
1653 mbox64 = ccb->mbox64; in DEF_SCSI_QCMD()
1654 mbox->logdrv = target; in DEF_SCSI_QCMD()
1660 mbox->cmd = (scp->cmnd[0] & 0x02) ? MBOXCMD_LWRITE64: in DEF_SCSI_QCMD()
1664 * 6-byte READ(0x08) or WRITE(0x0A) cdb in DEF_SCSI_QCMD()
1666 if (scp->cmd_len == 6) { in DEF_SCSI_QCMD()
1667 mbox->numsectors = (uint32_t)scp->cmnd[4]; in DEF_SCSI_QCMD()
1668 mbox->lba = in DEF_SCSI_QCMD()
1669 ((uint32_t)scp->cmnd[1] << 16) | in DEF_SCSI_QCMD()
1670 ((uint32_t)scp->cmnd[2] << 8) | in DEF_SCSI_QCMD()
1671 (uint32_t)scp->cmnd[3]; in DEF_SCSI_QCMD()
1673 mbox->lba &= 0x1FFFFF; in DEF_SCSI_QCMD()
1677 * 10-byte READ(0x28) or WRITE(0x2A) cdb in DEF_SCSI_QCMD()
1679 else if (scp->cmd_len == 10) { in DEF_SCSI_QCMD()
1680 mbox->numsectors = in DEF_SCSI_QCMD()
1681 (uint32_t)scp->cmnd[8] | in DEF_SCSI_QCMD()
1682 ((uint32_t)scp->cmnd[7] << 8); in DEF_SCSI_QCMD()
1683 mbox->lba = in DEF_SCSI_QCMD()
1684 ((uint32_t)scp->cmnd[2] << 24) | in DEF_SCSI_QCMD()
1685 ((uint32_t)scp->cmnd[3] << 16) | in DEF_SCSI_QCMD()
1686 ((uint32_t)scp->cmnd[4] << 8) | in DEF_SCSI_QCMD()
1687 (uint32_t)scp->cmnd[5]; in DEF_SCSI_QCMD()
1691 * 12-byte READ(0xA8) or WRITE(0xAA) cdb in DEF_SCSI_QCMD()
1693 else if (scp->cmd_len == 12) { in DEF_SCSI_QCMD()
1694 mbox->lba = in DEF_SCSI_QCMD()
1695 ((uint32_t)scp->cmnd[2] << 24) | in DEF_SCSI_QCMD()
1696 ((uint32_t)scp->cmnd[3] << 16) | in DEF_SCSI_QCMD()
1697 ((uint32_t)scp->cmnd[4] << 8) | in DEF_SCSI_QCMD()
1698 (uint32_t)scp->cmnd[5]; in DEF_SCSI_QCMD()
1700 mbox->numsectors = in DEF_SCSI_QCMD()
1701 ((uint32_t)scp->cmnd[6] << 24) | in DEF_SCSI_QCMD()
1702 ((uint32_t)scp->cmnd[7] << 16) | in DEF_SCSI_QCMD()
1703 ((uint32_t)scp->cmnd[8] << 8) | in DEF_SCSI_QCMD()
1704 (uint32_t)scp->cmnd[9]; in DEF_SCSI_QCMD()
1712 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1716 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1718 // Calculate Scatter-Gather info in DEF_SCSI_QCMD()
1719 mbox64->xferaddr_lo = (uint32_t )ccb->sgl_dma_h; in DEF_SCSI_QCMD()
1720 mbox->numsge = megaraid_mbox_mksgl(adapter, in DEF_SCSI_QCMD()
1722 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1723 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1732 if (!adapter->ha) { in DEF_SCSI_QCMD()
1733 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1741 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1746 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1747 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1748 scb->dev_target = target; in DEF_SCSI_QCMD()
1749 ccb->raw_mbox[0] = CLUSTER_CMD; in DEF_SCSI_QCMD()
1750 ccb->raw_mbox[2] = (scp->cmnd[0] == RESERVE) ? in DEF_SCSI_QCMD()
1753 ccb->raw_mbox[3] = target; in DEF_SCSI_QCMD()
1754 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1759 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1767 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1774 if (rdev->fast_load && (target == 15) && in DEF_SCSI_QCMD()
1775 (SCP2CHANNEL(scp) == adapter->max_channel -1)) { in DEF_SCSI_QCMD()
1778 "megaraid[%d]: physical device scan re-enabled\n", in DEF_SCSI_QCMD()
1779 adapter->host->host_no)); in DEF_SCSI_QCMD()
1780 rdev->fast_load = 0; in DEF_SCSI_QCMD()
1786 if (!(rdev->last_disp & (1L << SCP2CHANNEL(scp)))) { in DEF_SCSI_QCMD()
1788 ss = rdev->fast_load ? skip : scan; in DEF_SCSI_QCMD()
1792 adapter->host->host_no, ss, SCP2CHANNEL(scp), in DEF_SCSI_QCMD()
1796 " for non-raid devices\n")); in DEF_SCSI_QCMD()
1798 rdev->last_disp |= (1L << SCP2CHANNEL(scp)); in DEF_SCSI_QCMD()
1802 if (rdev->fast_load) { in DEF_SCSI_QCMD()
1803 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1809 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1814 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1815 scb->dev_channel = channel; in DEF_SCSI_QCMD()
1816 scb->dev_target = target; in DEF_SCSI_QCMD()
1817 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1818 mbox = ccb->mbox; in DEF_SCSI_QCMD()
1819 mbox64 = ccb->mbox64; in DEF_SCSI_QCMD()
1822 if (adapter->max_cdb_sz == 16) { in DEF_SCSI_QCMD()
1823 mbox->cmd = MBOXCMD_EXTPTHRU; in DEF_SCSI_QCMD()
1827 mbox64->xferaddr_lo = (uint32_t)ccb->epthru_dma_h; in DEF_SCSI_QCMD()
1828 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1829 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1832 mbox->cmd = MBOXCMD_PASSTHRU64; in DEF_SCSI_QCMD()
1836 mbox64->xferaddr_lo = (uint32_t)ccb->pthru_dma_h; in DEF_SCSI_QCMD()
1837 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1838 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1848 * megaraid_mbox_runpendq - execute commands queued in the pending queue
1869 scb_q->state = SCB_PENDQ; in megaraid_mbox_runpendq()
1870 list_add_tail(&scb_q->list, &adapter->pend_list); in megaraid_mbox_runpendq()
1874 if (adapter->quiescent) { in megaraid_mbox_runpendq()
1879 while (!list_empty(&adapter->pend_list)) { in megaraid_mbox_runpendq()
1883 scb = list_entry(adapter->pend_list.next, scb_t, list); in megaraid_mbox_runpendq()
1889 list_del_init(&scb->list); in megaraid_mbox_runpendq()
1897 scb->state = SCB_ISSUED; in megaraid_mbox_runpendq()
1903 scb->state = SCB_PENDQ; in megaraid_mbox_runpendq()
1905 list_add(&scb->list, &adapter->pend_list); in megaraid_mbox_runpendq()
1924 * megaraid_mbox_prepare_pthru - prepare a command for physical devices
1927 * @scp : scsi command from the mid-layer
1940 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_prepare_pthru()
1941 pthru = ccb->pthru; in megaraid_mbox_prepare_pthru()
1942 channel = scb->dev_channel; in megaraid_mbox_prepare_pthru()
1943 target = scb->dev_target; in megaraid_mbox_prepare_pthru()
1946 pthru->timeout = 4; in megaraid_mbox_prepare_pthru()
1947 pthru->ars = 1; in megaraid_mbox_prepare_pthru()
1948 pthru->islogical = 0; in megaraid_mbox_prepare_pthru()
1949 pthru->channel = 0; in megaraid_mbox_prepare_pthru()
1950 pthru->target = (channel << 4) | target; in megaraid_mbox_prepare_pthru()
1951 pthru->logdrv = SCP2LUN(scp); in megaraid_mbox_prepare_pthru()
1952 pthru->reqsenselen = 14; in megaraid_mbox_prepare_pthru()
1953 pthru->cdblen = scp->cmd_len; in megaraid_mbox_prepare_pthru()
1955 memcpy(pthru->cdb, scp->cmnd, scp->cmd_len); in megaraid_mbox_prepare_pthru()
1958 pthru->dataxferlen = scsi_bufflen(scp); in megaraid_mbox_prepare_pthru()
1959 pthru->dataxferaddr = ccb->sgl_dma_h; in megaraid_mbox_prepare_pthru()
1960 pthru->numsge = megaraid_mbox_mksgl(adapter, scb); in megaraid_mbox_prepare_pthru()
1963 pthru->dataxferaddr = 0; in megaraid_mbox_prepare_pthru()
1964 pthru->dataxferlen = 0; in megaraid_mbox_prepare_pthru()
1965 pthru->numsge = 0; in megaraid_mbox_prepare_pthru()
1972 * megaraid_mbox_prepare_epthru - prepare a command for physical devices
1975 * @scp : scsi command from the mid-layer
1989 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_prepare_epthru()
1990 epthru = ccb->epthru; in megaraid_mbox_prepare_epthru()
1991 channel = scb->dev_channel; in megaraid_mbox_prepare_epthru()
1992 target = scb->dev_target; in megaraid_mbox_prepare_epthru()
1995 epthru->timeout = 4; in megaraid_mbox_prepare_epthru()
1996 epthru->ars = 1; in megaraid_mbox_prepare_epthru()
1997 epthru->islogical = 0; in megaraid_mbox_prepare_epthru()
1998 epthru->channel = 0; in megaraid_mbox_prepare_epthru()
1999 epthru->target = (channel << 4) | target; in megaraid_mbox_prepare_epthru()
2000 epthru->logdrv = SCP2LUN(scp); in megaraid_mbox_prepare_epthru()
2001 epthru->reqsenselen = 14; in megaraid_mbox_prepare_epthru()
2002 epthru->cdblen = scp->cmd_len; in megaraid_mbox_prepare_epthru()
2004 memcpy(epthru->cdb, scp->cmnd, scp->cmd_len); in megaraid_mbox_prepare_epthru()
2007 epthru->dataxferlen = scsi_bufflen(scp); in megaraid_mbox_prepare_epthru()
2008 epthru->dataxferaddr = ccb->sgl_dma_h; in megaraid_mbox_prepare_epthru()
2009 epthru->numsge = megaraid_mbox_mksgl(adapter, scb); in megaraid_mbox_prepare_epthru()
2012 epthru->dataxferaddr = 0; in megaraid_mbox_prepare_epthru()
2013 epthru->dataxferlen = 0; in megaraid_mbox_prepare_epthru()
2014 epthru->numsge = 0; in megaraid_mbox_prepare_epthru()
2021 * megaraid_ack_sequence - interrupt ack sequence for memory mapped HBAs
2044 mbox = raid_dev->mbox; in megaraid_ack_sequence()
2067 if (mbox->numstatus != 0xFF) { in megaraid_ack_sequence()
2068 nstatus = mbox->numstatus; in megaraid_ack_sequence()
2073 mbox->numstatus = 0xFF; in megaraid_ack_sequence()
2075 adapter->outstanding_cmds -= nstatus; in megaraid_ack_sequence()
2081 if (mbox->completed[i] != 0xFF) break; in megaraid_ack_sequence()
2084 completed[i] = mbox->completed[i]; in megaraid_ack_sequence()
2085 mbox->completed[i] = 0xFF; in megaraid_ack_sequence()
2098 scb = adapter->uscb_list + (completed[i] - in megaraid_ack_sequence()
2103 scb = adapter->kscb_list + completed[i]; in megaraid_ack_sequence()
2106 scb->status = mbox->status; in megaraid_ack_sequence()
2107 list_add_tail(&scb->list, &clist); in megaraid_ack_sequence()
2122 list_splice(&clist, &adapter->completed_list); in megaraid_ack_sequence()
2129 tasklet_schedule(&adapter->dpc_h); in megaraid_ack_sequence()
2136 * megaraid_isr - isr for memory based mailbox based controllers
2140 * Interrupt service routine for memory-mapped mailbox controllers.
2151 if (!adapter->quiescent) { in megaraid_isr()
2160 * megaraid_mbox_dpc - the tasklet to complete the commands from completed list
2199 list_splice_init(&adapter->completed_list, &clist); in megaraid_mbox_dpc()
2206 status = scb->status; in megaraid_mbox_dpc()
2207 scp = scb->scp; in megaraid_mbox_dpc()
2208 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_dpc()
2209 pthru = ccb->pthru; in megaraid_mbox_dpc()
2210 epthru = ccb->epthru; in megaraid_mbox_dpc()
2211 mbox = ccb->mbox; in megaraid_mbox_dpc()
2214 if (scb->state != SCB_ISSUED) { in megaraid_mbox_dpc()
2217 scb->sno, scb->state, scp)); in megaraid_mbox_dpc()
2223 if (scb->sno >= MBOX_MAX_SCSI_CMDS) { in megaraid_mbox_dpc()
2224 scb->state = SCB_FREE; in megaraid_mbox_dpc()
2225 scb->status = status; in megaraid_mbox_dpc()
2228 list_del_init(&scb->list); in megaraid_mbox_dpc()
2230 kioc = (uioc_t *)scb->gp; in megaraid_mbox_dpc()
2231 kioc->status = 0; in megaraid_mbox_dpc()
2239 if (scb->state & SCB_ABORT) { in megaraid_mbox_dpc()
2242 scb->sno)); in megaraid_mbox_dpc()
2254 if (scp->cmnd[0] == INQUIRY && status == 0 && islogical == 0 in megaraid_mbox_dpc()
2255 && IS_RAID_CH(raid_dev, scb->dev_channel)) { in megaraid_mbox_dpc()
2268 pdev_index = (scb->dev_channel * 16) + in megaraid_mbox_dpc()
2269 scb->dev_target; in megaraid_mbox_dpc()
2271 raid_dev->pdrv_state[pdev_index] & 0x0F; in megaraid_mbox_dpc()
2289 scp->result = (DID_OK << 16); in megaraid_mbox_dpc()
2295 if (mbox->cmd == MBOXCMD_PASSTHRU || in megaraid_mbox_dpc()
2296 mbox->cmd == MBOXCMD_PASSTHRU64) { in megaraid_mbox_dpc()
2298 memcpy(scp->sense_buffer, pthru->reqsensearea, in megaraid_mbox_dpc()
2301 scp->result = SAM_STAT_CHECK_CONDITION; in megaraid_mbox_dpc()
2304 if (mbox->cmd == MBOXCMD_EXTPTHRU) { in megaraid_mbox_dpc()
2306 memcpy(scp->sense_buffer, in megaraid_mbox_dpc()
2307 epthru->reqsensearea, 14); in megaraid_mbox_dpc()
2309 scp->result = SAM_STAT_CHECK_CONDITION; in megaraid_mbox_dpc()
2318 scp->result = DID_BUS_BUSY << 16 | status; in megaraid_mbox_dpc()
2327 if (scp->cmnd[0] == TEST_UNIT_READY) { in megaraid_mbox_dpc()
2328 scp->result = DID_ERROR << 16 | in megaraid_mbox_dpc()
2336 if (status == 1 && (scp->cmnd[0] == RESERVE || in megaraid_mbox_dpc()
2337 scp->cmnd[0] == RELEASE)) { in megaraid_mbox_dpc()
2339 scp->result = DID_ERROR << 16 | in megaraid_mbox_dpc()
2343 scp->result = DID_BAD_TARGET << 16 | status; in megaraid_mbox_dpc()
2355 list_del_init(&scb->list); in megaraid_mbox_dpc()
2361 scp->scsi_done(scp); in megaraid_mbox_dpc()
2369 * megaraid_abort_handler - abort the scsi command
2392 scp->cmnd[0], SCP2CHANNEL(scp), in megaraid_abort_handler()
2396 if (raid_dev->hw_error) { in megaraid_abort_handler()
2408 list_for_each_entry_safe(scb, tmp, &adapter->completed_list, list) { in megaraid_abort_handler()
2410 if (scb->scp == scp) { // Found command in megaraid_abort_handler()
2412 list_del_init(&scb->list); // from completed list in megaraid_abort_handler()
2416 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2418 scp->result = (DID_ABORT << 16); in megaraid_abort_handler()
2419 scp->scsi_done(scp); in megaraid_abort_handler()
2436 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) { in megaraid_abort_handler()
2438 if (scb->scp == scp) { // Found command in megaraid_abort_handler()
2440 list_del_init(&scb->list); // from pending list in megaraid_abort_handler()
2442 ASSERT(!(scb->state & SCB_ISSUED)); in megaraid_abort_handler()
2446 scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2448 scp->result = (DID_ABORT << 16); in megaraid_abort_handler()
2449 scp->scsi_done(scp); in megaraid_abort_handler()
2467 spin_lock_irq(&adapter->lock); in megaraid_abort_handler()
2469 scb = adapter->kscb_list + i; in megaraid_abort_handler()
2471 if (scb->scp == scp) { in megaraid_abort_handler()
2475 if (!(scb->state & SCB_ISSUED)) { in megaraid_abort_handler()
2478 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2484 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2488 spin_unlock_irq(&adapter->lock); in megaraid_abort_handler()
2504 * megaraid_reset_handler - device reset handler for mailbox based driver
2531 if (raid_dev->hw_error) { in megaraid_reset_handler()
2543 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) { in megaraid_reset_handler()
2544 list_del_init(&scb->list); // from pending list in megaraid_reset_handler()
2546 if (scb->sno >= MBOX_MAX_SCSI_CMDS) { in megaraid_reset_handler()
2549 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_reset_handler()
2551 scb->status = -1; in megaraid_reset_handler()
2553 kioc = (uioc_t *)scb->gp; in megaraid_reset_handler()
2554 kioc->status = -EFAULT; in megaraid_reset_handler()
2558 if (scb->scp == scp) { // Found command in megaraid_reset_handler()
2561 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_reset_handler()
2565 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_reset_handler()
2568 scb->scp->result = (DID_RESET << 16); in megaraid_reset_handler()
2569 scb->scp->scsi_done(scb->scp); in megaraid_reset_handler()
2576 if (adapter->outstanding_cmds) { in megaraid_reset_handler()
2579 adapter->outstanding_cmds, in megaraid_reset_handler()
2593 adapter->outstanding_cmds, in megaraid_reset_handler()
2594 (MBOX_RESET_WAIT + MBOX_RESET_EXT_WAIT) - i)); in megaraid_reset_handler()
2598 if (adapter->outstanding_cmds == 0) { in megaraid_reset_handler()
2605 spin_lock(&adapter->lock); in megaraid_reset_handler()
2608 if (adapter->outstanding_cmds) { in megaraid_reset_handler()
2612 raid_dev->hw_error = 1; in megaraid_reset_handler()
2624 if (!adapter->ha) { in megaraid_reset_handler()
2645 spin_unlock(&adapter->lock); in megaraid_reset_handler()
2657 * mbox_post_sync_cmd() - blocking command to the mailbox based controllers
2661 * Issue a scb in synchronous and non-interrupt mode for mailbox based
2672 mbox = raid_dev->mbox; in mbox_post_sync_cmd()
2684 mbox->cmdid = 0xFE; in mbox_post_sync_cmd()
2685 mbox->busy = 1; in mbox_post_sync_cmd()
2686 mbox->poll = 0; in mbox_post_sync_cmd()
2687 mbox->ack = 0; in mbox_post_sync_cmd()
2688 mbox->numstatus = 0xFF; in mbox_post_sync_cmd()
2689 mbox->status = 0xFF; in mbox_post_sync_cmd()
2692 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in mbox_post_sync_cmd()
2697 if (mbox->numstatus == 0xFF) { // status not yet available in mbox_post_sync_cmd()
2700 for (i = 0; mbox->numstatus == 0xFF && i < 1000; i++) { in mbox_post_sync_cmd()
2710 for (i = 0; (mbox->numstatus == 0xFF) && in mbox_post_sync_cmd()
2714 MBOX_RESET_WAIT - i)); in mbox_post_sync_cmd()
2723 return -1; in mbox_post_sync_cmd()
2730 if (mbox->poll != 0x77) { in mbox_post_sync_cmd()
2733 for (i = 0; (mbox->poll != 0x77) && (i < 1000); i++) { in mbox_post_sync_cmd()
2741 return -1; in mbox_post_sync_cmd()
2745 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x2); in mbox_post_sync_cmd()
2760 return -1; in mbox_post_sync_cmd()
2763 mbox->poll = 0; in mbox_post_sync_cmd()
2764 mbox->ack = 0x77; in mbox_post_sync_cmd()
2766 status = mbox->status; in mbox_post_sync_cmd()
2770 mbox->numstatus = 0xFF; in mbox_post_sync_cmd()
2771 mbox->status = 0xFF; in mbox_post_sync_cmd()
2773 mbox->completed[i] = 0xFF; in mbox_post_sync_cmd()
2781 return -1; in mbox_post_sync_cmd()
2786 * mbox_post_sync_cmd_fast - blocking command to the mailbox based controllers
2790 * Issue a scb in synchronous and non-interrupt mode for mailbox based
2792 * therefore can be called in interrupt-context as well.
2802 mbox = raid_dev->mbox; in mbox_post_sync_cmd_fast()
2805 if (mbox->busy) return -1; in mbox_post_sync_cmd_fast()
2809 mbox->cmdid = 0xFE; in mbox_post_sync_cmd_fast()
2810 mbox->busy = 1; in mbox_post_sync_cmd_fast()
2811 mbox->poll = 0; in mbox_post_sync_cmd_fast()
2812 mbox->ack = 0; in mbox_post_sync_cmd_fast()
2813 mbox->numstatus = 0xFF; in mbox_post_sync_cmd_fast()
2814 mbox->status = 0xFF; in mbox_post_sync_cmd_fast()
2817 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in mbox_post_sync_cmd_fast()
2820 if (mbox->numstatus != 0xFF) break; in mbox_post_sync_cmd_fast()
2826 // We may need to re-calibrate the counter in mbox_post_sync_cmd_fast()
2831 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x2); in mbox_post_sync_cmd_fast()
2834 return mbox->status; in mbox_post_sync_cmd_fast()
2839 * megaraid_busywait_mbox() - Wait until the controller's mailbox is available
2848 mbox_t *mbox = raid_dev->mbox; in megaraid_busywait_mbox()
2851 if (mbox->busy) { in megaraid_busywait_mbox()
2853 for (i = 0; mbox->busy && i < 1000; i++) in megaraid_busywait_mbox()
2858 else return -1; in megaraid_busywait_mbox()
2863 * megaraid_mbox_product_info - some static information about the controller
2888 pinfo = dma_alloc_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), in megaraid_mbox_product_info()
2895 return -1; in megaraid_mbox_product_info()
2898 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_product_info()
2899 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_product_info()
2910 dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), in megaraid_mbox_product_info()
2913 return -1; in megaraid_mbox_product_info()
2921 mraid_inq3 = (mraid_inquiry3_t *)adapter->ibuf; in megaraid_mbox_product_info()
2923 raid_dev->pdrv_state[i] = mraid_inq3->pdrv_state[i]; in megaraid_mbox_product_info()
2931 mbox->xferaddr = (uint32_t)pinfo_dma_h; in megaraid_mbox_product_info()
2941 dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), in megaraid_mbox_product_info()
2944 return -1; in megaraid_mbox_product_info()
2950 adapter->max_channel = pinfo->nchannels; in megaraid_mbox_product_info()
2956 adapter->max_target = MAX_LOGICAL_DRIVES_40LD + 1; in megaraid_mbox_product_info()
2957 adapter->max_lun = 8; // up to 8 LUNs for non-disk devices in megaraid_mbox_product_info()
2960 * These are the maximum outstanding commands for the scsi-layer in megaraid_mbox_product_info()
2962 adapter->max_cmds = MBOX_MAX_SCSI_CMDS; in megaraid_mbox_product_info()
2964 memset(adapter->fw_version, 0, VERSION_SIZE); in megaraid_mbox_product_info()
2965 memset(adapter->bios_version, 0, VERSION_SIZE); in megaraid_mbox_product_info()
2967 memcpy(adapter->fw_version, pinfo->fw_version, 4); in megaraid_mbox_product_info()
2968 adapter->fw_version[4] = 0; in megaraid_mbox_product_info()
2970 memcpy(adapter->bios_version, pinfo->bios_version, 4); in megaraid_mbox_product_info()
2971 adapter->bios_version[4] = 0; in megaraid_mbox_product_info()
2975 adapter->fw_version, adapter->bios_version)); in megaraid_mbox_product_info()
2977 dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), pinfo, in megaraid_mbox_product_info()
2986 * megaraid_mbox_extended_cdb - check for support for extended CDBs
3002 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_extended_cdb()
3004 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_extended_cdb()
3014 rval = -1; in megaraid_mbox_extended_cdb()
3022 * megaraid_mbox_support_ha - Do we support clustering
3040 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_support_ha()
3042 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_support_ha()
3048 rval = -1; in megaraid_mbox_support_ha()
3051 *init_id = *(uint8_t *)adapter->ibuf; in megaraid_mbox_support_ha()
3065 * megaraid_mbox_support_random_del - Do we support random deletion
3081 if (adapter->pdev->vendor == PCI_VENDOR_ID_AMI && in megaraid_mbox_support_random_del()
3082 adapter->pdev->device == PCI_DEVICE_ID_AMI_MEGARAID3 && in megaraid_mbox_support_random_del()
3083 adapter->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && in megaraid_mbox_support_random_del()
3084 adapter->pdev->subsystem_device == PCI_SUBSYS_ID_CERC_ATA100_4CH && in megaraid_mbox_support_random_del()
3085 (adapter->fw_version[0] > '6' || in megaraid_mbox_support_random_del()
3086 (adapter->fw_version[0] == '6' && in megaraid_mbox_support_random_del()
3087 adapter->fw_version[2] > '6') || in megaraid_mbox_support_random_del()
3088 (adapter->fw_version[0] == '6' in megaraid_mbox_support_random_del()
3089 && adapter->fw_version[2] == '6' in megaraid_mbox_support_random_del()
3090 && adapter->fw_version[3] > '1'))) { in megaraid_mbox_support_random_del()
3114 * megaraid_mbox_get_max_sg - maximum sg elements supported by the firmware
3117 * Find out the maximum number of scatter-gather elements supported by the
3132 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_get_max_sg()
3134 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_get_max_sg()
3141 nsg = *(uint8_t *)adapter->ibuf; in megaraid_mbox_get_max_sg()
3154 * megaraid_mbox_enum_raid_scsi - enumerate the RAID and SCSI channels
3172 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_enum_raid_scsi()
3174 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_enum_raid_scsi()
3181 raid_dev->channel_class = 0xFF; in megaraid_mbox_enum_raid_scsi()
3183 raid_dev->channel_class = *(uint8_t *)adapter->ibuf; in megaraid_mbox_enum_raid_scsi()
3191 * megaraid_mbox_flush_cache - flush adapter and disks cache
3220 * megaraid_mbox_fire_sync_cmd - fire the sync cmd
3239 mbox = raid_dev->mbox; in megaraid_mbox_fire_sync_cmd()
3249 mbox->cmdid = 0xFE; in megaraid_mbox_fire_sync_cmd()
3250 mbox->busy = 1; in megaraid_mbox_fire_sync_cmd()
3251 mbox->poll = 0; in megaraid_mbox_fire_sync_cmd()
3252 mbox->ack = 0; in megaraid_mbox_fire_sync_cmd()
3253 mbox->numstatus = 0; in megaraid_mbox_fire_sync_cmd()
3254 mbox->status = 0; in megaraid_mbox_fire_sync_cmd()
3257 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in megaraid_mbox_fire_sync_cmd()
3261 * mbox->cmd will be set to 0 in megaraid_mbox_fire_sync_cmd()
3264 * mbox->numstatus set to 1 in megaraid_mbox_fire_sync_cmd()
3269 while (!mbox->numstatus && mbox->cmd == 0xFF) { in megaraid_mbox_fire_sync_cmd()
3278 if (mbox->numstatus == 1) in megaraid_mbox_fire_sync_cmd()
3294 * megaraid_mbox_display_scb - display SCB information, mostly debug purposes
3311 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_display_scb()
3312 scp = scb->scp; in megaraid_mbox_display_scb()
3313 mbox = ccb->mbox; in megaraid_mbox_display_scb()
3318 "megaraid mailbox: status:%#x cmd:%#x id:%#x ", scb->status, in megaraid_mbox_display_scb()
3319 mbox->cmd, scb->sno)); in megaraid_mbox_display_scb()
3322 mbox->numsectors, mbox->lba, mbox->xferaddr, mbox->logdrv, in megaraid_mbox_display_scb()
3323 mbox->numsge)); in megaraid_mbox_display_scb()
3329 for (i = 0; i < scp->cmd_len; i++) { in megaraid_mbox_display_scb()
3330 con_log(level, ("%#2.02x ", scp->cmnd[i])); in megaraid_mbox_display_scb()
3340 * megaraid_mbox_setup_device_map - manage device ids
3358 adapter->device_ids[adapter->max_channel][t] = in megaraid_mbox_setup_device_map()
3359 (t < adapter->init_id) ? t : t - 1; in megaraid_mbox_setup_device_map()
3361 adapter->device_ids[adapter->max_channel][adapter->init_id] = 0xFF; in megaraid_mbox_setup_device_map()
3366 for (c = 0; c < adapter->max_channel; c++) in megaraid_mbox_setup_device_map()
3368 adapter->device_ids[c][t] = (c << 8) | t; in megaraid_mbox_setup_device_map()
3384 * megaraid_cmm_register - register with the management module
3402 adapter->uscb_list = kcalloc(MBOX_MAX_USER_CMDS, sizeof(scb_t), GFP_KERNEL); in megaraid_cmm_register()
3404 if (adapter->uscb_list == NULL) { in megaraid_cmm_register()
3408 return -1; in megaraid_cmm_register()
3414 INIT_LIST_HEAD(&adapter->uscb_pool); in megaraid_cmm_register()
3426 scb = adapter->uscb_list + i; in megaraid_cmm_register()
3427 ccb = raid_dev->uccb_list + i; in megaraid_cmm_register()
3429 scb->ccb = (caddr_t)ccb; in megaraid_cmm_register()
3430 ccb->mbox64 = raid_dev->umbox64 + i; in megaraid_cmm_register()
3431 ccb->mbox = &ccb->mbox64->mbox32; in megaraid_cmm_register()
3432 ccb->raw_mbox = (uint8_t *)ccb->mbox; in megaraid_cmm_register()
3434 scb->gp = 0; in megaraid_cmm_register()
3436 // COMMAND ID 0 - (MBOX_MAX_SCSI_CMDS-1) ARE RESERVED FOR in megaraid_cmm_register()
3437 // COMMANDS COMING FROM IO SUBSYSTEM (MID-LAYER) in megaraid_cmm_register()
3438 scb->sno = i + MBOX_MAX_SCSI_CMDS; in megaraid_cmm_register()
3440 scb->scp = NULL; in megaraid_cmm_register()
3441 scb->state = SCB_FREE; in megaraid_cmm_register()
3442 scb->dma_direction = DMA_NONE; in megaraid_cmm_register()
3443 scb->dma_type = MRAID_DMA_NONE; in megaraid_cmm_register()
3444 scb->dev_channel = -1; in megaraid_cmm_register()
3445 scb->dev_target = -1; in megaraid_cmm_register()
3448 list_add_tail(&scb->list, &adapter->uscb_pool); in megaraid_cmm_register()
3451 adp.unique_id = adapter->unique_id; in megaraid_cmm_register()
3454 adp.pdev = adapter->pdev; in megaraid_cmm_register()
3464 kfree(adapter->uscb_list); in megaraid_cmm_register()
3472 * megaraid_cmm_unregister - un-register with the management module
3475 * Un-register with the management module.
3482 kfree(adapter->uscb_list); in megaraid_cmm_unregister()
3483 mraid_mm_unregister_adp(adapter->unique_id); in megaraid_cmm_unregister()
3489 * megaraid_mbox_mm_handler - interface for CMM to issue commands to LLD
3507 return (-ENOTSUPP); in megaraid_mbox_mm_handler()
3513 if (atomic_read(&adapter->being_detached)) { in megaraid_mbox_mm_handler()
3516 return (-ENODEV); in megaraid_mbox_mm_handler()
3519 switch (kioc->opcode) { in megaraid_mbox_mm_handler()
3523 kioc->status = gather_hbainfo(adapter, (mraid_hba_info_t *) in megaraid_mbox_mm_handler()
3524 (unsigned long)kioc->buf_vaddr); in megaraid_mbox_mm_handler()
3526 kioc->done(kioc); in megaraid_mbox_mm_handler()
3528 return kioc->status; in megaraid_mbox_mm_handler()
3535 kioc->status = (-EINVAL); in megaraid_mbox_mm_handler()
3536 kioc->done(kioc); in megaraid_mbox_mm_handler()
3537 return (-EINVAL); in megaraid_mbox_mm_handler()
3544 * megaraid_mbox_mm_command - issues commands routed through CMM
3553 struct list_head *head = &adapter->uscb_pool; in megaraid_mbox_mm_command()
3570 return (-EINVAL); in megaraid_mbox_mm_command()
3573 scb = list_entry(head->next, scb_t, list); in megaraid_mbox_mm_command()
3574 list_del_init(&scb->list); in megaraid_mbox_mm_command()
3578 scb->state = SCB_ACTIVE; in megaraid_mbox_mm_command()
3579 scb->dma_type = MRAID_DMA_NONE; in megaraid_mbox_mm_command()
3580 scb->dma_direction = DMA_NONE; in megaraid_mbox_mm_command()
3582 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_mm_command()
3583 mbox64 = (mbox64_t *)(unsigned long)kioc->cmdbuf; in megaraid_mbox_mm_command()
3584 raw_mbox = (uint8_t *)&mbox64->mbox32; in megaraid_mbox_mm_command()
3586 memcpy(ccb->mbox64, mbox64, sizeof(mbox64_t)); in megaraid_mbox_mm_command()
3588 scb->gp = (unsigned long)kioc; in megaraid_mbox_mm_command()
3600 kioc->status = -ETIME; in megaraid_mbox_mm_command()
3602 scb->status = -1; in megaraid_mbox_mm_command()
3606 return (-ETIME); in megaraid_mbox_mm_command()
3609 INIT_LIST_HEAD(&scb->list); in megaraid_mbox_mm_command()
3611 scb->state = SCB_ISSUED; in megaraid_mbox_mm_command()
3617 kioc->status = -EBUSY; in megaraid_mbox_mm_command()
3619 scb->status = -1; in megaraid_mbox_mm_command()
3623 return (-EBUSY); in megaraid_mbox_mm_command()
3646 spin_lock_irqsave(&adapter->lock, flags); in wait_till_fw_empty()
3647 adapter->quiescent++; in wait_till_fw_empty()
3648 spin_unlock_irqrestore(&adapter->lock, flags); in wait_till_fw_empty()
3654 for (i = 0; i < 60 && adapter->outstanding_cmds; i++) { in wait_till_fw_empty()
3657 adapter->outstanding_cmds)); in wait_till_fw_empty()
3662 return adapter->outstanding_cmds; in wait_till_fw_empty()
3667 * megaraid_mbox_mm_done - callback for CMM commands
3682 kioc = (uioc_t *)scb->gp; in megaraid_mbox_mm_done()
3683 mbox64 = (mbox64_t *)(unsigned long)kioc->cmdbuf; in megaraid_mbox_mm_done()
3684 mbox64->mbox32.status = scb->status; in megaraid_mbox_mm_done()
3685 raw_mbox = (uint8_t *)&mbox64->mbox32; in megaraid_mbox_mm_done()
3689 scb->state = SCB_FREE; in megaraid_mbox_mm_done()
3690 scb->scp = NULL; in megaraid_mbox_mm_done()
3694 list_add(&scb->list, &adapter->uscb_pool); in megaraid_mbox_mm_done()
3702 adapter->quiescent--; in megaraid_mbox_mm_done()
3707 kioc->done(kioc); in megaraid_mbox_mm_done()
3714 * gather_hbainfo - HBA characteristics for the applications
3721 hinfo->pci_vendor_id = adapter->pdev->vendor; in gather_hbainfo()
3722 hinfo->pci_device_id = adapter->pdev->device; in gather_hbainfo()
3723 hinfo->subsys_vendor_id = adapter->pdev->subsystem_vendor; in gather_hbainfo()
3724 hinfo->subsys_device_id = adapter->pdev->subsystem_device; in gather_hbainfo()
3726 hinfo->pci_bus = adapter->pdev->bus->number; in gather_hbainfo()
3727 hinfo->pci_dev_fn = adapter->pdev->devfn; in gather_hbainfo()
3728 hinfo->pci_slot = PCI_SLOT(adapter->pdev->devfn); in gather_hbainfo()
3729 hinfo->irq = adapter->host->irq; in gather_hbainfo()
3730 hinfo->baseport = ADAP2RAIDDEV(adapter)->baseport; in gather_hbainfo()
3732 hinfo->unique_id = (hinfo->pci_bus << 8) | adapter->pdev->devfn; in gather_hbainfo()
3733 hinfo->host_no = adapter->host->host_no; in gather_hbainfo()
3745 * megaraid_sysfs_alloc_resources - allocate sysfs related resources
3749 * are read. These attributes would require up-to-date information from the
3754 * Return -ERROR_CODE on failure.
3762 raid_dev->sysfs_uioc = kmalloc(sizeof(uioc_t), GFP_KERNEL); in megaraid_sysfs_alloc_resources()
3764 raid_dev->sysfs_mbox64 = kmalloc(sizeof(mbox64_t), GFP_KERNEL); in megaraid_sysfs_alloc_resources()
3766 raid_dev->sysfs_buffer = dma_alloc_coherent(&adapter->pdev->dev, in megaraid_sysfs_alloc_resources()
3767 PAGE_SIZE, &raid_dev->sysfs_buffer_dma, GFP_KERNEL); in megaraid_sysfs_alloc_resources()
3769 if (!raid_dev->sysfs_uioc || !raid_dev->sysfs_mbox64 || in megaraid_sysfs_alloc_resources()
3770 !raid_dev->sysfs_buffer) { in megaraid_sysfs_alloc_resources()
3776 rval = -ENOMEM; in megaraid_sysfs_alloc_resources()
3781 mutex_init(&raid_dev->sysfs_mtx); in megaraid_sysfs_alloc_resources()
3783 init_waitqueue_head(&raid_dev->sysfs_wait_q); in megaraid_sysfs_alloc_resources()
3790 * megaraid_sysfs_free_resources - free sysfs related resources
3800 kfree(raid_dev->sysfs_uioc); in megaraid_sysfs_free_resources()
3801 kfree(raid_dev->sysfs_mbox64); in megaraid_sysfs_free_resources()
3803 if (raid_dev->sysfs_buffer) { in megaraid_sysfs_free_resources()
3804 dma_free_coherent(&adapter->pdev->dev, PAGE_SIZE, in megaraid_sysfs_free_resources()
3805 raid_dev->sysfs_buffer, raid_dev->sysfs_buffer_dma); in megaraid_sysfs_free_resources()
3811 * megaraid_sysfs_get_ldmap_done - callback for get ldmap
3819 adapter_t *adapter = (adapter_t *)uioc->buf_vaddr; in megaraid_sysfs_get_ldmap_done()
3822 uioc->status = 0; in megaraid_sysfs_get_ldmap_done()
3824 wake_up(&raid_dev->sysfs_wait_q); in megaraid_sysfs_get_ldmap_done()
3828 * megaraid_sysfs_get_ldmap_timeout - timeout handling for get ldmap
3839 uioc_t *uioc = timeout->uioc; in megaraid_sysfs_get_ldmap_timeout()
3840 adapter_t *adapter = (adapter_t *)uioc->buf_vaddr; in megaraid_sysfs_get_ldmap_timeout()
3843 uioc->status = -ETIME; in megaraid_sysfs_get_ldmap_timeout()
3845 wake_up(&raid_dev->sysfs_wait_q); in megaraid_sysfs_get_ldmap_timeout()
3850 * megaraid_sysfs_get_ldmap - get update logical drive map
3864 * Return -1 on failure.
3881 mutex_lock(&raid_dev->sysfs_mtx); in megaraid_sysfs_get_ldmap()
3883 uioc = raid_dev->sysfs_uioc; in megaraid_sysfs_get_ldmap()
3884 mbox64 = raid_dev->sysfs_mbox64; in megaraid_sysfs_get_ldmap()
3885 ldmap = raid_dev->sysfs_buffer; in megaraid_sysfs_get_ldmap()
3889 memset(ldmap, 0, sizeof(raid_dev->curr_ldmap)); in megaraid_sysfs_get_ldmap()
3891 mbox = &mbox64->mbox32; in megaraid_sysfs_get_ldmap()
3893 uioc->cmdbuf = (uint64_t)(unsigned long)mbox64; in megaraid_sysfs_get_ldmap()
3894 uioc->buf_vaddr = (caddr_t)adapter; in megaraid_sysfs_get_ldmap()
3895 uioc->status = -ENODATA; in megaraid_sysfs_get_ldmap()
3896 uioc->done = megaraid_sysfs_get_ldmap_done; in megaraid_sysfs_get_ldmap()
3902 mbox->xferaddr = (uint32_t)raid_dev->sysfs_buffer_dma; in megaraid_sysfs_get_ldmap()
3908 * Setup a timer to recover from a non-responding controller in megaraid_sysfs_get_ldmap()
3923 wait_event(raid_dev->sysfs_wait_q, (uioc->status != -ENODATA)); in megaraid_sysfs_get_ldmap()
3928 if (uioc->status == -ETIME) { in megaraid_sysfs_get_ldmap()
3932 rval = -ETIME; in megaraid_sysfs_get_ldmap()
3935 rval = mbox->status; in megaraid_sysfs_get_ldmap()
3939 memcpy(raid_dev->curr_ldmap, ldmap, in megaraid_sysfs_get_ldmap()
3940 sizeof(raid_dev->curr_ldmap)); in megaraid_sysfs_get_ldmap()
3956 mutex_unlock(&raid_dev->sysfs_mtx); in megaraid_sysfs_get_ldmap()
3963 * megaraid_mbox_app_hndl_show - display application handle for this adapter
3979 app_hndl = mraid_mm_adapter_app_handle(adapter->unique_id); in megaraid_mbox_app_hndl_show()
3986 * megaraid_mbox_ld_show - display the logical drive number for this device
3992 * logical drive. For physical devices, "-1" is returned.
4004 adapter_t *adapter = (adapter_t *)SCSIHOST2ADAP(sdev->host); in megaraid_mbox_ld_show()
4006 int scsi_id = -1; in megaraid_mbox_ld_show()
4007 int logical_drv = -1; in megaraid_mbox_ld_show()
4008 int ldid_map = -1; in megaraid_mbox_ld_show()
4014 if (raid_dev->random_del_supported && in megaraid_mbox_ld_show()
4022 mapped_sdev_id = sdev->id; in megaraid_mbox_ld_show()
4024 if (sdev->id > adapter->init_id) { in megaraid_mbox_ld_show()
4025 mapped_sdev_id -= 1; in megaraid_mbox_ld_show()
4028 if (raid_dev->curr_ldmap[i] == mapped_sdev_id) { in megaraid_mbox_ld_show()
4030 scsi_id = sdev->id; in megaraid_mbox_ld_show()
4034 ldid_map = raid_dev->curr_ldmap[i]; in megaraid_mbox_ld_show()
4037 adapter->unique_id); in megaraid_mbox_ld_show()