Lines Matching defs:pAdapter
111 static void hpt_intr_locked(IAL_ADAPTER_T *pAdapter);
112 static void hptmv_free_edma_queues(IAL_ADAPTER_T *pAdapter);
113 static void hptmv_free_channel(IAL_ADAPTER_T *pAdapter, MV_U8 channelNum);
115 static int hptmv_init_channel(IAL_ADAPTER_T *pAdapter, MV_U8 channelNum);
117 static void fRegisterVdevice(IAL_ADAPTER_T *pAdapter);
118 static int hptmv_allocate_edma_queues(IAL_ADAPTER_T *pAdapter);
121 static int start_channel(IAL_ADAPTER_T *pAdapter, MV_U8 channelNum);
122 static void init_vdev_params(IAL_ADAPTER_T *pAdapter, MV_U8 channel);
143 IAL_ADAPTER_T *pAdapter;
170 hptmv_free_channel(IAL_ADAPTER_T *pAdapter, MV_U8 channelNum)
173 pAdapter->mvSataAdapter.sataChannel[channelNum] = NULL;
179 IAL_ADAPTER_T *pAdapter = (IAL_ADAPTER_T *)_vbus_p->OsExt;
189 if (pAdapter->ver_601==2 && !pAdapter->beeping) {
190 pAdapter->beeping = 1;
191 BeepOn(pAdapter->mvSataAdapter.adapterIoBaseAddress);
192 set_fail_led(&pAdapter->mvSataAdapter, pVDev->u.disk.mv->channelNumber, 1);
238 * pAdapter - pointer to the emulated adapter data structure
243 hptmv_init_channel(IAL_ADAPTER_T *pAdapter, MV_U8 channelNum)
252 pAdapter->mvSataAdapter.adapterId, channelNum);
256 pMvSataChannel = &gMvSataChannels[pAdapter->mvSataAdapter.adapterId][channelNum];
257 pAdapter->mvSataAdapter.sataChannel[channelNum] = pMvSataChannel;
263 (pAdapter->requestsArrayBaseAlignedAddr + (channelNum * MV_EDMA_REQUEST_QUEUE_SIZE));
264 req_dma_addr = pAdapter->requestsArrayBaseDmaAlignedAddr + (channelNum * MV_EDMA_REQUEST_QUEUE_SIZE);
273 " dma_addr=%llx channel=%d\n", pAdapter->mvSataAdapter.adapterId,
280 pAdapter->mvSataAdapter.adapterId, channelNum,
283 (pAdapter->responsesArrayBaseAlignedAddr + (channelNum * MV_EDMA_RESPONSE_QUEUE_SIZE));
284 rsp_dma_addr = pAdapter->responsesArrayBaseDmaAlignedAddr + (channelNum * MV_EDMA_RESPONSE_QUEUE_SIZE);
291 pAdapter->mvSataAdapter.adapterId, channelNum, (HPT_U64)(ULONG_PTR)rsp_dma_addr);
297 pAdapter->mvSataAdapter.adapterId, channelNum,
300 pAdapter->mvChannel[channelNum].online = MV_TRUE;
372 init_vdev_params(IAL_ADAPTER_T *pAdapter, MV_U8 channel)
374 PVDevice pVDev = &pAdapter->VDevices[channel];
375 MV_SATA_CHANNEL *pMvSataChannel = pAdapter->mvSataAdapter.sataChannel[channel];
382 pVDev->u.disk.pVBus = &pAdapter->VBus;
383 pVDev->pVBus = &pAdapter->VBus;
400 pAdapter->mvChannel[channel].maxPioModeSupported - MV_ATA_TRANSFER_PIO_0;
402 if (pAdapter->mvChannel[channel].maxUltraDmaModeSupported!=0xFF) {
404 pAdapter->mvChannel[channel].maxUltraDmaModeSupported - MV_ATA_TRANSFER_UDMA_0 + 8;
408 static void device_change(IAL_ADAPTER_T *pAdapter , MV_U8 channelIndex, int plugged)
411 MV_SATA_ADAPTER *pMvSataAdapter = &pAdapter->mvSataAdapter;
418 pVDev = &(pAdapter->VDevices[channelIndex]);
419 init_vdev_params(pAdapter, channelIndex);
444 if (pAdapter->beeping) {
445 pAdapter->beeping = 0;
446 BeepOff(pAdapter->mvSataAdapter.adapterIoBaseAddress);
453 pVDev = &(pAdapter->VDevices[channelIndex]);
459 start_channel(IAL_ADAPTER_T *pAdapter, MV_U8 channelNum)
461 MV_SATA_ADAPTER *pMvSataAdapter = &pAdapter->mvSataAdapter;
463 MV_CHANNEL *pChannelInfo = &(pAdapter->mvChannel[channelNum]);
593 pAdapter->mvChannel[channelNum].maxPioModeSupported = pioMode;
745 IAL_ADAPTER_T *pAdapter = (IAL_ADAPTER_T *)data;
746 MV_SATA_ADAPTER *pMvSataAdapter = &pAdapter->mvSataAdapter;
749 mtx_assert(&pAdapter->lock, MA_OWNED);
753 switch(pAdapter->sataEvents[channelIndex])
761 hptmv_init_channel(pAdapter, channelIndex);
766 hptmv_free_channel(pAdapter, channelIndex);
771 if (start_channel( pAdapter, channelIndex))
775 hptmv_free_channel(pAdapter, channelIndex);
779 device_change(pAdapter, channelIndex, TRUE);
782 pAdapter->sataEvents[channelIndex] = SATA_EVENT_NO_CHANGE;
794 _VBUS_INST(&pAdapter->VBus)
799 hptmv_free_channel(pAdapter, channelIndex);
803 if (pAdapter->outstandingCommands==0 && DPC_Request_Nums==0)
804 Check_Idle_Call(pAdapter);
811 pAdapter->sataEvents[channelIndex] = SATA_EVENT_NO_CHANGE;
843 IAL_ADAPTER_T *pAdapter = pMvSataAdapter->IALData;
853 pAdapter->sataEvents[channel] = SATA_EVENT_CHANNEL_CONNECTED;
857 callout_reset(&pAdapter->event_timer_connect, 10 * hz, hptmv_handle_event_connect, pAdapter);
861 pAdapter->sataEvents[channel] = SATA_EVENT_CHANNEL_DISCONNECTED;
864 device_change(pAdapter, channel, FALSE);
866 /*callout_reset(&pAdapter->event_timer_disconnect, 10 * hz, hptmv_handle_event_disconnect, pAdapter); */
868 hptmv_handle_event_disconnect(pAdapter);
893 hptmv_allocate_edma_queues(IAL_ADAPTER_T *pAdapter)
895 pAdapter->requestsArrayBaseAddr = (MV_U8 *)contigmalloc(REQUESTS_ARRAY_SIZE,
897 if (pAdapter->requestsArrayBaseAddr == NULL)
900 " queues\n", pAdapter->mvSataAdapter.adapterId);
903 pAdapter->requestsArrayBaseDmaAddr = fOsPhysicalAddress(pAdapter->requestsArrayBaseAddr);
904 pAdapter->requestsArrayBaseAlignedAddr = pAdapter->requestsArrayBaseAddr;
905 pAdapter->requestsArrayBaseAlignedAddr += MV_EDMA_REQUEST_QUEUE_SIZE;
906 pAdapter->requestsArrayBaseAlignedAddr = (MV_U8 *)
907 (((ULONG_PTR)pAdapter->requestsArrayBaseAlignedAddr) & ~(ULONG_PTR)(MV_EDMA_REQUEST_QUEUE_SIZE - 1));
908 pAdapter->requestsArrayBaseDmaAlignedAddr = pAdapter->requestsArrayBaseDmaAddr;
909 pAdapter->requestsArrayBaseDmaAlignedAddr += MV_EDMA_REQUEST_QUEUE_SIZE;
910 pAdapter->requestsArrayBaseDmaAlignedAddr &= ~(ULONG_PTR)(MV_EDMA_REQUEST_QUEUE_SIZE - 1);
912 if ((pAdapter->requestsArrayBaseDmaAlignedAddr - pAdapter->requestsArrayBaseDmaAddr) !=
913 (pAdapter->requestsArrayBaseAlignedAddr - pAdapter->requestsArrayBaseAddr))
916 pAdapter->mvSataAdapter.adapterId);
917 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF);
921 pAdapter->responsesArrayBaseAddr = (MV_U8 *)contigmalloc(RESPONSES_ARRAY_SIZE,
923 if (pAdapter->responsesArrayBaseAddr == NULL)
926 " queues\n", pAdapter->mvSataAdapter.adapterId);
927 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF);
930 pAdapter->responsesArrayBaseDmaAddr = fOsPhysicalAddress(pAdapter->responsesArrayBaseAddr);
931 pAdapter->responsesArrayBaseAlignedAddr = pAdapter->responsesArrayBaseAddr;
932 pAdapter->responsesArrayBaseAlignedAddr += MV_EDMA_RESPONSE_QUEUE_SIZE;
933 pAdapter->responsesArrayBaseAlignedAddr = (MV_U8 *)
934 (((ULONG_PTR)pAdapter->responsesArrayBaseAlignedAddr) & ~(ULONG_PTR)(MV_EDMA_RESPONSE_QUEUE_SIZE - 1));
935 pAdapter->responsesArrayBaseDmaAlignedAddr = pAdapter->responsesArrayBaseDmaAddr;
936 pAdapter->responsesArrayBaseDmaAlignedAddr += MV_EDMA_RESPONSE_QUEUE_SIZE;
937 pAdapter->responsesArrayBaseDmaAlignedAddr &= ~(ULONG_PTR)(MV_EDMA_RESPONSE_QUEUE_SIZE - 1);
939 if ((pAdapter->responsesArrayBaseDmaAlignedAddr - pAdapter->responsesArrayBaseDmaAddr) !=
940 (pAdapter->responsesArrayBaseAlignedAddr - pAdapter->responsesArrayBaseAddr))
943 pAdapter->mvSataAdapter.adapterId);
944 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF);
945 free(pAdapter->responsesArrayBaseAddr, M_DEVBUF);
952 hptmv_free_edma_queues(IAL_ADAPTER_T *pAdapter)
954 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF);
955 free(pAdapter->responsesArrayBaseAddr, M_DEVBUF);
959 AllocatePRDTable(IAL_ADAPTER_T *pAdapter)
962 if (pAdapter->pFreePRDLink) {
963 KdPrint(("pAdapter->pFreePRDLink:%p\n",pAdapter->pFreePRDLink));
964 ret = pAdapter->pFreePRDLink;
965 pAdapter->pFreePRDLink = *(void**)ret;
972 FreePRDTable(IAL_ADAPTER_T *pAdapter, PVOID PRDTable)
974 *(void**)PRDTable = pAdapter->pFreePRDLink;
975 pAdapter->pFreePRDLink = PRDTable;
981 fRegisterVdevice(IAL_ADAPTER_T *pAdapter)
988 pPhysical = &(pAdapter->VDevices[i]);
998 pVBus = &pAdapter->VBus;
1024 IAL_ADAPTER_T *pAdapter = (IAL_ADAPTER_T *)pArray->pVBus->OsExt;
1032 pVDevice = &pAdapter->VDevices[i];
1096 IAL_ADAPTER_T *pAdapter = pSataAdapter->IALData;
1097 MV_CHANNEL *channelInfo = &(pAdapter->mvChannel[channelIndex]);
1139 IAL_ADAPTER_T *pAdapter = pSataAdapter->IALData;
1140 MV_CHANNEL *channelInfo = &(pAdapter->mvChannel[channelIndex]);
1178 IAL_ADAPTER_T *pAdapter = pSataAdapter->IALData;
1179 MV_CHANNEL *channelInfo = &(pAdapter->mvChannel[channelIndex]);
1230 dmamap_get(struct IALAdapter * pAdapter)
1232 PBUS_DMAMAP p = pAdapter->pbus_dmamap_list;
1234 pAdapter->pbus_dmamap_list = p-> next;
1241 p->next = p->pAdapter->pbus_dmamap_list;
1242 p->pAdapter->pbus_dmamap_list = p;
1247 init_adapter(IAL_ADAPTER_T *pAdapter)
1249 PVBus _vbus_p = &pAdapter->VBus;
1255 mtx_init(&pAdapter->lock, "hptsleeplock", NULL, MTX_DEF);
1256 callout_init_mtx(&pAdapter->event_timer_connect, &pAdapter->lock, 0);
1257 callout_init_mtx(&pAdapter->event_timer_disconnect, &pAdapter->lock, 0);
1260 pAdapter->next = 0;
1263 gIal_Adapter = pAdapter;
1267 pCurAdapter->next = pAdapter;
1268 pCurAdapter = pAdapter;
1272 pAdapter->outstandingCommands = 0;
1274 pMvSataAdapter = &(pAdapter->mvSataAdapter);
1275 _vbus_p->OsExt = (void *)pAdapter;
1276 pMvSataAdapter->IALData = pAdapter;
1278 if (bus_dma_tag_create(bus_get_dma_tag(pAdapter->hpt_dev),/* parent */
1289 &pAdapter->lock, /* lockfuncarg */
1290 &pAdapter->io_dma_parent /* tag */))
1296 if (hptmv_allocate_edma_queues(pAdapter))
1304 if (!(pAdapter->mem_res = bus_alloc_resource_any(pAdapter->hpt_dev,
1307 !(pMvSataAdapter->adapterIoBaseAddress = rman_get_virtual(pAdapter->mem_res)))
1310 hptmv_free_edma_queues(pAdapter);
1320 pMvSataAdapter->pciConfigRevisionId = pci_read_config(pAdapter->hpt_dev, PCIR_REVID, 1);
1321 pMvSataAdapter->pciConfigDeviceId = pci_get_device(pAdapter->hpt_dev);
1338 bus_release_resource(pAdapter->hpt_dev, SYS_RES_MEMORY, rid, pAdapter->mem_res);
1339 hptmv_free_edma_queues(pAdapter);
1342 pAdapter->ver_601 = pMvSataAdapter->pcbVersion;
1351 pAdapter->pCommandBlocks =
1353 KdPrint(("pCommandBlocks:%p\n",pAdapter->pCommandBlocks));
1354 if (!pAdapter->pCommandBlocks) {
1360 FreeCommand(_VBUS_P &(pAdapter->pCommandBlocks[i]));
1364 pAdapter->pbus_dmamap = (PBUS_DMAMAP)malloc (sizeof(struct _BUS_DMAMAP) * MAX_QUEUE_COMM, M_DEVBUF, M_NOWAIT);
1365 if(!pAdapter->pbus_dmamap) {
1367 free(pAdapter->pCommandBlocks, M_DEVBUF);
1371 memset((void *)pAdapter->pbus_dmamap, 0, sizeof(struct _BUS_DMAMAP) * MAX_QUEUE_COMM);
1372 pAdapter->pbus_dmamap_list = 0;
1374 PBUS_DMAMAP pmap = &(pAdapter->pbus_dmamap[i]);
1375 pmap->pAdapter = pAdapter;
1378 if(bus_dmamap_create(pAdapter->io_dma_parent, 0, &pmap->dma_map)) {
1380 free(pAdapter->pCommandBlocks, M_DEVBUF);
1381 free(pAdapter->pbus_dmamap, M_DEVBUF);
1384 callout_init_mtx(&pmap->timeout, &pAdapter->lock, 0);
1388 pAdapter->pFreePRDLink = 0;
1390 pAdapter->prdTableAddr = (PUCHAR)contigmalloc(
1393 KdPrint(("prdTableAddr:%p\n",pAdapter->prdTableAddr));
1394 if (!pAdapter->prdTableAddr) {
1398 pAdapter->prdTableAlignedAddr = (PUCHAR)(((ULONG_PTR)pAdapter->prdTableAddr + 0x1f) & ~(ULONG_PTR)0x1fL);
1400 PUCHAR PRDTable = pAdapter->prdTableAlignedAddr;
1403 /* KdPrint(("i=%d,pAdapter->pFreePRDLink=%p\n",i,pAdapter->pFreePRDLink)); */
1404 FreePRDTable(pAdapter, PRDTable);
1414 pAdapter->mvChannel[channel].online = MV_FALSE;
1421 if (hptmv_init_channel(pAdapter, channel) == 0)
1427 hptmv_free_channel(pAdapter, channel);
1431 if (start_channel(pAdapter, channel))
1436 hptmv_free_channel(pAdapter, channel);
1438 pAdapter->mvChannel[channel].online = MV_TRUE;
1445 KdPrint(("pAdapter->mvChannel[channel].online:%x, channel:%d\n",
1446 pAdapter->mvChannel[channel].online, channel));
1460 init_vdev_params(pAdapter, channel);
1461 IdeRegisterVDevice(&pAdapter->VDevices[channel].u.disk);
1468 fRegisterVdevice(pAdapter);
1489 IAL_ADAPTER_T *pAdapter = (IAL_ADAPTER_T *)pMvSataAdapter->IALData;
1500 hptmv_free_channel(pAdapter, channel);
1509 hptmv_free_channel(pAdapter, channel);
1517 hptmv_free_channel(pAdapter, channel);
1545 pAdapter->mvChannel[channel].maxPioModeSupported, 0, 0, 0) == MV_FALSE) ||
1548 pAdapter->mvChannel[channel].maxUltraDmaModeSupported, 0, 0, 0) == MV_FALSE) )
1551 hptmv_free_channel(pAdapter, channel);
1558 hptmv_free_channel(pAdapter, channel);
1975 IAL_ADAPTER_T * pAdapter = device_get_softc(dev);
1983 pAdapter->hpt_dev = dev;
1985 rid = init_adapter(pAdapter);
1990 if ((pAdapter->hpt_irq = bus_alloc_resource_any(pAdapter->hpt_dev, SYS_RES_IRQ, &rid, RF_SHAREABLE | RF_ACTIVE)) == NULL)
1996 if (bus_setup_intr(pAdapter->hpt_dev, pAdapter->hpt_irq,
1998 NULL, hpt_intr, pAdapter, &pAdapter->hpt_intr))
2001 free(pAdapter, M_DEVBUF);
2023 pAdapter, device_get_unit(pAdapter->hpt_dev),
2024 &pAdapter->lock, 1, 8, devq);
2030 mtx_lock(&pAdapter->lock);
2034 mtx_unlock(&pAdapter->lock);
2039 if(xpt_create_path(&pAdapter->path, /*periph */ NULL,
2045 mtx_unlock(&pAdapter->lock);
2049 mtx_unlock(&pAdapter->lock);
2051 xpt_setup_ccb(&(ccb->ccb_h), pAdapter->path, /*priority*/5);
2093 IAL_ADAPTER_T *pAdapter;
2095 pAdapter = arg;
2096 mtx_lock(&pAdapter->lock);
2097 hpt_intr_locked(pAdapter);
2098 mtx_unlock(&pAdapter->lock);
2102 hpt_intr_locked(IAL_ADAPTER_T *pAdapter)
2105 mtx_assert(&pAdapter->lock, MA_OWNED);
2107 if (mvSataInterruptServiceRoutine(&pAdapter->mvSataAdapter) == MV_TRUE)
2109 _VBUS_INST(&pAdapter->VBus)
2137 FlushAdapter(IAL_ADAPTER_T *pAdapter)
2145 PVDevice pVDev = pAdapter->VBus.pVDevice[i];
2153 IAL_ADAPTER_T *pAdapter;
2155 pAdapter = device_get_softc(dev);
2157 mtx_lock(&pAdapter->lock);
2158 FlushAdapter(pAdapter);
2159 mtx_unlock(&pAdapter->lock);
2167 Check_Idle_Call(IAL_ADAPTER_T *pAdapter)
2169 _VBUS_INST(&pAdapter->VBus)
2183 hpt_queue_dpc((HPT_DPC)hpt_rebuild_data_block, pAdapter, pArray, DUPLICATE);
2190 while(pAdapter->pending_Q!= NULL)
2192 _VBUS_INST(&pAdapter->VBus)
2193 union ccb *ccb = (union ccb *)pAdapter->pending_Q->ccb_h.ccb_ccb_ptr;
2194 hpt_free_ccb(&pAdapter->pending_Q, ccb);
2203 IAL_ADAPTER_T * pAdapter = pmap->pAdapter;
2209 pAdapter->outstandingCommands--;
2211 if (pAdapter->outstandingCommands == 0)
2214 Check_Idle_Call(pAdapter);
2215 wakeup(pAdapter);
2229 IAL_ADAPTER_T * pAdapter = (IAL_ADAPTER_T *) cam_sim_softc(sim);
2231 _VBUS_INST(&pAdapter->VBus)
2233 mtx_assert(&pAdapter->lock, MA_OWNED);
2249 pAdapter->VBus.pVDevice[ccb->ccb_h.target_id]==0) {
2255 if (pAdapter->outstandingCommands==0 && DPC_Request_Nums==0)
2256 Check_Idle_Call(pAdapter);
2258 pmap = dmamap_get(pAdapter);
2264 hpt_queue_ccb(&pAdapter->pending_Q, ccb);
2390 p.dpc(p.pAdapter, p.arg, p.flags);
2392 mtx_lock(&p.pAdapter->lock);
2397 if (p.pAdapter->outstandingCommands == 0) {
2398 _VBUS_INST(&p.pAdapter->VBus);
2399 Check_Idle_Call(p.pAdapter);
2403 mtx_unlock(&p.pAdapter->lock);
2409 IAL_ADAPTER_T *pAdapter;
2415 pAdapter = gIal_Adapter;
2417 while(pAdapter != NULL){
2418 mtx_lock(&pAdapter->lock);
2419 _vbus_p = &pAdapter->VBus;
2432 mtx_unlock(&pAdapter->lock);
2433 pAdapter = pAdapter->next;
2601 IAL_ADAPTER_T *pAdapter = pmap->pAdapter;
2602 _VBUS_INST(&pAdapter->VBus)
2604 mtx_assert(&pAdapter->lock, MA_OWNED);
2615 IAL_ADAPTER_T *pAdapter = pmap->pAdapter;
2616 PVDevice pVDev = pAdapter->VBus.pVDevice[ccb_h->target_id];
2638 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map,
2642 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map,
2658 IAL_ADAPTER_T *pAdapter = pmap->pAdapter;
2661 PVDevice pVDev = pAdapter->VBus.pVDevice[ccb_h->target_id];
2670 pAdapter->outstandingCommands++;
2832 error = bus_dmamap_load_ccb(pAdapter->io_dma_parent,
2844 pAdapter->outstandingCommands--;
2845 if (pAdapter->outstandingCommands == 0)
2846 wakeup(pAdapter);
2867 IAL_ADAPTER_T *pAdapter = pmap->pAdapter;
2898 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, BUS_DMASYNC_POSTREAD);
2901 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, BUS_DMASYNC_POSTWRITE);
2904 bus_dmamap_unload(pAdapter->io_dma_parent, pmap->dma_map);
2911 hpt_queue_dpc(HPT_DPC dpc, IAL_ADAPTER_T * pAdapter, void *arg, UCHAR flags)
2924 DpcQueue[DpcQueue_Last].pAdapter = pAdapter;