Added these drivers: * LegacyBiosDxe * BlockIoDxe * KeyboardDxe * Snp16Dxe * VideoDxe Signed-off-by: jljusten Reviewed-by: mdkinney Reviewed-by: geekboy15a git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11905 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			614 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			614 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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
 |