/*++ Copyright (c) 1990 Microsoft Corporation Module Name: lsl.c Abstract: This file contains all the structures for the LSL driver. Author: Sean Selitrennikoff (SeanSe) 3-8-93 Environment: Kernel Mode. Revision History: --*/ typedef UCHAR MEON, *MEON_STRING; typedef UCHAR UINT8, *PUINT8; typedef USHORT UINT16, *PUINT16; typedef UINT UINT32, *PUINT32; typedef struct _UINT64_ { UINT32 Low_UINT32; UINT32 High_UINT32; } UINT64, *PUINT64; // // Definitions for Statistics Table Entries // typedef struct _StatTableEntry_ { UINT32 StatUseFlag; // -1 == not in use, 0 == *StatCounter is PUINT32, 1 == PUINT64 PVOID StatCounter; MEON_STRING *StatString; } StatTableEntry, *PStatTableEntry; // // Definitions for API Function Array passing, i.e. Information Block // typedef struct _INFO_BLOCK_ { UINT32 NumberOfAPIs; VOID (*SupportAPIArray[])(); } INFO_BLOCK, *PINFO_BLOCK; // // Definitions for LSL // typedef struct _LogBrdStatTableEntry_ { UINT32 LogBrd_TransmittedPackets; UINT32 LogBrd_ReceivedPackets; UINT32 LogBrd_UnclaimedPackets; UINT32 LogBrd_Reserved; } LogBrdStatTableEntry, *PLogBrdStatTableEntry; typedef struct _LSL_ConfigTable_ { UINT16 LConfigTableMajorVer; UINT16 LConfigTableMinorVer; MEON_STRING *LSLLongName; MEON_STRING *LSLShortName; UINT16 LSLMajorVer; UINT16 LSLMinorVer; UINT32 LMaxNumberOfBoards; UINT32 LMaxNumberOfStacks; UINT32 LConfigTableReserved0; UINT32 LConfigTableReserved1; UINT32 LConfigTableReserved2; } LSL_ConfigTable, *PLSL_ConfigTable; typedef struct _LSL_StatsTable_ { UINT16 LStatTableMajorVer; UINT16 LStatTableMinorVer; UINT32 LNumGenericCounters; StatTableEntry (*LGenericCountsPtr)[]; UINT32 LNumLogicalBoards; LogBrdStatTableEntry (*LogicalBoardStatTablePtr)[]; UINT32 LNumCustomCounters; StatTableEntry (*LCustomCountersPtr)[]; } LSL_StatsTable, *PLSL_StatsTable; // // Definitions for LookAhead and Event Control Blocks (ECB) // typedef struct _LOOKAHEAD_ { // // Media specific header // PUINT8 LkAhd_MediaHeaderPtr; // // Rest of lookahead // PUINT8 LkAhd_DataLookAheadPtr; UINT32 LkAhd_DataLookAheadLen; UINT32 LkAhd_FrameDataSize; UINT32 LkAhd_BoardNumber; UINT8 LkAhd_ProtocolID[6]; UINT16 LkAhd_PadAlignBytes1; UINT8 LkAhd_ImmediateAddress[6]; UINT16 LkAhd_PadAlignBytes2; UINT32 LkAhd_FrameDataStartCopyOffset; UINT32 LkAhd_FrameDataBytesWanted; UINT32 LkAhd_PktAttr; UINT32 LkAhd_DestType; PVOID LkAhd_Reserved0; PVOID LkAhd_Reserved1; } LOOKAHEAD, *PLOOKAHEAD; typedef struct _FRAGMENTSTRUCT_ { VOID *FragmentAddress; UINT32 FragmentLength; } FRAGMENTSTRUCT, *PFRAGMENTSTRUCT; typedef struct _ECB_ { struct _ECB_ *ECB_NextLink; struct _ECB_ *ECB_PreviousLink; UINT16 ECB_Status; VOID (*ECB_ESR)(struct _ECB_ *); UINT16 ECB_StackID; UINT8 ECB_ProtocolID[6]; UINT32 ECB_BoardNumber; UINT8 ECB_ImmediateAddress[6]; union { UINT8 DWs_i8val[8]; UINT16 DWs_i16val[4]; UINT32 DWs_i32val[2]; UINT64 DWs_i64val; PVOID DWs_pval; } ECB_DriverWorkspace; union { UINT8 PWs_i8val[8]; UINT16 PWs_i16val[4]; UINT32 PWs_i32val[2]; UINT64 PWs_i64val; PVOID PWs_pval[2]; } ECB_ProtocolWorkspace; UINT32 ECB_DataLength; UINT32 ECB_FragmentCount; FRAGMENTSTRUCT ECB_Fragment[1]; } ECB, *PECB; typedef struct _AESECB_ { struct _AESECB_ *AES_Link; UINT32 AES_MSecondValue; UINT16 AES_Status; VOID (*AES_ESR)(struct _ECB_ *); PVOID AES_Context; } AESECB, *PAESECB; // // Definitions for Protocol Stack Configuration And Statistics Tables // typedef struct _PS_ConfigTable_ { UINT16 PConfigTableMajorVer; UINT16 PConfigTableMinorVer; MEON_STRING *PProtocolLongName; MEON_STRING *PProtocolShortName; UINT16 PProtocolMajorVer; UINT16 PProtocolMinorVer; } PS_ConfigTable, *PPS_ConfigTable; typedef struct _PS_StatsTable_ { UINT16 PStatTableMajorVer; UINT16 PStatTableMinorVer; UINT32 PNumGenericCounters; StatTableEntry (*PGenericCountsPtr)[]; UINT32 PNumCustomCounters; StatTableEntry (*PCustomCountersPtr)[]; } PS_StatsTable, *PPS_StatsTable; // // Definitions for MLID Configuration and Statistics Tables and Misc structures // typedef struct _MLID_ConfigTable_ { UINT8 MLIDCFG_Signature[26]; UINT8 MLIDCFG_MajorVersion; UINT8 MLIDCFG_MinorVersion; UINT8 MLIDCFG_NodeAddress[6]; UINT16 MLIDCFG_ModeFlags; UINT16 MLIDCFG_BoardNumber; UINT16 MLIDCFG_BoardInstance; UINT32 MLIDCFG_MaxFrameSize; UINT32 MLIDCFG_BestDataSize; UINT32 MLIDCFG_WorstDataSize; MEON_STRING *MLIDCFG_CardName; MEON_STRING *MLIDCFG_ShortName; MEON_STRING *MLIDCFG_FrameTypeString; UINT16 MLIDCFG_Reserved0; UINT16 MLIDCFG_FrameID; UINT16 MLIDCFG_TransportTime; PVOID MLIDCFG_SourceRouting; UINT16 MLIDCFG_LineSpeed; UINT16 MLIDCFG_LookAheadSize; UINT8 MLIDCFG_Reserved1[8]; UINT8 MLIDCFG_DriverMajorVer; UINT8 MLIDCFG_DriverMinorVer; UINT16 MLIDCFG_Flags; UINT16 MLIDCFG_SendRetries; PVOID MLIDCFG_DriverLink; UINT16 MLIDCFG_SharingFlags; UINT16 MLIDCFG_Slot; UINT16 MLIDCFG_IOPort0; UINT16 MLIDCFG_IORange0; UINT16 MLIDCFG_IOPort1; UINT16 MLIDCFG_IORange1; UINT32 MLIDCFG_MemoryAddress0; UINT16 MLIDCFG_MemorySize0; UINT32 MLIDCFG_MemoryAddress1; UINT16 MLIDCFG_MemorySize1; UINT8 MLIDCFG_Interrupt0; UINT8 MLIDCFG_Interrupt1; UINT8 MLIDCFG_DMALine0; UINT8 MLIDCFG_DMALine1; PVOID MLIDCFG_ResourceTag; PVOID MLIDCFG_Config; PVOID MLIDCFG_CommandString; UINT8 MLIDCFG_LogicalName[6]; UINT32 MLIDCFG_LinearMemory0; UINT32 MLIDCFG_LinearMemory1; UINT16 MLIDCFG_ChannelNumber; UINT16 MLIDCFG_BusTag; UINT8 MLIDCFG_IOReserved[4]; } MLID_ConfigTable, *PMLID_ConfigTable; typedef struct _MLID_StatsTable_ { UINT16 MStatTableMajorVer; UINT16 MStatTableMinorVer; UINT32 MNumGenericCounters; StatTableEntry (*MGenericCountsPtr)[]; UINT32 MNumMediaCounters; StatTableEntry (*MMediaCountsPtr)[]; UINT32 MNumCustomCounters; StatTableEntry (*MCustomCoutnersPtr)[]; } MLID_StatsTable, *PMLID_StatsTable; typedef struct _MLID_Reg_ { VOID (*MLIDSendHandler)(PECB); PINFO_BLOCK MLIDControlHandler; } MLID_Reg, *PMLID_Reg; // // Definitions for Bound Protocol Stacks // typedef struct _PS_BoundNode_ { MEON_STRING *ProtocolName; PECB (*ProtocolReceiveHandler)(PLOOKAHEAD); PINFO_BLOCK ProtocolControlHandler; } PS_BoundNode, *PPS_BoundNode; // // Definitions for PreScan Rx and Default Chained Protocol Stacks // typedef struct _PS_ChainedRxNode_ { struct _PS_ChainedRxNode_ *StackChainLink; UINT32 StackChainBoardNumber; UINT32 StackChainPositionRequested; PECB (*StackChainHandler)(PLOOKAHEAD); PINFO_BLOCK StackChainControl; UINT32 StackChainFilter; PVOID StackChainContext; } PS_ChainedRxNode, *PPS_ChainedRxNode; // // Definitions for PreScan Tx Chained Protocol Stacks // typedef struct _PS_ChainedTxNode_ { struct _PS_ChainedTxNode_ *StackChainLink; UINT32 StackChainBoardNumber; UINT32 StackChainPositionRequested; UINT32 (*StackChainHandler)(PECB); PINFO_BLOCK StackChainControl; UINT32 StackChainFilter; PVOID StackChainContext; } PS_ChainedTxNode, *PPS_ChainedTxNode; // // Return value definitions // #define SUCCESSFUL 0x00000000 #define RESPONSE_DELAYED 0x00000001 #define BAD_COMMAND 0xFFFFFF81 #define BAD_PARAMETER 0xFFFFFF82 #define DUPLICATE_ENTRY 0xFFFFFF83 #define FAIL 0xFFFFFF84 #define ITEM_NOT_PRESENT 0xFFFFFF85 #define NO_MORE_ITEMS 0xFFFFFF86 #define NO_SUCH_DRIVER 0xFFFFFF87 #define NO_SUCH_HANDLER 0xFFFFFF88 #define OUT_OF_RESOURCES 0xFFFFFF89 #define RX_OVERFLOW 0xFFFFFF8A #define IN_CRITICAL_SECTION 0xFFFFFF8B #define TRANSMIT_FAILED 0xFFFFFF8C #define PACKET_UNDELIVERABLE 0xFFFFFF8D #define CANCELED 0xFFFFFFFC // // Definitions for Protocol Control Operations // #define GetProtocolStackConfiguration_INDEX 0 #define GetProtocolStackStatistics_INDEX 1 #define Bind_INDEX 2 #define MLIDDeRegistered_INDEX 3 #define UnBind_INDEX 4 #define PromiscuousStatus_INDEX 5 typedef UINT32 (*PCO_Bind)(UINT32, MEON_STRING *); typedef PPS_ConfigTable (*PCO_GetProtocolStackConfiguration)(VOID); typedef PPS_StatsTable (*PCO_GetProtocolStackStatistics)(VOID); typedef VOID (*PCO_MLIDDeRegistered)(UINT32); typedef UINT32 (*PCO_UnBind)(UINT32, UINT32); typedef UINT32 (*PCO_PromiscuousState)(UINT32, UINT32); // // Definitions for LSL API Services // #define GetSizeECB_INDEX 0 #define ReturnECB_INDEX 1 #define CancelEvent_INDEX 2 #define ScheduleAESEvent_INDEX 3 #define CancelAESEvent_INDEX 4 #define GetIntervalMarker_INDEX 5 #define RegisterStack_INDEX 6 #define DeRegisterStack_INDEX 7 #define LSLReserved0_INDEX 8 #define LSLReserved1_INDEX 9 #define LSLReserved2_INDEX 10 #define GetStackECB_INDEX 11 #define SendPacket_INDEX 12 #define FastSendComplete_INDEX 13 #define SendComplete_INDEX 14 #define RegisterMLID_INDEX 15 #define GetStackIDFromName_INDEX 16 #define GetPIDFromStackIDBoard_INDEX 17 #define GetMLIDControlEntry_INDEX 18 #define GetProtocolControlEntry_INDEX 19 #define GetLSLStatistics_INDEX 20 #define BindStack_INDEX 21 #define UnbindStack_INDEX 22 #define AddProtocolID_INDEX 23 #define GetBoundBoardInfo_INDEX 24 #define GetLSLConfiguration_INDEX 25 #define DeRegisterMLID_INDEX 26 #define RegisterDefaultChain_INDEX 27 #define RegisterPreScanRxChain_INDEX 28 #define RegisterPreScanTxChain_INDEX 29 #define DeRegisterDefaultChain_INDEX 30 #define DeRegisterPreScanRxChain_INDEX 31 #define DeRegisterPreScanTxChain_INDEX 32 #define GetStartofChain_INDEX 33 #define ReSubmitDefault_INDEX 34 #define ReSubmitPreScanRx_INDEX 35 #define ReSubmitPreScanTx_INDEX 36 #define HoldEvent_INDEX 37 #define FastHoldEvent_INDEX 38 #define GetMaxECBBufferSize_INDEX 39 #define LSLReserved3_INDEX 40 #define ServiceEvents_INDEX 41 #define ModifyStackEvents_INDEX 42 #define ControlStackFilter_INDEX 43 // // Definitions for MLID Control Services // #define MCS_GetMLIDConfiguration_INDEX 0x00 #define MCS_GetMLIDStatistics_INDEX 0x01 #define MCS_AddMulticastAddress_INDEX 0x02 #define MCS_DeleteMulticastAddress_INDEX 0x03 #define MCS_MLIDShutdown_INDEX 0x05 #define MCS_MLIDReset_INDEX 0x06 #define MCS_SetLookAheadSize_INDEX 0x09 #define MCS_PromiscuousChange_INDEX 0x0A #define MCS_MLIDManagement_INDEX 0x0D typedef PVOID (*PLSL_SR_FUNCTION)(UINT32, PUINT32, PUINT8);