1bcecde140a561c64e297225904afebebd62336cejljusten/** @file 2bcecde140a561c64e297225904afebebd62336cejljusten These are PXE Specification 2.1-compliant data structures and defines. 3bcecde140a561c64e297225904afebebd62336cejljusten 4bcecde140a561c64e297225904afebebd62336cejljusten This file relies upon the existence of a PXE-compliant ROM 5bcecde140a561c64e297225904afebebd62336cejljusten in memory, as defined by the Preboot Execution Environment 6bcecde140a561c64e297225904afebebd62336cejljusten Specification (PXE), Version 2.1, located at 7bcecde140a561c64e297225904afebebd62336cejljusten 8bcecde140a561c64e297225904afebebd62336cejljusten http://developer.intel.com/ial/wfm/wfmspecs.htm 9bcecde140a561c64e297225904afebebd62336cejljusten 10bcecde140a561c64e297225904afebebd62336cejljustenCopyright (c) 1999 - 2010, Intel Corporation. All rights reserved.<BR> 11bcecde140a561c64e297225904afebebd62336cejljusten 12bcecde140a561c64e297225904afebebd62336cejljustenThis program and the accompanying materials 13bcecde140a561c64e297225904afebebd62336cejljustenare licensed and made available under the terms and conditions 14bcecde140a561c64e297225904afebebd62336cejljustenof the BSD License which accompanies this distribution. The 15bcecde140a561c64e297225904afebebd62336cejljustenfull text of the license may be found at 16bcecde140a561c64e297225904afebebd62336cejljustenhttp://opensource.org/licenses/bsd-license.php 17bcecde140a561c64e297225904afebebd62336cejljusten 18bcecde140a561c64e297225904afebebd62336cejljustenTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 19bcecde140a561c64e297225904afebebd62336cejljustenWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 20bcecde140a561c64e297225904afebebd62336cejljusten 21bcecde140a561c64e297225904afebebd62336cejljusten**/ 22bcecde140a561c64e297225904afebebd62336cejljusten 23bcecde140a561c64e297225904afebebd62336cejljusten#ifndef _PXEDEF_H_ 24bcecde140a561c64e297225904afebebd62336cejljusten#define _PXEDEF_H_ 25bcecde140a561c64e297225904afebebd62336cejljusten 26bcecde140a561c64e297225904afebebd62336cejljusten#pragma pack(1) 27bcecde140a561c64e297225904afebebd62336cejljusten 28bcecde140a561c64e297225904afebebd62336cejljusten// 29bcecde140a561c64e297225904afebebd62336cejljusten// PXE structure signatures 30bcecde140a561c64e297225904afebebd62336cejljusten// 31bcecde140a561c64e297225904afebebd62336cejljusten#define BC_ROMID_SIG "$BC$" 32bcecde140a561c64e297225904afebebd62336cejljusten#define UNDI_ROMID_SIG "UNDI" 33bcecde140a561c64e297225904afebebd62336cejljusten#define BUSD_ROMID_SIG "BUSD" 34bcecde140a561c64e297225904afebebd62336cejljusten 35bcecde140a561c64e297225904afebebd62336cejljusten#define PXE_SIG "!PXE" 36bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_SIG "PXENV+" 37bcecde140a561c64e297225904afebebd62336cejljusten 38bcecde140a561c64e297225904afebebd62336cejljusten#define BC_ROMID_REV 0x00 39bcecde140a561c64e297225904afebebd62336cejljusten#define UNDI_ROMID_REV 0x00 40bcecde140a561c64e297225904afebebd62336cejljusten#define BUSD_ROMID_REV 0x00 41bcecde140a561c64e297225904afebebd62336cejljusten 42bcecde140a561c64e297225904afebebd62336cejljusten#define PXE_REV 0x00 43bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_REV 0x0201 44bcecde140a561c64e297225904afebebd62336cejljusten 45bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_PTR SIGNATURE_32 ('P', 'X', 'E', 'N') 46bcecde140a561c64e297225904afebebd62336cejljusten#define PXE_PTR SIGNATURE_32 ('!', 'P', 'X', 'E') 47bcecde140a561c64e297225904afebebd62336cejljusten#define UNDI_ROMID_SIG_PTR SIGNATURE_32 ('U', 'N', 'D', 'I') 48bcecde140a561c64e297225904afebebd62336cejljusten 49bcecde140a561c64e297225904afebebd62336cejljustentypedef UINT16 SEGSEL; // Real mode segment or protected mode selector. 50bcecde140a561c64e297225904afebebd62336cejljustentypedef UINT16 OFF16; // Unsigned 16bit offset. 51bcecde140a561c64e297225904afebebd62336cejljustentypedef UINT32 ADDR32; 52bcecde140a561c64e297225904afebebd62336cejljusten 53bcecde140a561c64e297225904afebebd62336cejljusten// 54bcecde140a561c64e297225904afebebd62336cejljusten// Bus types 55bcecde140a561c64e297225904afebebd62336cejljusten// 56bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_BUS_ISA 0 57bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_BUS_EISA 1 58bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_BUS_MCA 2 59bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_BUS_PCI 3 60bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_BUS_VESA 4 61bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_BUS_PCMCIA 5 62bcecde140a561c64e297225904afebebd62336cejljusten 63bcecde140a561c64e297225904afebebd62336cejljusten// 64bcecde140a561c64e297225904afebebd62336cejljusten// 65bcecde140a561c64e297225904afebebd62336cejljusten// Result codes returned in AX by a PXENV API service. 66bcecde140a561c64e297225904afebebd62336cejljusten// 67bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_EXIT_SUCCESS 0x0000 68bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_EXIT_FAILURE 0x0001 69bcecde140a561c64e297225904afebebd62336cejljusten 70bcecde140a561c64e297225904afebebd62336cejljusten// 71bcecde140a561c64e297225904afebebd62336cejljusten// Status codes returned in the status word of PXENV API parameter structures. 72bcecde140a561c64e297225904afebebd62336cejljusten// 73bcecde140a561c64e297225904afebebd62336cejljusten// Generic API errors - these do not match up with the M0x or E0x messages 74bcecde140a561c64e297225904afebebd62336cejljusten// that are reported by the loader. 75bcecde140a561c64e297225904afebebd62336cejljusten// 76bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_SUCCESS 0x00 77bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_FAILURE 0x01 78bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_BAD_FUNC 0x02 79bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNSUPPORTED 0x03 80bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_KEEP_UNDI 0x04 81bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_KEEP_ALL 0x05 82bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_OUT_OF_RESOURCES 0x06 83bcecde140a561c64e297225904afebebd62336cejljusten 84bcecde140a561c64e297225904afebebd62336cejljustentypedef enum { 85bcecde140a561c64e297225904afebebd62336cejljusten PxeEnvStatus_Success, 86bcecde140a561c64e297225904afebebd62336cejljusten PxeEnvStatus_Failure, 87bcecde140a561c64e297225904afebebd62336cejljusten PxeEnvStatus_BadFunc, 88bcecde140a561c64e297225904afebebd62336cejljusten PxeEnvStatus_Unsupported, 89bcecde140a561c64e297225904afebebd62336cejljusten PxeEnvStatus_KeepUndi, 90bcecde140a561c64e297225904afebebd62336cejljusten PxeEnvStatus_KeepAll 91bcecde140a561c64e297225904afebebd62336cejljusten} EFI_PXE_STATUS; 92bcecde140a561c64e297225904afebebd62336cejljusten 93bcecde140a561c64e297225904afebebd62336cejljusten/* Driver errors (0x60 to 0x6F) */ 94bcecde140a561c64e297225904afebebd62336cejljusten 95bcecde140a561c64e297225904afebebd62336cejljusten// These errors are for UNDI compatible NIC drivers. 96bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_INVALID_FUNCTION 0x60 97bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_MEDIATEST_FAILED 0x61 98bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_CANNOT_INIT_NIC_FOR_MCAST 0x62 99bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_NIC 0x63 100bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_PHY 0x64 101bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_CANNOT_READ_CONFIG_DATA 0x65 102bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_CANNOT_READ_INIT_DATA 0x66 103bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_BAD_MAC_ADDR 0x67 104bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_BAD_EEPROM_CKSUM 0x68 105bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_ERROR_SETTING_ISR 0x69 106bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_INVALID_STATE 0x6A 107bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_TRANSMIT_ERROR 0x6B 108bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STATUS_UNDI_INVALID_PARAMETER 0x6C 109bcecde140a561c64e297225904afebebd62336cejljusten 110bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 111bcecde140a561c64e297225904afebebd62336cejljusten UINT16 Seg_Addr; 112bcecde140a561c64e297225904afebebd62336cejljusten UINT32 Phy_Addr; 113bcecde140a561c64e297225904afebebd62336cejljusten UINT16 Seg_Size; 114bcecde140a561c64e297225904afebebd62336cejljusten} NEWSEGDESC_T; 115bcecde140a561c64e297225904afebebd62336cejljusten 116bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 117bcecde140a561c64e297225904afebebd62336cejljusten OFF16 Offset; 118bcecde140a561c64e297225904afebebd62336cejljusten SEGSEL Segment; 119bcecde140a561c64e297225904afebebd62336cejljusten} SEGOFF16; 120bcecde140a561c64e297225904afebebd62336cejljusten 121bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 122bcecde140a561c64e297225904afebebd62336cejljusten UINT8 Signature[4]; ///< Structure signature is not NULL terminated. 123bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructLength; ///< Length of this structure in bytes. 124bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero. 125bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructRev; ///< Structure format revision number. 126bcecde140a561c64e297225904afebebd62336cejljusten UINT8 UNDI_Rev[3]; ///< API revision number stored in Intel order. 127bcecde140a561c64e297225904afebebd62336cejljusten // 128bcecde140a561c64e297225904afebebd62336cejljusten // Revision 2.1.0 == 0x00, 0x01, 0x02 129bcecde140a561c64e297225904afebebd62336cejljusten // 130bcecde140a561c64e297225904afebebd62336cejljusten UINT16 UNDI_Loader; ///< Offset of UNDI loader routine in the option ROM image. 131bcecde140a561c64e297225904afebebd62336cejljusten UINT16 StackSize; ///< Minimum stack segment size, in bytes, needed to load and run the UNDI. 132bcecde140a561c64e297225904afebebd62336cejljusten UINT16 DataSize; ///< UNDI runtime code and data 133bcecde140a561c64e297225904afebebd62336cejljusten UINT16 CodeSize; ///< segment sizes. 134bcecde140a561c64e297225904afebebd62336cejljusten UINT8 BusType[4]; ///< 'ISAR', 'EISA', 'PCIR', 'PCCR' 135bcecde140a561c64e297225904afebebd62336cejljusten} UNDI_ROMID_T; 136bcecde140a561c64e297225904afebebd62336cejljusten 137bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 138bcecde140a561c64e297225904afebebd62336cejljusten UINT8 Signature[4]; ///< Structure signature is not NULL terminated. 139bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructLength; ///< Length of this structure in bytes. 140bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero. 141bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructRev; ///< Structure format revision number. 142bcecde140a561c64e297225904afebebd62336cejljusten UINT8 BC_Rev[3]; ///< API revision number stored in Intel order. 143bcecde140a561c64e297225904afebebd62336cejljusten // 144bcecde140a561c64e297225904afebebd62336cejljusten // Revision 2.1.0 == 0x00, 0x01, 0x02 145bcecde140a561c64e297225904afebebd62336cejljusten // 146bcecde140a561c64e297225904afebebd62336cejljusten UINT16 BC_Loader; ///< Offset of base-code loader routine in the option ROM image. 147bcecde140a561c64e297225904afebebd62336cejljusten UINT16 StackSize; ///< Minimum stack segment size (bytes) needed to load/run base-code. 148bcecde140a561c64e297225904afebebd62336cejljusten UINT16 DataSize; ///< Base-code runtime code and data 149bcecde140a561c64e297225904afebebd62336cejljusten UINT16 CodeSize; ///< segment sizes. 150bcecde140a561c64e297225904afebebd62336cejljusten} BC_ROMID_T; 151bcecde140a561c64e297225904afebebd62336cejljusten 152bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 153bcecde140a561c64e297225904afebebd62336cejljusten UINT8 Signature[4]; ///< Structure signature is not NULL terminated. 154bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructLength; ///< Length of this structure in bytes. 155bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero. 156bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructRev; ///< Structure format revision number. 157bcecde140a561c64e297225904afebebd62336cejljusten UINT8 Reserved1; ///< must be zero 158bcecde140a561c64e297225904afebebd62336cejljusten /// 159bcecde140a561c64e297225904afebebd62336cejljusten /// UNDI_ROMID_T __FAR *UNDI;// Far pointer to UNDI ROMID 160bcecde140a561c64e297225904afebebd62336cejljusten /// 161bcecde140a561c64e297225904afebebd62336cejljusten SEGOFF16 Undi; 162bcecde140a561c64e297225904afebebd62336cejljusten 163bcecde140a561c64e297225904afebebd62336cejljusten /// 164bcecde140a561c64e297225904afebebd62336cejljusten /// BC_ROMID_T __FAR *Base; // Far pointer to base-code ROMID 165bcecde140a561c64e297225904afebebd62336cejljusten /// 166bcecde140a561c64e297225904afebebd62336cejljusten SEGOFF16 Base; 167bcecde140a561c64e297225904afebebd62336cejljusten 168bcecde140a561c64e297225904afebebd62336cejljusten /// 169bcecde140a561c64e297225904afebebd62336cejljusten /// UINT16 (__FAR __CDECL *EntryPointSP)(UINT16 func, VOID __FAR *param); 170bcecde140a561c64e297225904afebebd62336cejljusten /// 16bit stack segment API entry point. This will be seg:off in 171bcecde140a561c64e297225904afebebd62336cejljusten /// real mode and sel:off in 16:16 protected mode. 172bcecde140a561c64e297225904afebebd62336cejljusten /// 173bcecde140a561c64e297225904afebebd62336cejljusten SEGOFF16 EntryPointSP; 174bcecde140a561c64e297225904afebebd62336cejljusten 175bcecde140a561c64e297225904afebebd62336cejljusten /// 176bcecde140a561c64e297225904afebebd62336cejljusten /// UINT16 (__FAR __CDECL *EntryPointESP)(UINT16 func, VOID __FAR *param); 177bcecde140a561c64e297225904afebebd62336cejljusten /// 32bit stack segment API entry point. This will be sel:off. 178bcecde140a561c64e297225904afebebd62336cejljusten /// In real mode, sel == 0 179bcecde140a561c64e297225904afebebd62336cejljusten /// 180bcecde140a561c64e297225904afebebd62336cejljusten SEGOFF16 EntryPointESP; 181bcecde140a561c64e297225904afebebd62336cejljusten /// 182bcecde140a561c64e297225904afebebd62336cejljusten /// UINT16 (__FAR __CDECL *StatusCallout)(UINT16 param); 183bcecde140a561c64e297225904afebebd62336cejljusten /// Address of DHCP/TFTP status callout routine. 184bcecde140a561c64e297225904afebebd62336cejljusten /// 185bcecde140a561c64e297225904afebebd62336cejljusten SEGOFF16 StatusCallout; 186bcecde140a561c64e297225904afebebd62336cejljusten UINT8 Reserved2; ///< must be zero 187bcecde140a561c64e297225904afebebd62336cejljusten UINT8 SegDescCnt; ///< Number of segment descriptors in this structure. 188bcecde140a561c64e297225904afebebd62336cejljusten UINT16 FirstSelector; ///< First segment descriptor in GDT assigned to PXE. 189bcecde140a561c64e297225904afebebd62336cejljusten NEWSEGDESC_T Stack; 190bcecde140a561c64e297225904afebebd62336cejljusten NEWSEGDESC_T UNDIData; 191bcecde140a561c64e297225904afebebd62336cejljusten NEWSEGDESC_T UNDICode; 192bcecde140a561c64e297225904afebebd62336cejljusten NEWSEGDESC_T UNDICodeWrite; 193bcecde140a561c64e297225904afebebd62336cejljusten NEWSEGDESC_T BC_Data; 194bcecde140a561c64e297225904afebebd62336cejljusten NEWSEGDESC_T BC_Code; 195bcecde140a561c64e297225904afebebd62336cejljusten NEWSEGDESC_T BC_CodeWrite; 196bcecde140a561c64e297225904afebebd62336cejljusten} PXE_T; 197bcecde140a561c64e297225904afebebd62336cejljusten 198bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 199bcecde140a561c64e297225904afebebd62336cejljusten CHAR8 Signature[6]; ///< "PXENV+" 200bcecde140a561c64e297225904afebebd62336cejljusten UINT16 Version; ///< PXE version number. LSB is minor version. MSB is major version. 201bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructLength; ///< Length of PXE-2.0 Entry Point structure in bytes. 202bcecde140a561c64e297225904afebebd62336cejljusten UINT8 StructCksum; ///< Used to make structure checksum equal zero. 203bcecde140a561c64e297225904afebebd62336cejljusten UINT32 RMEntry; ///< Real mode API entry point segment:offset. 204bcecde140a561c64e297225904afebebd62336cejljusten UINT32 PMEntryOff; ///< Protected mode API entry point 205bcecde140a561c64e297225904afebebd62336cejljusten UINT16 PMEntrySeg; ///< segment:offset. This will always be zero. Protected mode API calls 206bcecde140a561c64e297225904afebebd62336cejljusten ///< must be made through the API entry points in the PXE Runtime ID structure. 207bcecde140a561c64e297225904afebebd62336cejljusten 208bcecde140a561c64e297225904afebebd62336cejljusten UINT16 StackSeg; ///< Real mode stack segment. 209bcecde140a561c64e297225904afebebd62336cejljusten UINT16 StackSize; ///< Stack segment size in bytes. 210bcecde140a561c64e297225904afebebd62336cejljusten UINT16 BaseCodeSeg; ///< Real mode base-code code segment. 211bcecde140a561c64e297225904afebebd62336cejljusten UINT16 BaseCodeSize; ///< Base-code code segment size 212bcecde140a561c64e297225904afebebd62336cejljusten UINT16 BaseDataSeg; ///< Real mode base-code data segment. 213bcecde140a561c64e297225904afebebd62336cejljusten UINT16 BaseDataSize; ///< Base-code data segment size 214bcecde140a561c64e297225904afebebd62336cejljusten UINT16 UNDIDataSeg; ///< Real mode UNDI data segment. 215bcecde140a561c64e297225904afebebd62336cejljusten UINT16 UNDIDataSize; ///< UNDI data segment size in bytes. 216bcecde140a561c64e297225904afebebd62336cejljusten UINT16 UNDICodeSeg; ///< Real mode UNDI code segment. 217bcecde140a561c64e297225904afebebd62336cejljusten UINT16 UNDICodeSize; ///< UNDI code segment size in bytes. 218bcecde140a561c64e297225904afebebd62336cejljusten PXE_T *RuntimePtr; ///< Real mode segment:offset pointer to PXE Runtime ID structure. 219bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_T; 220bcecde140a561c64e297225904afebebd62336cejljusten 221bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 222bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; 223bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 Ax; 224bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 Bx; 225bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 Dx; 226bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 Di; 227bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 Es; 228bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 Undi_Ds; 229bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 Undi_Cs; 230bcecde140a561c64e297225904afebebd62336cejljusten OUT SEGOFF16 PXEptr; 231bcecde140a561c64e297225904afebebd62336cejljusten OUT SEGOFF16 PXENVptr; 232bcecde140a561c64e297225904afebebd62336cejljusten} UNDI_LOADER_T; 233bcecde140a561c64e297225904afebebd62336cejljusten 234bcecde140a561c64e297225904afebebd62336cejljusten// 235bcecde140a561c64e297225904afebebd62336cejljusten// Put in some UNDI-specific arguments 236bcecde140a561c64e297225904afebebd62336cejljusten// 237bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_START_UNDI 0x0000 238bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_STARTUP 0x0001 239bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_CLEANUP 0x0002 240bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_INITIALIZE 0x0003 241bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_RESET_NIC 0x0004 242bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_SHUTDOWN 0x0005 243bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_OPEN 0x0006 244bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_CLOSE 0x0007 245bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_TRANSMIT 0x0008 246bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_SET_MCAST_ADDR 0x0009 247bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_SET_STATION_ADDR 0x000A 248bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_SET_PACKET_FILTER 0x000B 249bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_GET_INFORMATION 0x000C 250bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_GET_STATISTICS 0x000D 251bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_CLEAR_STATISTICS 0x000E 252bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_INITIATE_DIAGS 0x000F 253bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_FORCE_INTERRUPT 0x0010 254bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_GET_MCAST_ADDR 0x0011 255bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_GET_NIC_TYPE 0x0012 256bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_GET_NDIS_INFO 0x0013 257bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR 0x0014 258bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_STOP_UNDI 0x0015 259bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_GET_STATE 0x0016 260bcecde140a561c64e297225904afebebd62336cejljusten 261bcecde140a561c64e297225904afebebd62336cejljusten#define ADDR_LEN 16 262bcecde140a561c64e297225904afebebd62336cejljusten#define MAXNUM_MCADDR 8 263bcecde140a561c64e297225904afebebd62336cejljusten#define IPLEN 4 ///< length of an IP address 264bcecde140a561c64e297225904afebebd62336cejljusten#define XMT_DESTADDR 0x0000 ///< destination address given 265bcecde140a561c64e297225904afebebd62336cejljusten#define XMT_BROADCAST 0x0001 ///< use broadcast address 266bcecde140a561c64e297225904afebebd62336cejljusten 267bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 268bcecde140a561c64e297225904afebebd62336cejljusten UINT16 MCastAddrCount; ///< In: Number of multi-cast 269bcecde140a561c64e297225904afebebd62336cejljusten 270bcecde140a561c64e297225904afebebd62336cejljusten /* addresses. */ 271bcecde140a561c64e297225904afebebd62336cejljusten UINT8 MCastAddr[MAXNUM_MCADDR][ADDR_LEN]; /* In: */ 272bcecde140a561c64e297225904afebebd62336cejljusten 273bcecde140a561c64e297225904afebebd62336cejljusten /* list of multi-cast addresses. */ 274bcecde140a561c64e297225904afebebd62336cejljusten 275bcecde140a561c64e297225904afebebd62336cejljusten /* Each address can take up to */ 276bcecde140a561c64e297225904afebebd62336cejljusten 277bcecde140a561c64e297225904afebebd62336cejljusten /* ADDR_LEN bytes and a maximum */ 278bcecde140a561c64e297225904afebebd62336cejljusten 279bcecde140a561c64e297225904afebebd62336cejljusten /* of MAXNUM_MCADDR address can */ 280bcecde140a561c64e297225904afebebd62336cejljusten 281bcecde140a561c64e297225904afebebd62336cejljusten /* be provided*/ 282bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_MCAST_ADDR_T; 283bcecde140a561c64e297225904afebebd62336cejljusten 284bcecde140a561c64e297225904afebebd62336cejljusten/* Definitions of TFTP API parameter structures. 285bcecde140a561c64e297225904afebebd62336cejljusten */ 286bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 287bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 288bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 Ax; ///< In: These register fields must be 289bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 Bx; ///< filled in with the same data 290bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 Dx; ///< that was passed to the MLID 291bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 Di; ///< option ROM boot code by the 292bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 Es; ///< system BIOS. 293bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_START_UNDI_T; 294bcecde140a561c64e297225904afebebd62336cejljusten 295bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 296bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 297bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_STARTUP_T; 298bcecde140a561c64e297225904afebebd62336cejljusten 299bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 300bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 301bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_CLEANUP_T; 302bcecde140a561c64e297225904afebebd62336cejljusten 303bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 304bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 305bcecde140a561c64e297225904afebebd62336cejljusten 306bcecde140a561c64e297225904afebebd62336cejljusten /// 307bcecde140a561c64e297225904afebebd62336cejljusten /// This is an input parameter and is a 32-bit physical address of 308bcecde140a561c64e297225904afebebd62336cejljusten /// a memory copy of the driver module in the protocol.ini file 309bcecde140a561c64e297225904afebebd62336cejljusten /// obtained from the Protocol Manager driver(refer to NDIS 2.0 310bcecde140a561c64e297225904afebebd62336cejljusten /// specifications). This parameter is basically supported for 311bcecde140a561c64e297225904afebebd62336cejljusten /// the universal NDIS driver to pass the information contained in 312bcecde140a561c64e297225904afebebd62336cejljusten /// protocol.ini file to the NIC driver for any specific 313bcecde140a561c64e297225904afebebd62336cejljusten /// configuration of the NIC. (Note that the module 314bcecde140a561c64e297225904afebebd62336cejljusten /// identification in the protocol.ini file was done by NDIS 315bcecde140a561c64e297225904afebebd62336cejljusten /// itself.) This value can be NULL for for any other application 316bcecde140a561c64e297225904afebebd62336cejljusten /// interfacing to the Universal NIC Driver. 317bcecde140a561c64e297225904afebebd62336cejljusten /// 318bcecde140a561c64e297225904afebebd62336cejljusten IN UINT32 ProtocolIni; 319bcecde140a561c64e297225904afebebd62336cejljusten UINT8 Reserved[8]; 320bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_INITIALIZE_T; 321bcecde140a561c64e297225904afebebd62336cejljusten 322bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 323bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 324bcecde140a561c64e297225904afebebd62336cejljusten IN PXENV_UNDI_MCAST_ADDR_T R_Mcast_Buf; ///< multicast address list 325bcecde140a561c64e297225904afebebd62336cejljusten /* see note below */ 326bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_RESET_T; 327bcecde140a561c64e297225904afebebd62336cejljusten 328bcecde140a561c64e297225904afebebd62336cejljusten/*++ 329bcecde140a561c64e297225904afebebd62336cejljusten Note: The NIC driver does not remember the multicast 330bcecde140a561c64e297225904afebebd62336cejljusten addresses provided in any call. So the application must 331bcecde140a561c64e297225904afebebd62336cejljusten provide the multicast address list with all the calls that 332bcecde140a561c64e297225904afebebd62336cejljusten reset the receive unit of the adapter. 333bcecde140a561c64e297225904afebebd62336cejljusten --*/ 334bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 335bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 336bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_SHUTDOWN_T; 337bcecde140a561c64e297225904afebebd62336cejljusten 338bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 339bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 340bcecde140a561c64e297225904afebebd62336cejljusten 341bcecde140a561c64e297225904afebebd62336cejljusten /// 342bcecde140a561c64e297225904afebebd62336cejljusten /// This is an input parameter and is adapter specific. This is 343bcecde140a561c64e297225904afebebd62336cejljusten /// supported for Universal NDIS 2.0 driver to pass down the Open 344bcecde140a561c64e297225904afebebd62336cejljusten /// flags provided by the protocol driver (See NDIS 2.0 345bcecde140a561c64e297225904afebebd62336cejljusten /// specifications). This can be zero. 346bcecde140a561c64e297225904afebebd62336cejljusten /// 347bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 OpenFlag; ///< In: See description below 348bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 PktFilter; ///< In: Filter for receiving 349bcecde140a561c64e297225904afebebd62336cejljusten 350bcecde140a561c64e297225904afebebd62336cejljusten /* packet. It takes the following */ 351bcecde140a561c64e297225904afebebd62336cejljusten 352bcecde140a561c64e297225904afebebd62336cejljusten /* values, multiple values can be */ 353bcecde140a561c64e297225904afebebd62336cejljusten 354bcecde140a561c64e297225904afebebd62336cejljusten /* ORed together. */ 355bcecde140a561c64e297225904afebebd62336cejljusten#define FLTR_DIRECTED 0x0001 ///< directed/multicast 356bcecde140a561c64e297225904afebebd62336cejljusten#define FLTR_BRDCST 0x0002 ///< broadcast packets 357bcecde140a561c64e297225904afebebd62336cejljusten#define FLTR_PRMSCS 0x0004 ///< any packet on LAN 358bcecde140a561c64e297225904afebebd62336cejljusten#define FLTR_SRC_RTG 0x0008 ///< source routing packet 359bcecde140a561c64e297225904afebebd62336cejljusten IN PXENV_UNDI_MCAST_ADDR_T McastBuffer; /* In: */ 360bcecde140a561c64e297225904afebebd62336cejljusten /* See t_PXENV_UNDI_MCAST_ADDR. */ 361bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_OPEN_T; 362bcecde140a561c64e297225904afebebd62336cejljusten 363bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 364bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 365bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_CLOSE_T; 366bcecde140a561c64e297225904afebebd62336cejljusten 367bcecde140a561c64e297225904afebebd62336cejljusten#define MAX_DATA_BLKS 8 368bcecde140a561c64e297225904afebebd62336cejljusten 369bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 370bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 ImmedLength; ///< In: Data buffer length in 371bcecde140a561c64e297225904afebebd62336cejljusten 372bcecde140a561c64e297225904afebebd62336cejljusten /* bytes. */ 373bcecde140a561c64e297225904afebebd62336cejljusten UINT16 XmitOffset; ///< 16-bit segment & offset of the 374bcecde140a561c64e297225904afebebd62336cejljusten UINT16 XmitSegment; ///< immediate data buffer. 375bcecde140a561c64e297225904afebebd62336cejljusten UINT16 DataBlkCount; ///< In: Number of data blocks. 376bcecde140a561c64e297225904afebebd62336cejljusten struct DataBlk { 377bcecde140a561c64e297225904afebebd62336cejljusten UINT8 TDPtrType; ///< 0 => 32 bit Phys pointer in TDDataPtr, not supported in this version of LSA 378bcecde140a561c64e297225904afebebd62336cejljusten ///< 1 => seg:offser in TDDataPtr which can be a real mode or 16-bit protected mode pointer 379bcecde140a561c64e297225904afebebd62336cejljusten UINT8 TDRsvdByte; ///< Reserved, must be zero. 380bcecde140a561c64e297225904afebebd62336cejljusten UINT16 TDDataLen; ///< Data block length in bytes. 381bcecde140a561c64e297225904afebebd62336cejljusten UINT16 TDDataPtrOffset; ///< Far pointer to data buffer. 382bcecde140a561c64e297225904afebebd62336cejljusten UINT16 TDDataPtrSegment; ///< Far pointer to data buffer. 383bcecde140a561c64e297225904afebebd62336cejljusten } DataBlock[MAX_DATA_BLKS]; 384bcecde140a561c64e297225904afebebd62336cejljusten} 385bcecde140a561c64e297225904afebebd62336cejljustenPXENV_UNDI_TBD_T; 386bcecde140a561c64e297225904afebebd62336cejljusten 387bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 388bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 389bcecde140a561c64e297225904afebebd62336cejljusten 390bcecde140a561c64e297225904afebebd62336cejljusten /// 391bcecde140a561c64e297225904afebebd62336cejljusten /// This is the protocol of the upper layer that is calling 392bcecde140a561c64e297225904afebebd62336cejljusten /// NICTransmit call. If the upper layer has filled the media 393bcecde140a561c64e297225904afebebd62336cejljusten /// header this field must be 0. 394bcecde140a561c64e297225904afebebd62336cejljusten /// 395bcecde140a561c64e297225904afebebd62336cejljusten IN UINT8 Protocol; 396bcecde140a561c64e297225904afebebd62336cejljusten#define P_UNKNOWN 0 397bcecde140a561c64e297225904afebebd62336cejljusten#define P_IP 1 398bcecde140a561c64e297225904afebebd62336cejljusten#define P_ARP 2 399bcecde140a561c64e297225904afebebd62336cejljusten#define P_RARP 3 400bcecde140a561c64e297225904afebebd62336cejljusten 401bcecde140a561c64e297225904afebebd62336cejljusten /// 402bcecde140a561c64e297225904afebebd62336cejljusten /// If this flag is 0, the NIC driver expects a pointer to the 403bcecde140a561c64e297225904afebebd62336cejljusten /// destination media address in the field DestMediaAddr. If 1, 404bcecde140a561c64e297225904afebebd62336cejljusten /// the NIC driver fills the broadcast address for the 405bcecde140a561c64e297225904afebebd62336cejljusten /// destination. 406bcecde140a561c64e297225904afebebd62336cejljusten /// 407bcecde140a561c64e297225904afebebd62336cejljusten IN UINT8 XmitFlag; 408bcecde140a561c64e297225904afebebd62336cejljusten#define XMT_DESTADDR 0x0000 ///< destination address given 409bcecde140a561c64e297225904afebebd62336cejljusten#define XMT_BROADCAST 0x0001 ///< use broadcast address 410bcecde140a561c64e297225904afebebd62336cejljusten 411bcecde140a561c64e297225904afebebd62336cejljusten /// 412bcecde140a561c64e297225904afebebd62336cejljusten /// This is a pointer to the hardware address of the destination 413bcecde140a561c64e297225904afebebd62336cejljusten /// media. It can be null if the destination is not known in 414bcecde140a561c64e297225904afebebd62336cejljusten /// which case the XmitFlag contains 1 for broadcast. Destination 415bcecde140a561c64e297225904afebebd62336cejljusten /// media address must be obtained by the upper level protocol 416bcecde140a561c64e297225904afebebd62336cejljusten /// (with Address Resolution Protocol) and NIC driver does not do 417bcecde140a561c64e297225904afebebd62336cejljusten /// any address resolution. 418bcecde140a561c64e297225904afebebd62336cejljusten /// 419bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 DestAddrOffset; ///< 16-bit segment & offset of the 420bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 DestAddrSegment; ///< destination media address 421bcecde140a561c64e297225904afebebd62336cejljusten 422bcecde140a561c64e297225904afebebd62336cejljusten 423bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 TBDOffset; ///< 16-bit segment & offset of the 424bcecde140a561c64e297225904afebebd62336cejljusten IN UINT16 TBDSegment; ///< transmit buffer descriptor of type 425bcecde140a561c64e297225904afebebd62336cejljusten 426bcecde140a561c64e297225904afebebd62336cejljusten /// XmitBufferDesc 427bcecde140a561c64e297225904afebebd62336cejljusten IN UINT32 Reserved[2]; 428bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_TRANSMIT_T; 429bcecde140a561c64e297225904afebebd62336cejljusten 430bcecde140a561c64e297225904afebebd62336cejljusten 431bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 432bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 433bcecde140a561c64e297225904afebebd62336cejljusten IN PXENV_UNDI_MCAST_ADDR_T McastBuffer; ///< In: 434bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_SET_MCAST_ADDR_T; 435bcecde140a561c64e297225904afebebd62336cejljusten 436bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 437bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 438bcecde140a561c64e297225904afebebd62336cejljusten IN UINT8 StationAddress[ADDR_LEN]; ///< new address to be set 439bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_SET_STATION_ADDR_T; 440bcecde140a561c64e297225904afebebd62336cejljusten 441bcecde140a561c64e297225904afebebd62336cejljustentypedef struct s_PXENV_UNDI_SET_PACKET_FILTER { 442bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 443bcecde140a561c64e297225904afebebd62336cejljusten IN UINT8 Filter; ///< In: Receive filter value. 444bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_SET_PACKET_FILTER_T; 445bcecde140a561c64e297225904afebebd62336cejljusten 446bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 447bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 448bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 BaseIo; ///< Out: Adapter's Base IO 449bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 IntNumber; ///< Out: IRQ number 450bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 MaxTranUnit; ///< Out: MTU 451bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 HwType; ///< Out: type of protocol at hardware level 452bcecde140a561c64e297225904afebebd62336cejljusten 453bcecde140a561c64e297225904afebebd62336cejljusten#define ETHER_TYPE 1 454bcecde140a561c64e297225904afebebd62336cejljusten#define EXP_ETHER_TYPE 2 455bcecde140a561c64e297225904afebebd62336cejljusten#define IEEE_TYPE 6 456bcecde140a561c64e297225904afebebd62336cejljusten#define ARCNET_TYPE 7 457bcecde140a561c64e297225904afebebd62336cejljusten /*++ 458bcecde140a561c64e297225904afebebd62336cejljusten other numbers can be obtained from rfc1010 for "Assigned 459bcecde140a561c64e297225904afebebd62336cejljusten Numbers". This number may not be validated by the application 460bcecde140a561c64e297225904afebebd62336cejljusten and hence adding new numbers to the list should be fine at any 461bcecde140a561c64e297225904afebebd62336cejljusten time. 462bcecde140a561c64e297225904afebebd62336cejljusten --*/ 463bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 HwAddrLen; ///< Out: actual length of hardware address 464bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 CurrentNodeAddress[ADDR_LEN]; ///< Out: Current hardware address 465bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 PermNodeAddress[ADDR_LEN]; ///< Out: Permanent hardware address 466bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 ROMAddress; ///< Out: ROM address 467bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 RxBufCt; ///< Out: receive Queue length 468bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 TxBufCt; ///< Out: Transmit Queue length 469bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_GET_INFORMATION_T; 470bcecde140a561c64e297225904afebebd62336cejljusten 471bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 472bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 473bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 XmtGoodFrames; ///< Out: No. of good transmissions 474bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 RcvGoodFrames; ///< Out: No. of good frames received 475bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 RcvCRCErrors; ///< Out: No. of frames with CRC error 476bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 RcvResourceErrors; ///< Out: no. of frames discarded 477bcecde140a561c64e297225904afebebd62336cejljusten /* Out: receive Queue full */ 478bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_GET_STATISTICS_T; 479bcecde140a561c64e297225904afebebd62336cejljusten 480bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 481bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 482bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_CLEAR_STATISTICS_T; 483bcecde140a561c64e297225904afebebd62336cejljusten 484bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 485bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 486bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_INITIATE_DIAGS_T; 487bcecde140a561c64e297225904afebebd62336cejljusten 488bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 489bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 490bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_FORCE_INTERRUPT_T; 491bcecde140a561c64e297225904afebebd62336cejljusten 492bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 493bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 494bcecde140a561c64e297225904afebebd62336cejljusten IN UINT32 InetAddr; ///< In: IP Multicast Address 495bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 MediaAddr[ADDR_LEN]; ///< Out: corresponding hardware 496bcecde140a561c64e297225904afebebd62336cejljusten /* multicast address */ 497bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_GET_MCAST_ADDR_T; 498bcecde140a561c64e297225904afebebd62336cejljusten 499bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 500bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Vendor_ID; ///< OUT: 501bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Dev_ID; ///< OUT: 502bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Base_Class; ///< OUT: 503bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Sub_Class; ///< OUT: 504bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Prog_Intf; ///< OUT: program interface 505bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Rev; ///< OUT: Revision number 506bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 BusDevFunc; ///< OUT: Bus, Device & Function numbers 507bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 SubVendor_ID; ///< OUT: 508bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 SubDevice_ID; ///< OUT: 509bcecde140a561c64e297225904afebebd62336cejljusten} PCI_INFO_T; 510bcecde140a561c64e297225904afebebd62336cejljusten 511bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 512bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 EISA_Dev_ID; ///< Out: 513bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Base_Class; ///< OUT: 514bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Sub_Class; ///< OUT: 515bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Prog_Intf; ///< OUT: program interface 516bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 CardSelNum; ///< OUT: Card Selector Number 517bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 Reserved; ///< to make it 10 bytes 518bcecde140a561c64e297225904afebebd62336cejljusten} PNP_INFO_T; 519bcecde140a561c64e297225904afebebd62336cejljusten 520bcecde140a561c64e297225904afebebd62336cejljusten 521bcecde140a561c64e297225904afebebd62336cejljustentypedef union { 522bcecde140a561c64e297225904afebebd62336cejljusten PCI_INFO_T Pci; 523bcecde140a561c64e297225904afebebd62336cejljusten PNP_INFO_T Pnp; 524bcecde140a561c64e297225904afebebd62336cejljusten} PCI_PNP_INFO_T; 525bcecde140a561c64e297225904afebebd62336cejljusten 526bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 527bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx 528bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 NicType; ///< OUT: 2=PCI, 3=PnP 529bcecde140a561c64e297225904afebebd62336cejljusten PCI_PNP_INFO_T PciPnpInfo; 530bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_GET_NIC_TYPE_T; 531bcecde140a561c64e297225904afebebd62336cejljusten 532bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 533bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx 534bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 IfaceType[16]; ///< OUT: Type name of MAC, AsciiZ 535bcecde140a561c64e297225904afebebd62336cejljusten 536bcecde140a561c64e297225904afebebd62336cejljusten /* format. This is used by the */ 537bcecde140a561c64e297225904afebebd62336cejljusten 538bcecde140a561c64e297225904afebebd62336cejljusten /* Universal NDIS Driver to fill */ 539bcecde140a561c64e297225904afebebd62336cejljusten 540bcecde140a561c64e297225904afebebd62336cejljusten /* the driver type in it's MAC */ 541bcecde140a561c64e297225904afebebd62336cejljusten 542bcecde140a561c64e297225904afebebd62336cejljusten /* Service specific */ 543bcecde140a561c64e297225904afebebd62336cejljusten 544bcecde140a561c64e297225904afebebd62336cejljusten /* characteristic table */ 545bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 LinkSpeed; ///< OUT: 546bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 ServiceFlags; ///< OUT: as defined in NDIS Spec 2.0X 547bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT32 Reserved[4]; ///< OUT: will be filled with 0s till defined 548bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_GET_NDIS_INFO_T; 549bcecde140a561c64e297225904afebebd62336cejljusten 550bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 551bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx 552bcecde140a561c64e297225904afebebd62336cejljusten IN OUT UINT16 FuncFlag; ///< In: PXENV_UNDI_ISR_IN_xxx 553bcecde140a561c64e297225904afebebd62336cejljusten 554bcecde140a561c64e297225904afebebd62336cejljusten /* Out: PXENV_UNDI_ISR_OUT_xxx */ 555bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 BufferLength; 556bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 FrameLength; 557bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 FrameHeaderLength; 558bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 FrameOffset; 559bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 FrameSegSel; 560bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 ProtType; 561bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT8 PktType; 562bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_ISR_T; 563bcecde140a561c64e297225904afebebd62336cejljusten 564bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_IN_START 1 /* This function must be first */ 565bcecde140a561c64e297225904afebebd62336cejljusten 566bcecde140a561c64e297225904afebebd62336cejljusten/* when an interrupt is received. */ 567bcecde140a561c64e297225904afebebd62336cejljusten 568bcecde140a561c64e297225904afebebd62336cejljusten/* It will tell us if the intr */ 569bcecde140a561c64e297225904afebebd62336cejljusten 570bcecde140a561c64e297225904afebebd62336cejljusten/* was generated by our device. */ 571bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_IN_PROCESS 2 /* Call to start processing one of */ 572bcecde140a561c64e297225904afebebd62336cejljusten 573bcecde140a561c64e297225904afebebd62336cejljusten/* our interrupts. */ 574bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_IN_GET_NEXT 3 /* Call to start/continue receiving */ 575bcecde140a561c64e297225904afebebd62336cejljusten 576bcecde140a561c64e297225904afebebd62336cejljusten/* data from receive buffer(s). */ 577bcecde140a561c64e297225904afebebd62336cejljusten 578bcecde140a561c64e297225904afebebd62336cejljusten/*++ 579bcecde140a561c64e297225904afebebd62336cejljusten 580bcecde140a561c64e297225904afebebd62336cejljusten Possible responses from PXENV_UNDI_ISR_IN_START 581bcecde140a561c64e297225904afebebd62336cejljusten 582bcecde140a561c64e297225904afebebd62336cejljusten --*/ 583bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_OUT_OURS 0 ///< This is our interrupt. Deal with it. 584bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_OUT_NOT_OURS 1 ///< This is not our interrupt. 585bcecde140a561c64e297225904afebebd62336cejljusten 586bcecde140a561c64e297225904afebebd62336cejljusten/*++ 587bcecde140a561c64e297225904afebebd62336cejljusten 588bcecde140a561c64e297225904afebebd62336cejljusten Possible responses from PXENV_UNDI_ISR_IN_PROCESS and 589bcecde140a561c64e297225904afebebd62336cejljusten PXENV_UNDI_ISR_IN_PROCESS 590bcecde140a561c64e297225904afebebd62336cejljusten 591bcecde140a561c64e297225904afebebd62336cejljusten--*/ 592bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_OUT_DONE 0 ///< We are done processing this interrupt. 593bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_OUT_TRANSMIT 2 ///< We completed a transmit interrupt. 594bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_OUT_RECEIVE 3 ///< Get data from receive buffer. 595bcecde140a561c64e297225904afebebd62336cejljusten 596bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_ISR_OUT_BUSY 4 /* ? */ 597bcecde140a561c64e297225904afebebd62336cejljusten 598bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 599bcecde140a561c64e297225904afebebd62336cejljusten UINT16 Status; ///< Out: PXENV_STATUS_xxx 600bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_STOP_UNDI_T; 601bcecde140a561c64e297225904afebebd62336cejljusten 602bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_STARTED 1 ///< not even initialized 603bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_INITIALIZED 2 ///< initialized and closed (not opened) 604bcecde140a561c64e297225904afebebd62336cejljusten#define PXENV_UNDI_OPENED 3 ///< initialized & opened 605bcecde140a561c64e297225904afebebd62336cejljusten 606bcecde140a561c64e297225904afebebd62336cejljustentypedef struct { 607bcecde140a561c64e297225904afebebd62336cejljusten OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx 608bcecde140a561c64e297225904afebebd62336cejljusten UINT16 UNDI_State; 609bcecde140a561c64e297225904afebebd62336cejljusten} PXENV_UNDI_GET_STATE_T; 610bcecde140a561c64e297225904afebebd62336cejljusten 611bcecde140a561c64e297225904afebebd62336cejljusten#pragma pack() 612bcecde140a561c64e297225904afebebd62336cejljusten 613bcecde140a561c64e297225904afebebd62336cejljusten#endif 614