/** @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
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
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
//
//
// Bus types
//
#define PXENV_BUS_ISA 0
//
//
// Result codes returned in AX by a PXENV API service.
//
//
// 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.
//
typedef enum {
/* Driver errors (0x60 to 0x6F) */
// These errors are for UNDI compatible NIC drivers.
typedef struct {
} NEWSEGDESC_T;
typedef struct {
} SEGOFF16;
typedef struct {
//
// Revision 2.1.0 == 0x00, 0x01, 0x02
//
} UNDI_ROMID_T;
typedef struct {
//
// Revision 2.1.0 == 0x00, 0x01, 0x02
//
} BC_ROMID_T;
typedef struct {
///
/// UNDI_ROMID_T __FAR *UNDI;// Far pointer to UNDI ROMID
///
///
/// BC_ROMID_T __FAR *Base; // Far pointer to base-code ROMID
///
///
/// 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.
///
///
/// 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
///
///
/// UINT16 (__FAR __CDECL *StatusCallout)(UINT16 param);
///
} PXE_T;
typedef struct {
///< must be made through the API entry points in the PXE Runtime ID structure.
} PXENV_T;
typedef struct {
//
// Put in some UNDI-specific arguments
//
typedef struct {
/* addresses. */
/* list of multi-cast addresses. */
/* Each address can take up to */
/* ADDR_LEN bytes and a maximum */
/* of MAXNUM_MCADDR address can */
/* be provided*/
/* Definitions of TFTP API parameter structures.
*/
typedef struct {
typedef struct {
typedef struct {
typedef struct {
///
/// 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.
///
typedef struct {
/* see note below */
/*++
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 {
typedef struct {
///
/// 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.
///
/* packet. It takes the following */
/* values, multiple values can be */
/* ORed together. */
/* See t_PXENV_UNDI_MCAST_ADDR. */
typedef struct {
typedef struct {
/* bytes. */
struct DataBlk {
///< 1 => seg:offser in TDDataPtr which can be a real mode or 16-bit protected mode pointer
}
typedef struct {
///
/// 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.
///
#define P_UNKNOWN 0
///
/// 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.
///
///
/// 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.
///
/// XmitBufferDesc
typedef struct {
typedef struct {
typedef struct s_PXENV_UNDI_SET_PACKET_FILTER {
typedef struct {
/*++
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.
--*/
typedef struct {
/* Out: receive Queue full */
typedef struct {
typedef struct {
typedef struct {
typedef struct {
/* multicast address */
typedef struct {
} PCI_INFO_T;
typedef struct {
} PNP_INFO_T;
typedef union {
typedef struct {
typedef struct {
/* format. This is used by the */
/* Universal NDIS Driver to fill */
/* the driver type in it's MAC */
/* Service specific */
/* characteristic table */
typedef struct {
/* Out: PXENV_UNDI_ISR_OUT_xxx */
/* when an interrupt is received. */
/* It will tell us if the intr */
/* was generated by our device. */
/* our interrupts. */
/* data from receive buffer(s). */
/*++
Possible responses from PXENV_UNDI_ISR_IN_START
--*/
/*++
Possible responses from PXENV_UNDI_ISR_IN_PROCESS and
PXENV_UNDI_ISR_IN_PROCESS
--*/
typedef struct {
typedef struct {
#pragma pack()
#endif