1. Do not use tab characters 2. No trailing white space in one line 3. All files must end with CRLF Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Liming Gao <liming.gao@intel.com>
		
			
				
	
	
		
			1656 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			1656 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
 | 
						|
Copyright (c) 1999 - 2018, 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 _BIOS_SNP_16_H_
 | 
						|
#define _BIOS_SNP_16_H_
 | 
						|
 | 
						|
#include <Uefi.h>
 | 
						|
 | 
						|
#include <Protocol/LegacyBios.h>
 | 
						|
#include <Protocol/SimpleNetwork.h>
 | 
						|
#include <Protocol/PciIo.h>
 | 
						|
#include <Protocol/NetworkInterfaceIdentifier.h>
 | 
						|
#include <Protocol/DevicePath.h>
 | 
						|
 | 
						|
#include <Library/UefiDriverEntryPoint.h>
 | 
						|
#include <Library/DebugLib.h>
 | 
						|
#include <Library/BaseMemoryLib.h>
 | 
						|
#include <Library/UefiBootServicesTableLib.h>
 | 
						|
#include <Library/UefiLib.h>
 | 
						|
#include <Library/BaseLib.h>
 | 
						|
#include <Library/DevicePathLib.h>
 | 
						|
#include <Library/MemoryAllocationLib.h>
 | 
						|
 | 
						|
#include <Guid/EventGroup.h>
 | 
						|
 | 
						|
#include <IndustryStandard/Pci.h>
 | 
						|
 | 
						|
#include "Pxe.h"
 | 
						|
 | 
						|
//
 | 
						|
// BIOS Simple Network Protocol Device Structure
 | 
						|
//
 | 
						|
#define EFI_SIMPLE_NETWORK_DEV_SIGNATURE    SIGNATURE_32 ('s', 'n', '1', '6')
 | 
						|
 | 
						|
#define INIT_PXE_STATUS                     0xabcd
 | 
						|
 | 
						|
#define EFI_SIMPLE_NETWORK_MAX_TX_FIFO_SIZE 64
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINT32  First;
 | 
						|
  UINT32  Last;
 | 
						|
  VOID *  Data[EFI_SIMPLE_NETWORK_MAX_TX_FIFO_SIZE];
 | 
						|
} EFI_SIMPLE_NETWORK_DEV_FIFO;
 | 
						|
 | 
						|
typedef struct {
 | 
						|
  UINTN                                     Signature;
 | 
						|
  EFI_HANDLE                                Handle;
 | 
						|
  EFI_SIMPLE_NETWORK_PROTOCOL               SimpleNetwork;
 | 
						|
  EFI_SIMPLE_NETWORK_MODE                   SimpleNetworkMode;
 | 
						|
  EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL Nii;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL                  *DevicePath;
 | 
						|
  EFI_PCI_IO_PROTOCOL                       *PciIo;
 | 
						|
  EFI_LEGACY_BIOS_PROTOCOL                  *LegacyBios;
 | 
						|
 | 
						|
  //
 | 
						|
  // Local Data for Simple Network Protocol interface goes here
 | 
						|
  //
 | 
						|
  BOOLEAN                                   UndiLoaded;
 | 
						|
  EFI_EVENT                                 EfiBootEvent;
 | 
						|
  EFI_EVENT                                 LegacyBootEvent;
 | 
						|
  UINT16                                    PxeEntrySegment;
 | 
						|
  UINT16                                    PxeEntryOffset;
 | 
						|
  EFI_SIMPLE_NETWORK_DEV_FIFO               TxBufferFifo;
 | 
						|
  EFI_DEVICE_PATH_PROTOCOL                  *BaseDevicePath;
 | 
						|
  PXE_T                                     *Pxe;                   ///< Pointer to !PXE structure
 | 
						|
  PXENV_UNDI_GET_INFORMATION_T              GetInformation;         ///< Data from GET INFORMATION
 | 
						|
  PXENV_UNDI_GET_NIC_TYPE_T                 GetNicType;             ///< Data from GET NIC TYPE
 | 
						|
  PXENV_UNDI_GET_NDIS_INFO_T                GetNdisInfo;            ///< Data from GET NDIS INFO
 | 
						|
  BOOLEAN                                   IsrValid;               ///< TRUE if Isr contains valid data
 | 
						|
  PXENV_UNDI_ISR_T                          Isr;                    ///< Data from ISR
 | 
						|
  PXENV_UNDI_TBD_T                          *Xmit;                  //
 | 
						|
  VOID                                      *TxRealModeMediaHeader; ///< < 1 MB Size = 0x100
 | 
						|
  VOID                                      *TxRealModeDataBuffer;  ///< < 1 MB Size = GetInformation.MaxTranUnit
 | 
						|
  VOID                                      *TxDestAddr;            ///< < 1 MB Size = 16
 | 
						|
  UINT8                                     InterruptStatus;        ///< returned/cleared by GetStatus, set in ISR
 | 
						|
  UINTN                                     UndiLoaderTablePages;
 | 
						|
  UINTN                                     DestinationDataSegmentPages;
 | 
						|
  UINTN                                     DestinationStackSegmentPages;
 | 
						|
  UINTN                                     DestinationCodeSegmentPages;
 | 
						|
  VOID                                      *UndiLoaderTable;
 | 
						|
  VOID                                      *DestinationDataSegment;
 | 
						|
  VOID                                      *DestinationStackSegment;
 | 
						|
  VOID                                      *DestinationCodeSegment;
 | 
						|
} EFI_SIMPLE_NETWORK_DEV;
 | 
						|
 | 
						|
#define EFI_SIMPLE_NETWORK_DEV_FROM_THIS(a) \
 | 
						|
  CR (a, \
 | 
						|
      EFI_SIMPLE_NETWORK_DEV, \
 | 
						|
      SimpleNetwork, \
 | 
						|
      EFI_SIMPLE_NETWORK_DEV_SIGNATURE \
 | 
						|
      )
 | 
						|
 | 
						|
//
 | 
						|
// Global Variables
 | 
						|
//
 | 
						|
extern EFI_DRIVER_BINDING_PROTOCOL  gBiosSnp16DriverBinding;
 | 
						|
extern EFI_COMPONENT_NAME_PROTOCOL  gBiosSnp16ComponentName;
 | 
						|
extern EFI_COMPONENT_NAME2_PROTOCOL gBiosSnp16ComponentName2;
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// Driver Binding Protocol functions
 | 
						|
//
 | 
						|
/**
 | 
						|
  Tests to see if this driver supports a given controller.
 | 
						|
 | 
						|
  @param This                 A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
 | 
						|
  @param Controller           The handle of the controller to test.
 | 
						|
  @param RemainingDevicePath  A pointer to the remaining portion of a device path.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS    The driver supports given controller.
 | 
						|
  @retval EFI_UNSUPPORT  The driver doesn't support given controller.
 | 
						|
  @retval Other          Other errors prevent driver finishing to test
 | 
						|
                         if the driver supports given controller.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
BiosSnp16DriverBindingSupported (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Starts the Snp device controller
 | 
						|
 | 
						|
  @param This                 A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
 | 
						|
  @param Controller           The handle of the controller to test.
 | 
						|
  @param RemainingDevicePath  A pointer to the remaining portion of a device path.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS          - The device was started.
 | 
						|
  @retval  EFI_DEVICE_ERROR     - The device could not be started due to a device error.
 | 
						|
  @retval  EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of resources.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
BiosSnp16DriverBindingStart (
 | 
						|
  IN EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN EFI_HANDLE                   Controller,
 | 
						|
  IN EFI_DEVICE_PATH_PROTOCOL     *RemainingDevicePath
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Stops the device by given device controller.
 | 
						|
 | 
						|
  @param This               A pointer to the EFI_DRIVER_BINDING_PROTOCOL instance.
 | 
						|
  @param Controller         The handle of the controller to test.
 | 
						|
  @param NumberOfChildren   The number of child device handles in ChildHandleBuffer.
 | 
						|
  @param ChildHandleBuffer  An array of child handles to be freed. May be NULL if
 | 
						|
                            NumberOfChildren is 0.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS      - The device was stopped.
 | 
						|
  @retval  EFI_DEVICE_ERROR - The device could not be stopped due to a device error.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
BiosSnp16DriverBindingStop (
 | 
						|
  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
 | 
						|
  IN  EFI_HANDLE                   Controller,
 | 
						|
  IN  UINTN                        NumberOfChildren,
 | 
						|
  IN  EFI_HANDLE                   *ChildHandleBuffer
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
//
 | 
						|
// Simple Network Protocol functions
 | 
						|
//
 | 
						|
/**
 | 
						|
  Call 16 bit UNDI ROM to start the network interface
 | 
						|
 | 
						|
  @param This       A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR Network interface has not be initialized.
 | 
						|
  @retval EFI_DEVICE_ERROR Fail to execute 16 bit ROM call.
 | 
						|
  @retval EFI_SUCESS       Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkStart (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Call 16 bit UNDI ROM to stop the network interface
 | 
						|
 | 
						|
  @param This       A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR Network interface has not be initialized.
 | 
						|
  @retval EFI_DEVICE_ERROR Fail to execute 16 bit ROM call.
 | 
						|
  @retval EFI_SUCESS       Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkStop (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Initialize network interface
 | 
						|
 | 
						|
  @param This                 A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
  @param ExtraRxBufferSize    The size of extra request receive buffer.
 | 
						|
  @param ExtraTxBufferSize    The size of extra request transmit buffer.
 | 
						|
 | 
						|
  @retval EFI_DEVICE_ERROR Fail to execute 16 bit ROM call.
 | 
						|
  @retval EFI_SUCESS       Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkInitialize (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL                     *This,
 | 
						|
  IN UINTN                                           ExtraRxBufferSize  OPTIONAL,
 | 
						|
  IN UINTN                                           ExtraTxBufferSize  OPTIONAL
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Reset network interface.
 | 
						|
 | 
						|
  @param This                 A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
  @param ExtendedVerification Need extended verfication.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid This parameter.
 | 
						|
  @retval EFI_DEVICE_ERROR      Network device has not been initialized.
 | 
						|
  @retval EFI_NOT_STARTED       Network device has been stopped.
 | 
						|
  @retval EFI_DEVICE_ERROR      Invalid status for network device
 | 
						|
  @retval EFI_SUCCESS           Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkReset (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | 
						|
  IN BOOLEAN                      ExtendedVerification
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Shutdown network interface.
 | 
						|
 | 
						|
  @param This                 A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid This parameter.
 | 
						|
  @retval EFI_DEVICE_ERROR      Network device has not been initialized.
 | 
						|
  @retval EFI_NOT_STARTED       Network device has been stopped.
 | 
						|
  @retval EFI_DEVICE_ERROR      Invalid status for network device
 | 
						|
  @retval EFI_SUCCESS           Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkShutdown (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Reset network interface.
 | 
						|
 | 
						|
  @param This                 A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
  @param Enable               Enable mask value
 | 
						|
  @param Disable              Disable mask value
 | 
						|
  @param ResetMCastFilter     Whether reset multi cast filter or not
 | 
						|
  @param MCastFilterCnt       Count of mutli cast filter for different MAC address
 | 
						|
  @param MCastFilter          Buffer for mustli cast filter for different MAC address.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid This parameter.
 | 
						|
  @retval EFI_DEVICE_ERROR      Network device has not been initialized.
 | 
						|
  @retval EFI_NOT_STARTED       Network device has been stopped.
 | 
						|
  @retval EFI_DEVICE_ERROR      Invalid status for network device
 | 
						|
  @retval EFI_SUCCESS           Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkReceiveFilters (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL                     * This,
 | 
						|
  IN UINT32                                          Enable,
 | 
						|
  IN UINT32                                          Disable,
 | 
						|
  IN BOOLEAN                                         ResetMCastFilter,
 | 
						|
  IN UINTN                                           MCastFilterCnt     OPTIONAL,
 | 
						|
  IN EFI_MAC_ADDRESS                                 * MCastFilter OPTIONAL
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Set new MAC address.
 | 
						|
 | 
						|
  @param This                 A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
  @param Reset                Whether reset station MAC address to permanent address
 | 
						|
  @param New                  A pointer to New address
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid This parameter.
 | 
						|
  @retval EFI_DEVICE_ERROR      Network device has not been initialized.
 | 
						|
  @retval EFI_NOT_STARTED       Network device has been stopped.
 | 
						|
  @retval EFI_DEVICE_ERROR      Invalid status for network device
 | 
						|
  @retval EFI_SUCCESS           Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkStationAddress (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  * This,
 | 
						|
  IN BOOLEAN                      Reset,
 | 
						|
  IN EFI_MAC_ADDRESS              * New OPTIONAL
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Collect statistics.
 | 
						|
 | 
						|
  @param This                 A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
  @param Reset                Whether cleanup old statistics data.
 | 
						|
  @param StatisticsSize       The buffer of statistics table.
 | 
						|
  @param StatisticsTable      A pointer to statistics buffer.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid This parameter.
 | 
						|
  @retval EFI_DEVICE_ERROR      Network device has not been initialized.
 | 
						|
  @retval EFI_NOT_STARTED       Network device has been stopped.
 | 
						|
  @retval EFI_DEVICE_ERROR      Invalid status for network device
 | 
						|
  @retval EFI_SUCCESS           Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkStatistics (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  * This,
 | 
						|
  IN BOOLEAN                      Reset,
 | 
						|
  IN OUT UINTN                    *StatisticsSize OPTIONAL,
 | 
						|
  OUT EFI_NETWORK_STATISTICS      * StatisticsTable OPTIONAL
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Translate IP address to MAC address.
 | 
						|
 | 
						|
  @param This                 A pointer to EFI_SIMPLE_NETWORK_PROTOCOL structure.
 | 
						|
  @param IPv6                 IPv6 or IPv4
 | 
						|
  @param IP                   A pointer to given Ip address.
 | 
						|
  @param MAC                  On return, translated MAC address.
 | 
						|
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid This parameter.
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid IP address.
 | 
						|
  @retval EFI_INVALID_PARAMETER Invalid return buffer for holding MAC address.
 | 
						|
  @retval EFI_UNSUPPORTED       Do not support IPv6
 | 
						|
  @retval EFI_DEVICE_ERROR      Network device has not been initialized.
 | 
						|
  @retval EFI_NOT_STARTED       Network device has been stopped.
 | 
						|
  @retval EFI_DEVICE_ERROR      Invalid status for network device
 | 
						|
  @retval EFI_SUCCESS           Success operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkMCastIpToMac (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | 
						|
  IN BOOLEAN                      IPv6,
 | 
						|
  IN EFI_IP_ADDRESS               *IP,
 | 
						|
  OUT EFI_MAC_ADDRESS             *MAC
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Performs read and write operations on the NVRAM device attached to a
 | 
						|
  network interface.
 | 
						|
 | 
						|
  @param  This       The protocol instance pointer.
 | 
						|
  @param  ReadWrite  TRUE for read operations, FALSE for write operations.
 | 
						|
  @param  Offset     Byte offset in the NVRAM device at which to start the read or
 | 
						|
                     write operation. This must be a multiple of NvRamAccessSize and
 | 
						|
                     less than NvRamSize.
 | 
						|
  @param  BufferSize The number of bytes to read or write from the NVRAM device.
 | 
						|
                     This must also be a multiple of NvramAccessSize.
 | 
						|
  @param  Buffer     A pointer to the data buffer.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The NVRAM access was performed.
 | 
						|
  @retval EFI_NOT_STARTED       The network interface has not been started.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
 | 
						|
  @retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
 | 
						|
  @retval EFI_UNSUPPORTED       This function is not supported by the network interface.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkNvData (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | 
						|
  IN BOOLEAN                      Write,
 | 
						|
  IN UINTN                        Offset,
 | 
						|
  IN UINTN                        BufferSize,
 | 
						|
  IN OUT VOID                     *Buffer
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Reads the current interrupt status and recycled transmit buffer status from
 | 
						|
  a network interface.
 | 
						|
 | 
						|
  @param  This            The protocol instance pointer.
 | 
						|
  @param  InterruptStatus A pointer to the bit mask of the currently active interrupts
 | 
						|
                          If this is NULL, the interrupt status will not be read from
 | 
						|
                          the device. If this is not NULL, the interrupt status will
 | 
						|
                          be read from the device. When the  interrupt status is read,
 | 
						|
                          it will also be cleared. Clearing the transmit  interrupt
 | 
						|
                          does not empty the recycled transmit buffer array.
 | 
						|
  @param  TxBuf           Recycled transmit buffer address. The network interface will
 | 
						|
                          not transmit if its internal recycled transmit buffer array
 | 
						|
                          is full. Reading the transmit buffer does not clear the
 | 
						|
                          transmit interrupt. If this is NULL, then the transmit buffer
 | 
						|
                          status will not be read. If there are no transmit buffers to
 | 
						|
                          recycle and TxBuf is not NULL, * TxBuf will be set to NULL.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The status of the network interface was retrieved.
 | 
						|
  @retval EFI_NOT_STARTED       The network interface has not been started.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
 | 
						|
  @retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
 | 
						|
  @retval EFI_UNSUPPORTED       This function is not supported by the network interface.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkGetStatus (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  * This,
 | 
						|
  OUT UINT32                      *InterruptStatus OPTIONAL,
 | 
						|
  OUT VOID                        **TxBuf OPTIONAL
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Places a packet in the transmit queue of a network interface.
 | 
						|
 | 
						|
  @param  This       The protocol instance pointer.
 | 
						|
  @param  HeaderSize The size, in bytes, of the media header to be filled in by
 | 
						|
                     the Transmit() function. If HeaderSize is non-zero, then it
 | 
						|
                     must be equal to This->Mode->MediaHeaderSize and the DestAddr
 | 
						|
                     and Protocol parameters must not be NULL.
 | 
						|
  @param  BufferSize The size, in bytes, of the entire packet (media header and
 | 
						|
                     data) to be transmitted through the network interface.
 | 
						|
  @param  Buffer     A pointer to the packet (media header followed by data) to be
 | 
						|
                     transmitted. This parameter cannot be NULL. If HeaderSize is zero,
 | 
						|
                     then the media header in Buffer must already be filled in by the
 | 
						|
                     caller. If HeaderSize is non-zero, then the media header will be
 | 
						|
                     filled in by the Transmit() function.
 | 
						|
  @param  SrcAddr    The source HW MAC address. If HeaderSize is zero, then this parameter
 | 
						|
                     is ignored. If HeaderSize is non-zero and SrcAddr is NULL, then
 | 
						|
                     This->Mode->CurrentAddress is used for the source HW MAC address.
 | 
						|
  @param  DestAddr   The destination HW MAC address. If HeaderSize is zero, then this
 | 
						|
                     parameter is ignored.
 | 
						|
  @param  Protocol   The type of header to build. If HeaderSize is zero, then this
 | 
						|
                     parameter is ignored. See RFC 1700, section "Ether Types", for
 | 
						|
                     examples.
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           The packet was placed on the transmit queue.
 | 
						|
  @retval EFI_NOT_STARTED       The network interface has not been started.
 | 
						|
  @retval EFI_NOT_READY         The network interface is too busy to accept this transmit request.
 | 
						|
  @retval EFI_BUFFER_TOO_SMALL  The BufferSize parameter is too small.
 | 
						|
  @retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
 | 
						|
  @retval EFI_DEVICE_ERROR      The command could not be sent to the network interface.
 | 
						|
  @retval EFI_UNSUPPORTED       This function is not supported by the network interface.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkTransmit (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | 
						|
  IN UINTN                        HeaderSize,
 | 
						|
  IN UINTN                        BufferSize,
 | 
						|
  IN VOID                         *Buffer,
 | 
						|
  IN EFI_MAC_ADDRESS              *SrcAddr OPTIONAL,
 | 
						|
  IN EFI_MAC_ADDRESS              *DestAddr OPTIONAL,
 | 
						|
  IN UINT16                       *Protocol OPTIONAL
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Receives a packet from a network interface.
 | 
						|
 | 
						|
  @param  This       The protocol instance pointer.
 | 
						|
  @param  HeaderSize The size, in bytes, of the media header received on the network
 | 
						|
                     interface. If this parameter is NULL, then the media header size
 | 
						|
                     will not be returned.
 | 
						|
  @param  BufferSize On entry, the size, in bytes, of Buffer. On exit, the size, in
 | 
						|
                     bytes, of the packet that was received on the network interface.
 | 
						|
  @param  Buffer     A pointer to the data buffer to receive both the media header and
 | 
						|
                     the data.
 | 
						|
  @param  SrcAddr    The source HW MAC address. If this parameter is NULL, the
 | 
						|
                     HW MAC source address will not be extracted from the media
 | 
						|
                     header.
 | 
						|
  @param  DestAddr   The destination HW MAC address. If this parameter is NULL,
 | 
						|
                     the HW MAC destination address will not be extracted from the
 | 
						|
                     media header.
 | 
						|
  @param  Protocol   The media header type. If this parameter is NULL, then the
 | 
						|
                     protocol will not be extracted from the media header. See
 | 
						|
                     RFC 1700 section "Ether Types" for examples.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           The received data was stored in Buffer, and BufferSize has
 | 
						|
                                 been updated to the number of bytes received.
 | 
						|
  @retval  EFI_NOT_STARTED       The network interface has not been started.
 | 
						|
  @retval  EFI_NOT_READY         The network interface is too busy to accept this transmit
 | 
						|
                                 request.
 | 
						|
  @retval  EFI_BUFFER_TOO_SMALL  The BufferSize parameter is too small.
 | 
						|
  @retval  EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
 | 
						|
  @retval  EFI_DEVICE_ERROR      The command could not be sent to the network interface.
 | 
						|
  @retval  EFI_UNSUPPORTED       This function is not supported by the network interface.
 | 
						|
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkReceive (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL  *This,
 | 
						|
  OUT UINTN                       *HeaderSize OPTIONAL,
 | 
						|
  IN OUT UINTN                    *BufferSize,
 | 
						|
  OUT VOID                        *Buffer,
 | 
						|
  OUT EFI_MAC_ADDRESS             *SrcAddr OPTIONAL,
 | 
						|
  OUT EFI_MAC_ADDRESS             *DestAddr OPTIONAL,
 | 
						|
  OUT UINT16                      *Protocol OPTIONAL
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  wait for a packet to be received.
 | 
						|
 | 
						|
  @param Event      Event used with WaitForEvent() to wait for a packet to be received.
 | 
						|
  @param Context    Event Context
 | 
						|
 | 
						|
**/
 | 
						|
VOID
 | 
						|
EFIAPI
 | 
						|
Undi16SimpleNetworkWaitForPacket (
 | 
						|
  IN EFI_EVENT               Event,
 | 
						|
  IN VOID                    *Context
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Check whether packet is ready for receive.
 | 
						|
 | 
						|
  @param This The protocol instance pointer.
 | 
						|
 | 
						|
  @retval  EFI_SUCCESS           Receive data is ready.
 | 
						|
  @retval  EFI_NOT_STARTED       The network interface has not been started.
 | 
						|
  @retval  EFI_NOT_READY         The network interface is too busy to accept this transmit
 | 
						|
                                 request.
 | 
						|
  @retval  EFI_BUFFER_TOO_SMALL  The BufferSize parameter is too small.
 | 
						|
  @retval  EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value.
 | 
						|
  @retval  EFI_DEVICE_ERROR      The command could not be sent to the network interface.
 | 
						|
  @retval  EFI_UNSUPPORTED       This function is not supported by the network interface.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
Undi16SimpleNetworkCheckForPacket (
 | 
						|
  IN EFI_SIMPLE_NETWORK_PROTOCOL *This
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
 Cache Interrupt verctor address converted from IVT number.
 | 
						|
 | 
						|
 @param VectorNumber  IVT number
 | 
						|
 | 
						|
 @retval EFI_SUCCESS Success to operation.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
CacheVectorAddress (
 | 
						|
  UINT8   VectorNumber
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
 Get interrupt vector address according to IVT number.
 | 
						|
 | 
						|
 @param VectorNumber    Given IVT number
 | 
						|
 | 
						|
 @return cached interrupt vector address.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
RestoreCachedVectorAddress (
 | 
						|
  UINT8   VectorNumber
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  If available, launch the BaseCode from a NIC option ROM.
 | 
						|
  This should install the !PXE and PXENV+ structures in memory for
 | 
						|
  subsequent use.
 | 
						|
 | 
						|
 | 
						|
  @param SimpleNetworkDevice    Simple network device instance
 | 
						|
  @param RomAddress             The ROM base address for NIC rom.
 | 
						|
 | 
						|
  @retval EFI_NOT_FOUND         The check sum does not match
 | 
						|
  @retval EFI_NOT_FOUND         Rom ID offset is wrong
 | 
						|
  @retval EFI_NOT_FOUND         No Rom ID structure is found
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
LaunchBaseCode (
 | 
						|
  EFI_SIMPLE_NETWORK_DEV  *SimpleNetworkDevice,
 | 
						|
  UINTN                   RomAddress
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  PXE
 | 
						|
  UNDI GET NIC TYPE
 | 
						|
  Op-Code: PXENV_UNDI_GET_NIC_TYPE (0012h)
 | 
						|
  Input: Far pointer to a PXENV_UNDI_GET_NIC_TYPE_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
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  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 parameter 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
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Effect the Far Call into the PXE Layer
 | 
						|
 | 
						|
  Note: When using a 32-bit stack segment do not push 32-bit words onto the stack. The PXE API
 | 
						|
  services will not work, unless there are three 16-bit parameters pushed onto the stack.
 | 
						|
      push DS                                 ;Far pointer to parameter structure
 | 
						|
      push offset pxe_data_call_struct        ;is pushed onto stack.
 | 
						|
      push Index                              ;UINT16 is pushed onto stack.
 | 
						|
      call dword ptr (s_PXE ptr es:[di]).EntryPointSP
 | 
						|
      add sp, 6 ;Caller cleans up stack.
 | 
						|
 | 
						|
  @param SimpleNetworkDevice    Device instance for simple network
 | 
						|
  @param Table                 Point to parameter/retun value table for legacy far call
 | 
						|
  @param TableSize              The size of parameter/return value table
 | 
						|
  @param CallIndex              The index of legacy call.
 | 
						|
 | 
						|
  @return EFI_STATUS
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
MakePxeCall (
 | 
						|
  EFI_SIMPLE_NETWORK_DEV  *SimpleNetworkDevice,
 | 
						|
  IN OUT VOID             *Table,
 | 
						|
  IN UINTN                TableSize,
 | 
						|
  IN UINT16               CallIndex
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
/**
 | 
						|
  Allocate buffer below 1M for real mode.
 | 
						|
 | 
						|
  @param NumPages     The number pages want to be allocated.
 | 
						|
  @param Buffer       On return, allocated buffer.
 | 
						|
 | 
						|
  @return Status of allocating pages.
 | 
						|
**/
 | 
						|
EFI_STATUS
 | 
						|
BiosSnp16AllocatePagesBelowOneMb (
 | 
						|
  UINTN  NumPages,
 | 
						|
  VOID   **Buffer
 | 
						|
  )
 | 
						|
;
 | 
						|
 | 
						|
#endif
 |