📄 core_helper.h
字号:
#if !defined(CORE_HELPER_H)#define CORE_HELPER_H#ifdef _OS_BIOSvoid Core_ReInitBaseAddress(MV_PVOID This);#endif#define IS_A_SMP_REQ(pReq) \ ((pReq->Cdb[0]==SCSI_CMD_MARVELL_SPECIFIC)&& \ (pReq->Cdb[1]==CDB_CORE_MODULE)&& \ (pReq->Cdb[2]==CDB_CORE_SMP))#define IS_A_TSK_REQ(pReq) \ ((pReq->Cdb[0]==SCSI_CMD_MARVELL_SPECIFIC)&& \ (pReq->Cdb[1]==CDB_CORE_MODULE)&& \ (pReq->Cdb[2]==CDB_CORE_TASK_MGMT))#define IS_SOFT_RESET_REQ(pReq) \ ((pReq->Cdb[0]==SCSI_CMD_MARVELL_SPECIFIC)&& \ (pReq->Cdb[1]==CDB_CORE_MODULE)&& \ (pReq->Cdb[2]==CDB_CORE_SOFT_RESET_1 || pReq->Cdb[2]==CDB_CORE_SOFT_RESET_0))#define IS_PM_REQ(pReq) \ ((pReq->Cdb[0]==SCSI_CMD_MARVELL_SPECIFIC)&& \ (pReq->Cdb[1]==CDB_CORE_MODULE)&& \ (pReq->Cdb[2]==CDB_CORE_PM_READ_REG || pReq->Cdb[2]==CDB_CORE_PM_WRITE_REG))#define DEVICE_IO_IS_BUSY(This, deviceId) \ ( ((PCore_Driver_Extension)This)->Devices[MapDeviceId(((PCore_Driver_Extension)This),deviceId)].Outstanding_Req>0 )MV_BOOLEAN Port_IsRequestRunning( PCore_Driver_Extension pCore, MV_U8 portId );PDomain_Device GetDeviceFromPool( PCore_Driver_Extension pCore );PDomain_Expander GetExpanderFromPool( PCore_Driver_Extension pCore );PDomain_Port GetPortFromPool( PCore_Driver_Extension pCore );void FreeDeviceToPool( PCore_Driver_Extension pCore, PDomain_Device pDevice );void FreeExpanderToPool( PCore_Driver_Extension pCore, PDomain_Expander pExpander );void FreePortToPool( PCore_Driver_Extension pCore, PDomain_Port pPort );void Port_AbortRequests(PDomain_Port pPort, MV_U8 ScsiStatus, PDomain_Device pDevice );PMV_Request GetInternalReqFromPool( PCore_Driver_Extension pCore );void FreeInternalReqToPool( PCore_Driver_Extension pCore, PMV_Request pReq);PSATA_Scratch_Buffer GetSATAScratchFromPool( PCore_Driver_Extension pCore );void FreeSATAScratchToPool( PCore_Driver_Extension pCore, PSATA_Scratch_Buffer* pSATASB);PSMP_Scratch_Buffer GetSMPScratchFromPool( PCore_Driver_Extension pCore );void FreeSMPScratchToPool( PCore_Driver_Extension pCore, PSMP_Scratch_Buffer pSMPSB);PSG_Buffer GetSGBufferFromPool( PCore_Driver_Extension pCore );void FreeSGBufferToPool( PCore_Driver_Extension pCore, PSG_Buffer* ppSGBuf);#ifdef CORE_SAS_SUPPORT_ATA_COMMANDPCORE_CONTEXT GetCoreContextFromPool( PCore_Driver_Extension pCore );void FreeCoreContextToPool( PCore_Driver_Extension pCore, PCORE_CONTEXT *pContext);void CoreSaveOriginalCDB( PCore_Driver_Extension pCore, PMV_Request pReq );void CoreRestoreOriginalCDB( PCore_Driver_Extension pCore, PMV_Request pReq );#endif#ifdef SUPPORT_LARGE_REQUEST#define GetSubReqCount(pCore) pCore->Sub_Req_CountPMV_Request GetSubReqFromPool( PCore_Driver_Extension pCore );void FreeSubReqToPool( PCore_Driver_Extension pCore, PMV_Request pReq);#endif#ifdef RAID6_HARDWARE_XORPXOR_Table_Wrapper GetXORTableWrapperFromPool( PCore_Driver_Extension pCore );void FreeXORTableWrapperToPool( PCore_Driver_Extension pCore, PXOR_Table_Wrapper* ppXORTableWrapper);PCORE_XOR_CONTEXT GetCoreXORContextFromPool( PCore_Driver_Extension pCore );void FreeCoreXORContextToPool( PCore_Driver_Extension pCore, PCORE_XOR_CONTEXT *ppContext);#endif#ifndef SOFTWARE_XORvoid XORWriteCommand(PCore_Driver_Extension pCore, PMV_XOR_Request pReq);void XORCompareCommand(PCore_Driver_Extension pCore, PMV_XOR_Request pReq);#endif#ifdef USE_DYN_REGISTER_SETvoid FreeRegisterSet(MV_PVOID This, PDomain_Device pDevice);void AssignRegisterSet(MV_PVOID This, PDomain_Device pDevice);#ifdef SUPPORT_PMvoid PM_FreeRegisterSet(MV_PVOID This, PDomain_PM pPM);MV_U8 PM_AssignRegisterSet(MV_PVOID This, PDomain_PM pPM);#endif#endif#ifdef SUPPORT_PMPDomain_PM GetPMFromPool(PCore_Driver_Extension pCore);void FreePMToPool( PCore_Driver_Extension pCore, PDomain_PM pPM );PDomain_Device GetPMDevice ( PDomain_Port pPort, PCore_Driver_Extension pCore, MV_U8 PM_Number );#endifvoid Core_GetSupportedCounts( MV_U16 maxIo, MV_PU8 pDevCount, MV_PU8 pExpanderCount, MV_PU8 pPMCount, MV_PU8 pInternalReqCount, MV_PU8 pSGEntryCount, MV_PU16 pSGBufferCount, MV_PU8 pSATAScratchCount, MV_PU8 pSMPScratchCount, MV_PU16 pSlotCount, MV_PU16 pContextCount, MV_PU16 pSubReqCount );void CompleteRequest( IN PCore_Driver_Extension pCore, IN PMV_Request pReq, IN MV_U8 RegSet );void CompleteRequestAndSlot( IN PCore_Driver_Extension pCore, IN PMV_Request pReq, IN PATA_TaskFile taskFiles );MV_VOID __add_timer(IN PCore_Driver_Extension pCore, IN PMV_Request pReq);MV_VOID __cancel_timer(IN PCore_Driver_Extension pCore, IN PDomain_Device pDevice, IN PMV_Request pReq);MV_VOID __renew_timer(IN PCore_Driver_Extension pCore, IN PMV_Request pReq);#ifdef SUPPORT_PMMV_VOID __PM_cancel_timer(IN PCore_Driver_Extension pCore, IN PDomain_PM pPM);#endif#ifdef USE_DYN_REGISTER_SET#define __try_free_register_set(_core, _dev) \ { \ if (((_dev)->Outstanding_Req == 0) && \ ((_dev)->Register_Set != ID_NOT_MAPPED)) \ FreeRegisterSet(_core, _dev); \ }#else /* USE_DYN_REGISTER_SET */#define __try_free_register_set(_core, _dev) do {} while (0)#endif /* USE_DYN_REGISTER_SET */static inline void __post_send_req(PCore_Driver_Extension pCore, PMV_Request pReq){ PDomain_Device pDevice; if (IS_A_SMP_REQ(pReq) || MapDeviceId(pCore, pReq->Device_Id) == ID_NOT_MAPPED) return; pDevice = &pCore->Devices[MapDeviceId(pCore, pReq->Device_Id)]; List_AddTail(&pReq->Queue_Pointer, &pDevice->Sent_Req_List); pDevice->Outstanding_Req++;}static inline void __post_complete_req(PCore_Driver_Extension pCore, PMV_Request pReq){ PDomain_Device pDevice; if (IS_A_SMP_REQ(pReq) || MapDeviceId(pCore, pReq->Device_Id) == ID_NOT_MAPPED) return; pDevice = &pCore->Devices[MapDeviceId(pCore, pReq->Device_Id)]; pDevice->Outstanding_Req--; __try_free_register_set(pCore, pDevice); List_Del(&pReq->Queue_Pointer);}void MV_DumpRegister(MV_PVOID This);void Port_AbortRequests( PDomain_Port pPort, MV_U8 ScsiStatus, PDomain_Device pDevice );MV_U16 GetNCQTag(PDomain_Device pDevice);PMV_Request FindRunningReqByTag(IN PCore_Driver_Extension pCore, IN MV_U16 Tag);MV_U16 GetOneCommandSlot(MV_PVOID This, PMV_Command_Header *pCmdHeader);MV_U32 SMPRespLength(MV_U8 Function);void Device_MakeRequestTaskRequest( IN PDomain_Port pPort, IN PMV_Request pOrgReq, IN MV_U8 TaskFunction );void Expander_SMPReq_Callback( IN PCore_Driver_Extension pCore, IN PMV_Request pReq );void Expander_SMPRequest_ReportGeneral( IN PDomain_Port pPort, IN PDomain_Expander pTgt );void Expander_SMPRequest_Discover( IN PDomain_Port pPort, IN PDomain_Expander pTgt, IN MV_U8 PhyId );void Expander_SMPRequest_PhyControl( IN PDomain_Port pPort, IN PDomain_Expander pTgt, IN MV_U8 PhyId, IN MV_U8 PhyOp, IN MV_U8 LinkRate );void mvScsiInquiry(PCore_Driver_Extension pCore, PMV_Request pReq);void mvScsiReadCapacity(PCore_Driver_Extension pCore, PMV_Request pReq);void mvScsiReportLun(PCore_Driver_Extension pCore, PMV_Request pReq);void mvScsiModeSense(PCore_Driver_Extension pCore, PMV_Request pReq);MV_BOOLEAN mvScsiModeSelect(PCore_Driver_Extension pCore, PMV_Request pReq);void mvScsiRequestSense(PCore_Driver_Extension pCore, PMV_Request pReq);void HandleDeviceReset(PCore_Driver_Extension pCore, PDomain_Device pDevice);void HandlePortReset(PCore_Driver_Extension pCore, PDomain_Port pPort);void SATSenseData(PMV_Request pReq, MV_U8 Status, MV_U8 Error, MV_U64 *pInfo);void RuntimeIssueReadLogExt( IN PDomain_Port pPort, IN PDomain_Device pDevice );void RemoveDevice( IN PCore_Driver_Extension pCore, IN PDomain_Port pPort, IN PDomain_Device pDevice );/* return id of the next active device, or ID_NOT_MAPPED if there's none */static inline MV_U16 __next_active_dev_id(PCore_Driver_Extension core, MV_U16 dev_id){ while (dev_id++ < core->PD_Count_Supported - 1) if (MapDeviceId(core, dev_id) != ID_NOT_MAPPED) return dev_id; return ID_NOT_MAPPED;}#endif /* CORE_HELPER_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -