/** @file | |
Wrapper routines that use a PXE-enabled NIC option ROM to | |
supply internal routines for an EFI SNI (Simple Network | |
Interface) Protocol. | |
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. | |
**/ | |
#include "BiosSnp16.h" | |
/** | |
PXE | |
START UNDI | |
Op-Code: PXENV_START_UNDI (0000h) | |
Input: Far pointer to a PXENV_START_UNDI_T parameter structure that has been initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This service is used to pass the BIOS parameter registers to the UNDI driver. The UNDI driver is | |
responsible for saving the information it needs to communicate with the hardware. | |
This service is also responsible for hooking the Int 1Ah service routine | |
Note: This API service must be called only once during UNDI Option ROM boot. | |
The UNDI driver is responsible for saving this information and using it every time | |
PXENV_UNDI_STARTUP is called. | |
Service cannot be used in protected mode. | |
typedef struct { | |
PXENV_STATUS Status; | |
UINT16 AX; | |
UINT16 BX; | |
UINT16 DX; | |
UINT16 DI; | |
UINT16 ES; | |
} PXENV_START_UNDI_T; | |
Set before calling API service | |
AX, BX, DX, DI, ES: BIOS initialization parameter registers. These | |
fields should contain the same information passed to the option ROM | |
initialization routine by the Host System BIOS. Information about the | |
contents of these registers can be found in the [PnP], [PCI] and | |
[BBS] specifications. | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeStartUndi ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_START_UNDI_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_START_UNDI_T), | |
PXENV_START_UNDI | |
); | |
} | |
/** | |
PXE | |
UNDI STARTUP | |
Op-Code: PXENV_UNDI_STARTUP (0001h) | |
Input: Far pointer to a PXENV_UNDI_STARTUP_T parameter structure that has been initialized by the | |
caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the | |
PXENV_STATUS_xxx constants. | |
Description: This API is responsible for initializing the contents of the UNDI code & data segment for proper | |
operation. Information from the !PXE structure and the first PXENV_START_UNDI API call is used | |
to complete this initialization. The rest of the UNDI APIs will not be available until this call has | |
been completed. | |
Note: PXENV_UNDI_STARTUP must not be called again without first calling | |
PXENV_UNDI_SHUTDOWN. | |
PXENV_UNDI_STARTUP and PXENV_UNDI_SHUTDOWN are no longer responsible for | |
chaining interrupt 1Ah. This must be done by the PXENV_START_UNDI and | |
PXENV_STOP_UNDI API calls. | |
This service cannot be used in protected mode. | |
typedef struct | |
{ | |
PXENV_STATUS Status; | |
} PXENV_UNDI_STARTUP_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiStartup ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_STARTUP_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_STARTUP_T), | |
PXENV_UNDI_STARTUP | |
); | |
} | |
/** | |
PXE | |
UNDI CLEANUP | |
Op-Code: PXENV_UNDI_CLEANUP (0002h) | |
Input: Far pointer to a PXENV_UNDI_CLEANUP_T parameter structure. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field | |
in the parameter structure must be set to one of the values represented by the | |
PXENV_STATUS_xxx constants. | |
Description: This call will prepare the network adapter driver to be unloaded from memory. This call must be | |
made just before unloading the Universal NIC Driver. The rest of the API will not be available | |
after this call executes. | |
This service cannot be used in protected mode. | |
typedef struct { | |
PXENX_STATUS Status; | |
} PXENV_UNDI_CLEANUP_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiCleanup ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_CLEANUP_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_CLEANUP_T), | |
PXENV_UNDI_CLEANUP | |
); | |
} | |
/** | |
PXE | |
UNDI INITIALIZE | |
Op-Code: PXENV_UNDI_INITIALIZE (0003h) | |
Input: Far pointer to a PXENV_UNDI_INITIALIZE_T parameter structure that has been initialized by the | |
caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call resets the adapter and programs it with default parameters. The default parameters used | |
are those supplied to the most recent UNDI_STARTUP call. This routine does not enable the | |
receive and transmit units of the network adapter to readily receive or transmit packets. The | |
application must call PXENV_UNDI_OPEN to logically connect the network adapter to the network. | |
This call must be made by an application to establish an interface to the network adapter driver. | |
Note: When the PXE code makes this call to initialize the network adapter, it passes a NULL pointer for | |
the Protocol field in the parameter structure. | |
typedef struct { | |
PXENV_STATUS Status; | |
ADDR32 ProtocolIni; | |
UINT8 reserved[8]; | |
} PXENV_UNDI_INITIALIZE_T; | |
Set before calling API service | |
ProtocolIni: Physical address of a memory copy of the driver | |
module from the protocol.ini file obtained from the protocol manager | |
driver (refer to the NDIS 2.0 specification). This parameter is | |
supported for the universal NDIS driver to pass the information | |
contained in the 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.) This value can be NULL for any | |
other application interfacing to the universal NIC driver | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiInitialize ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_INITIALIZE_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_INITIALIZE_T), | |
PXENV_UNDI_INITIALIZE | |
); | |
} | |
/** | |
Wrapper routine for reset adapter. | |
PXE | |
UNDI RESET ADAPTER | |
Op-Code: PXENV_UNDI_RESET_ADAPTER (0004h) | |
Input: Far pointer to a PXENV_UNDI_RESET_ADAPTER_t parameter structure that has been initialized | |
by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call resets and reinitializes the network adapter with the same set of parameters supplied to | |
Initialize Routine. Unlike Initialize, this call opens the adapter that is, it connects logically to the | |
network. This routine cannot be used to replace Initialize or Shutdown calls. | |
typedef struct { | |
PXENV_STATUS Status; | |
PXENV_UNDI_MCAST_ADDRESS_t R_Mcast_Buf; | |
} PXENV_UNDI_RESET_T; | |
#define MAXNUM_MCADDR 8 | |
typedef struct { | |
UINT16 MCastAddrCount; | |
MAC_ADDR McastAddr[MAXNUM_MCADDR]; | |
} PXENV_UNDI_MCAST_ADDRESS_t; | |
Set before calling API service | |
R_Mcast_Buf: This is a structure of MCastAddrCount and | |
McastAddr. | |
MCastAddrCount: Number of multicast MAC addresses in the | |
buffer. | |
McastAddr: List of up to MAXNUM_MCADDR multicast MAC | |
addresses. | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance. | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@param RxFilter Filter setting mask value for PXE recive . | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiResetNic ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_RESET_T *PxeUndiTable, | |
IN UINT16 RxFilter | |
) | |
{ | |
PXENV_UNDI_OPEN_T Open; | |
PXENV_UNDI_CLOSE_T Close; | |
UINTN Status; | |
Status = MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_RESET_T), | |
PXENV_UNDI_RESET_NIC | |
); | |
if (!EFI_ERROR(Status)) { | |
return Status; | |
} | |
Close.Status = PXENV_STATUS_SUCCESS; | |
Status = MakePxeCall ( | |
SimpleNetworkDevice, | |
&Close, | |
sizeof (Close), | |
PXENV_UNDI_CLOSE | |
); | |
if (EFI_ERROR(Status)) { | |
return EFI_DEVICE_ERROR; | |
} | |
Status = MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_RESET_T), | |
PXENV_UNDI_RESET_NIC | |
); | |
if (EFI_ERROR(Status)) { | |
return EFI_DEVICE_ERROR; | |
} | |
Open.Status = PXENV_STATUS_SUCCESS; | |
Open.OpenFlag = 0; | |
Open.PktFilter = RxFilter; | |
CopyMem ( | |
&Open.McastBuffer, | |
&PxeUndiTable->R_Mcast_Buf, | |
sizeof (PXENV_UNDI_MCAST_ADDR_T) | |
); | |
Status = MakePxeCall ( | |
SimpleNetworkDevice, | |
&Open, | |
sizeof (Open), | |
PXENV_UNDI_OPEN | |
); | |
if (EFI_ERROR(Status)) { | |
return EFI_DEVICE_ERROR; | |
} | |
return EFI_SUCCESS; | |
} | |
/** | |
PXE | |
UNDI SHUTDOWN | |
Op-Code: PXENV_UNDI_SHUTDOWN (0005h) | |
Input: Far pointer to a PXENV_UNDI_SHUTDOWN_T parameter. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call resets the network adapter and leaves it in a safe state for another driver to program it. | |
Note: The contents of the PXENV_UNDI_STARTUP parameter structure need to be saved by the | |
Universal NIC Driver in case PXENV_UNDI_INITIALIZE is called again. | |
typedef struct | |
{ | |
PXENV_STATUS Status; | |
} PXENV_UNDI_SHUTDOWN_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiShutdown ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_SHUTDOWN_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_SHUTDOWN_T), | |
PXENV_UNDI_SHUTDOWN | |
); | |
} | |
/** | |
PXE | |
UNDI OPEN | |
Op-Code: PXENV_UNDI_OPEN (0006h) | |
Input: Far pointer to a PXENV_UNDI_OPEN_T parameter structure that has been initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call activates the adapter network connection and sets the adapter ready to accept packets | |
for transmit and receive. | |
typedef struct { | |
PXENV_STATUS Status; | |
UINT16 OpenFlag; | |
UINT16 PktFilter; | |
#define FLTR_DIRECTED 0x0001 | |
#define FLTR_BRDCST 0x0002 | |
#define FLTR_PRMSCS 0x0004 | |
#define FLTR_SRC_RTG 0x0008 | |
PXENV_UNDI_MCAST_ADDRESS_t R_Mcast_Buf; | |
} PXENV_UNDI_OPEN_T; | |
Set before calling API service | |
OpenFlag: This is an adapter specific input parameter. This is | |
supported for the universal NDIS 2.0 driver to pass in the open flags | |
provided by the protocol driver. (See the NDIS 2.0 specification.) | |
This can be zero. | |
PktFilter: Filter for receiving packets. This can be one, or more, of | |
the FLTR_xxx constants. Multiple values are arithmetically or-ed | |
together. | |
directed packets are packets that may come to your MAC address | |
or the multicast MAC address. | |
R_Mcast_Buf: See definition in UNDI RESET ADAPTER (0004h). | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiOpen ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_OPEN_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_OPEN_T), | |
PXENV_UNDI_OPEN | |
); | |
} | |
/** | |
PXE | |
UNDI CLOSE | |
Op-Code: PXENV_UNDI_CLOSE (0007h) | |
Input: Far pointer to a PXENV_UNDI_CLOSE_T parameter. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call disconnects the network adapter from the network. Packets cannot be transmitted or | |
received until the network adapter is open again. | |
typedef struct { | |
PXENV_STATUS Status; | |
} PXENV_UNDI_CLOSE_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiClose ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_CLOSE_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_CLOSE_T), | |
PXENV_UNDI_CLOSE | |
); | |
} | |
/** | |
PXE | |
UNDI TRANSMIT PACKET | |
Op-Code: PXENV_UNDI_TRANSMIT (0008h) | |
Input: Far pointer to a PXENV_UNDI_TRANSMIT_T parameter structure that | |
has been initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. | |
The status code must be set to one of the values represented by the | |
PXENV_STATUS_xxx constants. | |
Description: This call transmits a buffer to the network. The media header | |
for the packet can be filled by the calling protocol, but it might not be. | |
The network adapter driver will fill it if required by the values in the | |
parameter block. The packet is buffered for transmission provided there is | |
an available buffer, and the function returns PXENV_EXIT_SUCCESS. If no | |
buffer is available the function returns PXENV_EXIT_FAILURE with a status | |
code of PXE_UNDI_STATUS__OUT OF_RESOURCE. The number of buffers is | |
implementation-dependent. An interrupt is generated on completion of the | |
transmission of one or more packets. A call to PXENV_UNDI_TRANSMIT is | |
permitted in the context of a transmit complete interrupt. | |
typedef struct { | |
PXENV_STATUS Status; | |
UINT8 Protocol; | |
#define P_UNKNOWN 0 | |
#define P_IP 1 | |
#define P_ARP 2 | |
#define P_RARP 3 | |
UINT8 XmitFlag; | |
#define XMT_DESTADDR 0x0000 | |
#define XMT_BROADCAST 0x0001 | |
SEGOFF16 DestAddr; | |
SEGOFF16 TBD; | |
UINT32 Reserved[2]; | |
} t_PXENV_UNDI_TRANSMIT; | |
#define MAX_DATA_BLKS 8 | |
typedef struct { | |
UINT16 ImmedLength; | |
SEGOFF16 Xmit; | |
UINT16 DataBlkCount; | |
struct DataBlk { | |
UINT8 TDPtrType; | |
UINT8 TDRsvdByte; | |
UINT16 TDDataLen; | |
SEGOFF16 TDDataPtr; | |
} DataBlock[MAX_DATA_BLKS]; | |
} PXENV_UNDI_TBD_T | |
Set before calling API service | |
Protocol: This is the protocol of the upper layer that is calling UNDI | |
TRANSMIT call. If the upper layer has filled the media header, this | |
field must be P_UNKNOWN. | |
XmitFlag: If this flag is XMT_DESTADDR, the NIC driver expects a | |
pointer to the destination media address in the field DestAddr. If | |
XMT_BROADCAST, the NIC driver fills the broadcast address for the | |
destination. | |
TBD: Segment:Offset address of the transmit buffer descriptor. | |
ImmedLength: Length of the immediate transmit buffer: Xmit. | |
Xmit: Segment:Offset of the immediate transmit buffer. | |
DataBlkCount: Number of blocks in this transmit buffer. | |
TDPtrType: | |
0 => 32-bit physical address in TDDataPtr (not supported in this | |
version of PXE) | |
1 => segment:offset in TDDataPtr which can be a real mode or 16-bit | |
protected mode pointer | |
TDRsvdByte: Reserved must be zero. | |
TDDatalen: Data block length in bytes. | |
TDDataPtr: Segment:Offset of the transmit block. | |
DataBlock: Array of transmit data blocks. | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiTransmit ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_TRANSMIT_T *PxeUndiTable | |
) | |
{ | |
EFI_STATUS Status; | |
Status = MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_TRANSMIT_T), | |
PXENV_UNDI_TRANSMIT | |
); | |
if (Status == EFI_SUCCESS) { | |
return EFI_SUCCESS; | |
} | |
switch (PxeUndiTable->Status) { | |
case PXENV_STATUS_OUT_OF_RESOURCES: | |
return EFI_NOT_READY; | |
default: | |
return EFI_DEVICE_ERROR; | |
} | |
} | |
/** | |
PXE | |
UNDI SET MULTICAST ADDRESS | |
Op-Code: PXENV_UNDI_SET_MCAST_ADDRESS (0009h) | |
Input: Far pointer to a PXENV_TFTP_SET_MCAST_ADDRESS_t parameter structure that has been | |
initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call changes the current list of multicast addresses to the input list and resets the network | |
adapter to accept it. If the number of multicast addresses is zero, multicast is disabled. | |
typedef struct { | |
PXENV_STATUS Status; | |
PXENV_UNDI_MCAST_ADDRESS_t R_Mcast_Buf; | |
} PXENV_UNDI_SET_MCAST_ADDR_T; | |
Set before calling API service | |
R_Mcast_Buf: See description in the UNDI RESET ADAPTER | |
(0004h) API. | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiSetMcastAddr ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_SET_MCAST_ADDR_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_SET_MCAST_ADDR_T), | |
PXENV_UNDI_SET_MCAST_ADDR | |
); | |
} | |
/** | |
PXE | |
UNDI SET STATION ADDRESS | |
Op-Code: PXENV_UNDI_SET_STATION_ADDRESS (000Ah) | |
Input: Far pointer to a PXENV_UNDI_SET_STATION_ADDRESS_t parameter structure that has been | |
initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call sets the MAC address to be the input value and is called before opening the network | |
adapter. Later, the open call uses this variable as a temporary MAC address to program the | |
adapter individual address registers. | |
typedef struct { | |
PXENV_STATUS Status; | |
MAC_ADDR StationAddress; | |
} PXENV_UNDI_SET_STATION_ADDR_T; | |
Set before calling API service | |
StationAddress: Temporary MAC address to be used for | |
transmit and receive. | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiSetStationAddr ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_SET_STATION_ADDR_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_SET_STATION_ADDR_T), | |
PXENV_UNDI_SET_STATION_ADDR | |
); | |
} | |
/** | |
PXE | |
UNDI SET PACKET FILTER | |
Op-Code: PXENV_UNDI_SET_PACKET_FILTER (000Bh) | |
Input: Far pointer to a PXENV_UNDI_SET_PACKET_FILTER_T parameter structure that has been | |
initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call resets the adapter's receive unit to accept a new filter, different from the one provided with | |
the open call. | |
typedef struct { | |
PXENV_STATUS Status; | |
UINT8 filter; | |
} PXENV_UNDI_SET_PACKET_FILTER_T; | |
Set before calling API service | |
Filter: See the receive filter values in the UNDI OPEN | |
(0006h) API description. | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiSetPacketFilter ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_SET_PACKET_FILTER_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_SET_PACKET_FILTER_T), | |
PXENV_UNDI_SET_PACKET_FILTER | |
); | |
} | |
/** | |
PXE | |
UNDI GET INFORMATION | |
Op-Code: PXENV_UNDI_GET_INFORMATION (000Ch) | |
Input: Far pointer to a PXENV_UNDI_GET_INFORMATION_T parameter structure that has been | |
initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the | |
PXENV_STATUS_xxx constants. | |
Description: This call copies the network adapter variables, including the MAC address, into the input buffer. | |
Note: The PermNodeAddress field must be valid after PXENV_START_UNDI and | |
PXENV_UNDI_STARTUP have been issued. All other fields must be valid after | |
PXENV_START_UNDI, PXENV_UNDI_STARTUP and PXENV_UNDI_INITIALIZE have been | |
called. | |
typedef struct { | |
PXENV_STATUS Status; | |
UINT16 BaseIo; | |
UINT16 IntNumber; | |
UINT16 MaxTranUnit; | |
UINT16 HwType; | |
#define ETHER_TYPE 1 | |
#define EXP_ETHER_TYPE 2 | |
#define IEEE_TYPE 6 | |
#define ARCNET_TYPE 7 | |
UINT16 HwAddrLen; | |
MAC_ADDR CurrentNodeAddress; | |
MAC_ADDR PermNodeAddress; | |
SEGSEL ROMAddress; | |
UINT16 RxBufCt; | |
UINT16 TxBufCt; | |
} PXENV_UNDI_GET_INFORMATION_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
BaseIO: Adapter base I/O address. | |
IntNumber: Adapter IRQ number. | |
MaxTranUnit: Adapter maximum transmit unit. | |
HWType: Type of protocol at the hardware level. | |
HWAddrLen: Length of the hardware address. | |
CurrentNodeAddress: Current hardware address. | |
PermNodeAddress: Permanent hardware address. | |
ROMAddress: Real mode ROM segment address. | |
RxBufCnt: Receive queue length. | |
TxBufCnt: Transmit queue length. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiGetInformation ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_GET_INFORMATION_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_GET_INFORMATION_T), | |
PXENV_UNDI_GET_INFORMATION | |
); | |
} | |
/** | |
PXE | |
UNDI GET STATISTICS | |
Op-Code: PXENV_UNDI_GET_STATISTICS (000Dh) | |
Input: Far pointer to a PXENV_UNDI_GET_STATISTICS_T parameter structure that has been initialized | |
by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call reads statistical information from the network adapter, and returns. | |
typedef struct { | |
PXENV_STATUS Status; | |
UINT32 XmtGoodFrames; | |
UINT32 RcvGoodFrames; | |
UINT32 RcvCRCErrors; | |
UINT32 RcvResourceErrors; | |
} PXENV_UNDI_GET_STATISTICS_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
XmtGoodFrames: Number of successful transmissions. | |
RcvGoodFrames: Number of good frames received. | |
RcvCRCErrors: Number of frames received with CRC | |
error. | |
RcvResourceErrors: Number of frames discarded | |
because receive queue was full. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiGetStatistics ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_GET_STATISTICS_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_GET_STATISTICS_T), | |
PXENV_UNDI_GET_STATISTICS | |
); | |
} | |
/** | |
PXE | |
UNDI CLEAR STATISTICS | |
Op-Code: PXENV_UNDI_CLEAR_STATISTICS (000Eh) | |
Input: Far pointer to a PXENV_UNDI_CLEAR_STATISTICS_T parameter. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the | |
PXENV_STATUS_xxx constants. | |
Description: This call clears the statistical information from the network adapter. | |
typedef struct { | |
PXENV_STATUS Status; | |
} PXENV_UNDI_CLEAR_STATISTICS_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiClearStatistics ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_CLEAR_STATISTICS_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_CLEAR_STATISTICS_T), | |
PXENV_UNDI_CLEAR_STATISTICS | |
); | |
} | |
/** | |
PXE | |
UNDI INITIATE DIAGS | |
Op-Code: PXENV_UNDI_INITIATE_DIAGS (000Fh) | |
Input: Far pointer to a PXENV_UNDI_INITIATE_DIAGS_T parameter. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the | |
PXENV_STATUS_xxx constants. | |
Description: This call can be used to initiate the run-time diagnostics. It causes the network adapter to run | |
hardware diagnostics and to update its status information. | |
typedef struct { | |
PXENV_STATUS Status; | |
} PXENV_UNDI_INITIATE_DIAGS_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiInitiateDiags ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_INITIATE_DIAGS_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_INITIATE_DIAGS_T), | |
PXENV_UNDI_INITIATE_DIAGS | |
); | |
} | |
/** | |
PXE | |
UNDI FORCE INTERRUPT | |
Op-Code: PXENV_UNDI_FORCE_INTERRUPT (0010h) | |
Input: Far pointer to a PXENV_UNDI_FORCE_INTERRUPT_T parameter structure that has been | |
initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call forces the network adapter to generate an interrupt. When a receive interrupt occurs, the | |
network adapter driver usually queues the packet and calls the application's callback receive | |
routine with a pointer to the packet received. Then, the callback routine either can copy the packet | |
to its buffer or can decide to delay the copy to a later time. If the packet is not immediately copied, | |
the network adapter driver does not remove it from the input queue. When the application wants to | |
copy the packet, it can call the PXENV_UNDI_FORCE_INTERRUPT routine to simulate the receive | |
interrupt. | |
typedef struct { | |
PXENV_STATUS Status; | |
} PXENV_UNDI_FORCE_INTERRUPT_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiForceInterrupt ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_FORCE_INTERRUPT_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_FORCE_INTERRUPT_T), | |
PXENV_UNDI_FORCE_INTERRUPT | |
); | |
} | |
/** | |
PXE | |
UNDI GET MULTICAST ADDRESS | |
Op-Code: PXENV_UNDI_GET_MCAST_ADDRESS (0011h) | |
Input: Far pointer to a PXENV_GET_MCAST_ADDRESS_t parameter structure that has been initialized | |
by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This call converts the given IP multicast address to a hardware multicast address. | |
typedef struct { | |
PXENV_STATUS Status; | |
IP4 InetAddr; | |
MAC_ADDR MediaAddr; | |
} PXENV_UNDI_GET_MCAST_ADDR_T; | |
Set before calling API service | |
InetAddr: IP multicast address. | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
MediaAddr: MAC multicast address. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiGetMcastAddr ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_GET_MCAST_ADDR_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_GET_MCAST_ADDR_T), | |
PXENV_UNDI_GET_MCAST_ADDR | |
); | |
} | |
/** | |
PXE | |
UNDI GET NIC TYPE | |
Op-Code: PXENV_UNDI_GET_NIC_TYPE (0012h) | |
Input: Far pointer to a PXENV_UNDI_GET_NIC_TYPE parameter structure that has been initialized by | |
the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. If the PXENV_EXIT_SUCCESS is returned the parameter structure must contain the | |
NIC information. | |
Description: This call, if successful, provides the NIC-specific information necessary to identify the network | |
adapter that is used to boot the system. | |
Note: The application first gets the DHCPDISCOVER packet using GET_CACHED_INFO and checks if | |
the UNDI is supported before making this call. If the UNDI is not supported, the NIC-specific | |
information can be obtained from the DHCPDISCOVER packet itself. | |
PXENV_START_UNDI, PXENV_UNDI_STARTUP and PXENV_UNDI_INITIALIZE must be called | |
before the information provided is valid. | |
typedef { | |
PXENV_STATUS Status; | |
UINT8 NicType; | |
#define PCI_NIC 2 | |
#define PnP_NIC 3 | |
#define CardBus_NIC 4 | |
Union { | |
Struct { | |
UINT16 Vendor_ID; | |
UINT16 Dev_ID; | |
UINT8 Base_Class; | |
UINT8 Sub_Class; | |
UINT8 Prog_Intf; | |
UINT8 Rev; | |
UINT16 BusDevFunc; | |
UINT16 SubVendor_ID; | |
UINT16 SubDevice_ID; | |
} pci, cardbus; | |
struct { | |
UINT32 EISA_Dev_ID; | |
UINT8 Base_Class; | |
UINT8 Sub_Class; | |
UINT8 Prog_Intf; | |
UINT16 CardSelNum; | |
} pnp; | |
} info; | |
} PXENV_UNDI_GET_NIC_TYPE_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
NICType: Type of NIC information stored in the parameter | |
structure. | |
Info: Information about the fields in this union can be found | |
in the [PnP] and [PCI] specifications | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiGetNicType ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_GET_NIC_TYPE_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_GET_NIC_TYPE_T), | |
PXENV_UNDI_GET_NIC_TYPE | |
); | |
} | |
/** | |
PXE | |
UNDI GET IFACE INFO | |
Op-Code: PXENV_UNDI_GET_IFACE_INFO (0013h) | |
Input: Far pointer to a PXENV_UNDI_GET_IFACE_INFO_t parameter structure that has been initialized | |
by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. If the PXENV_EXIT_SUCCESS is returned, the parameter structure must contain the | |
interface specific information. | |
Description: This call, if successful, provides the network interface specific information such as the interface | |
type at the link layer (Ethernet, Tokenring) and the link speed. This information can be used in the | |
universal drivers such as NDIS or Miniport to communicate to the upper protocol modules. | |
Note: UNDI follows the NDIS2 specification in giving this information. It is the responsibility of the | |
universal driver to translate/convert this information into a format that is required in its specification | |
or to suit the expectation of the upper level protocol modules. | |
PXENV_START_UNDI, PXENV_UNDI_STARTUP and PXENV_UNDI_INITIALIZE must be called | |
before the information provided is valid. | |
typedef struct { | |
PXENV_STATUS Status | |
UINT8 IfaceType[16]; | |
UINT32 LinkSpeed; | |
UINT32 ServiceFlags; | |
UINT32 Reserved[4]; | |
} PXENV_UNDI_GET_NDIS_INFO_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
IfaceType: Name of MAC type in ASCIIZ format. This is | |
used by the universal NDIS driver to specify its driver type | |
to the protocol driver. | |
LinkSpeed: Defined in the NDIS 2.0 specification. | |
ServiceFlags: Defined in the NDIS 2.0 specification. | |
Reserved: Must be zero. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiGetNdisInfo ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_GET_NDIS_INFO_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_GET_NDIS_INFO_T), | |
PXENV_UNDI_GET_NDIS_INFO | |
); | |
} | |
/** | |
PXE | |
UNDI ISR | |
Op-Code: PXENV_UNDI_ISR (0014h) | |
Input: Far pointer to a PXENV_UNDI_ISR_T parameter structure that has been initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This API function will be called at different levels of processing the interrupt. The FuncFlag field in | |
the parameter block indicates the operation to be performed for the call. This field is filled with the | |
status of that operation on return. | |
Note: Interrupt Service Routine Operation: | |
In this design the UNDI does not hook the interrupt for the Network Interface. Instead, the | |
application or the protocol driver hooks the interrupt and calls UNDI with the PXENV_UNDI_ISR | |
API call for interrupt verification (PXENV_UNDI_ISR_IN_START) and processing | |
(PXENV_UNDI_ISR_IN_PROCESS and PXENV_UNDI_ISR_GET_NEXT). | |
When the Network Interface HW generates an interrupt the protocol driver interrupt service | |
routine (ISR) gets control and takes care of the interrupt processing at the PIC level. The ISR then | |
calls the UNDI using the PXENV_UNDI_ISR API with the value PXENV_UNDI_ISR_IN_START for | |
the FuncFlag parameter. At this time UNDI must disable the interrupts at the Network Interface | |
level and read any status values required to further process the interrupt. UNDI must return as | |
quickly as possible with one of the two values, PXENV_UNDI_ISR_OUT_OURS or | |
PXENV_UNDI_ISR_OUT_NOT_OURS, for the parameter FuncFlag depending on whether the | |
interrupt was generated by this particular Network Interface or not. | |
If the value returned in FuncFlag is PXENV_UNDI_ISR_OUT_NOT_OURS, then the interrupt was | |
not generated by our NIC, and interrupt processing is complete. | |
If the value returned in FuncFlag is PXENV_UNDI_ISR_OUT_OURS, the protocol driver must start | |
a handler thread and send an end-of-interrupt (EOI) command to the PIC. Interrupt processing is | |
now complete. | |
The protocol driver strategy routine will call UNDI using this same API with FuncFlag equal to | |
PXENV_UNDI_ISR_IN_PROCESS. At this time UNDI must find the cause of this interrupt and | |
return the status in the FuncFlag. It first checks if there is a frame received and if so it returns the | |
first buffer pointer of that frame in the parameter block. | |
The protocol driver calls UNDI repeatedly with the FuncFlag equal to | |
PXENV_UNDI_ISR_IN_GET_NEXT to get all the buffers in a frame and also all the received | |
frames in the queue. On this call, UNDI must remember the previous buffer given to the protoco,l | |
remove it from the receive queue and recycle it. In case of a multi-buffered frame, if the previous | |
buffer is not the last buffer in the frame it must return the next buffer in the frame in the parameter | |
block. Otherwise it must return the first buffer in the next frame. | |
If there is no received frame pending to be processed, UNDI processes the transmit completes and | |
if there is no other interrupt status to be processed, UNDI re-enables the interrupt at the | |
NETWORK INTERFACE level and returns PXENV_UNDI_ISR_OUT_DONE in the FuncFlag. | |
IMPORTANT: It is possible for the protocol driver to be interrupted again while in the | |
strategy routine when the UNDI re-enables interrupts. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiIsr ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_ISR_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_ISR_T), | |
PXENV_UNDI_ISR | |
); | |
} | |
/** | |
PXE | |
STOP UNDI | |
Op-Code: PXENV_STOP_UNDI (0015h) | |
Input: Far pointer to a PXENV_STOP_UNDI_T parameter structure that has been initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This routine is responsible for unhooking the Int 1Ah service routine. | |
Note: This API service must be called only once at the end of UNDI Option ROM boot. One of the valid | |
status codes is PXENV_STATUS_KEEP. If this status is returned, UNDI must not be removed from | |
base memory. Also, UNDI must not be removed from base memory if BC is not removed from base | |
memory. | |
Service cannot be used in protected mode. | |
typedef struct { | |
PXENV_STATUS Status; | |
} PXENV_STOP_UNDI_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiStop ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_STOP_UNDI_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_STOP_UNDI_T), | |
PXENV_STOP_UNDI | |
); | |
} | |
/** | |
PXE | |
UNDI GET STATE | |
Op-Code: PXENV_UNDI_GET_STATE (0015h) | |
Input: Far pointer to a PXENV_UNDI_GET_STATE_T parameter. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. The UNDI_STATE field in the parameter structure must be set to one of the valid state | |
constants | |
Description: This call can be used to obtain state of the UNDI engine in order to avoid issuing adverse call | |
sequences | |
typedef struct { | |
#define PXE_UNDI_GET_STATE_STARTED 1 | |
#define PXE_UNDI_GET_STATE_INITIALIZED 2 | |
#define PXE_UNDI_GET_STATE_OPENED 3 | |
PXENV_STATUS Status; | |
UINT8 UNDIstate; | |
} PXENV_UNDI_GET_STATE_T; | |
Set before calling API service | |
N/A | |
Returned from API service | |
Status: See the PXENV_STATUS_xxx constants. | |
State: See definitions of the state constants. | |
Note. UNDI implementation is responsible for maintaining | |
internal state machine. | |
UNDI ISR | |
Op-Code: PXENV_UNDI_ISR (0014h) | |
Input: Far pointer to a t_PXENV_UNDI_ISR parameter structure that has been initialized by the caller. | |
Output: PXENV_EXIT_SUCCESS or PXENV_EXIT_FAILURE must be returned in AX. The status field in | |
the parameter structure must be set to one of the values represented by the PXENV_STATUS_xxx | |
constants. | |
Description: This API function will be called at different levels of processing the interrupt. The FuncFlag field in | |
the parameter block indicates the operation to be performed for the call. This field is filled with the | |
status of that operation on return. | |
@param SimpleNetworkDevice Device instance | |
@param PxeUndiTable Point to structure which hold paramter and return value | |
for option ROM call. | |
@return Return value of PXE option ROM far call. | |
**/ | |
EFI_STATUS | |
PxeUndiGetState ( | |
IN EFI_SIMPLE_NETWORK_DEV *SimpleNetworkDevice, | |
IN OUT PXENV_UNDI_GET_STATE_T *PxeUndiTable | |
) | |
{ | |
return MakePxeCall ( | |
SimpleNetworkDevice, | |
PxeUndiTable, | |
sizeof (PXENV_UNDI_GET_STATE_T), | |
PXENV_UNDI_GET_STATE | |
); | |
} |