📄 core_ibcd.h
字号:
/* Proposed Interface Between Core Driver and Discover Engine (IBCD)ObjectiveLooking for an interface to help extend the flexibility, since Discover Engine is planned to be used for different applications while the core driver has limited resource and dedicated function need.*/#define SAS_ADDR_SIZE 8#define MAXIMUM_DEVICE_PER_EXPANDER 36#define MAXIMUM_DISCOVER_REQUESTS 12#define CONTINUEREMAINDER 0xe0#define FINDBOUNDARY 0xe1/* TgtDevMap structure for core driver.*/typedef struct _Target_Dev{ MV_U8 Connection; MV_U8 DevType; MV_U8 PhyId; /* If SATA device, set PhyId of expander which attached sata device */ MV_U8 TargetBits; /* from Response.Discover.TargetBits */ MV_U8 NegotiatedLinkRate:4; MV_U8 MaxLinkRateCapability:4; /* give four bits for Max linkrate */ MV_U8 Reserved0[3]; MV_U8 DevSASAddr[SAS_ADDR_SIZE];}Target_Dev, *pTarget_Dev;typedef struct _Target_Info{ MV_U8 TotalDevCounts; /* Total device(only include SAS/SATA) counts attached behind a dedicated expander */ MV_U8 TgtId; /* dedicated expander ID */ MV_U8 PhyCount; MV_U8 TargetBits; /* from Response.Discover.TargetBits */ /* info needed by API */ MV_U16 MaxRouteIndexes; MV_U8 NegotiatedLinkRate; /* for SAS speed setting */ MV_U8 ParentPhyCount; MV_U8 ParentPhyId[MAX_WIDEPORT_PHYS]; MV_U8 VendorID[16]; MV_U8 ProductID[24]; MV_U8 ProductRev[8]; MV_U8 ComponentVendorID[16]; MV_U16 ComponentID; MV_U8 ComponentRevisionID; MV_U8 phyIdToContinueDisc; MV_U8 ParentSASAddr[SAS_ADDR_SIZE]; MV_U8 SASAddr[SAS_ADDR_SIZE];}Target_Info, *pTarget_Info;typedef struct _Target_Dev_Map{ Target_Info Info; Target_Dev TgtDev[0];}Target_Dev_Map, *pTarget_Dev_Map;enum { MAP_TGT_COUNT = 0, MAP_TGT_INFO};enum { STATUS_REQUEST_OK = 0, STATUS_REQUEST_QUEUE_FULL};/* Discover Engine will provide the following functions to call:*//* Get cached memory quota of discover engine for internal use */MV_VOID DISC_GetResource(OUT MV_U32 *Size, IN MV_U8 MaxTgt, IN MV_U16 MaxDev); /* Give assigned memory pointer and size for discover engine */MV_VOID DISC_SetResource(IN MV_PVOID pDISC_Extension, IN MV_U32 Size); /* Do a discover behind a dedicated expander from a dedicated port */MV_VOID DISC_DoDiscover(IN MV_PVOID pDISC_Extension, IN MV_PVOID PortExtension, IN MV_U8 *SasAddr, IN MV_U8 NegotiatedLinkRate, IN void (*pCallBack)(MV_PVOID pDiscoveryExtension,MV_PVOID This));/* Check a discover state behind a dedicated expander from a dedicated port */MV_VOID DISC_CheckDiscoverState(IN MV_PVOID pDISC_Extension, IN MV_PVOID PortExtension, IN MV_U8 TgtId, MV_U8 *State); MV_VOID DISC_CancelDiscover(IN MV_PVOID pDISC_Extension, IN MV_PVOID PortExtension); /* return a short form of device map behind a dedicated port/expander for the core driver use INPUT: Code - MAP_TGT_COUNT or MAP_TGT_INFO. MAP_TGT_COUNT: return number of discovered targets. MAP_TGT_INFO: return number of devices attached to target[TgtIndex], if pTgtDevMap is not NULL, will also return its device array. TgtIndex - Index to the target array, 0..n. pTgtDevMap - Pointer to allocated information memory.How it works from the core driver:1. call MAP_TGT_COUNT to get target count.2. for each target indicated by TgtIndex, 2a. get number of devices on this target with a NULL pTgtDevMap. 2b. after calculating required memory, get device array.*/ MV_U8 DISC_GetTgtDevMap(IN MV_PVOID pDISC_Extension, IN MV_PVOID PortExtension, IN MV_U8 Code, IN MV_U8 TgtIndex, OUT MV_PVOID pTgtDevMap);/* Core Driver will provide the following functions to call:*//* tell core driver to issue a SMP command from a dedicated port/expander *///MV_VOID CORE_IssueSMPRequest(IN MV_PVOID PortExtension, IN MV_U8 *SasAddr, IN MV_PVOID pSMPReq, IN void (*pCallBack)(MV_PVOID pDISC_Extension, MV_PVOID PortExtension, MV_U8 *SasAddr, MV_PVOID pSMPReq), MV_PVOID Context); /* tell core driver to get port sas address and root expander sas address from a dedicated port *///MV_VOID CORE_GetPortAddress(IN MV_PVOID PortExtension, OUT MV_U8 *SasAddr);/* ToDo:1. SMP request context.2. function details.Limitation:1. based on existing driver.2. only one internal request per target(expander) is reserved for use (one SMP command at one time).*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -