/** @file | |
These are PXE Specification 2.1-compliant data structures and defines. | |
This file relies upon the existence of a PXE-compliant ROM | |
in memory, as defined by the Preboot Execution Environment | |
Specification (PXE), Version 2.1, located at | |
http://developer.intel.com/ial/wfm/wfmspecs.htm | |
Copyright (c) 1999 - 2010, Intel Corporation. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions | |
of the BSD License which accompanies this distribution. The | |
full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#ifndef _PXEDEF_H_ | |
#define _PXEDEF_H_ | |
#pragma pack(1) | |
// | |
// PXE structure signatures | |
// | |
#define BC_ROMID_SIG "$BC$" | |
#define UNDI_ROMID_SIG "UNDI" | |
#define BUSD_ROMID_SIG "BUSD" | |
#define PXE_SIG "!PXE" | |
#define PXENV_SIG "PXENV+" | |
#define BC_ROMID_REV 0x00 | |
#define UNDI_ROMID_REV 0x00 | |
#define BUSD_ROMID_REV 0x00 | |
#define PXE_REV 0x00 | |
#define PXENV_REV 0x0201 | |
#define PXENV_PTR SIGNATURE_32 ('P', 'X', 'E', 'N') | |
#define PXE_PTR SIGNATURE_32 ('!', 'P', 'X', 'E') | |
#define UNDI_ROMID_SIG_PTR SIGNATURE_32 ('U', 'N', 'D', 'I') | |
typedef UINT16 SEGSEL; // Real mode segment or protected mode selector. | |
typedef UINT16 OFF16; // Unsigned 16bit offset. | |
typedef UINT32 ADDR32; | |
// | |
// Bus types | |
// | |
#define PXENV_BUS_ISA 0 | |
#define PXENV_BUS_EISA 1 | |
#define PXENV_BUS_MCA 2 | |
#define PXENV_BUS_PCI 3 | |
#define PXENV_BUS_VESA 4 | |
#define PXENV_BUS_PCMCIA 5 | |
// | |
// | |
// Result codes returned in AX by a PXENV API service. | |
// | |
#define PXENV_EXIT_SUCCESS 0x0000 | |
#define PXENV_EXIT_FAILURE 0x0001 | |
// | |
// Status codes returned in the status word of PXENV API parameter structures. | |
// | |
// Generic API errors - these do not match up with the M0x or E0x messages | |
// that are reported by the loader. | |
// | |
#define PXENV_STATUS_SUCCESS 0x00 | |
#define PXENV_STATUS_FAILURE 0x01 | |
#define PXENV_STATUS_BAD_FUNC 0x02 | |
#define PXENV_STATUS_UNSUPPORTED 0x03 | |
#define PXENV_STATUS_KEEP_UNDI 0x04 | |
#define PXENV_STATUS_KEEP_ALL 0x05 | |
#define PXENV_STATUS_OUT_OF_RESOURCES 0x06 | |
typedef enum { | |
PxeEnvStatus_Success, | |
PxeEnvStatus_Failure, | |
PxeEnvStatus_BadFunc, | |
PxeEnvStatus_Unsupported, | |
PxeEnvStatus_KeepUndi, | |
PxeEnvStatus_KeepAll | |
} EFI_PXE_STATUS; | |
/* Driver errors (0x60 to 0x6F) */ | |
// These errors are for UNDI compatible NIC drivers. | |
#define PXENV_STATUS_UNDI_INVALID_FUNCTION 0x60 | |
#define PXENV_STATUS_UNDI_MEDIATEST_FAILED 0x61 | |
#define PXENV_STATUS_UNDI_CANNOT_INIT_NIC_FOR_MCAST 0x62 | |
#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_NIC 0x63 | |
#define PXENV_STATUS_UNDI_CANNOT_INITIALIZE_PHY 0x64 | |
#define PXENV_STATUS_UNDI_CANNOT_READ_CONFIG_DATA 0x65 | |
#define PXENV_STATUS_UNDI_CANNOT_READ_INIT_DATA 0x66 | |
#define PXENV_STATUS_UNDI_BAD_MAC_ADDR 0x67 | |
#define PXENV_STATUS_UNDI_BAD_EEPROM_CKSUM 0x68 | |
#define PXENV_STATUS_UNDI_ERROR_SETTING_ISR 0x69 | |
#define PXENV_STATUS_UNDI_INVALID_STATE 0x6A | |
#define PXENV_STATUS_UNDI_TRANSMIT_ERROR 0x6B | |
#define PXENV_STATUS_UNDI_INVALID_PARAMETER 0x6C | |
typedef struct { | |
UINT16 Seg_Addr; | |
UINT32 Phy_Addr; | |
UINT16 Seg_Size; | |
} NEWSEGDESC_T; | |
typedef struct { | |
OFF16 Offset; | |
SEGSEL Segment; | |
} SEGOFF16; | |
typedef struct { | |
UINT8 Signature[4]; ///< Structure signature is not NULL terminated. | |
UINT8 StructLength; ///< Length of this structure in bytes. | |
UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero. | |
UINT8 StructRev; ///< Structure format revision number. | |
UINT8 UNDI_Rev[3]; ///< API revision number stored in Intel order. | |
// | |
// Revision 2.1.0 == 0x00, 0x01, 0x02 | |
// | |
UINT16 UNDI_Loader; ///< Offset of UNDI loader routine in the option ROM image. | |
UINT16 StackSize; ///< Minimum stack segment size, in bytes, needed to load and run the UNDI. | |
UINT16 DataSize; ///< UNDI runtime code and data | |
UINT16 CodeSize; ///< segment sizes. | |
UINT8 BusType[4]; ///< 'ISAR', 'EISA', 'PCIR', 'PCCR' | |
} UNDI_ROMID_T; | |
typedef struct { | |
UINT8 Signature[4]; ///< Structure signature is not NULL terminated. | |
UINT8 StructLength; ///< Length of this structure in bytes. | |
UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero. | |
UINT8 StructRev; ///< Structure format revision number. | |
UINT8 BC_Rev[3]; ///< API revision number stored in Intel order. | |
// | |
// Revision 2.1.0 == 0x00, 0x01, 0x02 | |
// | |
UINT16 BC_Loader; ///< Offset of base-code loader routine in the option ROM image. | |
UINT16 StackSize; ///< Minimum stack segment size (bytes) needed to load/run base-code. | |
UINT16 DataSize; ///< Base-code runtime code and data | |
UINT16 CodeSize; ///< segment sizes. | |
} BC_ROMID_T; | |
typedef struct { | |
UINT8 Signature[4]; ///< Structure signature is not NULL terminated. | |
UINT8 StructLength; ///< Length of this structure in bytes. | |
UINT8 StructCksum; ///< Use to make byte checksum of this structure == zero. | |
UINT8 StructRev; ///< Structure format revision number. | |
UINT8 Reserved1; ///< must be zero | |
/// | |
/// UNDI_ROMID_T __FAR *UNDI;// Far pointer to UNDI ROMID | |
/// | |
SEGOFF16 Undi; | |
/// | |
/// BC_ROMID_T __FAR *Base; // Far pointer to base-code ROMID | |
/// | |
SEGOFF16 Base; | |
/// | |
/// UINT16 (__FAR __CDECL *EntryPointSP)(UINT16 func, VOID __FAR *param); | |
/// 16bit stack segment API entry point. This will be seg:off in | |
/// real mode and sel:off in 16:16 protected mode. | |
/// | |
SEGOFF16 EntryPointSP; | |
/// | |
/// UINT16 (__FAR __CDECL *EntryPointESP)(UINT16 func, VOID __FAR *param); | |
/// 32bit stack segment API entry point. This will be sel:off. | |
/// In real mode, sel == 0 | |
/// | |
SEGOFF16 EntryPointESP; | |
/// | |
/// UINT16 (__FAR __CDECL *StatusCallout)(UINT16 param); | |
/// Address of DHCP/TFTP status callout routine. | |
/// | |
SEGOFF16 StatusCallout; | |
UINT8 Reserved2; ///< must be zero | |
UINT8 SegDescCnt; ///< Number of segment descriptors in this structure. | |
UINT16 FirstSelector; ///< First segment descriptor in GDT assigned to PXE. | |
NEWSEGDESC_T Stack; | |
NEWSEGDESC_T UNDIData; | |
NEWSEGDESC_T UNDICode; | |
NEWSEGDESC_T UNDICodeWrite; | |
NEWSEGDESC_T BC_Data; | |
NEWSEGDESC_T BC_Code; | |
NEWSEGDESC_T BC_CodeWrite; | |
} PXE_T; | |
typedef struct { | |
CHAR8 Signature[6]; ///< "PXENV+" | |
UINT16 Version; ///< PXE version number. LSB is minor version. MSB is major version. | |
UINT8 StructLength; ///< Length of PXE-2.0 Entry Point structure in bytes. | |
UINT8 StructCksum; ///< Used to make structure checksum equal zero. | |
UINT32 RMEntry; ///< Real mode API entry point segment:offset. | |
UINT32 PMEntryOff; ///< Protected mode API entry point | |
UINT16 PMEntrySeg; ///< segment:offset. This will always be zero. Protected mode API calls | |
///< must be made through the API entry points in the PXE Runtime ID structure. | |
UINT16 StackSeg; ///< Real mode stack segment. | |
UINT16 StackSize; ///< Stack segment size in bytes. | |
UINT16 BaseCodeSeg; ///< Real mode base-code code segment. | |
UINT16 BaseCodeSize; ///< Base-code code segment size | |
UINT16 BaseDataSeg; ///< Real mode base-code data segment. | |
UINT16 BaseDataSize; ///< Base-code data segment size | |
UINT16 UNDIDataSeg; ///< Real mode UNDI data segment. | |
UINT16 UNDIDataSize; ///< UNDI data segment size in bytes. | |
UINT16 UNDICodeSeg; ///< Real mode UNDI code segment. | |
UINT16 UNDICodeSize; ///< UNDI code segment size in bytes. | |
PXE_T *RuntimePtr; ///< Real mode segment:offset pointer to PXE Runtime ID structure. | |
} PXENV_T; | |
typedef struct { | |
OUT UINT16 Status; | |
IN OUT UINT16 Ax; | |
IN OUT UINT16 Bx; | |
IN OUT UINT16 Dx; | |
IN OUT UINT16 Di; | |
IN OUT UINT16 Es; | |
IN OUT UINT16 Undi_Ds; | |
IN OUT UINT16 Undi_Cs; | |
OUT SEGOFF16 PXEptr; | |
OUT SEGOFF16 PXENVptr; | |
} UNDI_LOADER_T; | |
// | |
// Put in some UNDI-specific arguments | |
// | |
#define PXENV_START_UNDI 0x0000 | |
#define PXENV_UNDI_STARTUP 0x0001 | |
#define PXENV_UNDI_CLEANUP 0x0002 | |
#define PXENV_UNDI_INITIALIZE 0x0003 | |
#define PXENV_UNDI_RESET_NIC 0x0004 | |
#define PXENV_UNDI_SHUTDOWN 0x0005 | |
#define PXENV_UNDI_OPEN 0x0006 | |
#define PXENV_UNDI_CLOSE 0x0007 | |
#define PXENV_UNDI_TRANSMIT 0x0008 | |
#define PXENV_UNDI_SET_MCAST_ADDR 0x0009 | |
#define PXENV_UNDI_SET_STATION_ADDR 0x000A | |
#define PXENV_UNDI_SET_PACKET_FILTER 0x000B | |
#define PXENV_UNDI_GET_INFORMATION 0x000C | |
#define PXENV_UNDI_GET_STATISTICS 0x000D | |
#define PXENV_UNDI_CLEAR_STATISTICS 0x000E | |
#define PXENV_UNDI_INITIATE_DIAGS 0x000F | |
#define PXENV_UNDI_FORCE_INTERRUPT 0x0010 | |
#define PXENV_UNDI_GET_MCAST_ADDR 0x0011 | |
#define PXENV_UNDI_GET_NIC_TYPE 0x0012 | |
#define PXENV_UNDI_GET_NDIS_INFO 0x0013 | |
#define PXENV_UNDI_ISR 0x0014 | |
#define PXENV_STOP_UNDI 0x0015 | |
#define PXENV_UNDI_GET_STATE 0x0016 | |
#define ADDR_LEN 16 | |
#define MAXNUM_MCADDR 8 | |
#define IPLEN 4 ///< length of an IP address | |
#define XMT_DESTADDR 0x0000 ///< destination address given | |
#define XMT_BROADCAST 0x0001 ///< use broadcast address | |
typedef struct { | |
UINT16 MCastAddrCount; ///< In: Number of multi-cast | |
/* addresses. */ | |
UINT8 MCastAddr[MAXNUM_MCADDR][ADDR_LEN]; /* In: */ | |
/* list of multi-cast addresses. */ | |
/* Each address can take up to */ | |
/* ADDR_LEN bytes and a maximum */ | |
/* of MAXNUM_MCADDR address can */ | |
/* be provided*/ | |
} PXENV_UNDI_MCAST_ADDR_T; | |
/* Definitions of TFTP API parameter structures. | |
*/ | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
IN UINT16 Ax; ///< In: These register fields must be | |
IN UINT16 Bx; ///< filled in with the same data | |
IN UINT16 Dx; ///< that was passed to the MLID | |
IN UINT16 Di; ///< option ROM boot code by the | |
IN UINT16 Es; ///< system BIOS. | |
} PXENV_START_UNDI_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_UNDI_STARTUP_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_UNDI_CLEANUP_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
/// | |
/// This is an input parameter and is a 32-bit physical address of | |
/// a memory copy of the driver module in the protocol.ini file | |
/// obtained from the Protocol Manager driver(refer to NDIS 2.0 | |
/// specifications). This parameter is basically supported for | |
/// the universal NDIS driver to pass the information contained in | |
/// protocol.ini file to the NIC driver for any specific | |
/// configuration of the NIC. (Note that the module | |
/// identification in the protocol.ini file was done by NDIS | |
/// itself.) This value can be NULL for for any other application | |
/// interfacing to the Universal NIC Driver. | |
/// | |
IN UINT32 ProtocolIni; | |
UINT8 Reserved[8]; | |
} PXENV_UNDI_INITIALIZE_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
IN PXENV_UNDI_MCAST_ADDR_T R_Mcast_Buf; ///< multicast address list | |
/* see note below */ | |
} PXENV_UNDI_RESET_T; | |
/*++ | |
Note: The NIC driver does not remember the multicast | |
addresses provided in any call. So the application must | |
provide the multicast address list with all the calls that | |
reset the receive unit of the adapter. | |
--*/ | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_UNDI_SHUTDOWN_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
/// | |
/// This is an input parameter and is adapter specific. This is | |
/// supported for Universal NDIS 2.0 driver to pass down the Open | |
/// flags provided by the protocol driver (See NDIS 2.0 | |
/// specifications). This can be zero. | |
/// | |
IN UINT16 OpenFlag; ///< In: See description below | |
IN UINT16 PktFilter; ///< In: Filter for receiving | |
/* packet. It takes the following */ | |
/* values, multiple values can be */ | |
/* ORed together. */ | |
#define FLTR_DIRECTED 0x0001 ///< directed/multicast | |
#define FLTR_BRDCST 0x0002 ///< broadcast packets | |
#define FLTR_PRMSCS 0x0004 ///< any packet on LAN | |
#define FLTR_SRC_RTG 0x0008 ///< source routing packet | |
IN PXENV_UNDI_MCAST_ADDR_T McastBuffer; /* In: */ | |
/* See t_PXENV_UNDI_MCAST_ADDR. */ | |
} PXENV_UNDI_OPEN_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_UNDI_CLOSE_T; | |
#define MAX_DATA_BLKS 8 | |
typedef struct { | |
IN UINT16 ImmedLength; ///< In: Data buffer length in | |
/* bytes. */ | |
UINT16 XmitOffset; ///< 16-bit segment & offset of the | |
UINT16 XmitSegment; ///< immediate data buffer. | |
UINT16 DataBlkCount; ///< In: Number of data blocks. | |
struct DataBlk { | |
UINT8 TDPtrType; ///< 0 => 32 bit Phys pointer in TDDataPtr, not supported in this version of LSA | |
///< 1 => seg:offser in TDDataPtr which can be a real mode or 16-bit protected mode pointer | |
UINT8 TDRsvdByte; ///< Reserved, must be zero. | |
UINT16 TDDataLen; ///< Data block length in bytes. | |
UINT16 TDDataPtrOffset; ///< Far pointer to data buffer. | |
UINT16 TDDataPtrSegment; ///< Far pointer to data buffer. | |
} DataBlock[MAX_DATA_BLKS]; | |
} | |
PXENV_UNDI_TBD_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
/// | |
/// This is the protocol of the upper layer that is calling | |
/// NICTransmit call. If the upper layer has filled the media | |
/// header this field must be 0. | |
/// | |
IN UINT8 Protocol; | |
#define P_UNKNOWN 0 | |
#define P_IP 1 | |
#define P_ARP 2 | |
#define P_RARP 3 | |
/// | |
/// If this flag is 0, the NIC driver expects a pointer to the | |
/// destination media address in the field DestMediaAddr. If 1, | |
/// the NIC driver fills the broadcast address for the | |
/// destination. | |
/// | |
IN UINT8 XmitFlag; | |
#define XMT_DESTADDR 0x0000 ///< destination address given | |
#define XMT_BROADCAST 0x0001 ///< use broadcast address | |
/// | |
/// This is a pointer to the hardware address of the destination | |
/// media. It can be null if the destination is not known in | |
/// which case the XmitFlag contains 1 for broadcast. Destination | |
/// media address must be obtained by the upper level protocol | |
/// (with Address Resolution Protocol) and NIC driver does not do | |
/// any address resolution. | |
/// | |
IN UINT16 DestAddrOffset; ///< 16-bit segment & offset of the | |
IN UINT16 DestAddrSegment; ///< destination media address | |
IN UINT16 TBDOffset; ///< 16-bit segment & offset of the | |
IN UINT16 TBDSegment; ///< transmit buffer descriptor of type | |
/// XmitBufferDesc | |
IN UINT32 Reserved[2]; | |
} PXENV_UNDI_TRANSMIT_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
IN PXENV_UNDI_MCAST_ADDR_T McastBuffer; ///< In: | |
} PXENV_UNDI_SET_MCAST_ADDR_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
IN UINT8 StationAddress[ADDR_LEN]; ///< new address to be set | |
} PXENV_UNDI_SET_STATION_ADDR_T; | |
typedef struct s_PXENV_UNDI_SET_PACKET_FILTER { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
IN UINT8 Filter; ///< In: Receive filter value. | |
} PXENV_UNDI_SET_PACKET_FILTER_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
OUT UINT16 BaseIo; ///< Out: Adapter's Base IO | |
OUT UINT16 IntNumber; ///< Out: IRQ number | |
OUT UINT16 MaxTranUnit; ///< Out: MTU | |
OUT UINT16 HwType; ///< Out: type of protocol at hardware level | |
#define ETHER_TYPE 1 | |
#define EXP_ETHER_TYPE 2 | |
#define IEEE_TYPE 6 | |
#define ARCNET_TYPE 7 | |
/*++ | |
other numbers can be obtained from rfc1010 for "Assigned | |
Numbers". This number may not be validated by the application | |
and hence adding new numbers to the list should be fine at any | |
time. | |
--*/ | |
OUT UINT16 HwAddrLen; ///< Out: actual length of hardware address | |
OUT UINT8 CurrentNodeAddress[ADDR_LEN]; ///< Out: Current hardware address | |
OUT UINT8 PermNodeAddress[ADDR_LEN]; ///< Out: Permanent hardware address | |
OUT UINT16 ROMAddress; ///< Out: ROM address | |
OUT UINT16 RxBufCt; ///< Out: receive Queue length | |
OUT UINT16 TxBufCt; ///< Out: Transmit Queue length | |
} PXENV_UNDI_GET_INFORMATION_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
OUT UINT32 XmtGoodFrames; ///< Out: No. of good transmissions | |
OUT UINT32 RcvGoodFrames; ///< Out: No. of good frames received | |
OUT UINT32 RcvCRCErrors; ///< Out: No. of frames with CRC error | |
OUT UINT32 RcvResourceErrors; ///< Out: no. of frames discarded | |
/* Out: receive Queue full */ | |
} PXENV_UNDI_GET_STATISTICS_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_UNDI_CLEAR_STATISTICS_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_UNDI_INITIATE_DIAGS_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_UNDI_FORCE_INTERRUPT_T; | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
IN UINT32 InetAddr; ///< In: IP Multicast Address | |
OUT UINT8 MediaAddr[ADDR_LEN]; ///< Out: corresponding hardware | |
/* multicast address */ | |
} PXENV_UNDI_GET_MCAST_ADDR_T; | |
typedef struct { | |
OUT UINT16 Vendor_ID; ///< OUT: | |
OUT UINT16 Dev_ID; ///< OUT: | |
OUT UINT8 Base_Class; ///< OUT: | |
OUT UINT8 Sub_Class; ///< OUT: | |
OUT UINT8 Prog_Intf; ///< OUT: program interface | |
OUT UINT8 Rev; ///< OUT: Revision number | |
OUT UINT16 BusDevFunc; ///< OUT: Bus, Device & Function numbers | |
OUT UINT16 SubVendor_ID; ///< OUT: | |
OUT UINT16 SubDevice_ID; ///< OUT: | |
} PCI_INFO_T; | |
typedef struct { | |
OUT UINT32 EISA_Dev_ID; ///< Out: | |
OUT UINT8 Base_Class; ///< OUT: | |
OUT UINT8 Sub_Class; ///< OUT: | |
OUT UINT8 Prog_Intf; ///< OUT: program interface | |
OUT UINT16 CardSelNum; ///< OUT: Card Selector Number | |
OUT UINT8 Reserved; ///< to make it 10 bytes | |
} PNP_INFO_T; | |
typedef union { | |
PCI_INFO_T Pci; | |
PNP_INFO_T Pnp; | |
} PCI_PNP_INFO_T; | |
typedef struct { | |
OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx | |
OUT UINT8 NicType; ///< OUT: 2=PCI, 3=PnP | |
PCI_PNP_INFO_T PciPnpInfo; | |
} PXENV_UNDI_GET_NIC_TYPE_T; | |
typedef struct { | |
OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx | |
OUT UINT8 IfaceType[16]; ///< OUT: Type name of MAC, AsciiZ | |
/* format. This is used by the */ | |
/* Universal NDIS Driver to fill */ | |
/* the driver type in it's MAC */ | |
/* Service specific */ | |
/* characteristic table */ | |
OUT UINT32 LinkSpeed; ///< OUT: | |
OUT UINT32 ServiceFlags; ///< OUT: as defined in NDIS Spec 2.0X | |
OUT UINT32 Reserved[4]; ///< OUT: will be filled with 0s till defined | |
} PXENV_UNDI_GET_NDIS_INFO_T; | |
typedef struct { | |
OUT UINT16 Status; ///< OUT: PXENV_STATUS_xxx | |
IN OUT UINT16 FuncFlag; ///< In: PXENV_UNDI_ISR_IN_xxx | |
/* Out: PXENV_UNDI_ISR_OUT_xxx */ | |
OUT UINT16 BufferLength; | |
OUT UINT16 FrameLength; | |
OUT UINT16 FrameHeaderLength; | |
OUT UINT16 FrameOffset; | |
OUT UINT16 FrameSegSel; | |
OUT UINT8 ProtType; | |
OUT UINT8 PktType; | |
} PXENV_UNDI_ISR_T; | |
#define PXENV_UNDI_ISR_IN_START 1 /* This function must be first */ | |
/* when an interrupt is received. */ | |
/* It will tell us if the intr */ | |
/* was generated by our device. */ | |
#define PXENV_UNDI_ISR_IN_PROCESS 2 /* Call to start processing one of */ | |
/* our interrupts. */ | |
#define PXENV_UNDI_ISR_IN_GET_NEXT 3 /* Call to start/continue receiving */ | |
/* data from receive buffer(s). */ | |
/*++ | |
Possible responses from PXENV_UNDI_ISR_IN_START | |
--*/ | |
#define PXENV_UNDI_ISR_OUT_OURS 0 ///< This is our interrupt. Deal with it. | |
#define PXENV_UNDI_ISR_OUT_NOT_OURS 1 ///< This is not our interrupt. | |
/*++ | |
Possible responses from PXENV_UNDI_ISR_IN_PROCESS and | |
PXENV_UNDI_ISR_IN_PROCESS | |
--*/ | |
#define PXENV_UNDI_ISR_OUT_DONE 0 ///< We are done processing this interrupt. | |
#define PXENV_UNDI_ISR_OUT_TRANSMIT 2 ///< We completed a transmit interrupt. | |
#define PXENV_UNDI_ISR_OUT_RECEIVE 3 ///< Get data from receive buffer. | |
#define PXENV_UNDI_ISR_OUT_BUSY 4 /* ? */ | |
typedef struct { | |
UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
} PXENV_STOP_UNDI_T; | |
#define PXENV_UNDI_STARTED 1 ///< not even initialized | |
#define PXENV_UNDI_INITIALIZED 2 ///< initialized and closed (not opened) | |
#define PXENV_UNDI_OPENED 3 ///< initialized & opened | |
typedef struct { | |
OUT UINT16 Status; ///< Out: PXENV_STATUS_xxx | |
UINT16 UNDI_State; | |
} PXENV_UNDI_GET_STATE_T; | |
#pragma pack() | |
#endif |