⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 core_helper.h

📁 6440linuxDriver的源代码
💻 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 + -