Lines Matching +full:udma +full:- +full:p

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2004-2005 HighPoint Technologies, Inc.
164 * Parameters: pMvSataAdapter - pointer to the RR18xx controller this
166 * channelNum - channel number.
173 pAdapter->mvSataAdapter.sataChannel[channelNum] = NULL; in hptmv_free_channel()
178 PVBus _vbus_p = pVDev->pVBus; in failDevice()
179 IAL_ADAPTER_T *pAdapter = (IAL_ADAPTER_T *)_vbus_p->OsExt; in failDevice()
181 pVDev->u.disk.df_on_line = 0; in failDevice()
182 pVDev->vf_online = 0; in failDevice()
183 if (pVDev->pfnDeviceFailed) in failDevice()
184 CallWhenIdle(_VBUS_P (DPC_PROC)pVDev->pfnDeviceFailed, pVDev); in failDevice()
189 if (pAdapter->ver_601==2 && !pAdapter->beeping) { in failDevice()
190 pAdapter->beeping = 1; in failDevice()
191 BeepOn(pAdapter->mvSataAdapter.adapterIoBaseAddress); in failDevice()
192 set_fail_led(&pAdapter->mvSataAdapter, pVDev->u.disk.mv->channelNumber, 1); in failDevice()
202 PDevice pDevice = &pCmd->pVDevice->u.disk; in handleEdmaError()
203 MV_SATA_ADAPTER * pSataAdapter = pDevice->mv->mvSataAdapter; in handleEdmaError()
205 if (!pDevice->df_on_line) { in handleEdmaError()
207 pCmd->Result = RETURN_BAD_DEVICE; in handleEdmaError()
208 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in handleEdmaError()
212 if (pCmd->RetryCount++>5) { in handleEdmaError()
213 hpt_printk(("too many retries on channel(%d)\n", pDevice->mv->channelNumber)); in handleEdmaError()
215 failDevice(pCmd->pVDevice); in handleEdmaError()
216 pCmd->Result = RETURN_IDE_ERROR; in handleEdmaError()
217 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in handleEdmaError()
222 if (MvSataResetChannel(pSataAdapter, pDevice->mv->channelNumber)) in handleEdmaError()
227 hpt_printk(("Retry on channel(%d)\n", pDevice->mv->channelNumber)); in handleEdmaError()
238 * pAdapter - pointer to the emulated adapter data structure
239 * channelNum - channel number.
252 pAdapter->mvSataAdapter.adapterId, channelNum); in hptmv_init_channel()
253 return -1; in hptmv_init_channel()
256 pMvSataChannel = &gMvSataChannels[pAdapter->mvSataAdapter.adapterId][channelNum]; in hptmv_init_channel()
257 pAdapter->mvSataAdapter.sataChannel[channelNum] = pMvSataChannel; in hptmv_init_channel()
258 pMvSataChannel->channelNumber = channelNum; in hptmv_init_channel()
259 pMvSataChannel->lba48Address = MV_FALSE; in hptmv_init_channel()
260 pMvSataChannel->maxReadTransfer = MV_FALSE; in hptmv_init_channel()
262 pMvSataChannel->requestQueue = (struct mvDmaRequestQueueEntry *) in hptmv_init_channel()
263 (pAdapter->requestsArrayBaseAlignedAddr + (channelNum * MV_EDMA_REQUEST_QUEUE_SIZE)); in hptmv_init_channel()
264 …req_dma_addr = pAdapter->requestsArrayBaseDmaAlignedAddr + (channelNum * MV_EDMA_REQUEST_QUEUE_SIZ… in hptmv_init_channel()
273 " dma_addr=%llx channel=%d\n", pAdapter->mvSataAdapter.adapterId, in hptmv_init_channel()
275 return -1; in hptmv_init_channel()
277 pMvSataChannel->requestQueuePciLowAddress = req_dma_addr; in hptmv_init_channel()
278 pMvSataChannel->requestQueuePciHiAddress = 0; in hptmv_init_channel()
279 KdPrint(("RR18xx[%d,%d]: request queue allocated: 0x%p", in hptmv_init_channel()
280 pAdapter->mvSataAdapter.adapterId, channelNum, in hptmv_init_channel()
281 pMvSataChannel->requestQueue)); in hptmv_init_channel()
282 pMvSataChannel->responseQueue = (struct mvDmaResponseQueueEntry *) in hptmv_init_channel()
283 (pAdapter->responsesArrayBaseAlignedAddr + (channelNum * MV_EDMA_RESPONSE_QUEUE_SIZE)); in hptmv_init_channel()
284 …rsp_dma_addr = pAdapter->responsesArrayBaseDmaAlignedAddr + (channelNum * MV_EDMA_RESPONSE_QUEUE_S… in hptmv_init_channel()
291 pAdapter->mvSataAdapter.adapterId, channelNum, (HPT_U64)(ULONG_PTR)rsp_dma_addr); in hptmv_init_channel()
292 return -1; in hptmv_init_channel()
294 pMvSataChannel->responseQueuePciLowAddress = rsp_dma_addr; in hptmv_init_channel()
295 pMvSataChannel->responseQueuePciHiAddress = 0; in hptmv_init_channel()
296 KdPrint(("RR18xx[%d,%d]: response queue allocated: 0x%p", in hptmv_init_channel()
297 pAdapter->mvSataAdapter.adapterId, channelNum, in hptmv_init_channel()
298 pMvSataChannel->responseQueue)); in hptmv_init_channel()
300 pAdapter->mvChannel[channelNum].online = MV_TRUE; in hptmv_init_channel()
313 * Returns: =0 ->success, < 0 ->failure.
319 MV_U16 *iden = pMvSataChannel->identifyDevice; in hptmv_parse_identify_results()
325 return -1; in hptmv_parse_identify_results()
329 KdPrint(("%25s - %s\n", "Capabilities", "LBA supported")); in hptmv_parse_identify_results()
335 return -1; in hptmv_parse_identify_results()
339 KdPrint(("%25s - %s\n", "Capabilities", "DMA supported")); in hptmv_parse_identify_results()
345 return -1; in hptmv_parse_identify_results()
347 KdPrint(("%25s - 0x%02x\n", "PIO modes supported", in hptmv_parse_identify_results()
350 /*UDMA*/ in hptmv_parse_identify_results()
353 KdPrint(("IAL Error in IDENTIFY info: not able to find UDMA mode\n")); in hptmv_parse_identify_results()
354 return -1; in hptmv_parse_identify_results()
360 KdPrint(("%25s - %s\n", "LBA48 addressing", "supported")); in hptmv_parse_identify_results()
361 pMvSataChannel->lba48Address = MV_TRUE; in hptmv_parse_identify_results()
365 KdPrint(("%25s - %s\n", "LBA48 addressing", "Not supported")); in hptmv_parse_identify_results()
366 pMvSataChannel->lba48Address = MV_FALSE; in hptmv_parse_identify_results()
374 PVDevice pVDev = &pAdapter->VDevices[channel]; in init_vdev_params()
375 MV_SATA_CHANNEL *pMvSataChannel = pAdapter->mvSataAdapter.sataChannel[channel]; in init_vdev_params()
376 MV_U16_PTR IdentifyData = pMvSataChannel->identifyDevice; in init_vdev_params()
378 pMvSataChannel->outstandingCommands = 0; in init_vdev_params()
380 pVDev->u.disk.mv = pMvSataChannel; in init_vdev_params()
381 pVDev->u.disk.df_on_line = 1; in init_vdev_params()
382 pVDev->u.disk.pVBus = &pAdapter->VBus; in init_vdev_params()
383 pVDev->pVBus = &pAdapter->VBus; in init_vdev_params()
386 if (pMvSataChannel->lba48Address == MV_TRUE) in init_vdev_params()
387 pVDev->u.disk.dDeRealCapacity = ((IdentifyData[101]<<16) | IdentifyData[100]) - 1; in init_vdev_params()
391 pVDev->u.disk.dDeRealCapacity = in init_vdev_params()
394 (IdentifyData[58]<<16 | IdentifyData[57])) - 1; in init_vdev_params()
396 pVDev->u.disk.dDeRealCapacity = in init_vdev_params()
397 (IdentifyData[61]<<16 | IdentifyData[60]) - 1; in init_vdev_params()
399 pVDev->u.disk.bDeUsable_Mode = pVDev->u.disk.bDeModeSetting = in init_vdev_params()
400 pAdapter->mvChannel[channel].maxPioModeSupported - MV_ATA_TRANSFER_PIO_0; in init_vdev_params()
402 if (pAdapter->mvChannel[channel].maxUltraDmaModeSupported!=0xFF) { in init_vdev_params()
403 pVDev->u.disk.bDeUsable_Mode = pVDev->u.disk.bDeModeSetting = in init_vdev_params()
404 pAdapter->mvChannel[channel].maxUltraDmaModeSupported - MV_ATA_TRANSFER_UDMA_0 + 8; in init_vdev_params()
411 MV_SATA_ADAPTER *pMvSataAdapter = &pAdapter->mvSataAdapter; in device_change()
412 MV_SATA_CHANNEL *pMvSataChannel = pMvSataAdapter->sataChannel[channelIndex]; in device_change()
418 pVDev = &(pAdapter->VDevices[channelIndex]); in device_change()
421 pVDev->VDeviceType = pVDev->u.disk.df_atapi? VD_ATAPI : in device_change()
422 pVDev->u.disk.df_removable_drive? VD_REMOVABLE : VD_SINGLE_DISK; in device_change()
424 pVDev->VDeviceCapacity = pVDev->u.disk.dDeRealCapacity-SAVE_FOR_RAID_INFO; in device_change()
425 pVDev->pfnSendCommand = pfnSendCommand[pVDev->VDeviceType]; in device_change()
426 pVDev->pfnDeviceFailed = pfnDeviceFailed[pVDev->VDeviceType]; in device_change()
427 pVDev->vf_online = 1; in device_change()
430 if(pVDev->pParent) in device_change()
433 for (iMember = 0; iMember < pVDev->pParent->u.array.bArnMember; iMember++) in device_change()
434 if((PVDevice)pVDev->pParent->u.array.pMember[iMember] == pVDev) in device_change()
435 pVDev->pParent->u.array.pMember[iMember] = NULL; in device_change()
436 pVDev->pParent = NULL; in device_change()
444 if (pAdapter->beeping) { in device_change()
445 pAdapter->beeping = 0; in device_change()
446 BeepOff(pAdapter->mvSataAdapter.adapterIoBaseAddress); in device_change()
453 pVDev = &(pAdapter->VDevices[channelIndex]); in device_change()
461 MV_SATA_ADAPTER *pMvSataAdapter = &pAdapter->mvSataAdapter; in start_channel()
462 MV_SATA_CHANNEL *pMvSataChannel = pMvSataAdapter->sataChannel[channelNum]; in start_channel()
463 MV_CHANNEL *pChannelInfo = &(pAdapter->mvChannel[channelNum]); in start_channel()
466 KdPrint(("RR18xx [%d]: start channel (%d)", pMvSataAdapter->adapterId, in start_channel()
474 pMvSataAdapter->adapterId, channelNum); in start_channel()
475 return -1; in start_channel()
481 /* If failed, try again - this is when trying to hardreset a channel */ in start_channel()
487 pMvSataAdapter->adapterId, channelNum); in start_channel()
488 return -1; in start_channel()
496 , pMvSataAdapter->adapterId, channelNum); in start_channel()
497 return -1; in start_channel()
502 , pMvSataAdapter->adapterId, channelNum); in start_channel()
503 return -1; in start_channel()
508 if (pMvSataChannel->identifyDevice[86] & 4) in start_channel()
511 pMvSataAdapter->adapterId)); in start_channel()
517 " failed\n", pMvSataAdapter->adapterId, channelNum); in start_channel()
518 return -1; in start_channel()
523 if (pMvSataChannel->identifyDevice[82] & 0x20) in start_channel()
525 if (!(pMvSataChannel->identifyDevice[85] & 0x20)) /* if not enabled by default */ in start_channel()
532 pMvSataAdapter->adapterId, channelNum); in start_channel()
533 return -1; in start_channel()
537 pMvSataAdapter->adapterId, channelNum)); in start_channel()
542 pMvSataAdapter->adapterId, channelNum)); in start_channel()
546 if (pMvSataChannel->identifyDevice[85] & 0x20) in start_channel()
549 pMvSataAdapter->adapterId, channelNum)); in start_channel()
555 pMvSataAdapter->adapterId, channelNum); in start_channel()
556 return -1; in start_channel()
560 pMvSataAdapter->adapterId, channelNum)); in start_channel()
566 pMvSataAdapter->adapterId)); in start_channel()
573 pMvSataAdapter->adapterId, channelNum); in start_channel()
574 return -1; in start_channel()
577 if (pMvSataChannel->identifyDevice[IDEN_PIO_MODE_SPPORTED] & 1) in start_channel()
581 else if (pMvSataChannel->identifyDevice[IDEN_PIO_MODE_SPPORTED] & 2) in start_channel()
592 pMvSataAdapter->adapterId)); in start_channel()
593 pAdapter->mvChannel[channelNum].maxPioModeSupported = pioMode; in start_channel()
599 pMvSataAdapter->adapterId, channelNum); in start_channel()
600 return -1; in start_channel()
604 if (pMvSataChannel->identifyDevice[IDEN_UDMA_MODE] & 0x40) in start_channel()
608 else if (pMvSataChannel->identifyDevice[IDEN_UDMA_MODE] & 0x20) in start_channel()
612 else if (pMvSataChannel->identifyDevice[IDEN_UDMA_MODE] & 0x10) in start_channel()
616 else if (pMvSataChannel->identifyDevice[IDEN_UDMA_MODE] & 8) in start_channel()
620 else if (pMvSataChannel->identifyDevice[IDEN_UDMA_MODE] & 4) in start_channel()
626 pMvSataAdapter->adapterId, udmaMode & 0xf)); in start_channel()
627 pChannelInfo->maxUltraDmaModeSupported = udmaMode; in start_channel()
634 pMvSataAdapter->adapterId, channelNum); in start_channel()
635 return -1; in start_channel()
637 if (pChannelInfo->maxUltraDmaModeSupported == 0xFF) in start_channel()
644 pChannelInfo->maxUltraDmaModeSupported, in start_channel()
647 if (pChannelInfo->maxUltraDmaModeSupported > MV_ATA_TRANSFER_UDMA_0) in start_channel()
651 MV_REG_WRITE_BYTE(pMvSataAdapter->adapterIoBaseAddress, in start_channel()
652 pMvSataChannel->eDmaRegsOffset + in start_channel()
662 pChannelInfo->maxUltraDmaModeSupported--; in start_channel()
672 if (pMvSataChannel->identifyDevice[82] & 0x40) in start_channel()
674 if (!(pMvSataChannel->identifyDevice[85] & 0x40)) /* if not enabled by default */ in start_channel()
681 pMvSataAdapter->adapterId, channelNum); in start_channel()
682 return -1; in start_channel()
686 pMvSataAdapter->adapterId, channelNum)); in start_channel()
691 pMvSataAdapter->adapterId, channelNum)); in start_channel()
695 if (pMvSataChannel->identifyDevice[86] & 0x20) in start_channel()
698 pMvSataAdapter->adapterId, channelNum)); in start_channel()
704 pMvSataAdapter->adapterId, channelNum); in start_channel()
705 return -1; in start_channel()
709 pMvSataAdapter->adapterId, channelNum)); in start_channel()
716 pMvSataAdapter->adapterId, in start_channel()
722 pMvSataAdapter->adapterId, channelNum); in start_channel()
723 return -1; in start_channel()
730 pMvSataAdapter->adapterId, channelNum); in start_channel()
731 return -1; in start_channel()
734 pMvSataAdapter->adapterId, channelNum); in start_channel()
746 MV_SATA_ADAPTER *pMvSataAdapter = &pAdapter->mvSataAdapter; in hptmv_handle_event()
749 mtx_assert(&pAdapter->lock, MA_OWNED); in hptmv_handle_event()
750 /* mvOsSemTake(&pMvSataAdapter->semaphore); */ in hptmv_handle_event()
753 switch(pAdapter->sataEvents[channelIndex]) in hptmv_handle_event()
760 pMvSataAdapter->adapterId, channelIndex)); in hptmv_handle_event()
765 pMvSataAdapter->adapterId, channelIndex); in hptmv_handle_event()
774 pMvSataAdapter->adapterId, channelIndex); in hptmv_handle_event()
782 pAdapter->sataEvents[channelIndex] = SATA_EVENT_NO_CHANGE; in hptmv_handle_event()
790 pMvSataAdapter->adapterId, channelIndex)); in hptmv_handle_event()
792 if(pMvSataAdapter->sataChannel[channelIndex]) in hptmv_handle_event()
794 _VBUS_INST(&pAdapter->VBus) in hptmv_handle_event()
800 pMvSataAdapter->sataChannel[channelIndex] = NULL; in hptmv_handle_event()
802 pMvSataAdapter->adapterId, channelIndex)); in hptmv_handle_event()
803 if (pAdapter->outstandingCommands==0 && DPC_Request_Nums==0) in hptmv_handle_event()
809 pMvSataAdapter->adapterId, channelIndex)); in hptmv_handle_event()
811 pAdapter->sataEvents[channelIndex] = SATA_EVENT_NO_CHANGE; in hptmv_handle_event()
821 /* mvOsSemRelease(&pMvSataAdapter->semaphore); */ in hptmv_handle_event()
843 IAL_ADAPTER_T *pAdapter = pMvSataAdapter->IALData; in hptmv_event_notify()
853 pAdapter->sataEvents[channel] = SATA_EVENT_CHANNEL_CONNECTED; in hptmv_event_notify()
855 pMvSataAdapter->adapterId, channel)); in hptmv_event_notify()
857 callout_reset(&pAdapter->event_timer_connect, 10 * hz, hptmv_handle_event_connect, pAdapter); in hptmv_event_notify()
861 pAdapter->sataEvents[channel] = SATA_EVENT_CHANNEL_DISCONNECTED; in hptmv_event_notify()
863 pMvSataAdapter->adapterId, channel)); in hptmv_event_notify()
866 …/*callout_reset(&pAdapter->event_timer_disconnect, 10 * hz, hptmv_handle_event_disconnect, pAdapte… in hptmv_event_notify()
875 pMvSataAdapter->adapterId ); in hptmv_event_notify()
886 pMvSataAdapter->adapterId, eventType); in hptmv_event_notify()
895 pAdapter->requestsArrayBaseAddr = (MV_U8 *)contigmalloc(REQUESTS_ARRAY_SIZE, in hptmv_allocate_edma_queues()
897 if (pAdapter->requestsArrayBaseAddr == NULL) in hptmv_allocate_edma_queues()
900 " queues\n", pAdapter->mvSataAdapter.adapterId); in hptmv_allocate_edma_queues()
901 return -1; in hptmv_allocate_edma_queues()
903 pAdapter->requestsArrayBaseDmaAddr = fOsPhysicalAddress(pAdapter->requestsArrayBaseAddr); in hptmv_allocate_edma_queues()
904 pAdapter->requestsArrayBaseAlignedAddr = pAdapter->requestsArrayBaseAddr; in hptmv_allocate_edma_queues()
905 pAdapter->requestsArrayBaseAlignedAddr += MV_EDMA_REQUEST_QUEUE_SIZE; in hptmv_allocate_edma_queues()
906 pAdapter->requestsArrayBaseAlignedAddr = (MV_U8 *) in hptmv_allocate_edma_queues()
907 …(((ULONG_PTR)pAdapter->requestsArrayBaseAlignedAddr) & ~(ULONG_PTR)(MV_EDMA_REQUEST_QUEUE_SIZE - 1… in hptmv_allocate_edma_queues()
908 pAdapter->requestsArrayBaseDmaAlignedAddr = pAdapter->requestsArrayBaseDmaAddr; in hptmv_allocate_edma_queues()
909 pAdapter->requestsArrayBaseDmaAlignedAddr += MV_EDMA_REQUEST_QUEUE_SIZE; in hptmv_allocate_edma_queues()
910 pAdapter->requestsArrayBaseDmaAlignedAddr &= ~(ULONG_PTR)(MV_EDMA_REQUEST_QUEUE_SIZE - 1); in hptmv_allocate_edma_queues()
912 if ((pAdapter->requestsArrayBaseDmaAlignedAddr - pAdapter->requestsArrayBaseDmaAddr) != in hptmv_allocate_edma_queues()
913 (pAdapter->requestsArrayBaseAlignedAddr - pAdapter->requestsArrayBaseAddr)) in hptmv_allocate_edma_queues()
916 pAdapter->mvSataAdapter.adapterId); in hptmv_allocate_edma_queues()
917 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF); in hptmv_allocate_edma_queues()
918 return -1; in hptmv_allocate_edma_queues()
921 pAdapter->responsesArrayBaseAddr = (MV_U8 *)contigmalloc(RESPONSES_ARRAY_SIZE, in hptmv_allocate_edma_queues()
923 if (pAdapter->responsesArrayBaseAddr == NULL) in hptmv_allocate_edma_queues()
926 " queues\n", pAdapter->mvSataAdapter.adapterId); in hptmv_allocate_edma_queues()
927 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF); in hptmv_allocate_edma_queues()
928 return -1; in hptmv_allocate_edma_queues()
930 pAdapter->responsesArrayBaseDmaAddr = fOsPhysicalAddress(pAdapter->responsesArrayBaseAddr); in hptmv_allocate_edma_queues()
931 pAdapter->responsesArrayBaseAlignedAddr = pAdapter->responsesArrayBaseAddr; in hptmv_allocate_edma_queues()
932 pAdapter->responsesArrayBaseAlignedAddr += MV_EDMA_RESPONSE_QUEUE_SIZE; in hptmv_allocate_edma_queues()
933 pAdapter->responsesArrayBaseAlignedAddr = (MV_U8 *) in hptmv_allocate_edma_queues()
934 …(((ULONG_PTR)pAdapter->responsesArrayBaseAlignedAddr) & ~(ULONG_PTR)(MV_EDMA_RESPONSE_QUEUE_SIZE - in hptmv_allocate_edma_queues()
935 pAdapter->responsesArrayBaseDmaAlignedAddr = pAdapter->responsesArrayBaseDmaAddr; in hptmv_allocate_edma_queues()
936 pAdapter->responsesArrayBaseDmaAlignedAddr += MV_EDMA_RESPONSE_QUEUE_SIZE; in hptmv_allocate_edma_queues()
937 pAdapter->responsesArrayBaseDmaAlignedAddr &= ~(ULONG_PTR)(MV_EDMA_RESPONSE_QUEUE_SIZE - 1); in hptmv_allocate_edma_queues()
939 if ((pAdapter->responsesArrayBaseDmaAlignedAddr - pAdapter->responsesArrayBaseDmaAddr) != in hptmv_allocate_edma_queues()
940 (pAdapter->responsesArrayBaseAlignedAddr - pAdapter->responsesArrayBaseAddr)) in hptmv_allocate_edma_queues()
943 pAdapter->mvSataAdapter.adapterId); in hptmv_allocate_edma_queues()
944 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF); in hptmv_allocate_edma_queues()
945 free(pAdapter->responsesArrayBaseAddr, M_DEVBUF); in hptmv_allocate_edma_queues()
946 return -1; in hptmv_allocate_edma_queues()
954 free(pAdapter->requestsArrayBaseAddr, M_DEVBUF); in hptmv_free_edma_queues()
955 free(pAdapter->responsesArrayBaseAddr, M_DEVBUF); in hptmv_free_edma_queues()
962 if (pAdapter->pFreePRDLink) { in AllocatePRDTable()
963 KdPrint(("pAdapter->pFreePRDLink:%p\n",pAdapter->pFreePRDLink)); in AllocatePRDTable()
964 ret = pAdapter->pFreePRDLink; in AllocatePRDTable()
965 pAdapter->pFreePRDLink = *(void**)ret; in AllocatePRDTable()
974 *(void**)PRDTable = pAdapter->pFreePRDLink; in FreePRDTable()
975 pAdapter->pFreePRDLink = PRDTable; in FreePRDTable()
988 pPhysical = &(pAdapter->VDevices[i]); in fRegisterVdevice()
990 while (pLogical->pParent) pLogical = pLogical->pParent; in fRegisterVdevice()
991 if (pLogical->vf_online==0) { in fRegisterVdevice()
992 pPhysical->vf_bootmark = pLogical->vf_bootmark = 0; in fRegisterVdevice()
995 if (pLogical->VDeviceType==VD_SPARE || pPhysical!=fGetFirstChild(pLogical)) in fRegisterVdevice()
998 pVBus = &pAdapter->VBus; in fRegisterVdevice()
1002 while(j<MAX_VDEVICE_PER_VBUS && pVBus->pVDevice[j]) j++; in fRegisterVdevice()
1004 pVBus->pVDevice[j] = pLogical; in fRegisterVdevice()
1005 pLogical->pVBus = pVBus; in fRegisterVdevice()
1007 if (j>0 && pLogical->vf_bootmark) { in fRegisterVdevice()
1008 if (pVBus->pVDevice[0]->vf_bootmark) { in fRegisterVdevice()
1012 do { pVBus->pVDevice[j] = pVBus->pVDevice[j-1]; } while (--j); in fRegisterVdevice()
1013 pVBus->pVDevice[0] = pLogical; in fRegisterVdevice()
1024 IAL_ADAPTER_T *pAdapter = (IAL_ADAPTER_T *)pArray->pVBus->OsExt; in GetSpareDisk()
1025 LBA_T capacity = LongDiv(pArray->VDeviceCapacity, pArray->u.array.bArnMember-1); in GetSpareDisk()
1031 pVDevice = &pAdapter->VDevices[i]; in GetSpareDisk()
1034 thiscap = pArray->vf_format_v2? pVDevice->u.disk.dDeRealCapacity : pVDevice->VDeviceCapacity; in GetSpareDisk()
1036 if (pVDevice->VDeviceType==VD_SPARE && in GetSpareDisk()
1037 pVDevice->u.disk.df_on_line && in GetSpareDisk()
1041 maxcap = pVDevice->VDeviceCapacity; in GetSpareDisk()
1054 return mvReadWrite(pDev->mv, Lba, Cmd, tmpBuffer); in fDeReadWrite()
1059 MV_SATA_CHANNEL *pSataChannel = pDev->mv; in fDeSelectMode()
1060 MV_SATA_ADAPTER *pSataAdapter = pSataChannel->mvSataAdapter; in fDeSelectMode()
1061 MV_U8 channelIndex = pSataChannel->channelNumber; in fDeSelectMode()
1063 /* 508x don't use MW-DMA? */ in fDeSelectMode()
1065 pDev->bDeModeSetting = NewMode; in fDeSelectMode()
1069 mvMode = MV_ATA_TRANSFER_UDMA_0 + (NewMode-8); in fDeSelectMode()
1092 MV_SATA_CHANNEL *pSataChannel = pDev->mv; in fDeSetTCQ()
1093 MV_SATA_ADAPTER *pSataAdapter = pSataChannel->mvSataAdapter; in fDeSetTCQ()
1094 MV_U8 channelIndex = pSataChannel->channelNumber; in fDeSetTCQ()
1095 IAL_ADAPTER_T *pAdapter = pSataAdapter->IALData; in fDeSetTCQ()
1096 MV_CHANNEL *channelInfo = &(pAdapter->mvChannel[channelIndex]); in fDeSetTCQ()
1097 int dmaActive = pSataChannel->queueCommandsEnabled; in fDeSetTCQ()
1106 if (pSataChannel->queuedDMA == MV_EDMA_MODE_NOT_QUEUED && in fDeSetTCQ()
1107 (pSataChannel->identifyDevice[IDEN_SUPPORTED_COMMANDS2] & (0x2))) { in fDeSetTCQ()
1108 UCHAR depth = ((pSataChannel->identifyDevice[IDEN_QUEUE_DEPTH]) & 0x1f) + 1; in fDeSetTCQ()
1109 channelInfo->queueDepth = (depth==32)? 31 : depth; in fDeSetTCQ()
1116 if (pSataChannel->queuedDMA != MV_EDMA_MODE_NOT_QUEUED) { in fDeSetTCQ()
1117 channelInfo->queueDepth = 2; in fDeSetTCQ()
1135 MV_SATA_CHANNEL *pSataChannel = pDev->mv; in fDeSetWriteCache()
1136 MV_SATA_ADAPTER *pSataAdapter = pSataChannel->mvSataAdapter; in fDeSetWriteCache()
1137 MV_U8 channelIndex = pSataChannel->channelNumber; in fDeSetWriteCache()
1138 IAL_ADAPTER_T *pAdapter = pSataAdapter->IALData; in fDeSetWriteCache()
1139 MV_CHANNEL *channelInfo = &(pAdapter->mvChannel[channelIndex]); in fDeSetWriteCache()
1140 int dmaActive = pSataChannel->queueCommandsEnabled; in fDeSetWriteCache()
1148 if ((pSataChannel->identifyDevice[82] & (0x20))) { in fDeSetWriteCache()
1153 channelInfo->writeCacheEnabled = MV_TRUE; in fDeSetWriteCache()
1161 channelInfo->writeCacheEnabled = MV_FALSE; in fDeSetWriteCache()
1174 MV_SATA_CHANNEL *pSataChannel = pDev->mv; in fDeSetReadAhead()
1175 MV_SATA_ADAPTER *pSataAdapter = pSataChannel->mvSataAdapter; in fDeSetReadAhead()
1176 MV_U8 channelIndex = pSataChannel->channelNumber; in fDeSetReadAhead()
1177 IAL_ADAPTER_T *pAdapter = pSataAdapter->IALData; in fDeSetReadAhead()
1178 MV_CHANNEL *channelInfo = &(pAdapter->mvChannel[channelIndex]); in fDeSetReadAhead()
1179 int dmaActive = pSataChannel->queueCommandsEnabled; in fDeSetReadAhead()
1187 if ((pSataChannel->identifyDevice[82] & (0x40))) { in fDeSetReadAhead()
1192 channelInfo->readAheadEnabled = MV_TRUE; in fDeSetReadAhead()
1200 channelInfo->readAheadEnabled = MV_FALSE; in fDeSetReadAhead()
1219 pVDev->VDeviceType = pDev->df_atapi? VD_ATAPI : in IdeRegisterVDevice()
1220 pDev->df_removable_drive? VD_REMOVABLE : VD_SINGLE_DISK; in IdeRegisterVDevice()
1221 pVDev->vf_online = 1; in IdeRegisterVDevice()
1222 pVDev->VDeviceCapacity = pDev->dDeRealCapacity; in IdeRegisterVDevice()
1223 pVDev->pfnSendCommand = pfnSendCommand[pVDev->VDeviceType]; in IdeRegisterVDevice()
1224 pVDev->pfnDeviceFailed = pfnDeviceFailed[pVDev->VDeviceType]; in IdeRegisterVDevice()
1231 PBUS_DMAMAP p = pAdapter->pbus_dmamap_list; in dmamap_get() local
1232 if (p) in dmamap_get()
1233 pAdapter->pbus_dmamap_list = p-> next; in dmamap_get()
1234 return p; in dmamap_get()
1238 dmamap_put(PBUS_DMAMAP p) in dmamap_put() argument
1240 p->next = p->pAdapter->pbus_dmamap_list; in dmamap_put()
1241 p->pAdapter->pbus_dmamap_list = p; in dmamap_put()
1248 PVBus _vbus_p = &pAdapter->VBus; in init_adapter()
1254 mtx_init(&pAdapter->lock, "hptsleeplock", NULL, MTX_DEF); in init_adapter()
1255 callout_init_mtx(&pAdapter->event_timer_connect, &pAdapter->lock, 0); in init_adapter()
1256 callout_init_mtx(&pAdapter->event_timer_disconnect, &pAdapter->lock, 0); in init_adapter()
1259 pAdapter->next = 0; in init_adapter()
1266 pCurAdapter->next = pAdapter; in init_adapter()
1271 pAdapter->outstandingCommands = 0; in init_adapter()
1273 pMvSataAdapter = &(pAdapter->mvSataAdapter); in init_adapter()
1274 _vbus_p->OsExt = (void *)pAdapter; in init_adapter()
1275 pMvSataAdapter->IALData = pAdapter; in init_adapter()
1277 if (bus_dma_tag_create(bus_get_dma_tag(pAdapter->hpt_dev),/* parent */ in init_adapter()
1283 PAGE_SIZE * (MAX_SG_DESCRIPTORS-1), /* maxsize */ in init_adapter()
1288 &pAdapter->lock, /* lockfuncarg */ in init_adapter()
1289 &pAdapter->io_dma_parent /* tag */)) in init_adapter()
1303 if (!(pAdapter->mem_res = bus_alloc_resource_any(pAdapter->hpt_dev, in init_adapter()
1306 !(pMvSataAdapter->adapterIoBaseAddress = rman_get_virtual(pAdapter->mem_res))) in init_adapter()
1314 KdPrint(("RR18xx: io base address 0x%p\n", pMvSataAdapter->adapterIoBaseAddress)); in init_adapter()
1317 pMvSataAdapter->adapterId = num_adapters++; in init_adapter()
1319 pMvSataAdapter->pciConfigRevisionId = pci_read_config(pAdapter->hpt_dev, PCIR_REVID, 1); in init_adapter()
1320 pMvSataAdapter->pciConfigDeviceId = pci_get_device(pAdapter->hpt_dev); in init_adapter()
1323 pMvSataAdapter->intCoalThre[0]= 1; in init_adapter()
1324 pMvSataAdapter->intCoalThre[1]= 1; in init_adapter()
1325 pMvSataAdapter->intTimeThre[0] = 1; in init_adapter()
1326 pMvSataAdapter->intTimeThre[1] = 1; in init_adapter()
1327 pMvSataAdapter->pciCommand = 0x0107E371; in init_adapter()
1328 pMvSataAdapter->pciSerrMask = 0xd77fe6ul; in init_adapter()
1329 pMvSataAdapter->pciInterruptMask = 0xd77fe6ul; in init_adapter()
1330 pMvSataAdapter->mvSataEventNotify = hptmv_event_notify; in init_adapter()
1335 pMvSataAdapter->adapterId); in init_adapter()
1337 bus_release_resource(pAdapter->hpt_dev, SYS_RES_MEMORY, rid, pAdapter->mem_res); in init_adapter()
1341 pAdapter->ver_601 = pMvSataAdapter->pcbVersion; in init_adapter()
1350 pAdapter->pCommandBlocks = in init_adapter()
1352 KdPrint(("pCommandBlocks:%p\n",pAdapter->pCommandBlocks)); in init_adapter()
1353 if (!pAdapter->pCommandBlocks) { in init_adapter()
1359 FreeCommand(_VBUS_P &(pAdapter->pCommandBlocks[i])); in init_adapter()
1363 …pAdapter->pbus_dmamap = (PBUS_DMAMAP)malloc (sizeof(struct _BUS_DMAMAP) * MAX_QUEUE_COMM, M_DEVBUF… in init_adapter()
1364 if(!pAdapter->pbus_dmamap) { in init_adapter()
1366 free(pAdapter->pCommandBlocks, M_DEVBUF); in init_adapter()
1370 memset((void *)pAdapter->pbus_dmamap, 0, sizeof(struct _BUS_DMAMAP) * MAX_QUEUE_COMM); in init_adapter()
1371 pAdapter->pbus_dmamap_list = 0; in init_adapter()
1373 PBUS_DMAMAP pmap = &(pAdapter->pbus_dmamap[i]); in init_adapter()
1374 pmap->pAdapter = pAdapter; in init_adapter()
1377 if(bus_dmamap_create(pAdapter->io_dma_parent, 0, &pmap->dma_map)) { in init_adapter()
1379 free(pAdapter->pCommandBlocks, M_DEVBUF); in init_adapter()
1380 free(pAdapter->pbus_dmamap, M_DEVBUF); in init_adapter()
1383 callout_init_mtx(&pmap->timeout, &pAdapter->lock, 0); in init_adapter()
1387 pAdapter->pFreePRDLink = 0; in init_adapter()
1389 pAdapter->prdTableAddr = (PUCHAR)contigmalloc( in init_adapter()
1392 KdPrint(("prdTableAddr:%p\n",pAdapter->prdTableAddr)); in init_adapter()
1393 if (!pAdapter->prdTableAddr) { in init_adapter()
1397 …pAdapter->prdTableAlignedAddr = (PUCHAR)(((ULONG_PTR)pAdapter->prdTableAddr + 0x1f) & ~(ULONG_PTR)… in init_adapter()
1399 PUCHAR PRDTable = pAdapter->prdTableAlignedAddr; in init_adapter()
1402 /* KdPrint(("i=%d,pAdapter->pFreePRDLink=%p\n",i,pAdapter->pFreePRDLink)); */ in init_adapter()
1413 pAdapter->mvChannel[channel].online = MV_FALSE; in init_adapter()
1418 pMvSataAdapter->adapterId, channel)); in init_adapter()
1425 " %d\n",pMvSataAdapter->adapterId, channel); in init_adapter()
1433 " channel=%d\n",pMvSataAdapter->adapterId, in init_adapter()
1437 pAdapter->mvChannel[channel].online = MV_TRUE; in init_adapter()
1444 KdPrint(("pAdapter->mvChannel[channel].online:%x, channel:%d\n", in init_adapter()
1445 pAdapter->mvChannel[channel].online, channel)); in init_adapter()
1449 for (i = MAX_ARRAY_DEVICE - 1; i >= 0; i--) { in init_adapter()
1457 MV_SATA_CHANNEL *pMvSataChannel = pMvSataAdapter->sataChannel[channel]; in init_adapter()
1460 IdeRegisterVDevice(&pAdapter->VDevices[channel].u.disk); in init_adapter()
1466 _vbus_p->nInstances = 1; in init_adapter()
1470 pVDev = _vbus_p->pVDevice[channel]; in init_adapter()
1471 if (pVDev && pVDev->vf_online) in init_adapter()
1478 printf("RR18xx: RAID5 write-back %s\n", _vbus_(r5).enable_write_back? "enabled" : "disabled"); in init_adapter()
1488 IAL_ADAPTER_T *pAdapter = (IAL_ADAPTER_T *)pMvSataAdapter->IALData; in MvSataResetChannel()
1498 pMvSataAdapter->adapterId, channel); in MvSataResetChannel()
1500 return -1; in MvSataResetChannel()
1507 pMvSataAdapter->adapterId, channel); in MvSataResetChannel()
1509 return -1; in MvSataResetChannel()
1515 pMvSataAdapter->adapterId, channel); in MvSataResetChannel()
1517 return -1; in MvSataResetChannel()
1544 pAdapter->mvChannel[channel].maxPioModeSupported, 0, 0, 0) == MV_FALSE) || in MvSataResetChannel()
1547 pAdapter->mvChannel[channel].maxUltraDmaModeSupported, 0, 0, 0) == MV_FALSE) ) in MvSataResetChannel()
1551 return -1; in MvSataResetChannel()
1558 return -1; in MvSataResetChannel()
1567 MV_SATA_ADAPTER *pMvSataAdapter = &((IAL_ADAPTER_T *)_vbus_p->OsExt)->mvSataAdapter; in fResetActiveCommands()
1570 …if (pMvSataAdapter->sataChannel[channel] && pMvSataAdapter->sataChannel[channel]->outstandingComma… in fResetActiveCommands()
1581 MV_SATA_ADAPTER *pMvSataAdapter = &((IAL_ADAPTER_T *)_vbus_p->OsExt)->mvSataAdapter; in fCompleteAllCommandsSynchronously()
1593 pMvSataChannel = pMvSataAdapter->sataChannel[channel]; in fCompleteAllCommandsSynchronously()
1594 if (pMvSataChannel && pMvSataChannel->outstandingCommands) in fCompleteAllCommandsSynchronously()
1596 while (pMvSataChannel->outstandingCommands) { in fCompleteAllCommandsSynchronously()
1616 KdPrint(("fMvResetBus(%p)", _vbus_p)); in fResetVBus()
1649 _VBUS_INST(pCmd->pVDevice->pVBus) in CommandCompletionCB()
1651 if (pCmd->uScratch.sata_param.prdAddr) in CommandCompletionCB()
1652 FreePRDTable(pMvSataAdapter->IALData,pCmd->uScratch.sata_param.prdAddr); in CommandCompletionCB()
1657 pCmd->Result = RETURN_SUCCESS; in CommandCompletionCB()
1660 pCmd->Result = RETURN_BUS_RESET; in CommandCompletionCB()
1664 pMvSataAdapter->adapterId, channelNum, responseFlags); in CommandCompletionCB()
1669 registerStruct->errorRegister, in CommandCompletionCB()
1670 registerStruct->sectorCountRegister, in CommandCompletionCB()
1671 registerStruct->lbaLowRegister, in CommandCompletionCB()
1672 registerStruct->lbaMidRegister, in CommandCompletionCB()
1673 registerStruct->lbaHighRegister, in CommandCompletionCB()
1674 registerStruct->deviceRegister, in CommandCompletionCB()
1675 registerStruct->statusRegister); in CommandCompletionCB()
1679 pCmd->uScratch.sata_param.responseFlags = responseFlags; in CommandCompletionCB()
1680 pCmd->uScratch.sata_param.bIdeStatus = registerStruct->statusRegister; in CommandCompletionCB()
1681 pCmd->uScratch.sata_param.errorRegister = registerStruct->errorRegister; in CommandCompletionCB()
1682 pCmd->pVDevice->u.disk.QueueLength--; in CommandCompletionCB()
1691 if (pCmd->uCmd.Ide.Command == IDE_COMMAND_VERIFY && pCmd->uScratch.sata_param.cmd_priv > 1) { in CommandCompletionCB()
1692 pCmd->uScratch.sata_param.cmd_priv --; in CommandCompletionCB()
1695 pCmd->pVDevice->u.disk.QueueLength--; in CommandCompletionCB()
1696 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in CommandCompletionCB()
1706 PVDevice pVDevice = pCmd->pVDevice; in fDeviceSendCommand()
1707 PDevice pDevice = &pVDevice->u.disk; in fDeviceSendCommand()
1708 LBA_T Lba = pCmd->uCmd.Ide.Lba; in fDeviceSendCommand()
1709 USHORT nSector = pCmd->uCmd.Ide.nSectors; in fDeviceSendCommand()
1722 if (!pDevice->df_on_line) { in fDeviceSendCommand()
1724 pCmd->Result = RETURN_BAD_DEVICE; in fDeviceSendCommand()
1725 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in fDeviceSendCommand()
1729 pDevice->HeadPosition = pCmd->uCmd.Ide.Lba + pCmd->uCmd.Ide.nSectors; in fDeviceSendCommand()
1730 pMvSataChannel = pDevice->mv; in fDeviceSendCommand()
1731 pMvSataAdapter = pMvSataChannel->mvSataAdapter; in fDeviceSendCommand()
1732 channel = pMvSataChannel->channelNumber; in fDeviceSendCommand()
1735 Lba += pDevice->dDeHiddenLba; in fDeviceSendCommand()
1737 if (Lba+nSector-1 > pDevice->dDeRealCapacity) { in fDeviceSendCommand()
1738 pCmd->Result = RETURN_INVALID_REQUEST; in fDeviceSendCommand()
1739 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in fDeviceSendCommand()
1745 * Some Seagate drives report error if you use a 28-bit command in fDeviceSendCommand()
1748 is48bit = pMvSataChannel->lba48Address; in fDeviceSendCommand()
1750 switch (pCmd->uCmd.Ide.Command) in fDeviceSendCommand()
1754 if (pDevice->bDeModeSetting<8) goto pio; in fDeviceSendCommand()
1757 pUdmaParams->isEXT = is48bit; in fDeviceSendCommand()
1758 pUdmaParams->numOfSectors = nSector; in fDeviceSendCommand()
1759 pUdmaParams->lowLBAAddress = Lba; in fDeviceSendCommand()
1760 pUdmaParams->highLBAAddress = 0; in fDeviceSendCommand()
1761 pUdmaParams->prdHighAddr = 0; in fDeviceSendCommand()
1762 pUdmaParams->callBack = CommandCompletionCB; in fDeviceSendCommand()
1763 pUdmaParams->commandId = (MV_VOID_PTR )pCmd; in fDeviceSendCommand()
1764 if(pCmd->uCmd.Ide.Command == IDE_COMMAND_READ) in fDeviceSendCommand()
1765 pUdmaParams->readWrite = MV_UDMA_TYPE_READ; in fDeviceSendCommand()
1767 pUdmaParams->readWrite = MV_UDMA_TYPE_WRITE; in fDeviceSendCommand()
1769 if (pCmd->pSgTable && pCmd->cf_physical_sg) { in fDeviceSendCommand()
1770 FPSCAT_GATH sg1=tmpSg, sg2=pCmd->pSgTable; in fDeviceSendCommand()
1771 do { *sg1++=*sg2; } while ((sg2++->wSgFlag & SG_FLAG_EOT)==0); in fDeviceSendCommand()
1774 if (!pCmd->pfnBuildSgl || !pCmd->pfnBuildSgl(_VBUS_P pCmd, tmpSg, 0)) { in fDeviceSendCommand()
1779 if (pCmd->pSgTable && pCmd->cf_physical_sg==0) { in fDeviceSendCommand()
1780 FPSCAT_GATH sg1=tmpSg, sg2=pCmd->pSgTable; in fDeviceSendCommand()
1781 do { *sg1++=*sg2; } while ((sg2++->wSgFlag & SG_FLAG_EOT)==0); in fDeviceSendCommand()
1784 if (!pCmd->pfnBuildSgl || !pCmd->pfnBuildSgl(_VBUS_P pCmd, tmpSg, 1)) { in fDeviceSendCommand()
1785 pCmd->Result = RETURN_NEED_LOGICAL_SG; in fDeviceSendCommand()
1791 ULONG size = tmpSg->wSgSize? tmpSg->wSgSize : 0x10000; in fDeviceSendCommand()
1792 ULONG_PTR addr = tmpSg->dSgAddress; in fDeviceSendCommand()
1794 pCmd->Result = RETURN_INVALID_REQUEST; in fDeviceSendCommand()
1798 (pCmd->cf_data_out)?MV_NON_UDMA_PROTOCOL_PIO_DATA_OUT:MV_NON_UDMA_PROTOCOL_PIO_DATA_IN, in fDeviceSendCommand()
1808 …(MV_U8)(is48bit ? (pCmd->cf_data_in?IDE_COMMAND_READ_EXT:IDE_COMMAND_WRITE_EXT):pCmd->uCmd.Ide.Com… in fDeviceSendCommand()
1811 pCmd->Result = RETURN_IDE_ERROR; in fDeviceSendCommand()
1817 while ((tmpSg++->wSgFlag & SG_FLAG_EOT)==0); in fDeviceSendCommand()
1818 pCmd->Result = RETURN_SUCCESS; in fDeviceSendCommand()
1821 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in fDeviceSendCommand()
1826 pPRDTable = (MV_SATA_EDMA_PRD_ENTRY *) AllocatePRDTable(pMvSataAdapter->IALData); in fDeviceSendCommand()
1827 KdPrint(("pPRDTable:%p\n",pPRDTable)); in fDeviceSendCommand()
1829 pCmd->Result = RETURN_DEVICE_BUSY; in fDeviceSendCommand()
1830 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in fDeviceSendCommand()
1836 pPRDTable[i].highBaseAddr = (sizeof(tmpSg->dSgAddress)>4 ? (MV_U32)(tmpSg->dSgAddress>>32) : 0); in fDeviceSendCommand()
1837 pPRDTable[i].flags = (MV_U16)tmpSg->wSgFlag; in fDeviceSendCommand()
1838 pPRDTable[i].byteCount = (MV_U16)tmpSg->wSgSize; in fDeviceSendCommand()
1839 pPRDTable[i].lowBaseAddr = (MV_U32)tmpSg->dSgAddress; in fDeviceSendCommand()
1842 }while((tmpSg++->wSgFlag & SG_FLAG_EOT)==0); in fDeviceSendCommand()
1844 pUdmaParams->prdLowAddr = (ULONG)fOsPhysicalAddress(pPRDTable); in fDeviceSendCommand()
1845 if ((pUdmaParams->numOfSectors == 256) && (pMvSataChannel->lba48Address == MV_FALSE)) { in fDeviceSendCommand()
1846 pUdmaParams->numOfSectors = 0; in fDeviceSendCommand()
1849 pCmd->uScratch.sata_param.prdAddr = (PVOID)pPRDTable; in fDeviceSendCommand()
1860 "LBA[31:0](0x%08x)\n", pUdmaParams->lowLBAAddress); in fDeviceSendCommand()
1861 pCmd->Result = RETURN_IDE_ERROR; in fDeviceSendCommand()
1866 pMvSataAdapter->adapterId, channel); in fDeviceSendCommand()
1868 pCmd->Result = RETURN_IDE_ERROR; in fDeviceSendCommand()
1873 pMvSataAdapter->adapterId, channel); in fDeviceSendCommand()
1874 pCmd->Result = RETURN_DEVICE_BUSY; in fDeviceSendCommand()
1878 "Params), pMvSataAdapter: %p, pSataChannel: %p.\n", in fDeviceSendCommand()
1879 pMvSataAdapter, pMvSataAdapter->sataChannel[channel]); in fDeviceSendCommand()
1880 pCmd->Result = RETURN_IDE_ERROR; in fDeviceSendCommand()
1885 pCmd->Result = RETURN_IDE_ERROR; in fDeviceSendCommand()
1888 FreePRDTable(pMvSataAdapter->IALData,pPRDTable); in fDeviceSendCommand()
1889 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in fDeviceSendCommand()
1891 pDevice->QueueLength++; in fDeviceSendCommand()
1896 pNoUdmaParams->bufPtr = NULL; in fDeviceSendCommand()
1897 pNoUdmaParams->callBack = CommandCompletionCB; in fDeviceSendCommand()
1898 pNoUdmaParams->commandId = (MV_VOID_PTR)pCmd; in fDeviceSendCommand()
1899 pNoUdmaParams->count = 0; in fDeviceSendCommand()
1900 pNoUdmaParams->features = 0; in fDeviceSendCommand()
1901 pNoUdmaParams->protocolType = MV_NON_UDMA_PROTOCOL_NON_DATA; in fDeviceSendCommand()
1903 pCmd->uScratch.sata_param.cmd_priv = 1; in fDeviceSendCommand()
1904 if (pMvSataChannel->lba48Address == MV_TRUE){ in fDeviceSendCommand()
1905 pNoUdmaParams->command = MV_ATA_COMMAND_READ_VERIFY_SECTORS_EXT; in fDeviceSendCommand()
1906 pNoUdmaParams->isEXT = MV_TRUE; in fDeviceSendCommand()
1907 pNoUdmaParams->lbaHigh = (MV_U16)((Lba & 0xff0000) >> 16); in fDeviceSendCommand()
1908 pNoUdmaParams->lbaMid = (MV_U16)((Lba & 0xff00) >> 8); in fDeviceSendCommand()
1909 pNoUdmaParams->lbaLow = in fDeviceSendCommand()
1911 pNoUdmaParams->sectorCount = nSector; in fDeviceSendCommand()
1912 pNoUdmaParams->device = 0x40; in fDeviceSendCommand()
1920 pNoUdmaParams->command = MV_ATA_COMMAND_READ_VERIFY_SECTORS; in fDeviceSendCommand()
1921 pNoUdmaParams->isEXT = MV_FALSE; in fDeviceSendCommand()
1922 pNoUdmaParams->lbaHigh = (MV_U16)((Lba & 0xff0000) >> 16); in fDeviceSendCommand()
1923 pNoUdmaParams->lbaMid = (MV_U16)((Lba & 0xff00) >> 8); in fDeviceSendCommand()
1924 pNoUdmaParams->lbaLow = (MV_U16)(Lba & 0xff); in fDeviceSendCommand()
1925 pNoUdmaParams->sectorCount = 0xff & nSector; in fDeviceSendCommand()
1926 pNoUdmaParams->device = (MV_U8)(0x40 | in fDeviceSendCommand()
1928 pNoUdmaParams->callBack = CommandCompletionCB; in fDeviceSendCommand()
1937 pCmd->Result = RETURN_INVALID_REQUEST; in fDeviceSendCommand()
1938 CallAfterReturn(_VBUS_P (DPC_PROC)pCmd->pfnCompletion, pCmd); in fDeviceSendCommand()
1982 pAdapter->hpt_dev = dev; in hpt_attach()
1989 …if ((pAdapter->hpt_irq = bus_alloc_resource_any(pAdapter->hpt_dev, SYS_RES_IRQ, &rid, RF_SHAREABLE… in hpt_attach()
1995 if (bus_setup_intr(pAdapter->hpt_dev, pAdapter->hpt_irq, in hpt_attach()
1997 NULL, hpt_intr, pAdapter, &pAdapter->hpt_intr)) in hpt_attach()
2006 ccb->ccb_h.pinfo.priority = 1; in hpt_attach()
2007 ccb->ccb_h.pinfo.index = CAM_UNQUEUED_INDEX; in hpt_attach()
2022 pAdapter, device_get_unit(pAdapter->hpt_dev), in hpt_attach()
2023 &pAdapter->lock, 1, 8, devq); in hpt_attach()
2029 mtx_lock(&pAdapter->lock); in hpt_attach()
2033 mtx_unlock(&pAdapter->lock); in hpt_attach()
2038 if(xpt_create_path(&pAdapter->path, /*periph */ NULL, in hpt_attach()
2044 mtx_unlock(&pAdapter->lock); in hpt_attach()
2048 mtx_unlock(&pAdapter->lock); in hpt_attach()
2050 xpt_setup_ccb(&(ccb->ccb_h), pAdapter->path, /*priority*/5); in hpt_attach()
2051 ccb->ccb_h.func_code = XPT_SASYNC_CB; in hpt_attach()
2052 ccb->csa.event_enable = AC_LOST_DEVICE; in hpt_attach()
2053 ccb->csa.callback = hpt_async; in hpt_attach()
2054 ccb->csa.callback_arg = hpt_vsim; in hpt_attach()
2095 mtx_lock(&pAdapter->lock); in hpt_intr()
2097 mtx_unlock(&pAdapter->lock); in hpt_intr()
2104 mtx_assert(&pAdapter->lock, MA_OWNED); in hpt_intr_locked()
2105 /* KdPrintI(("----- Entering Isr() -----\n")); */ in hpt_intr_locked()
2106 if (mvSataInterruptServiceRoutine(&pAdapter->mvSataAdapter) == MV_TRUE) in hpt_intr_locked()
2108 _VBUS_INST(&pAdapter->VBus) in hpt_intr_locked()
2112 /* KdPrintI(("----- Leaving Isr() -----\n")); */ in hpt_intr_locked()
2144 PVDevice pVDev = pAdapter->VBus.pVDevice[i]; in FlushAdapter()
2156 mtx_lock(&pAdapter->lock); in hpt_shutdown()
2158 mtx_unlock(&pAdapter->lock); in hpt_shutdown()
2160 *otherwise "shutdown -p now" will make file system corrupted */ in hpt_shutdown()
2168 _VBUS_INST(&pAdapter->VBus) in Check_Idle_Call()
2177 if ((pArray=ArrayTables(i))->u.array.dArStamp==0) in Check_Idle_Call()
2179 else if (pArray->u.array.rf_auto_rebuild) { in Check_Idle_Call()
2181 pArray->u.array.rf_auto_rebuild = 0; in Check_Idle_Call()
2189 while(pAdapter->pending_Q!= NULL) in Check_Idle_Call()
2191 _VBUS_INST(&pAdapter->VBus) in Check_Idle_Call()
2192 union ccb *ccb = (union ccb *)pAdapter->pending_Q->ccb_h.ccb_ccb_ptr; in Check_Idle_Call()
2193 hpt_free_ccb(&pAdapter->pending_Q, ccb); in Check_Idle_Call()
2201 PBUS_DMAMAP pmap = (PBUS_DMAMAP)ccb->ccb_adapter; in ccb_done()
2202 IAL_ADAPTER_T * pAdapter = pmap->pAdapter; in ccb_done()
2203 KdPrintI(("ccb_done: ccb %p status %x\n", ccb, ccb->ccb_h.status)); in ccb_done()
2208 pAdapter->outstandingCommands--; in ccb_done()
2210 if (pAdapter->outstandingCommands == 0) in ccb_done()
2221 * Parameters: sim - Pointer to SIM object
2222 * ccb - Pointer to SCSI command structure.
2230 _VBUS_INST(&pAdapter->VBus) in hpt_action()
2232 mtx_assert(&pAdapter->lock, MA_OWNED); in hpt_action()
2233 CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("hpt_action\n")); in hpt_action()
2234 KdPrint(("hpt_action(%lx,%lx{%x})\n", (u_long)sim, (u_long)ccb, ccb->ccb_h.func_code)); in hpt_action()
2236 switch (ccb->ccb_h.func_code) in hpt_action()
2240 /* ccb->ccb_h.path_id is not our bus id - don't check it */ in hpt_action()
2242 if (ccb->ccb_h.target_lun) { in hpt_action()
2243 ccb->ccb_h.status = CAM_LUN_INVALID; in hpt_action()
2247 if (ccb->ccb_h.target_id >= MAX_VDEVICE_PER_VBUS || in hpt_action()
2248 pAdapter->VBus.pVDevice[ccb->ccb_h.target_id]==0) { in hpt_action()
2249 ccb->ccb_h.status = CAM_TID_INVALID; in hpt_action()
2254 if (pAdapter->outstandingCommands==0 && DPC_Request_Nums==0) in hpt_action()
2259 ccb->ccb_adapter = pmap; in hpt_action()
2260 memset((void *)pmap->psg, 0, sizeof(pmap->psg)); in hpt_action()
2263 hpt_queue_ccb(&pAdapter->pending_Q, ccb); in hpt_action()
2281 ccb->ccb_h.status = CAM_REQ_INVALID; in hpt_action()
2288 ccb->ccb_h.status = CAM_FUNC_NOTAVAIL; in hpt_action()
2293 cam_calc_geometry(&ccb->ccg, 1); in hpt_action()
2299 struct ccb_pathinq *cpi = &ccb->cpi; in hpt_action()
2301 cpi->version_num = 1; /* XXX??? */ in hpt_action()
2302 cpi->hba_inquiry = PI_SDTR_ABLE; in hpt_action()
2303 cpi->target_sprt = 0; in hpt_action()
2305 cpi->hba_misc = PIM_NOBUSRESET; in hpt_action()
2306 cpi->hba_eng_cnt = 0; in hpt_action()
2308 cpi->max_target = MAX_VDEVICE_PER_VBUS; in hpt_action()
2309 cpi->max_lun = 0; in hpt_action()
2310 cpi->initiator_id = MAX_VDEVICE_PER_VBUS; in hpt_action()
2312 cpi->bus_id = cam_sim_bus(sim); in hpt_action()
2313 cpi->base_transfer_speed = 3300; in hpt_action()
2314 strlcpy(cpi->sim_vid, "FreeBSD", SIM_IDLEN); in hpt_action()
2315 strlcpy(cpi->hba_vid, "HPT ", HBA_IDLEN); in hpt_action()
2316 strlcpy(cpi->dev_name, cam_sim_name(sim), DEV_IDLEN); in hpt_action()
2317 cpi->unit_number = cam_sim_unit(sim); in hpt_action()
2318 cpi->transport = XPORT_SPI; in hpt_action()
2319 cpi->transport_version = 2; in hpt_action()
2320 cpi->protocol = PROTO_SCSI; in hpt_action()
2321 cpi->protocol_version = SCSI_REV_2; in hpt_action()
2322 cpi->ccb_h.status = CAM_REQ_CMP; in hpt_action()
2329 ccb->ccb_h.status = CAM_REQ_INVALID; in hpt_action()
2341 ccb->ccb_h.ccb_ccb_ptr = ccb; in hpt_queue_ccb()
2343 ccb->ccb_h.ccb_ccb_ptr = (*ccb_Q)->ccb_h.ccb_ccb_ptr; in hpt_queue_ccb()
2344 (*ccb_Q)->ccb_h.ccb_ccb_ptr = (char *)ccb; in hpt_queue_ccb()
2358 if(ccb->ccb_h.ccb_ccb_ptr == ccb) /*it means SCpnt is the last one in CURRCMDs*/ in hpt_free_ccb()
2361 while(TempCCB->ccb_h.ccb_ccb_ptr != (char *)ccb) in hpt_free_ccb()
2362 TempCCB = (union ccb *)TempCCB->ccb_h.ccb_ccb_ptr; in hpt_free_ccb()
2364 TempCCB->ccb_h.ccb_ccb_ptr = ccb->ccb_h.ccb_ccb_ptr; in hpt_free_ccb()
2383 ST_HPT_DPC p; in hpt_worker_thread() local
2384 p = DpcQueue[DpcQueue_First]; in hpt_worker_thread()
2389 p.dpc(p.pAdapter, p.arg, p.flags); in hpt_worker_thread()
2391 mtx_lock(&p.pAdapter->lock); in hpt_worker_thread()
2393 DPC_Request_Nums--; in hpt_worker_thread()
2396 if (p.pAdapter->outstandingCommands == 0) { in hpt_worker_thread()
2397 _VBUS_INST(&p.pAdapter->VBus); in hpt_worker_thread()
2398 Check_Idle_Call(p.pAdapter); in hpt_worker_thread()
2402 mtx_unlock(&p.pAdapter->lock); in hpt_worker_thread()
2406 if (SIGISMEMBER(curproc->p_siglist, SIGSTOP)) { in hpt_worker_thread()
2417 mtx_lock(&pAdapter->lock); in hpt_worker_thread()
2418 _vbus_p = &pAdapter->VBus; in hpt_worker_thread()
2422 if ((pArray=ArrayTables(i))->u.array.dArStamp==0) in hpt_worker_thread()
2424 else if (pArray->u.array.rf_rebuilding || in hpt_worker_thread()
2425 pArray->u.array.rf_verifying || in hpt_worker_thread()
2426 pArray->u.array.rf_initializing) in hpt_worker_thread()
2428 pArray->u.array.rf_abort_rebuild = 1; in hpt_worker_thread()
2431 mtx_unlock(&pAdapter->lock); in hpt_worker_thread()
2432 pAdapter = pAdapter->next; in hpt_worker_thread()
2443 if (SIGISMEMBER(curproc->p_siglist, SIGSTOP)) in hpt_worker_thread()
2448 pause("-", 2*hz); /* wait for something to do */ in hpt_worker_thread()
2468 for (pAdapTemp = gIal_Adapter; pAdapTemp; pAdapTemp = pAdapTemp->next) { in launch_worker_thread()
2470 _VBUS_INST(&pAdapTemp->VBus) in launch_worker_thread()
2475 if ((pVDev=ArrayTables(i))->u.array.dArStamp==0) in launch_worker_thread()
2478 if (pVDev->u.array.rf_need_rebuild && !pVDev->u.array.rf_rebuilding) in launch_worker_thread()
2480 …(UCHAR)((pVDev->u.array.CriticalMembers || pVDev->VDeviceType == VD_RAID_1)? DUPLICATE : REBUILD_P… in launch_worker_thread()
2501 union ccb *ccb = (union ccb *)pCmd->pOrgCommand; in fOsBuildSgl()
2504 pSg->dSgAddress = (ULONG_PTR)(UCHAR *)ccb->csio.data_ptr; in fOsBuildSgl()
2505 pSg->wSgSize = ccb->csio.dxfer_len; in fOsBuildSgl()
2506 pSg->wSgFlag = SG_FLAG_EOT; in fOsBuildSgl()
2532 IDENTIFY_DATA2 *pIdentify = (IDENTIFY_DATA2*)pVDev->u.disk.mv->identifyDevice; in SetInquiryData()
2534 inquiryData->DeviceType = T_DIRECT; /*DIRECT_ACCESS_DEVICE*/ in SetInquiryData()
2535 inquiryData->AdditionalLength = (UCHAR)(sizeof(INQUIRYDATA) - 5); in SetInquiryData()
2537 inquiryData->CommandQueue = 1; in SetInquiryData()
2540 switch(pVDev->VDeviceType) { in SetInquiryData()
2545 if ((pVDev->u.disk.df_removable_drive) || (pIdentify->GeneralConfiguration & 0x80)) in SetInquiryData()
2546 inquiryData->RemovableMedia = 1; in SetInquiryData()
2550 inquiryData->VendorId[i] = ((PUCHAR)pIdentify->ModelNumber)[i + 1]; in SetInquiryData()
2551 inquiryData->VendorId[i+1] = ((PUCHAR)pIdentify->ModelNumber)[i]; in SetInquiryData()
2556 for (i = 0; i < 4; i++) inquiryData->ProductId[12+i] = ' '; in SetInquiryData()
2561 inquiryData->ProductRevisionLevel[i] = ((PUCHAR)pIdentify->FirmwareRevision)[i+1]; in SetInquiryData()
2562 inquiryData->ProductRevisionLevel[i+1] = ((PUCHAR)pIdentify->FirmwareRevision)[i]; in SetInquiryData()
2566 memcpy(&inquiryData->VendorId, "RR18xx ", 8); in SetInquiryData()
2568 switch(pVDev->VDeviceType){ in SetInquiryData()
2570 if ((pVDev->u.array.pMember[0] && mIsArray(pVDev->u.array.pMember[0])) || in SetInquiryData()
2571 (pVDev->u.array.pMember[1] && mIsArray(pVDev->u.array.pMember[1]))) in SetInquiryData()
2572 memcpy(&inquiryData->ProductId, "RAID 1/0 Array ", 16); in SetInquiryData()
2574 memcpy(&inquiryData->ProductId, "RAID 0 Array ", 16); in SetInquiryData()
2577 if ((pVDev->u.array.pMember[0] && mIsArray(pVDev->u.array.pMember[0])) || in SetInquiryData()
2578 (pVDev->u.array.pMember[1] && mIsArray(pVDev->u.array.pMember[1]))) in SetInquiryData()
2579 memcpy(&inquiryData->ProductId, "RAID 0/1 Array ", 16); in SetInquiryData()
2581 memcpy(&inquiryData->ProductId, "RAID 1 Array ", 16); in SetInquiryData()
2584 memcpy(&inquiryData->ProductId, "RAID 5 Array ", 16); in SetInquiryData()
2587 memcpy(&inquiryData->ProductId, "JBOD Array ", 16); in SetInquiryData()
2591 memcpy(&inquiryData->ProductRevisionLevel, "3.00", 4); in SetInquiryData()
2599 PBUS_DMAMAP pmap = (PBUS_DMAMAP)((union ccb *)arg)->ccb_adapter; in hpt_timeout()
2600 IAL_ADAPTER_T *pAdapter = pmap->pAdapter; in hpt_timeout()
2601 _VBUS_INST(&pAdapter->VBus) in hpt_timeout()
2603 mtx_assert(&pAdapter->lock, MA_OWNED); in hpt_timeout()
2611 union ccb *ccb = pCmd->pOrgCommand; in hpt_io_dmamap_callback()
2612 struct ccb_hdr *ccb_h = &ccb->ccb_h; in hpt_io_dmamap_callback()
2613 PBUS_DMAMAP pmap = (PBUS_DMAMAP) ccb->ccb_adapter; in hpt_io_dmamap_callback()
2614 IAL_ADAPTER_T *pAdapter = pmap->pAdapter; in hpt_io_dmamap_callback()
2615 PVDevice pVDev = pAdapter->VBus.pVDevice[ccb_h->target_id]; in hpt_io_dmamap_callback()
2616 FPSCAT_GATH psg = pCmd->pSgTable; in hpt_io_dmamap_callback()
2618 _VBUS_INST(pVDev->pVBus) in hpt_io_dmamap_callback()
2620 HPT_ASSERT(pCmd->cf_physical_sg); in hpt_io_dmamap_callback()
2629 psg->dSgAddress = (ULONG_PTR)(UCHAR *)segs[idx].ds_addr; in hpt_io_dmamap_callback()
2630 psg->wSgSize = segs[idx].ds_len; in hpt_io_dmamap_callback()
2631 psg->wSgFlag = (idx == nsegs-1)? SG_FLAG_EOT: 0; in hpt_io_dmamap_callback()
2632 …/* KdPrint(("psg[%d]:add=%p,size=%x,flag=%x\n", idx, psg->dSgAddress,psg->wSgSize,psg->wSgFlag));… in hpt_io_dmamap_callback()
2634 /* psg[-1].wSgFlag = SG_FLAG_EOT; */ in hpt_io_dmamap_callback()
2636 if (pCmd->cf_data_in) { in hpt_io_dmamap_callback()
2637 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, in hpt_io_dmamap_callback()
2640 else if (pCmd->cf_data_out) { in hpt_io_dmamap_callback()
2641 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, in hpt_io_dmamap_callback()
2646 callout_reset(&pmap->timeout, 20 * hz, hpt_timeout, ccb); in hpt_io_dmamap_callback()
2647 pVDev->pfnSendCommand(_VBUS_P pCmd); in hpt_io_dmamap_callback()
2656 PBUS_DMAMAP pmap = (PBUS_DMAMAP)ccb->ccb_adapter; in OsSendCommand()
2657 IAL_ADAPTER_T *pAdapter = pmap->pAdapter; in OsSendCommand()
2658 struct ccb_hdr *ccb_h = &ccb->ccb_h; in OsSendCommand()
2659 struct ccb_scsiio *csio = &ccb->csio; in OsSendCommand()
2660 PVDevice pVDev = pAdapter->VBus.pVDevice[ccb_h->target_id]; in OsSendCommand()
2662 KdPrintI(("OsSendCommand: ccb %p cdb %x-%x-%x\n", in OsSendCommand()
2664 *(ULONG *)&ccb->csio.cdb_io.cdb_bytes[0], in OsSendCommand()
2665 *(ULONG *)&ccb->csio.cdb_io.cdb_bytes[4], in OsSendCommand()
2666 *(ULONG *)&ccb->csio.cdb_io.cdb_bytes[8] in OsSendCommand()
2669 pAdapter->outstandingCommands++; in OsSendCommand()
2671 if (pVDev == NULL || pVDev->vf_online == 0) { in OsSendCommand()
2672 ccb->ccb_h.status = CAM_REQ_INVALID; in OsSendCommand()
2677 switch(ccb->csio.cdb_io.cdb_bytes[0]) in OsSendCommand()
2683 ccb->ccb_h.status = CAM_REQ_CMP; in OsSendCommand()
2687 ZeroMemory(ccb->csio.data_ptr, ccb->csio.dxfer_len); in OsSendCommand()
2688 SetInquiryData((PINQUIRYDATA)ccb->csio.data_ptr, pVDev); in OsSendCommand()
2689 ccb_h->status = CAM_REQ_CMP; in OsSendCommand()
2694 UCHAR *rbuf=csio->data_ptr; in OsSendCommand()
2697 if (pVDev->VDeviceCapacity > 0xfffffffful) { in OsSendCommand()
2700 cap = pVDev->VDeviceCapacity - 1; in OsSendCommand()
2707 /* Claim 512 byte blocks (big-endian). */ in OsSendCommand()
2713 ccb_h->status = CAM_REQ_CMP; in OsSendCommand()
2719 UCHAR *rbuf = csio->data_ptr; in OsSendCommand()
2720 LBA_T cap = pVDev->VDeviceCapacity - 1; in OsSendCommand()
2735 ccb_h->status = CAM_REQ_CMP; in OsSendCommand()
2750 _VBUS_INST(pVDev->pVBus) in OsSendCommand()
2755 CdbLength = csio->cdb_len; in OsSendCommand()
2756 if ((ccb->ccb_h.flags & CAM_CDB_POINTER) != 0) in OsSendCommand()
2758 if ((ccb->ccb_h.flags & CAM_CDB_PHYS) == 0) in OsSendCommand()
2760 bcopy(csio->cdb_io.cdb_ptr, Cdb, CdbLength); in OsSendCommand()
2765 ccb->ccb_h.status = CAM_REQ_INVALID; in OsSendCommand()
2771 bcopy(csio->cdb_io.cdb_bytes, Cdb, CdbLength); in OsSendCommand()
2774 pCmd->pOrgCommand = ccb; in OsSendCommand()
2775 pCmd->pVDevice = pVDev; in OsSendCommand()
2776 pCmd->pfnCompletion = fOsCommandDone; in OsSendCommand()
2777 pCmd->pfnBuildSgl = fOsBuildSgl; in OsSendCommand()
2778 pCmd->pSgTable = pmap->psg; in OsSendCommand()
2785 pCmd->uCmd.Ide.Lba = ((ULONG)Cdb[1] << 16) | ((ULONG)Cdb[2] << 8) | (ULONG)Cdb[3]; in OsSendCommand()
2786 pCmd->uCmd.Ide.nSectors = (USHORT) Cdb[4]; in OsSendCommand()
2791 pCmd->uCmd.Ide.Lba = in OsSendCommand()
2800 pCmd->uCmd.Ide.nSectors = (USHORT)Cdb[12] << 8 | (USHORT)Cdb[13]; in OsSendCommand()
2804 …pCmd->uCmd.Ide.Lba = (ULONG)Cdb[5] | ((ULONG)Cdb[4] << 8) | ((ULONG)Cdb[3] << 16) | ((ULONG)Cdb[2]… in OsSendCommand()
2805 pCmd->uCmd.Ide.nSectors = (USHORT) Cdb[8] | ((USHORT)Cdb[7]<<8); in OsSendCommand()
2814 pCmd->uCmd.Ide.Command = IDE_COMMAND_READ; in OsSendCommand()
2815 pCmd->cf_data_in = 1; in OsSendCommand()
2821 pCmd->uCmd.Ide.Command = IDE_COMMAND_WRITE; in OsSendCommand()
2822 pCmd->cf_data_out = 1; in OsSendCommand()
2826 pCmd->uCmd.Ide.Command = IDE_COMMAND_VERIFY; in OsSendCommand()
2830 pCmd->cf_physical_sg = 1; in OsSendCommand()
2831 error = bus_dmamap_load_ccb(pAdapter->io_dma_parent, in OsSendCommand()
2832 pmap->dma_map, in OsSendCommand()
2841 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in OsSendCommand()
2843 pAdapter->outstandingCommands--; in OsSendCommand()
2844 if (pAdapter->outstandingCommands == 0) in OsSendCommand()
2852 ccb->ccb_h.status = CAM_REQ_INVALID; in OsSendCommand()
2864 union ccb *ccb = pCmd->pOrgCommand; in fOsCommandDone()
2865 PBUS_DMAMAP pmap = (PBUS_DMAMAP)ccb->ccb_adapter; in fOsCommandDone()
2866 IAL_ADAPTER_T *pAdapter = pmap->pAdapter; in fOsCommandDone()
2868 KdPrint(("fOsCommandDone(pcmd=%p, result=%d)\n", pCmd, pCmd->Result)); in fOsCommandDone()
2870 callout_stop(&pmap->timeout); in fOsCommandDone()
2872 switch(pCmd->Result) { in fOsCommandDone()
2874 ccb->ccb_h.status = CAM_REQ_CMP; in fOsCommandDone()
2877 ccb->ccb_h.status = CAM_DEV_NOT_THERE; in fOsCommandDone()
2880 ccb->ccb_h.status = CAM_BUSY; in fOsCommandDone()
2883 ccb->ccb_h.status = CAM_REQ_INVALID; in fOsCommandDone()
2886 ccb->ccb_h.status = CAM_SEL_TIMEOUT; in fOsCommandDone()
2889 ccb->ccb_h.status = CAM_BUSY; in fOsCommandDone()
2892 ccb->ccb_h.status = CAM_SCSI_STATUS_ERROR; in fOsCommandDone()
2896 if (pCmd->cf_data_in) { in fOsCommandDone()
2897 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, BUS_DMASYNC_POSTREAD); in fOsCommandDone()
2899 else if (pCmd->cf_data_out) { in fOsCommandDone()
2900 bus_dmamap_sync(pAdapter->io_dma_parent, pmap->dma_map, BUS_DMASYNC_POSTWRITE); in fOsCommandDone()
2903 bus_dmamap_unload(pAdapter->io_dma_parent, pmap->dma_map); in fOsCommandDone()
2912 int p; in hpt_queue_dpc() local
2915 p = (DpcQueue_Last + 1) % MAX_DPC; in hpt_queue_dpc()
2916 if (p==DpcQueue_First) { in hpt_queue_dpc()
2919 return -1; in hpt_queue_dpc()
2926 DpcQueue_Last = p; in hpt_queue_dpc()
2950 os_free_page(_VBUS_ARG void *p) in os_free_page() argument
2952 free(p, M_DEVBUF); in os_free_page()
2956 os_free_dma_page(_VBUS_ARG void *p) in os_free_dma_page() argument
2958 free(p, M_DEVBUF); in os_free_dma_page()