• Home
  • Raw
  • Download

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
341 * megaraid_init - module load hook
366 // register as a PCI hot-plug driver module in megaraid_init()
378 * megaraid_exit - driver unload entry point
395 * megaraid_probe_one - PCI hotplug entry point
411 pdev->vendor, pdev->device, pdev->subsystem_vendor, in megaraid_probe_one()
412 pdev->subsystem_device)); in megaraid_probe_one()
414 con_log(CL_ANN, ("bus %d:slot %d:func %d\n", pdev->bus->number, in megaraid_probe_one()
415 PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn))); in megaraid_probe_one()
421 return -ENODEV; in megaraid_probe_one()
424 // Enable bus-mastering on this controller in megaraid_probe_one()
438 // set up PCI related soft state and other pre-known parameters in megaraid_probe_one()
439 adapter->unique_id = pdev->bus->number << 8 | pdev->devfn; in megaraid_probe_one()
440 adapter->irq = pdev->irq; in megaraid_probe_one()
441 adapter->pdev = pdev; in megaraid_probe_one()
443 atomic_set(&adapter->being_detached, 0); in megaraid_probe_one()
447 if (dma_set_mask(&adapter->pdev->dev, DMA_BIT_MASK(32))) { in megaraid_probe_one()
456 spin_lock_init(&adapter->lock); in megaraid_probe_one()
460 INIT_LIST_HEAD(&adapter->kscb_pool); in megaraid_probe_one()
463 INIT_LIST_HEAD(&adapter->pend_list); in megaraid_probe_one()
466 INIT_LIST_HEAD(&adapter->completed_list); in megaraid_probe_one()
490 // attach with scsi mid-layer in megaraid_probe_one()
509 return -ENODEV; in megaraid_probe_one()
514 * megaraid_detach_one - release framework resources and call LLD release routine
536 pdev->vendor, pdev->device, pdev->subsystem_vendor, in megaraid_detach_one()
537 pdev->subsystem_device)); in megaraid_detach_one()
544 pdev->vendor, pdev->device, pdev->subsystem_vendor, in megaraid_detach_one()
545 pdev->subsystem_device)); in megaraid_detach_one()
549 host = adapter->host; in megaraid_detach_one()
555 atomic_set(&adapter->being_detached, 1); in megaraid_detach_one()
557 // detach from the IO sub-system in megaraid_detach_one()
580 * megaraid_mbox_shutdown - PCI shutdown for megaraid HBA
608 * megaraid_io_attach - attach a device with the IO subsystem
624 return -1; in megaraid_io_attach()
628 adapter->host = host; in megaraid_io_attach()
630 host->irq = adapter->irq; in megaraid_io_attach()
631 host->unique_id = adapter->unique_id; in megaraid_io_attach()
632 host->can_queue = adapter->max_cmds; in megaraid_io_attach()
633 host->this_id = adapter->init_id; in megaraid_io_attach()
634 host->sg_tablesize = adapter->sglen; in megaraid_io_attach()
635 host->max_sectors = adapter->max_sectors; in megaraid_io_attach()
636 host->cmd_per_lun = adapter->cmd_per_lun; in megaraid_io_attach()
637 host->max_channel = adapter->max_channel; in megaraid_io_attach()
638 host->max_id = adapter->max_target; in megaraid_io_attach()
639 host->max_lun = adapter->max_lun; in megaraid_io_attach()
642 // notify mid-layer about the new controller in megaraid_io_attach()
643 if (scsi_add_host(host, &adapter->pdev->dev)) { in megaraid_io_attach()
650 return -1; in megaraid_io_attach()
660 * megaraid_io_detach - detach a device from the IO subsystem
672 host = adapter->host; in megaraid_io_detach()
687 * megaraid_init_mbox - initialize controller
690 * - Allocate 16-byte aligned mailbox memory for firmware handshake
691 * - Allocate controller's memory resources
692 * - Find out all initialization data
693 * - Allocate memory required for all the commands
694 * - Use internal library of FW routines, build up complete soft state
705 adapter->ito = MBOX_TIMEOUT; in megaraid_init_mbox()
706 pdev = adapter->pdev; in megaraid_init_mbox()
713 if (raid_dev == NULL) return -1; in megaraid_init_mbox()
719 adapter->raid_device = (caddr_t)raid_dev; in megaraid_init_mbox()
720 raid_dev->fast_load = megaraid_fast_load; in megaraid_init_mbox()
724 raid_dev->baseport = pci_resource_start(pdev, 0); in megaraid_init_mbox()
734 raid_dev->baseaddr = ioremap(raid_dev->baseport, 128); in megaraid_init_mbox()
736 if (!raid_dev->baseaddr) { in megaraid_init_mbox()
745 spin_lock_init(&raid_dev->mailbox_lock); in megaraid_init_mbox()
765 if (request_irq(adapter->irq, megaraid_isr, IRQF_SHARED, "megaraid", in megaraid_init_mbox()
769 "megaraid: Couldn't register IRQ %d!\n", adapter->irq)); in megaraid_init_mbox()
779 adapter->max_cdb_sz = 10; in megaraid_init_mbox()
781 adapter->max_cdb_sz = 16; in megaraid_init_mbox()
787 * NOTE: In a non-cluster aware firmware environment, the LLD should in megaraid_init_mbox()
790 adapter->ha = 0; in megaraid_init_mbox()
791 adapter->init_id = -1; in megaraid_init_mbox()
792 if (megaraid_mbox_support_ha(adapter, &adapter->init_id) == 0) { in megaraid_init_mbox()
793 adapter->ha = 1; in megaraid_init_mbox()
811 adapter->device_ids[adapter->max_channel][i] += 0x80; in megaraid_init_mbox()
813 adapter->device_ids[adapter->max_channel][adapter->init_id] = in megaraid_init_mbox()
816 raid_dev->random_del_supported = 1; in megaraid_init_mbox()
820 * find out the maximum number of scatter-gather elements supported by in megaraid_init_mbox()
823 adapter->sglen = megaraid_mbox_get_max_sg(adapter); in megaraid_init_mbox()
834 adapter->max_sectors = megaraid_max_sectors; in megaraid_init_mbox()
839 adapter->cmd_per_lun = megaraid_cmd_per_lun; in megaraid_init_mbox()
848 // Set the DMA mask to 64-bit. All supported controllers as capable of in megaraid_init_mbox()
850 pci_read_config_dword(adapter->pdev, PCI_CONF_AMISIG64, &magic64); in megaraid_init_mbox()
853 ((adapter->pdev->subsystem_device != in megaraid_init_mbox()
855 (adapter->pdev->subsystem_device != in megaraid_init_mbox()
857 (adapter->pdev->vendor == PCI_VENDOR_ID_LSI_LOGIC && in megaraid_init_mbox()
858 adapter->pdev->device == PCI_DEVICE_ID_VERDE) || in megaraid_init_mbox()
859 (adapter->pdev->vendor == PCI_VENDOR_ID_LSI_LOGIC && in megaraid_init_mbox()
860 adapter->pdev->device == PCI_DEVICE_ID_DOBSON) || in megaraid_init_mbox()
861 (adapter->pdev->vendor == PCI_VENDOR_ID_LSI_LOGIC && in megaraid_init_mbox()
862 adapter->pdev->device == PCI_DEVICE_ID_LINDSAY) || in megaraid_init_mbox()
863 (adapter->pdev->vendor == PCI_VENDOR_ID_DELL && in megaraid_init_mbox()
864 adapter->pdev->device == PCI_DEVICE_ID_PERC4_DI_EVERGLADES) || in megaraid_init_mbox()
865 (adapter->pdev->vendor == PCI_VENDOR_ID_DELL && in megaraid_init_mbox()
866 adapter->pdev->device == PCI_DEVICE_ID_PERC4E_DI_KOBUK)) { in megaraid_init_mbox()
867 if (dma_set_mask(&adapter->pdev->dev, DMA_BIT_MASK(64))) { in megaraid_init_mbox()
869 "megaraid: DMA mask for 64-bit failed\n")); in megaraid_init_mbox()
871 if (dma_set_mask(&adapter->pdev->dev, in megaraid_init_mbox()
874 "megaraid: 32-bit DMA mask failed\n")); in megaraid_init_mbox()
881 tasklet_init(&adapter->dpc_h, megaraid_mbox_dpc, in megaraid_init_mbox()
892 free_irq(adapter->irq, adapter); in megaraid_init_mbox()
896 iounmap(raid_dev->baseaddr); in megaraid_init_mbox()
902 return -1; in megaraid_init_mbox()
907 * megaraid_fini_mbox - undo controller initialization
918 tasklet_kill(&adapter->dpc_h); in megaraid_fini_mbox()
924 free_irq(adapter->irq, adapter); in megaraid_fini_mbox()
926 iounmap(raid_dev->baseaddr); in megaraid_fini_mbox()
928 pci_release_regions(adapter->pdev); in megaraid_fini_mbox()
937 * megaraid_alloc_cmd_packets - allocate shared mailbox
958 pdev = adapter->pdev; in megaraid_alloc_cmd_packets()
962 * Allocate the common 16-byte aligned memory for the handshake in megaraid_alloc_cmd_packets()
965 raid_dev->una_mbox64 = dma_alloc_coherent(&adapter->pdev->dev, in megaraid_alloc_cmd_packets()
967 &raid_dev->una_mbox64_dma, in megaraid_alloc_cmd_packets()
970 if (!raid_dev->una_mbox64) { in megaraid_alloc_cmd_packets()
974 return -1; in megaraid_alloc_cmd_packets()
978 * Align the mailbox at 16-byte boundary in megaraid_alloc_cmd_packets()
980 raid_dev->mbox = &raid_dev->una_mbox64->mbox32; in megaraid_alloc_cmd_packets()
982 raid_dev->mbox = (mbox_t *)((((unsigned long)raid_dev->mbox) + 15) & in megaraid_alloc_cmd_packets()
985 raid_dev->mbox64 = (mbox64_t *)(((unsigned long)raid_dev->mbox) - 8); in megaraid_alloc_cmd_packets()
987 align = ((void *)raid_dev->mbox - in megaraid_alloc_cmd_packets()
988 ((void *)&raid_dev->una_mbox64->mbox32)); in megaraid_alloc_cmd_packets()
990 raid_dev->mbox_dma = (unsigned long)raid_dev->una_mbox64_dma + 8 + in megaraid_alloc_cmd_packets()
994 adapter->ibuf = dma_alloc_coherent(&pdev->dev, MBOX_IBUF_SIZE, in megaraid_alloc_cmd_packets()
995 &adapter->ibuf_dma_h, GFP_KERNEL); in megaraid_alloc_cmd_packets()
996 if (!adapter->ibuf) { in megaraid_alloc_cmd_packets()
1016 adapter->kscb_list = kcalloc(MBOX_MAX_SCSI_CMDS, sizeof(scb_t), GFP_KERNEL); in megaraid_alloc_cmd_packets()
1018 if (adapter->kscb_list == NULL) { in megaraid_alloc_cmd_packets()
1034 epthru_pci_blk = raid_dev->epthru_pool; in megaraid_alloc_cmd_packets()
1035 sg_pci_blk = raid_dev->sg_pool; in megaraid_alloc_cmd_packets()
1036 mbox_pci_blk = raid_dev->mbox_pool; in megaraid_alloc_cmd_packets()
1039 scb = adapter->kscb_list + i; in megaraid_alloc_cmd_packets()
1040 ccb = raid_dev->ccb_list + i; in megaraid_alloc_cmd_packets()
1042 ccb->mbox = (mbox_t *)(mbox_pci_blk[i].vaddr + 16); in megaraid_alloc_cmd_packets()
1043 ccb->raw_mbox = (uint8_t *)ccb->mbox; in megaraid_alloc_cmd_packets()
1044 ccb->mbox64 = (mbox64_t *)(mbox_pci_blk[i].vaddr + 8); in megaraid_alloc_cmd_packets()
1045 ccb->mbox_dma_h = (unsigned long)mbox_pci_blk[i].dma_addr + 16; in megaraid_alloc_cmd_packets()
1048 if (ccb->mbox_dma_h & 0x0F) { in megaraid_alloc_cmd_packets()
1050 "megaraid mbox: not aligned on 16-bytes\n")); in megaraid_alloc_cmd_packets()
1055 ccb->epthru = (mraid_epassthru_t *) in megaraid_alloc_cmd_packets()
1057 ccb->epthru_dma_h = epthru_pci_blk[i].dma_addr; in megaraid_alloc_cmd_packets()
1058 ccb->pthru = (mraid_passthru_t *)ccb->epthru; in megaraid_alloc_cmd_packets()
1059 ccb->pthru_dma_h = ccb->epthru_dma_h; in megaraid_alloc_cmd_packets()
1062 ccb->sgl64 = (mbox_sgl64 *)sg_pci_blk[i].vaddr; in megaraid_alloc_cmd_packets()
1063 ccb->sgl_dma_h = sg_pci_blk[i].dma_addr; in megaraid_alloc_cmd_packets()
1064 ccb->sgl32 = (mbox_sgl32 *)ccb->sgl64; in megaraid_alloc_cmd_packets()
1066 scb->ccb = (caddr_t)ccb; in megaraid_alloc_cmd_packets()
1067 scb->gp = 0; in megaraid_alloc_cmd_packets()
1069 scb->sno = i; // command index in megaraid_alloc_cmd_packets()
1071 scb->scp = NULL; in megaraid_alloc_cmd_packets()
1072 scb->state = SCB_FREE; in megaraid_alloc_cmd_packets()
1073 scb->dma_direction = DMA_NONE; in megaraid_alloc_cmd_packets()
1074 scb->dma_type = MRAID_DMA_NONE; in megaraid_alloc_cmd_packets()
1075 scb->dev_channel = -1; in megaraid_alloc_cmd_packets()
1076 scb->dev_target = -1; in megaraid_alloc_cmd_packets()
1079 list_add_tail(&scb->list, &adapter->kscb_pool); in megaraid_alloc_cmd_packets()
1087 kfree(adapter->kscb_list); in megaraid_alloc_cmd_packets()
1089 dma_free_coherent(&pdev->dev, MBOX_IBUF_SIZE, (void *)adapter->ibuf, in megaraid_alloc_cmd_packets()
1090 adapter->ibuf_dma_h); in megaraid_alloc_cmd_packets()
1092 dma_free_coherent(&adapter->pdev->dev, sizeof(mbox64_t), in megaraid_alloc_cmd_packets()
1093 (caddr_t)raid_dev->una_mbox64, raid_dev->una_mbox64_dma); in megaraid_alloc_cmd_packets()
1095 return -1; in megaraid_alloc_cmd_packets()
1100 * megaraid_free_cmd_packets - free memory
1112 kfree(adapter->kscb_list); in megaraid_free_cmd_packets()
1114 dma_free_coherent(&adapter->pdev->dev, MBOX_IBUF_SIZE, in megaraid_free_cmd_packets()
1115 (void *)adapter->ibuf, adapter->ibuf_dma_h); in megaraid_free_cmd_packets()
1117 dma_free_coherent(&adapter->pdev->dev, sizeof(mbox64_t), in megaraid_free_cmd_packets()
1118 (caddr_t)raid_dev->una_mbox64, raid_dev->una_mbox64_dma); in megaraid_free_cmd_packets()
1124 * megaraid_mbox_setup_dma_pools - setup dma pool for command packets
1128 * and scatter-gather lists.
1141 // Allocate memory for 16-bytes aligned mailboxes in megaraid_mbox_setup_dma_pools()
1142 raid_dev->mbox_pool_handle = dma_pool_create("megaraid mbox pool", in megaraid_mbox_setup_dma_pools()
1143 &adapter->pdev->dev, in megaraid_mbox_setup_dma_pools()
1147 if (raid_dev->mbox_pool_handle == NULL) { in megaraid_mbox_setup_dma_pools()
1151 mbox_pci_blk = raid_dev->mbox_pool; in megaraid_mbox_setup_dma_pools()
1154 raid_dev->mbox_pool_handle, in megaraid_mbox_setup_dma_pools()
1170 raid_dev->epthru_pool_handle = dma_pool_create("megaraid mbox pthru", in megaraid_mbox_setup_dma_pools()
1171 &adapter->pdev->dev, sizeof(mraid_epassthru_t), 128, 0); in megaraid_mbox_setup_dma_pools()
1173 if (raid_dev->epthru_pool_handle == NULL) { in megaraid_mbox_setup_dma_pools()
1177 epthru_pci_blk = raid_dev->epthru_pool; in megaraid_mbox_setup_dma_pools()
1180 raid_dev->epthru_pool_handle, in megaraid_mbox_setup_dma_pools()
1189 // Allocate memory for each scatter-gather list. Request for 512 bytes in megaraid_mbox_setup_dma_pools()
1191 raid_dev->sg_pool_handle = dma_pool_create("megaraid mbox sg", in megaraid_mbox_setup_dma_pools()
1192 &adapter->pdev->dev, in megaraid_mbox_setup_dma_pools()
1196 if (raid_dev->sg_pool_handle == NULL) { in megaraid_mbox_setup_dma_pools()
1200 sg_pci_blk = raid_dev->sg_pool; in megaraid_mbox_setup_dma_pools()
1203 raid_dev->sg_pool_handle, in megaraid_mbox_setup_dma_pools()
1215 return -1; in megaraid_mbox_setup_dma_pools()
1220 * megaraid_mbox_teardown_dma_pools - teardown dma pools for command packets
1224 * structures, and scatter-gather lists.
1236 sg_pci_blk = raid_dev->sg_pool; in megaraid_mbox_teardown_dma_pools()
1238 dma_pool_free(raid_dev->sg_pool_handle, sg_pci_blk[i].vaddr, in megaraid_mbox_teardown_dma_pools()
1241 dma_pool_destroy(raid_dev->sg_pool_handle); in megaraid_mbox_teardown_dma_pools()
1244 epthru_pci_blk = raid_dev->epthru_pool; in megaraid_mbox_teardown_dma_pools()
1246 dma_pool_free(raid_dev->epthru_pool_handle, in megaraid_mbox_teardown_dma_pools()
1249 dma_pool_destroy(raid_dev->epthru_pool_handle); in megaraid_mbox_teardown_dma_pools()
1252 mbox_pci_blk = raid_dev->mbox_pool; in megaraid_mbox_teardown_dma_pools()
1254 dma_pool_free(raid_dev->mbox_pool_handle, in megaraid_mbox_teardown_dma_pools()
1257 dma_pool_destroy(raid_dev->mbox_pool_handle); in megaraid_mbox_teardown_dma_pools()
1264 * megaraid_alloc_scb - detach and return a scb from the free list
1274 struct list_head *head = &adapter->kscb_pool; in megaraid_alloc_scb()
1286 scb = list_entry(head->next, scb_t, list); in megaraid_alloc_scb()
1287 list_del_init(&scb->list); in megaraid_alloc_scb()
1291 scb->state = SCB_ACTIVE; in megaraid_alloc_scb()
1292 scb->scp = scp; in megaraid_alloc_scb()
1293 scb->dma_type = MRAID_DMA_NONE; in megaraid_alloc_scb()
1300 * megaraid_dealloc_scb - return the scb to the free pool
1315 scb->state = SCB_FREE; in megaraid_dealloc_scb()
1316 scb->scp = NULL; in megaraid_dealloc_scb()
1319 list_add(&scb->list, &adapter->kscb_pool); in megaraid_dealloc_scb()
1328 * megaraid_mbox_mksgl - make the scatter-gather list
1332 * Prepare the scatter-gather list.
1344 scp = scb->scp; in megaraid_mbox_mksgl()
1345 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_mksgl()
1348 BUG_ON(sgcnt < 0 || sgcnt > adapter->sglen); in megaraid_mbox_mksgl()
1354 scb->dma_type = MRAID_DMA_WSG; in megaraid_mbox_mksgl()
1357 ccb->sgl64[i].address = sg_dma_address(sgl); in megaraid_mbox_mksgl()
1358 ccb->sgl64[i].length = sg_dma_len(sgl); in megaraid_mbox_mksgl()
1367 * mbox_post_cmd - issue a mailbox command
1384 ccb = (mbox_ccb_t *)scb->ccb; in mbox_post_cmd()
1385 mbox = raid_dev->mbox; in mbox_post_cmd()
1386 mbox64 = raid_dev->mbox64; in mbox_post_cmd()
1389 * Check for busy mailbox. If it is, return failure - the caller in mbox_post_cmd()
1394 if (unlikely(mbox->busy)) { in mbox_post_cmd()
1399 } while(mbox->busy && (i < max_mbox_busy_wait)); in mbox_post_cmd()
1401 if (mbox->busy) { in mbox_post_cmd()
1405 return -1; in mbox_post_cmd()
1411 memcpy((caddr_t)mbox64, (caddr_t)ccb->mbox64, 22); in mbox_post_cmd()
1412 mbox->cmdid = scb->sno; in mbox_post_cmd()
1414 adapter->outstanding_cmds++; in mbox_post_cmd()
1416 mbox->busy = 1; // Set busy in mbox_post_cmd()
1417 mbox->poll = 0; in mbox_post_cmd()
1418 mbox->ack = 0; in mbox_post_cmd()
1421 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in mbox_post_cmd()
1430 * megaraid_queue_command - generic queue entry point for all LLDs
1444 scp->scsi_done = done; in megaraid_queue_command_lck()
1445 scp->result = 0; in megaraid_queue_command_lck()
1450 * not allocate scb. We will return non-zero status in that case. in megaraid_queue_command_lck()
1469 * megaraid_mbox_build_cmd - transform the mid-layer scsi commands in DEF_SCSI_QCMD()
1471 * @scp : mid-layer scsi command pointer in DEF_SCSI_QCMD()
1475 * Transform the mid-layer scsi command to megaraid firmware lingua. in DEF_SCSI_QCMD()
1476 * Convert the command issued by mid-layer to format understood by megaraid in DEF_SCSI_QCMD()
1506 switch (scp->cmnd[0]) { in DEF_SCSI_QCMD()
1512 if (!adapter->ha) { in DEF_SCSI_QCMD()
1513 scp->result = (DID_OK << 16); in DEF_SCSI_QCMD()
1518 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1523 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1524 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1525 scb->dev_target = target; in DEF_SCSI_QCMD()
1526 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1532 ccb->raw_mbox[0] = CLUSTER_CMD; in DEF_SCSI_QCMD()
1533 ccb->raw_mbox[2] = RESERVATION_STATUS; in DEF_SCSI_QCMD()
1534 ccb->raw_mbox[3] = target; in DEF_SCSI_QCMD()
1547 memset(vaddr, 0, scp->cmnd[4]); in DEF_SCSI_QCMD()
1555 scp->result = (DID_OK << 16); in DEF_SCSI_QCMD()
1563 if (!(rdev->last_disp & (1L << SCP2CHANNEL(scp)))) { in DEF_SCSI_QCMD()
1567 adapter->host->host_no, in DEF_SCSI_QCMD()
1573 rdev->last_disp |= (1L << SCP2CHANNEL(scp)); in DEF_SCSI_QCMD()
1576 if (scp->cmnd[1] & MEGA_SCSI_INQ_EVPD) { in DEF_SCSI_QCMD()
1577 scp->sense_buffer[0] = 0x70; in DEF_SCSI_QCMD()
1578 scp->sense_buffer[2] = ILLEGAL_REQUEST; in DEF_SCSI_QCMD()
1579 scp->sense_buffer[12] = MEGA_INVALID_FIELD_IN_CDB; in DEF_SCSI_QCMD()
1580 scp->result = CHECK_CONDITION << 1; in DEF_SCSI_QCMD()
1592 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1596 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1603 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1608 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1609 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1610 scb->dev_target = target; in DEF_SCSI_QCMD()
1611 pthru = ccb->pthru; in DEF_SCSI_QCMD()
1612 mbox = ccb->mbox; in DEF_SCSI_QCMD()
1613 mbox64 = ccb->mbox64; in DEF_SCSI_QCMD()
1615 pthru->timeout = 0; in DEF_SCSI_QCMD()
1616 pthru->ars = 1; in DEF_SCSI_QCMD()
1617 pthru->reqsenselen = 14; in DEF_SCSI_QCMD()
1618 pthru->islogical = 1; in DEF_SCSI_QCMD()
1619 pthru->logdrv = target; in DEF_SCSI_QCMD()
1620 pthru->cdblen = scp->cmd_len; in DEF_SCSI_QCMD()
1621 memcpy(pthru->cdb, scp->cmnd, scp->cmd_len); in DEF_SCSI_QCMD()
1623 mbox->cmd = MBOXCMD_PASSTHRU64; in DEF_SCSI_QCMD()
1624 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1626 pthru->dataxferlen = scsi_bufflen(scp); in DEF_SCSI_QCMD()
1627 pthru->dataxferaddr = ccb->sgl_dma_h; in DEF_SCSI_QCMD()
1628 pthru->numsge = megaraid_mbox_mksgl(adapter, in DEF_SCSI_QCMD()
1631 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1632 mbox64->xferaddr_lo = (uint32_t )ccb->pthru_dma_h; in DEF_SCSI_QCMD()
1633 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1648 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1652 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1653 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1654 scb->dev_target = target; in DEF_SCSI_QCMD()
1655 mbox = ccb->mbox; in DEF_SCSI_QCMD()
1656 mbox64 = ccb->mbox64; in DEF_SCSI_QCMD()
1657 mbox->logdrv = target; in DEF_SCSI_QCMD()
1663 mbox->cmd = (scp->cmnd[0] & 0x02) ? MBOXCMD_LWRITE64: in DEF_SCSI_QCMD()
1667 * 6-byte READ(0x08) or WRITE(0x0A) cdb in DEF_SCSI_QCMD()
1669 if (scp->cmd_len == 6) { in DEF_SCSI_QCMD()
1670 mbox->numsectors = (uint32_t)scp->cmnd[4]; in DEF_SCSI_QCMD()
1671 mbox->lba = in DEF_SCSI_QCMD()
1672 ((uint32_t)scp->cmnd[1] << 16) | in DEF_SCSI_QCMD()
1673 ((uint32_t)scp->cmnd[2] << 8) | in DEF_SCSI_QCMD()
1674 (uint32_t)scp->cmnd[3]; in DEF_SCSI_QCMD()
1676 mbox->lba &= 0x1FFFFF; in DEF_SCSI_QCMD()
1680 * 10-byte READ(0x28) or WRITE(0x2A) cdb in DEF_SCSI_QCMD()
1682 else if (scp->cmd_len == 10) { in DEF_SCSI_QCMD()
1683 mbox->numsectors = in DEF_SCSI_QCMD()
1684 (uint32_t)scp->cmnd[8] | in DEF_SCSI_QCMD()
1685 ((uint32_t)scp->cmnd[7] << 8); in DEF_SCSI_QCMD()
1686 mbox->lba = in DEF_SCSI_QCMD()
1687 ((uint32_t)scp->cmnd[2] << 24) | in DEF_SCSI_QCMD()
1688 ((uint32_t)scp->cmnd[3] << 16) | in DEF_SCSI_QCMD()
1689 ((uint32_t)scp->cmnd[4] << 8) | in DEF_SCSI_QCMD()
1690 (uint32_t)scp->cmnd[5]; in DEF_SCSI_QCMD()
1694 * 12-byte READ(0xA8) or WRITE(0xAA) cdb in DEF_SCSI_QCMD()
1696 else if (scp->cmd_len == 12) { in DEF_SCSI_QCMD()
1697 mbox->lba = in DEF_SCSI_QCMD()
1698 ((uint32_t)scp->cmnd[2] << 24) | in DEF_SCSI_QCMD()
1699 ((uint32_t)scp->cmnd[3] << 16) | in DEF_SCSI_QCMD()
1700 ((uint32_t)scp->cmnd[4] << 8) | in DEF_SCSI_QCMD()
1701 (uint32_t)scp->cmnd[5]; in DEF_SCSI_QCMD()
1703 mbox->numsectors = in DEF_SCSI_QCMD()
1704 ((uint32_t)scp->cmnd[6] << 24) | in DEF_SCSI_QCMD()
1705 ((uint32_t)scp->cmnd[7] << 16) | in DEF_SCSI_QCMD()
1706 ((uint32_t)scp->cmnd[8] << 8) | in DEF_SCSI_QCMD()
1707 (uint32_t)scp->cmnd[9]; in DEF_SCSI_QCMD()
1715 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1719 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1721 // Calculate Scatter-Gather info in DEF_SCSI_QCMD()
1722 mbox64->xferaddr_lo = (uint32_t )ccb->sgl_dma_h; in DEF_SCSI_QCMD()
1723 mbox->numsge = megaraid_mbox_mksgl(adapter, in DEF_SCSI_QCMD()
1725 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1726 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1735 if (!adapter->ha) { in DEF_SCSI_QCMD()
1736 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1744 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1749 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1750 scb->dev_channel = 0xFF; in DEF_SCSI_QCMD()
1751 scb->dev_target = target; in DEF_SCSI_QCMD()
1752 ccb->raw_mbox[0] = CLUSTER_CMD; in DEF_SCSI_QCMD()
1753 ccb->raw_mbox[2] = (scp->cmnd[0] == RESERVE) ? in DEF_SCSI_QCMD()
1756 ccb->raw_mbox[3] = target; in DEF_SCSI_QCMD()
1757 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1762 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1770 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1777 if (rdev->fast_load && (target == 15) && in DEF_SCSI_QCMD()
1778 (SCP2CHANNEL(scp) == adapter->max_channel -1)) { in DEF_SCSI_QCMD()
1781 "megaraid[%d]: physical device scan re-enabled\n", in DEF_SCSI_QCMD()
1782 adapter->host->host_no)); in DEF_SCSI_QCMD()
1783 rdev->fast_load = 0; in DEF_SCSI_QCMD()
1789 if (!(rdev->last_disp & (1L << SCP2CHANNEL(scp)))) { in DEF_SCSI_QCMD()
1791 ss = rdev->fast_load ? skip : scan; in DEF_SCSI_QCMD()
1795 adapter->host->host_no, ss, SCP2CHANNEL(scp), in DEF_SCSI_QCMD()
1799 " for non-raid devices\n")); in DEF_SCSI_QCMD()
1801 rdev->last_disp |= (1L << SCP2CHANNEL(scp)); in DEF_SCSI_QCMD()
1805 if (rdev->fast_load) { in DEF_SCSI_QCMD()
1806 scp->result = (DID_BAD_TARGET << 16); in DEF_SCSI_QCMD()
1812 scp->result = (DID_ERROR << 16); in DEF_SCSI_QCMD()
1817 ccb = (mbox_ccb_t *)scb->ccb; in DEF_SCSI_QCMD()
1818 scb->dev_channel = channel; in DEF_SCSI_QCMD()
1819 scb->dev_target = target; in DEF_SCSI_QCMD()
1820 scb->dma_direction = scp->sc_data_direction; in DEF_SCSI_QCMD()
1821 mbox = ccb->mbox; in DEF_SCSI_QCMD()
1822 mbox64 = ccb->mbox64; in DEF_SCSI_QCMD()
1825 if (adapter->max_cdb_sz == 16) { in DEF_SCSI_QCMD()
1826 mbox->cmd = MBOXCMD_EXTPTHRU; in DEF_SCSI_QCMD()
1830 mbox64->xferaddr_lo = (uint32_t)ccb->epthru_dma_h; in DEF_SCSI_QCMD()
1831 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1832 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1835 mbox->cmd = MBOXCMD_PASSTHRU64; in DEF_SCSI_QCMD()
1839 mbox64->xferaddr_lo = (uint32_t)ccb->pthru_dma_h; in DEF_SCSI_QCMD()
1840 mbox64->xferaddr_hi = 0; in DEF_SCSI_QCMD()
1841 mbox->xferaddr = 0xFFFFFFFF; in DEF_SCSI_QCMD()
1851 * megaraid_mbox_runpendq - execute commands queued in the pending queue
1872 scb_q->state = SCB_PENDQ; in megaraid_mbox_runpendq()
1873 list_add_tail(&scb_q->list, &adapter->pend_list); in megaraid_mbox_runpendq()
1877 if (adapter->quiescent) { in megaraid_mbox_runpendq()
1882 while (!list_empty(&adapter->pend_list)) { in megaraid_mbox_runpendq()
1886 scb = list_entry(adapter->pend_list.next, scb_t, list); in megaraid_mbox_runpendq()
1892 list_del_init(&scb->list); in megaraid_mbox_runpendq()
1900 scb->state = SCB_ISSUED; in megaraid_mbox_runpendq()
1906 scb->state = SCB_PENDQ; in megaraid_mbox_runpendq()
1908 list_add(&scb->list, &adapter->pend_list); in megaraid_mbox_runpendq()
1927 * megaraid_mbox_prepare_pthru - prepare a command for physical devices
1930 * @scp : scsi command from the mid-layer
1943 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_prepare_pthru()
1944 pthru = ccb->pthru; in megaraid_mbox_prepare_pthru()
1945 channel = scb->dev_channel; in megaraid_mbox_prepare_pthru()
1946 target = scb->dev_target; in megaraid_mbox_prepare_pthru()
1949 pthru->timeout = 4; in megaraid_mbox_prepare_pthru()
1950 pthru->ars = 1; in megaraid_mbox_prepare_pthru()
1951 pthru->islogical = 0; in megaraid_mbox_prepare_pthru()
1952 pthru->channel = 0; in megaraid_mbox_prepare_pthru()
1953 pthru->target = (channel << 4) | target; in megaraid_mbox_prepare_pthru()
1954 pthru->logdrv = SCP2LUN(scp); in megaraid_mbox_prepare_pthru()
1955 pthru->reqsenselen = 14; in megaraid_mbox_prepare_pthru()
1956 pthru->cdblen = scp->cmd_len; in megaraid_mbox_prepare_pthru()
1958 memcpy(pthru->cdb, scp->cmnd, scp->cmd_len); in megaraid_mbox_prepare_pthru()
1961 pthru->dataxferlen = scsi_bufflen(scp); in megaraid_mbox_prepare_pthru()
1962 pthru->dataxferaddr = ccb->sgl_dma_h; in megaraid_mbox_prepare_pthru()
1963 pthru->numsge = megaraid_mbox_mksgl(adapter, scb); in megaraid_mbox_prepare_pthru()
1966 pthru->dataxferaddr = 0; in megaraid_mbox_prepare_pthru()
1967 pthru->dataxferlen = 0; in megaraid_mbox_prepare_pthru()
1968 pthru->numsge = 0; in megaraid_mbox_prepare_pthru()
1975 * megaraid_mbox_prepare_epthru - prepare a command for physical devices
1978 * @scp : scsi command from the mid-layer
1992 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_prepare_epthru()
1993 epthru = ccb->epthru; in megaraid_mbox_prepare_epthru()
1994 channel = scb->dev_channel; in megaraid_mbox_prepare_epthru()
1995 target = scb->dev_target; in megaraid_mbox_prepare_epthru()
1998 epthru->timeout = 4; in megaraid_mbox_prepare_epthru()
1999 epthru->ars = 1; in megaraid_mbox_prepare_epthru()
2000 epthru->islogical = 0; in megaraid_mbox_prepare_epthru()
2001 epthru->channel = 0; in megaraid_mbox_prepare_epthru()
2002 epthru->target = (channel << 4) | target; in megaraid_mbox_prepare_epthru()
2003 epthru->logdrv = SCP2LUN(scp); in megaraid_mbox_prepare_epthru()
2004 epthru->reqsenselen = 14; in megaraid_mbox_prepare_epthru()
2005 epthru->cdblen = scp->cmd_len; in megaraid_mbox_prepare_epthru()
2007 memcpy(epthru->cdb, scp->cmnd, scp->cmd_len); in megaraid_mbox_prepare_epthru()
2010 epthru->dataxferlen = scsi_bufflen(scp); in megaraid_mbox_prepare_epthru()
2011 epthru->dataxferaddr = ccb->sgl_dma_h; in megaraid_mbox_prepare_epthru()
2012 epthru->numsge = megaraid_mbox_mksgl(adapter, scb); in megaraid_mbox_prepare_epthru()
2015 epthru->dataxferaddr = 0; in megaraid_mbox_prepare_epthru()
2016 epthru->dataxferlen = 0; in megaraid_mbox_prepare_epthru()
2017 epthru->numsge = 0; in megaraid_mbox_prepare_epthru()
2024 * megaraid_ack_sequence - interrupt ack sequence for memory mapped HBAs
2047 mbox = raid_dev->mbox; in megaraid_ack_sequence()
2070 if (mbox->numstatus != 0xFF) { in megaraid_ack_sequence()
2071 nstatus = mbox->numstatus; in megaraid_ack_sequence()
2076 mbox->numstatus = 0xFF; in megaraid_ack_sequence()
2078 adapter->outstanding_cmds -= nstatus; in megaraid_ack_sequence()
2084 if (mbox->completed[i] != 0xFF) break; in megaraid_ack_sequence()
2087 completed[i] = mbox->completed[i]; in megaraid_ack_sequence()
2088 mbox->completed[i] = 0xFF; in megaraid_ack_sequence()
2101 scb = adapter->uscb_list + (completed[i] - in megaraid_ack_sequence()
2106 scb = adapter->kscb_list + completed[i]; in megaraid_ack_sequence()
2109 scb->status = mbox->status; in megaraid_ack_sequence()
2110 list_add_tail(&scb->list, &clist); in megaraid_ack_sequence()
2125 list_splice(&clist, &adapter->completed_list); in megaraid_ack_sequence()
2132 tasklet_schedule(&adapter->dpc_h); in megaraid_ack_sequence()
2139 * megaraid_isr - isr for memory based mailbox based controllers
2143 * Interrupt service routine for memory-mapped mailbox controllers.
2154 if (!adapter->quiescent) { in megaraid_isr()
2163 * megaraid_mbox_dpc - the tasklet to complete the commands from completed list
2202 list_splice_init(&adapter->completed_list, &clist); in megaraid_mbox_dpc()
2209 status = scb->status; in megaraid_mbox_dpc()
2210 scp = scb->scp; in megaraid_mbox_dpc()
2211 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_dpc()
2212 pthru = ccb->pthru; in megaraid_mbox_dpc()
2213 epthru = ccb->epthru; in megaraid_mbox_dpc()
2214 mbox = ccb->mbox; in megaraid_mbox_dpc()
2217 if (scb->state != SCB_ISSUED) { in megaraid_mbox_dpc()
2220 scb->sno, scb->state, scp)); in megaraid_mbox_dpc()
2226 if (scb->sno >= MBOX_MAX_SCSI_CMDS) { in megaraid_mbox_dpc()
2227 scb->state = SCB_FREE; in megaraid_mbox_dpc()
2228 scb->status = status; in megaraid_mbox_dpc()
2231 list_del_init(&scb->list); in megaraid_mbox_dpc()
2233 kioc = (uioc_t *)scb->gp; in megaraid_mbox_dpc()
2234 kioc->status = 0; in megaraid_mbox_dpc()
2242 if (scb->state & SCB_ABORT) { in megaraid_mbox_dpc()
2245 scb->sno)); in megaraid_mbox_dpc()
2257 if (scp->cmnd[0] == INQUIRY && status == 0 && islogical == 0 in megaraid_mbox_dpc()
2258 && IS_RAID_CH(raid_dev, scb->dev_channel)) { in megaraid_mbox_dpc()
2271 pdev_index = (scb->dev_channel * 16) + in megaraid_mbox_dpc()
2272 scb->dev_target; in megaraid_mbox_dpc()
2274 raid_dev->pdrv_state[pdev_index] & 0x0F; in megaraid_mbox_dpc()
2292 scp->result = (DID_OK << 16); in megaraid_mbox_dpc()
2298 if (mbox->cmd == MBOXCMD_PASSTHRU || in megaraid_mbox_dpc()
2299 mbox->cmd == MBOXCMD_PASSTHRU64) { in megaraid_mbox_dpc()
2301 memcpy(scp->sense_buffer, pthru->reqsensearea, in megaraid_mbox_dpc()
2304 scp->result = DRIVER_SENSE << 24 | in megaraid_mbox_dpc()
2308 if (mbox->cmd == MBOXCMD_EXTPTHRU) { in megaraid_mbox_dpc()
2310 memcpy(scp->sense_buffer, in megaraid_mbox_dpc()
2311 epthru->reqsensearea, 14); in megaraid_mbox_dpc()
2313 scp->result = DRIVER_SENSE << 24 | in megaraid_mbox_dpc()
2317 scp->sense_buffer[0] = 0x70; in megaraid_mbox_dpc()
2318 scp->sense_buffer[2] = ABORTED_COMMAND; in megaraid_mbox_dpc()
2319 scp->result = CHECK_CONDITION << 1; in megaraid_mbox_dpc()
2326 scp->result = DID_BUS_BUSY << 16 | status; in megaraid_mbox_dpc()
2335 if (scp->cmnd[0] == TEST_UNIT_READY) { in megaraid_mbox_dpc()
2336 scp->result = DID_ERROR << 16 | in megaraid_mbox_dpc()
2344 if (status == 1 && (scp->cmnd[0] == RESERVE || in megaraid_mbox_dpc()
2345 scp->cmnd[0] == RELEASE)) { in megaraid_mbox_dpc()
2347 scp->result = DID_ERROR << 16 | in megaraid_mbox_dpc()
2351 scp->result = DID_BAD_TARGET << 16 | status; in megaraid_mbox_dpc()
2363 list_del_init(&scb->list); in megaraid_mbox_dpc()
2369 scp->scsi_done(scp); in megaraid_mbox_dpc()
2377 * megaraid_abort_handler - abort the scsi command
2400 scp->cmnd[0], SCP2CHANNEL(scp), in megaraid_abort_handler()
2404 if (raid_dev->hw_error) { in megaraid_abort_handler()
2416 list_for_each_entry_safe(scb, tmp, &adapter->completed_list, list) { in megaraid_abort_handler()
2418 if (scb->scp == scp) { // Found command in megaraid_abort_handler()
2420 list_del_init(&scb->list); // from completed list in megaraid_abort_handler()
2424 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2426 scp->result = (DID_ABORT << 16); in megaraid_abort_handler()
2427 scp->scsi_done(scp); in megaraid_abort_handler()
2444 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) { in megaraid_abort_handler()
2446 if (scb->scp == scp) { // Found command in megaraid_abort_handler()
2448 list_del_init(&scb->list); // from pending list in megaraid_abort_handler()
2450 ASSERT(!(scb->state & SCB_ISSUED)); in megaraid_abort_handler()
2454 scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2456 scp->result = (DID_ABORT << 16); in megaraid_abort_handler()
2457 scp->scsi_done(scp); in megaraid_abort_handler()
2475 spin_lock_irq(&adapter->lock); in megaraid_abort_handler()
2477 scb = adapter->kscb_list + i; in megaraid_abort_handler()
2479 if (scb->scp == scp) { in megaraid_abort_handler()
2483 if (!(scb->state & SCB_ISSUED)) { in megaraid_abort_handler()
2486 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2492 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_abort_handler()
2496 spin_unlock_irq(&adapter->lock); in megaraid_abort_handler()
2512 * megaraid_reset_handler - device reset handler for mailbox based driver
2539 if (raid_dev->hw_error) { in megaraid_reset_handler()
2551 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) { in megaraid_reset_handler()
2552 list_del_init(&scb->list); // from pending list in megaraid_reset_handler()
2554 if (scb->sno >= MBOX_MAX_SCSI_CMDS) { in megaraid_reset_handler()
2557 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_reset_handler()
2559 scb->status = -1; in megaraid_reset_handler()
2561 kioc = (uioc_t *)scb->gp; in megaraid_reset_handler()
2562 kioc->status = -EFAULT; in megaraid_reset_handler()
2566 if (scb->scp == scp) { // Found command in megaraid_reset_handler()
2569 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_reset_handler()
2573 scb->sno, scb->dev_channel, scb->dev_target)); in megaraid_reset_handler()
2576 scb->scp->result = (DID_RESET << 16); in megaraid_reset_handler()
2577 scb->scp->scsi_done(scb->scp); in megaraid_reset_handler()
2584 if (adapter->outstanding_cmds) { in megaraid_reset_handler()
2587 adapter->outstanding_cmds, in megaraid_reset_handler()
2601 adapter->outstanding_cmds, in megaraid_reset_handler()
2602 (MBOX_RESET_WAIT + MBOX_RESET_EXT_WAIT) - i)); in megaraid_reset_handler()
2606 if (adapter->outstanding_cmds == 0) { in megaraid_reset_handler()
2613 spin_lock(&adapter->lock); in megaraid_reset_handler()
2616 if (adapter->outstanding_cmds) { in megaraid_reset_handler()
2620 raid_dev->hw_error = 1; in megaraid_reset_handler()
2632 if (!adapter->ha) { in megaraid_reset_handler()
2653 spin_unlock(&adapter->lock); in megaraid_reset_handler()
2665 * mbox_post_sync_cmd() - blocking command to the mailbox based controllers
2669 * Issue a scb in synchronous and non-interrupt mode for mailbox based
2680 mbox = raid_dev->mbox; in mbox_post_sync_cmd()
2692 mbox->cmdid = 0xFE; in mbox_post_sync_cmd()
2693 mbox->busy = 1; in mbox_post_sync_cmd()
2694 mbox->poll = 0; in mbox_post_sync_cmd()
2695 mbox->ack = 0; in mbox_post_sync_cmd()
2696 mbox->numstatus = 0xFF; in mbox_post_sync_cmd()
2697 mbox->status = 0xFF; in mbox_post_sync_cmd()
2700 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in mbox_post_sync_cmd()
2705 if (mbox->numstatus == 0xFF) { // status not yet available in mbox_post_sync_cmd()
2708 for (i = 0; mbox->numstatus == 0xFF && i < 1000; i++) { in mbox_post_sync_cmd()
2718 for (i = 0; (mbox->numstatus == 0xFF) && in mbox_post_sync_cmd()
2722 MBOX_RESET_WAIT - i)); in mbox_post_sync_cmd()
2731 return -1; in mbox_post_sync_cmd()
2738 if (mbox->poll != 0x77) { in mbox_post_sync_cmd()
2741 for (i = 0; (mbox->poll != 0x77) && (i < 1000); i++) { in mbox_post_sync_cmd()
2749 return -1; in mbox_post_sync_cmd()
2753 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x2); in mbox_post_sync_cmd()
2768 return -1; in mbox_post_sync_cmd()
2771 mbox->poll = 0; in mbox_post_sync_cmd()
2772 mbox->ack = 0x77; in mbox_post_sync_cmd()
2774 status = mbox->status; in mbox_post_sync_cmd()
2778 mbox->numstatus = 0xFF; in mbox_post_sync_cmd()
2779 mbox->status = 0xFF; in mbox_post_sync_cmd()
2781 mbox->completed[i] = 0xFF; in mbox_post_sync_cmd()
2789 return -1; in mbox_post_sync_cmd()
2794 * mbox_post_sync_cmd_fast - blocking command to the mailbox based controllers
2798 * Issue a scb in synchronous and non-interrupt mode for mailbox based
2800 * therefore can be called in interrupt-context as well.
2810 mbox = raid_dev->mbox; in mbox_post_sync_cmd_fast()
2813 if (mbox->busy) return -1; in mbox_post_sync_cmd_fast()
2817 mbox->cmdid = 0xFE; in mbox_post_sync_cmd_fast()
2818 mbox->busy = 1; in mbox_post_sync_cmd_fast()
2819 mbox->poll = 0; in mbox_post_sync_cmd_fast()
2820 mbox->ack = 0; in mbox_post_sync_cmd_fast()
2821 mbox->numstatus = 0xFF; in mbox_post_sync_cmd_fast()
2822 mbox->status = 0xFF; in mbox_post_sync_cmd_fast()
2825 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in mbox_post_sync_cmd_fast()
2828 if (mbox->numstatus != 0xFF) break; in mbox_post_sync_cmd_fast()
2834 // We may need to re-calibrate the counter in mbox_post_sync_cmd_fast()
2839 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x2); in mbox_post_sync_cmd_fast()
2842 return mbox->status; in mbox_post_sync_cmd_fast()
2847 * megaraid_busywait_mbox() - Wait until the controller's mailbox is available
2856 mbox_t *mbox = raid_dev->mbox; in megaraid_busywait_mbox()
2859 if (mbox->busy) { in megaraid_busywait_mbox()
2861 for (i = 0; mbox->busy && i < 1000; i++) in megaraid_busywait_mbox()
2866 else return -1; in megaraid_busywait_mbox()
2871 * megaraid_mbox_product_info - some static information about the controller
2896 pinfo = dma_alloc_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), in megaraid_mbox_product_info()
2903 return -1; in megaraid_mbox_product_info()
2906 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_product_info()
2907 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_product_info()
2918 dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), in megaraid_mbox_product_info()
2921 return -1; in megaraid_mbox_product_info()
2929 mraid_inq3 = (mraid_inquiry3_t *)adapter->ibuf; in megaraid_mbox_product_info()
2931 raid_dev->pdrv_state[i] = mraid_inq3->pdrv_state[i]; in megaraid_mbox_product_info()
2939 mbox->xferaddr = (uint32_t)pinfo_dma_h; in megaraid_mbox_product_info()
2949 dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), in megaraid_mbox_product_info()
2952 return -1; in megaraid_mbox_product_info()
2958 adapter->max_channel = pinfo->nchannels; in megaraid_mbox_product_info()
2964 adapter->max_target = MAX_LOGICAL_DRIVES_40LD + 1; in megaraid_mbox_product_info()
2965 adapter->max_lun = 8; // up to 8 LUNs for non-disk devices in megaraid_mbox_product_info()
2968 * These are the maximum outstanding commands for the scsi-layer in megaraid_mbox_product_info()
2970 adapter->max_cmds = MBOX_MAX_SCSI_CMDS; in megaraid_mbox_product_info()
2972 memset(adapter->fw_version, 0, VERSION_SIZE); in megaraid_mbox_product_info()
2973 memset(adapter->bios_version, 0, VERSION_SIZE); in megaraid_mbox_product_info()
2975 memcpy(adapter->fw_version, pinfo->fw_version, 4); in megaraid_mbox_product_info()
2976 adapter->fw_version[4] = 0; in megaraid_mbox_product_info()
2978 memcpy(adapter->bios_version, pinfo->bios_version, 4); in megaraid_mbox_product_info()
2979 adapter->bios_version[4] = 0; in megaraid_mbox_product_info()
2983 adapter->fw_version, adapter->bios_version)); in megaraid_mbox_product_info()
2985 dma_free_coherent(&adapter->pdev->dev, sizeof(mraid_pinfo_t), pinfo, in megaraid_mbox_product_info()
2994 * megaraid_mbox_extended_cdb - check for support for extended CDBs
3010 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_extended_cdb()
3012 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_extended_cdb()
3022 rval = -1; in megaraid_mbox_extended_cdb()
3030 * megaraid_mbox_support_ha - Do we support clustering
3048 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_support_ha()
3050 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_support_ha()
3056 rval = -1; in megaraid_mbox_support_ha()
3059 *init_id = *(uint8_t *)adapter->ibuf; in megaraid_mbox_support_ha()
3073 * megaraid_mbox_support_random_del - Do we support random deletion
3089 if (adapter->pdev->vendor == PCI_VENDOR_ID_AMI && in megaraid_mbox_support_random_del()
3090 adapter->pdev->device == PCI_DEVICE_ID_AMI_MEGARAID3 && in megaraid_mbox_support_random_del()
3091 adapter->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL && in megaraid_mbox_support_random_del()
3092 adapter->pdev->subsystem_device == PCI_SUBSYS_ID_CERC_ATA100_4CH && in megaraid_mbox_support_random_del()
3093 (adapter->fw_version[0] > '6' || in megaraid_mbox_support_random_del()
3094 (adapter->fw_version[0] == '6' && in megaraid_mbox_support_random_del()
3095 adapter->fw_version[2] > '6') || in megaraid_mbox_support_random_del()
3096 (adapter->fw_version[0] == '6' in megaraid_mbox_support_random_del()
3097 && adapter->fw_version[2] == '6' in megaraid_mbox_support_random_del()
3098 && adapter->fw_version[3] > '1'))) { in megaraid_mbox_support_random_del()
3122 * megaraid_mbox_get_max_sg - maximum sg elements supported by the firmware
3125 * Find out the maximum number of scatter-gather elements supported by the
3140 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_get_max_sg()
3142 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_get_max_sg()
3149 nsg = *(uint8_t *)adapter->ibuf; in megaraid_mbox_get_max_sg()
3162 * megaraid_mbox_enum_raid_scsi - enumerate the RAID and SCSI channels
3180 mbox->xferaddr = (uint32_t)adapter->ibuf_dma_h; in megaraid_mbox_enum_raid_scsi()
3182 memset((void *)adapter->ibuf, 0, MBOX_IBUF_SIZE); in megaraid_mbox_enum_raid_scsi()
3189 raid_dev->channel_class = 0xFF; in megaraid_mbox_enum_raid_scsi()
3191 raid_dev->channel_class = *(uint8_t *)adapter->ibuf; in megaraid_mbox_enum_raid_scsi()
3199 * megaraid_mbox_flush_cache - flush adapter and disks cache
3228 * megaraid_mbox_fire_sync_cmd - fire the sync cmd
3249 mbox = raid_dev->mbox; in megaraid_mbox_fire_sync_cmd()
3259 mbox->cmdid = 0xFE; in megaraid_mbox_fire_sync_cmd()
3260 mbox->busy = 1; in megaraid_mbox_fire_sync_cmd()
3261 mbox->poll = 0; in megaraid_mbox_fire_sync_cmd()
3262 mbox->ack = 0; in megaraid_mbox_fire_sync_cmd()
3263 mbox->numstatus = 0; in megaraid_mbox_fire_sync_cmd()
3264 mbox->status = 0; in megaraid_mbox_fire_sync_cmd()
3267 WRINDOOR(raid_dev, raid_dev->mbox_dma | 0x1); in megaraid_mbox_fire_sync_cmd()
3271 * mbox->cmd will be set to 0 in megaraid_mbox_fire_sync_cmd()
3274 * mbox->numstatus set to 1 in megaraid_mbox_fire_sync_cmd()
3279 while (!mbox->numstatus && mbox->cmd == 0xFF) { in megaraid_mbox_fire_sync_cmd()
3288 if (mbox->numstatus == 1) in megaraid_mbox_fire_sync_cmd()
3304 * megaraid_mbox_display_scb - display SCB information, mostly debug purposes
3321 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_display_scb()
3322 scp = scb->scp; in megaraid_mbox_display_scb()
3323 mbox = ccb->mbox; in megaraid_mbox_display_scb()
3328 "megaraid mailbox: status:%#x cmd:%#x id:%#x ", scb->status, in megaraid_mbox_display_scb()
3329 mbox->cmd, scb->sno)); in megaraid_mbox_display_scb()
3332 mbox->numsectors, mbox->lba, mbox->xferaddr, mbox->logdrv, in megaraid_mbox_display_scb()
3333 mbox->numsge)); in megaraid_mbox_display_scb()
3339 for (i = 0; i < scp->cmd_len; i++) { in megaraid_mbox_display_scb()
3340 con_log(level, ("%#2.02x ", scp->cmnd[i])); in megaraid_mbox_display_scb()
3350 * megaraid_mbox_setup_device_map - manage device ids
3368 adapter->device_ids[adapter->max_channel][t] = in megaraid_mbox_setup_device_map()
3369 (t < adapter->init_id) ? t : t - 1; in megaraid_mbox_setup_device_map()
3371 adapter->device_ids[adapter->max_channel][adapter->init_id] = 0xFF; in megaraid_mbox_setup_device_map()
3376 for (c = 0; c < adapter->max_channel; c++) in megaraid_mbox_setup_device_map()
3378 adapter->device_ids[c][t] = (c << 8) | t; in megaraid_mbox_setup_device_map()
3394 * megaraid_cmm_register - register with the management module
3412 adapter->uscb_list = kcalloc(MBOX_MAX_USER_CMDS, sizeof(scb_t), GFP_KERNEL); in megaraid_cmm_register()
3414 if (adapter->uscb_list == NULL) { in megaraid_cmm_register()
3418 return -1; in megaraid_cmm_register()
3424 INIT_LIST_HEAD(&adapter->uscb_pool); in megaraid_cmm_register()
3436 scb = adapter->uscb_list + i; in megaraid_cmm_register()
3437 ccb = raid_dev->uccb_list + i; in megaraid_cmm_register()
3439 scb->ccb = (caddr_t)ccb; in megaraid_cmm_register()
3440 ccb->mbox64 = raid_dev->umbox64 + i; in megaraid_cmm_register()
3441 ccb->mbox = &ccb->mbox64->mbox32; in megaraid_cmm_register()
3442 ccb->raw_mbox = (uint8_t *)ccb->mbox; in megaraid_cmm_register()
3444 scb->gp = 0; in megaraid_cmm_register()
3446 // COMMAND ID 0 - (MBOX_MAX_SCSI_CMDS-1) ARE RESERVED FOR in megaraid_cmm_register()
3447 // COMMANDS COMING FROM IO SUBSYSTEM (MID-LAYER) in megaraid_cmm_register()
3448 scb->sno = i + MBOX_MAX_SCSI_CMDS; in megaraid_cmm_register()
3450 scb->scp = NULL; in megaraid_cmm_register()
3451 scb->state = SCB_FREE; in megaraid_cmm_register()
3452 scb->dma_direction = DMA_NONE; in megaraid_cmm_register()
3453 scb->dma_type = MRAID_DMA_NONE; in megaraid_cmm_register()
3454 scb->dev_channel = -1; in megaraid_cmm_register()
3455 scb->dev_target = -1; in megaraid_cmm_register()
3458 list_add_tail(&scb->list, &adapter->uscb_pool); in megaraid_cmm_register()
3461 adp.unique_id = adapter->unique_id; in megaraid_cmm_register()
3464 adp.pdev = adapter->pdev; in megaraid_cmm_register()
3474 kfree(adapter->uscb_list); in megaraid_cmm_register()
3482 * megaraid_cmm_unregister - un-register with the management module
3485 * Un-register with the management module.
3492 kfree(adapter->uscb_list); in megaraid_cmm_unregister()
3493 mraid_mm_unregister_adp(adapter->unique_id); in megaraid_cmm_unregister()
3499 * megaraid_mbox_mm_handler - interface for CMM to issue commands to LLD
3517 return (-ENOTSUPP); in megaraid_mbox_mm_handler()
3523 if (atomic_read(&adapter->being_detached)) { in megaraid_mbox_mm_handler()
3526 return (-ENODEV); in megaraid_mbox_mm_handler()
3529 switch (kioc->opcode) { in megaraid_mbox_mm_handler()
3533 kioc->status = gather_hbainfo(adapter, (mraid_hba_info_t *) in megaraid_mbox_mm_handler()
3534 (unsigned long)kioc->buf_vaddr); in megaraid_mbox_mm_handler()
3536 kioc->done(kioc); in megaraid_mbox_mm_handler()
3538 return kioc->status; in megaraid_mbox_mm_handler()
3545 kioc->status = (-EINVAL); in megaraid_mbox_mm_handler()
3546 kioc->done(kioc); in megaraid_mbox_mm_handler()
3547 return (-EINVAL); in megaraid_mbox_mm_handler()
3554 * megaraid_mbox_mm_command - issues commands routed through CMM
3563 struct list_head *head = &adapter->uscb_pool; in megaraid_mbox_mm_command()
3580 return (-EINVAL); in megaraid_mbox_mm_command()
3583 scb = list_entry(head->next, scb_t, list); in megaraid_mbox_mm_command()
3584 list_del_init(&scb->list); in megaraid_mbox_mm_command()
3588 scb->state = SCB_ACTIVE; in megaraid_mbox_mm_command()
3589 scb->dma_type = MRAID_DMA_NONE; in megaraid_mbox_mm_command()
3590 scb->dma_direction = DMA_NONE; in megaraid_mbox_mm_command()
3592 ccb = (mbox_ccb_t *)scb->ccb; in megaraid_mbox_mm_command()
3593 mbox64 = (mbox64_t *)(unsigned long)kioc->cmdbuf; in megaraid_mbox_mm_command()
3594 raw_mbox = (uint8_t *)&mbox64->mbox32; in megaraid_mbox_mm_command()
3596 memcpy(ccb->mbox64, mbox64, sizeof(mbox64_t)); in megaraid_mbox_mm_command()
3598 scb->gp = (unsigned long)kioc; in megaraid_mbox_mm_command()
3610 kioc->status = -ETIME; in megaraid_mbox_mm_command()
3612 scb->status = -1; in megaraid_mbox_mm_command()
3616 return (-ETIME); in megaraid_mbox_mm_command()
3619 INIT_LIST_HEAD(&scb->list); in megaraid_mbox_mm_command()
3621 scb->state = SCB_ISSUED; in megaraid_mbox_mm_command()
3627 kioc->status = -EBUSY; in megaraid_mbox_mm_command()
3629 scb->status = -1; in megaraid_mbox_mm_command()
3633 return (-EBUSY); in megaraid_mbox_mm_command()
3656 spin_lock_irqsave(&adapter->lock, flags); in wait_till_fw_empty()
3657 adapter->quiescent++; in wait_till_fw_empty()
3658 spin_unlock_irqrestore(&adapter->lock, flags); in wait_till_fw_empty()
3664 for (i = 0; i < 60 && adapter->outstanding_cmds; i++) { in wait_till_fw_empty()
3667 adapter->outstanding_cmds)); in wait_till_fw_empty()
3672 return adapter->outstanding_cmds; in wait_till_fw_empty()
3677 * megaraid_mbox_mm_done - callback for CMM commands
3692 kioc = (uioc_t *)scb->gp; in megaraid_mbox_mm_done()
3693 mbox64 = (mbox64_t *)(unsigned long)kioc->cmdbuf; in megaraid_mbox_mm_done()
3694 mbox64->mbox32.status = scb->status; in megaraid_mbox_mm_done()
3695 raw_mbox = (uint8_t *)&mbox64->mbox32; in megaraid_mbox_mm_done()
3699 scb->state = SCB_FREE; in megaraid_mbox_mm_done()
3700 scb->scp = NULL; in megaraid_mbox_mm_done()
3704 list_add(&scb->list, &adapter->uscb_pool); in megaraid_mbox_mm_done()
3712 adapter->quiescent--; in megaraid_mbox_mm_done()
3717 kioc->done(kioc); in megaraid_mbox_mm_done()
3724 * gather_hbainfo - HBA characteristics for the applications
3731 hinfo->pci_vendor_id = adapter->pdev->vendor; in gather_hbainfo()
3732 hinfo->pci_device_id = adapter->pdev->device; in gather_hbainfo()
3733 hinfo->subsys_vendor_id = adapter->pdev->subsystem_vendor; in gather_hbainfo()
3734 hinfo->subsys_device_id = adapter->pdev->subsystem_device; in gather_hbainfo()
3736 hinfo->pci_bus = adapter->pdev->bus->number; in gather_hbainfo()
3737 hinfo->pci_dev_fn = adapter->pdev->devfn; in gather_hbainfo()
3738 hinfo->pci_slot = PCI_SLOT(adapter->pdev->devfn); in gather_hbainfo()
3739 hinfo->irq = adapter->host->irq; in gather_hbainfo()
3740 hinfo->baseport = ADAP2RAIDDEV(adapter)->baseport; in gather_hbainfo()
3742 hinfo->unique_id = (hinfo->pci_bus << 8) | adapter->pdev->devfn; in gather_hbainfo()
3743 hinfo->host_no = adapter->host->host_no; in gather_hbainfo()
3755 * megaraid_sysfs_alloc_resources - allocate sysfs related resources
3759 * are read. These attributes would require up-to-date information from the
3764 * Return -ERROR_CODE on failure.
3772 raid_dev->sysfs_uioc = kmalloc(sizeof(uioc_t), GFP_KERNEL); in megaraid_sysfs_alloc_resources()
3774 raid_dev->sysfs_mbox64 = kmalloc(sizeof(mbox64_t), GFP_KERNEL); in megaraid_sysfs_alloc_resources()
3776 raid_dev->sysfs_buffer = dma_alloc_coherent(&adapter->pdev->dev, in megaraid_sysfs_alloc_resources()
3777 PAGE_SIZE, &raid_dev->sysfs_buffer_dma, GFP_KERNEL); in megaraid_sysfs_alloc_resources()
3779 if (!raid_dev->sysfs_uioc || !raid_dev->sysfs_mbox64 || in megaraid_sysfs_alloc_resources()
3780 !raid_dev->sysfs_buffer) { in megaraid_sysfs_alloc_resources()
3786 rval = -ENOMEM; in megaraid_sysfs_alloc_resources()
3791 mutex_init(&raid_dev->sysfs_mtx); in megaraid_sysfs_alloc_resources()
3793 init_waitqueue_head(&raid_dev->sysfs_wait_q); in megaraid_sysfs_alloc_resources()
3800 * megaraid_sysfs_free_resources - free sysfs related resources
3810 kfree(raid_dev->sysfs_uioc); in megaraid_sysfs_free_resources()
3811 kfree(raid_dev->sysfs_mbox64); in megaraid_sysfs_free_resources()
3813 if (raid_dev->sysfs_buffer) { in megaraid_sysfs_free_resources()
3814 dma_free_coherent(&adapter->pdev->dev, PAGE_SIZE, in megaraid_sysfs_free_resources()
3815 raid_dev->sysfs_buffer, raid_dev->sysfs_buffer_dma); in megaraid_sysfs_free_resources()
3821 * megaraid_sysfs_get_ldmap_done - callback for get ldmap
3829 adapter_t *adapter = (adapter_t *)uioc->buf_vaddr; in megaraid_sysfs_get_ldmap_done()
3832 uioc->status = 0; in megaraid_sysfs_get_ldmap_done()
3834 wake_up(&raid_dev->sysfs_wait_q); in megaraid_sysfs_get_ldmap_done()
3838 * megaraid_sysfs_get_ldmap_timeout - timeout handling for get ldmap
3849 uioc_t *uioc = timeout->uioc; in megaraid_sysfs_get_ldmap_timeout()
3850 adapter_t *adapter = (adapter_t *)uioc->buf_vaddr; in megaraid_sysfs_get_ldmap_timeout()
3853 uioc->status = -ETIME; in megaraid_sysfs_get_ldmap_timeout()
3855 wake_up(&raid_dev->sysfs_wait_q); in megaraid_sysfs_get_ldmap_timeout()
3860 * megaraid_sysfs_get_ldmap - get update logical drive map
3874 * Return -1 on failure.
3891 mutex_lock(&raid_dev->sysfs_mtx); in megaraid_sysfs_get_ldmap()
3893 uioc = raid_dev->sysfs_uioc; in megaraid_sysfs_get_ldmap()
3894 mbox64 = raid_dev->sysfs_mbox64; in megaraid_sysfs_get_ldmap()
3895 ldmap = raid_dev->sysfs_buffer; in megaraid_sysfs_get_ldmap()
3899 memset(ldmap, 0, sizeof(raid_dev->curr_ldmap)); in megaraid_sysfs_get_ldmap()
3901 mbox = &mbox64->mbox32; in megaraid_sysfs_get_ldmap()
3903 uioc->cmdbuf = (uint64_t)(unsigned long)mbox64; in megaraid_sysfs_get_ldmap()
3904 uioc->buf_vaddr = (caddr_t)adapter; in megaraid_sysfs_get_ldmap()
3905 uioc->status = -ENODATA; in megaraid_sysfs_get_ldmap()
3906 uioc->done = megaraid_sysfs_get_ldmap_done; in megaraid_sysfs_get_ldmap()
3912 mbox->xferaddr = (uint32_t)raid_dev->sysfs_buffer_dma; in megaraid_sysfs_get_ldmap()
3918 * Setup a timer to recover from a non-responding controller in megaraid_sysfs_get_ldmap()
3933 wait_event(raid_dev->sysfs_wait_q, (uioc->status != -ENODATA)); in megaraid_sysfs_get_ldmap()
3938 if (uioc->status == -ETIME) { in megaraid_sysfs_get_ldmap()
3942 rval = -ETIME; in megaraid_sysfs_get_ldmap()
3945 rval = mbox->status; in megaraid_sysfs_get_ldmap()
3949 memcpy(raid_dev->curr_ldmap, ldmap, in megaraid_sysfs_get_ldmap()
3950 sizeof(raid_dev->curr_ldmap)); in megaraid_sysfs_get_ldmap()
3966 mutex_unlock(&raid_dev->sysfs_mtx); in megaraid_sysfs_get_ldmap()
3973 * megaraid_sysfs_show_app_hndl - display application handle for this adapter
3990 app_hndl = mraid_mm_adapter_app_handle(adapter->unique_id); in megaraid_sysfs_show_app_hndl()
3997 * megaraid_sysfs_show_ldnum - display the logical drive number for this device
4003 * logical drive. For physical devices, "-1" is returned.
4015 adapter_t *adapter = (adapter_t *)SCSIHOST2ADAP(sdev->host); in megaraid_sysfs_show_ldnum()
4017 int scsi_id = -1; in megaraid_sysfs_show_ldnum()
4018 int logical_drv = -1; in megaraid_sysfs_show_ldnum()
4019 int ldid_map = -1; in megaraid_sysfs_show_ldnum()
4025 if (raid_dev->random_del_supported && in megaraid_sysfs_show_ldnum()
4033 mapped_sdev_id = sdev->id; in megaraid_sysfs_show_ldnum()
4035 if (sdev->id > adapter->init_id) { in megaraid_sysfs_show_ldnum()
4036 mapped_sdev_id -= 1; in megaraid_sysfs_show_ldnum()
4039 if (raid_dev->curr_ldmap[i] == mapped_sdev_id) { in megaraid_sysfs_show_ldnum()
4041 scsi_id = sdev->id; in megaraid_sysfs_show_ldnum()
4045 ldid_map = raid_dev->curr_ldmap[i]; in megaraid_sysfs_show_ldnum()
4048 adapter->unique_id); in megaraid_sysfs_show_ldnum()