X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFrameworkModulePkg%2FCsm%2FBiosThunk%2FSnp16Dxe%2FBiosSnp16.h;fp=IntelFrameworkModulePkg%2FCsm%2FBiosThunk%2FSnp16Dxe%2FBiosSnp16.h;h=0000000000000000000000000000000000000000;hp=9e5e4960efae43b522f2616f439dce6487bf77d9;hb=aa7fc1c11c3d57d82842dbede50d064639671a98;hpb=4286eb22f4aec33b90574b998a31f8bd34dd4f47
diff --git a/IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/BiosSnp16.h b/IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/BiosSnp16.h
deleted file mode 100644
index 9e5e4960ef..0000000000
--- a/IntelFrameworkModulePkg/Csm/BiosThunk/Snp16Dxe/BiosSnp16.h
+++ /dev/null
@@ -1,1468 +0,0 @@
-/** @file
-
-Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.
-
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#ifndef _BIOS_SNP_16_H_
-#define _BIOS_SNP_16_H_
-
-#include
-
-#include
-#include
-#include
-#include
-#include
-
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-#include
-
-#include
-
-#include
-
-#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 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 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 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
- )
-;
-
-
-/**
- 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