/**
* @file MnpDxe.h
*
* @brief MNP DXE Driver - Header with GUID definitions, protocol structures,
* and type declarations for the Managed Network Protocol DXE driver.
*
* Source: AmiNetworkPkg/UefiNetworkStack/Common/MnpDxe/
* UEFI Phase: DXE
*
* This module implements the EFI Managed Network Protocol (MNP) service
* binding and driver binding for managing network packet transmission and
* reception. It provides a layered architecture:
* MNP_DEVICE_DATA (per-SNP-adapter, size 0x110)
* -> MNP_SERVICE_DATA (per-VLAN service, size 0x60, signature 0x53706E4D)
* -> MNP_INSTANCE_DATA (per-opened-instance, size 0xE8, signature 0x49706E4D)
*
* Source files as seen in strings:
* MnpDriver.c - Driver binding entry, Start/Stop, ServiceBinding Create/Destroy
* MnpConfig.c - Device/instance configuration, buffer management (free/alloc Nbuf)
* MnpMain.c - MNP protocol entry points (GetModeData, Configure, Groups, Transmit,
* Receive, Cancel, Poll)
* MnpIo.c - I/O processing: receive/send packets, timeout checks, polling
* MnpVlan.c - VLAN management (add/remove/find VLANs, VLAN config protocol)
* ComponentName.c - Component name protocol (MnpGetDriverName, MnpGetControllerName)
*
* Dependencies:
* - SNP protocol (underlying Simple Network Protocol via &unk_A830)
* - DPC protocol (deferred procedure call via &unk_A880, qword_A9F8)
* - Device Path protocol (&unk_A850)
* - VLAN Config protocol (&unk_A820)
*/
#ifndef __MNP_DXE_H__
#define __MNP_DXE_H__
#include "../uefi_headers/Uefi.h"
/*
* =====================================================================
* GUID DEFINITIONS
* =====================================================================
*/
/** SNP protocol GUID - for locating underlying SNP interface (at &unk_A830 in .data) */
#define EFI_SIMPLE_NETWORK_PROTOCOL_GUID \
{ 0xA19832B9, 0xAC25, 0x11D3, { 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } }
/** MNP protocol GUID - the service this driver installs (at &unk_A8A0) */
#define EFI_MANAGED_NETWORK_PROTOCOL_GUID \
{ 0x552A84F1, 0x2CB6, 0x4B5D, { 0xA8, 0xCA, 0xD4, 0xCF, 0xB4, 0x23, 0xE3, 0x82 } }
/** MNP service binding GUID (at &unk_A860) */
#define EFI_MANAGED_NETWORK_SERVICE_BINDING_PROTOCOL_GUID \
{ 0xF36FF770, 0xA7E1, 0x42CF, { 0x9E, 0xD2, 0x56, 0xF0, 0xF2, 0x71, 0xF4, 0x4C } }
/** Device path protocol GUID (at &unk_A850) */
#define EFI_DEVICE_PATH_PROTOCOL_GUID \
{ 0x09576E91, 0x6D3F, 0x11D2, { 0x8E, 0x39, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B } }
/** VLAN config protocol GUID (at &unk_A820) */
#define EFI_VLAN_CONFIG_PROTOCOL_GUID \
{ 0x9E23D768, 0xD2F4, 0x4366, { 0x9F, 0xC3, 0x89, 0xB2, 0x4E, 0x4C, 0x5E, 0x69 } }
/** Driver Binding protocol GUID (at &unk_A810) - standard UEFI */
#define EFI_DRIVER_BINDING_PROTOCOL_GUID \
{ 0x18A031AB, 0xB443, 0x4D1A, { 0xA5, 0xC0, 0x0C, 0x09, 0x26, 0x1E, 0x9F, 0x71 } }
/** Component Name 2 protocol GUID (at &unk_A800) */
#define EFI_COMPONENT_NAME2_PROTOCOL_GUID \
{ 0x6A7A5CFF, 0xE870, 0x4FBA, { 0xDA, 0x75, 0xAB, 0x30, 0x25, 0xCE, 0x14, 0x68 } }
/*
* =====================================================================
* SIGNATURE CONSTANTS
* =====================================================================
*/
/**
* MNP_DEVICE_DATA signature: 'M' | ('n' << 8) | (('p' | ('D' << 8)) << 16)
* = 0x44706E4D = 1148218957 = "MnpD"
*/
#define MNP_DEVICE_DATA_SIGNATURE 1148218957 /* "MnpD" */
/**
* MNP_SERVICE_DATA signature: 'M' | ('n' << 8) | (('p' | ('S' << 8)) << 16)
* = 0x53706E4D = 1399877197 = "MnpS"
*/
#define MNP_SERVICE_DATA_SIGNATURE 1399877197 /* "MnpS" */
/**
* MNP_INSTANCE_DATA signature: 'M' | ('n' << 8) | (('p' | ('I' << 8)) << 16)
* = 0x49706E4D = 1232105037 = "MnpI"
*/
#define MNP_INSTANCE_DATA_SIGNATURE 1232105037 /* "MnpI" */
/**
* NET_BUF signature: 'n' | ('b' << 8) | (('u' | ('f' << 8)) << 16)
* = 0x6675626E = 1718968942 = "nbuf"
*/
#define NET_BUF_SIGNATURE 1718968942 /* "nbuf" */
/**
* NET_BUF_QUEUE signature: 'n' | ('b' << 8) | (('q' | ('u' << 8)) << 16)
* = 0x7571626E = 1970365038 = "nbqu"
*/
#define NET_BUF_QUEUE_SIGNATURE 1970365038 /* "nbqu" */
/**
* NET_VECTOR signature: 'n' | ('v' << 8) | (('e' | ('c' << 8)) << 16)
* = 0x6365766E = 1667593838 = "nvec"
*/
#define NET_VECTOR_SIGNATURE 1667593838 /* "nvec" */
/*
* =====================================================================
* GLOBAL POINTERS (imported via DXE libraries)
* =====================================================================
*/
extern EFI_HANDLE gImageHandle; /* at 0xA9D0 */
extern EFI_SYSTEM_TABLE *gSystemTable; /* at 0xA9C0 */
extern EFI_BOOT_SERVICES *gBootServices; /* at 0xA9C8, aliased as BootServices */
extern EFI_RUNTIME_SERVICES *gRuntimeServices; /* at 0xA9D8, aliased as RuntimeServices */
extern VOID *gDpcProtocol; /* at 0xA9F8, DPC protocol registered */
/*
* =====================================================================
* FORWARD DECLARATIONS
* =====================================================================
*/
typedef struct _MNP_DEVICE_DATA MNP_DEVICE_DATA;
typedef struct _MNP_SERVICE_DATA MNP_SERVICE_DATA;
typedef struct _MNP_INSTANCE_DATA MNP_INSTANCE_DATA;
/*
* =====================================================================
* ADDITIONAL EFI / MISCELLANEOUS GUID DECLARATIONS
* =====================================================================
*/
/** Driver Binding Protocol GUID (Standard UEFI) */
extern EFI_GUID gEfiDriverBindingProtocolGuid;
/** Component Name 2 Protocol GUID (Standard UEFI) */
extern EFI_GUID gEfiComponentName2ProtocolGuid;
/** Component Name Protocol GUID (Standard UEFI) */
extern EFI_GUID gEfiComponentNameProtocolGuid;
/** MNP Protocol GUID */
extern EFI_GUID gEfiManagedNetworkProtocolGuid;
/** MNP Service Binding Protocol GUID (AMI) */
extern EFI_GUID gEfiManagedNetworkServiceBindingProtocolGuid;
/** Loaded Image Protocol GUID (Standard UEFI) */
extern EFI_GUID gEfiLoadedImageProtocolGuid;
/** DPC Protocol GUID (MdeModulePkg) */
extern EFI_GUID gEfiDpcProtocolGuid;
/** Network Stack Variable Vendor GUID for "NetworkStackVar" */
extern EFI_GUID gNetworkStackVarGuid;
/** VLAN Config Protocol GUID (AMI-specific) */
extern EFI_GUID gVlanConfigProtocolGuid;
/** Simple Network Protocol GUID (Standard UEFI) */
extern EFI_GUID gEfiSimpleNetworkProtocolGuid;
/** Device Path Protocol GUID (Standard UEFI) */
extern EFI_GUID gEfiDevicePathProtocolGuid;
/** VLAN_TPID: 0x8100 in big-endian (appears as 0x0081 in little-endian memory) */
#define VLAN_TPID 0x8100
/*
* =====================================================================
* CR MACRO for container-of-pointer operations
* =====================================================================
*/
#ifndef CR_CHECK
#define CR_CHECK(Record, Signature) \
DEBUG_CODE_BEGIN ( \
if ((Record)->Signature != Signature) { \
DEBUG ((DEBUG_ERROR, "CR has Bad Signature at %a:%d\n", __FILE__, __LINE__)); \
} \
DEBUG_CODE_END ()
#endif
#ifndef CR
#define CR(Record, TYPE, Field, Signature) \
(TYPE *)((UINT8 *)(Record) - OFFSET_OF (TYPE, Field))
#endif
/*
* =====================================================================
* MNP_RXDATA_WRAP / NET_BUF forward declarations from DxeNetLib
* =====================================================================
*/
/** NET_BUF_REFCOUNT threshold: if refcount > 2, copy before mutating */
#define NET_BUF_MAX_SHARED_REF 2
/** MNP_MAX_RCV_QUEUE_SIZE: maximum queued received packets per instance */
#define MNP_MAX_RCV_QUEUE_SIZE 256
/*
* =====================================================================
* NET_BUF (from MdeModulePkg DxeNetLib)
* =====================================================================
*/
/**
* NET_BUF - network packet buffer (signature at +0x00 = NET_BUF_SIGNATURE)
* Known offsets from decompiled code:
* +0x08: RefCnt (UINT64)
* +0x84 (0x54 from Nbuf): TotalSize (UINT32)
* +0x08 from header: DataLength or BlockSize
*/
typedef struct _NET_BUF {
UINT32 Signature; /* +0x00: NET_BUF_SIGNATURE */
UINT64 RefCnt; /* +0x08: Reference count */
/* ... internal pool/block fields ... */
UINT32 TotalSize; /* +0x84: Total data size in this buf */
UINT32 BlockOpOffset; /* various offsets for block ops */
/* BlockOp protocol is at offset 0x38 (56 bytes from start) in some contexts */
} NET_BUF;
/**
* NET_BUF_QUEUE - queue of NET_BUF entries (signature = NET_BUF_QUEUE_SIGNATURE)
* +0x00: Signature ("nbqu")
* +0x08: Count (UINT64)
* +0x10: LIST_ENTRY head
*/
typedef struct _NET_BUF_QUEUE {
UINT32 Signature; /* +0x00: NET_BUF_QUEUE_SIGNATURE */
UINT64 Count; /* +0x08: Number of buffers */
LIST_ENTRY BufList; /* +0x10: Buffer linked list */
} NET_BUF_QUEUE;
/*
* =====================================================================
* MNP_RXDATA_WRAP - received data wrapper (allocated per packet)
* =====================================================================
*
* Fields from sub_39A4 (create) and sub_38C8 (free/destroy):
* +0x00: Link (LIST_ENTRY)
* +0x10: Instance (MNP_INSTANCE_DATA *) -> a2[2]
* +0x28: Event (EFI_EVENT) -> a2[5]
* +0x68: Nbuf (NET_BUF *) -> a2[13]
* +0x??: Timeout (UINT64) -> +0x70 = a2[14]
* +0x??: Timeout value (UINT32 from instance)
*/
typedef struct _MNP_RXDATA_WRAP {
LIST_ENTRY Link; /* +0x00: Link in received queue */
MNP_INSTANCE_DATA *Instance; /* +0x10: Owning instance */
EFI_EVENT Event; /* +0x28: Recycle event */
NET_BUF *Nbuf; /* +0x68: Received packet buffer */
UINT64 Timeout; /* +0x70: Timeout countdown (usec) */
UINT32 TimeoutValue; /* +0x??: Original timeout value */
} MNP_RXDATA_WRAP;
/*
* =====================================================================
* MNP_GROUP_ADDRESS - multicast group address tracking
* =====================================================================
*
* From MnpGroupOpFormCtrlBlk at sub_27CC (size 56 = 0x38):
* +0x00: Link (LIST_ENTRY)
* +0x10: MacAddress (EFI_MAC_ADDRESS) - offset 0x10 in allocation
* +0x30: RefCnt (UINT64) - offset 0x30 = v17[6]
*/
typedef struct _MNP_GROUP_ADDRESS {
LIST_ENTRY Link; /* +0x00: Link in MnpDeviceData->GroupAddressList */
EFI_MAC_ADDRESS MacAddress; /* +0x10: MAC address */
UINT64 RefCnt; /* +0x30: Reference count */
} MNP_GROUP_ADDRESS;
/**
* MNP_GROUP_CTRL_BLK - per-instance multicast group control block
* +0x00: Link (LIST_ENTRY)
* +0x10: GroupAddress (MNP_GROUP_ADDRESS *)
* Allocated by sub_27CC (size 24 = 0x18 bytes)
*/
typedef struct _MNP_GROUP_CTRL_BLK {
LIST_ENTRY Link; /* +0x00: Link in Instance->GroupCtrlBlkList */
MNP_GROUP_ADDRESS *GroupAddress; /* +0x10: Pointer to global group address */
} MNP_GROUP_CTRL_BLK;
/*
* =====================================================================
* MNP_CONFIGURE_DATA - configuration data for MNP.Configure()
* =====================================================================
*
* 20 bytes total (0x14). Copied via sub_4CDC at offset +0xD0 in instance data.
* Fields accessed via byte offsets:
* +0x0A: EnableUnicastReceive (from code at Instance+0xDA)
* +0x0B: EnableMulticastReceive (from code at Instance+0xDB)
* +0x0C: EnablePromiscuousReceive (from code at Instance+0xDC)
* +0x0D: FlushQueues (from code at Instance+0xDD)
* +0x0E: EnableReceiveTimestamps
* +0x10: TimeoutValue (UINT32)
*/
typedef struct {
UINT8 EnableUnicastReceive; /* +0x0A */
UINT8 EnableMulticastReceive; /* +0x0B */
UINT8 EnablePromiscuousReceive; /* +0x0C */
UINT8 FlushQueues; /* +0x0D */
UINT8 EnableReceiveTimestamps; /* +0x0E */
UINT8 Reserved[1]; /* +0x0F */
UINT16 TimeoutValue; /* +0x10 */
} MNP_CONFIGURE_DATA;
/*
* =====================================================================
* MNP_DEVICE_DATA (size 0x110 based on allocation)
* =====================================================================
*
* Signature: MNP_DEVICE_DATA_SIGNATURE (0x44706E4D = "MnpD")
* Allocated: sub_8E0 (MnpDriverBindingStart)
* Initialized: sub_1700 (MnpInitializeDeviceData)
* Teardown: sub_1A58 (MnpCleanDeviceData) / sub_1CC8 (MnpStop)
*
* Known field offsets from decompiled code:
*/
struct _MNP_DEVICE_DATA {
UINT32 Signature; /* +0x000: MNP_DEVICE_DATA_SIGNATURE */
EFI_HANDLE ControllerHandle; /* +0x008: Controller handle */
EFI_HANDLE ImageHandle; /* +0x010: Driver image handle */
VOID *SnpInterface; /* +0x018: SNP protocol interface (through driver binding) */
EFI_HANDLE SnpDevicePathHandle; /* +0x020: Device path handle */
/* -- Service and group lists -- */
LIST_ENTRY ServiceList; /* +0x028: List of MNP_SERVICE_DATA (from MnpDriver.c) */
LIST_ENTRY GroupAddressList; /* +0x038: List of MNP_GROUP_ADDRESS */
/* -- Initialization tracking -- */
UINT64 RefCount; /* +0x048: Child service data count */
UINT64 Field_0x50; /* +0x050: */
VOID *MnpServiceSnp; /* +0x058: SNP from MNP_SERVICE_DATA (allocated by sub_7070) */
UINT64 SnpModeData; /* +0x060: SNP mode data pointer (from snp->Mode via v16+0x78) */
UINT32 BufferLength; /* +0x0F0: Max packet buf size (Snp->Mode->HdrSize + 8 + Snp->Mode->MediaHdrSize) */
UINT32 HeaderLength; /* +0x0F4: Aligned header length */
UINT32 ConfiguredChildren; /* +0x0??: Count of configured children (v4[56], 0xE0) */
UINT32 McastFilterCnt; /* +0x0??: Count of multicast filters (v4[28]) */
UINT32 McastFilterCnt2; /* +0x0??: Second mcast counter (v4[29]) */
UINT32 EnableVlan; /* +0x0??: EnableVlan flag */
UINT32 EnablePromiscuous; /* +0x0??: EnablePromiscuous flag */
LIST_ENTRY FreeNbufQue; /* +0x080: NET_BUF_QUEUE (Signature +0x80 = 0x7571626E) */
LIST_ENTRY GroupAddressList2; /* +0x0A0: Second group list reference */
/* -- Counters -- */
UINT64 TotalFreeNbufs; /* +0x0B8: Total free NET_BUFs allocated */
UINT64 CurrentFreeNbufs; /* +0x0B4: Current free NET_BUFs */
/* -- Event handles -- */
EFI_EVENT TxTimeoutEvent; /* +0x078: Transmit timeout event (actually +0x78 from base) */
EFI_EVENT PollTimerEvent; /* +0x0C0: Polling timer event */
EFI_EVENT TimeoutCheckEvent; /* +0x0D0: Packet timeout check event */
EFI_EVENT MediaDetectEvent; /* +0x0D8: Media detection event */
BOOLEAN PollingEnabled; /* +0x0C8: Whether polling timer is active */
/* -- Receive buffer -- */
NET_BUF *RcvPacket; /* +0x0F8: Current receive NET_BUF */
VOID *RcvBufPool; /* +0x100: Pool for receive buffer */
};
/*
* =====================================================================
* MNP_SERVICE_DATA (size 0x60 = 96 bytes) from sub_1B60
* =====================================================================
*
* Signature: MNP_SERVICE_DATA_SIGNATURE (0x53706E4D = "MnpS")
* CR_OFFSET from MnpDriverSupported: -8 (ServiceData is CR for SNPModeData + 0x28)
*/
struct _MNP_SERVICE_DATA {
UINT32 Signature; /* +0x00: MNP_SERVICE_DATA_SIGNATURE */
LIST_ENTRY Link; /* +0x08: Link in MnpDeviceData->ServiceList */
MNP_DEVICE_DATA *MnpDeviceData; /* +0x18: Back pointer to owning device */
EFI_HANDLE ControllerHandle; /* +0x20: Controller handle */
EFI_HANDLE Handle; /* +0x28: Protocol handle for MNP */
/* MNP protocol interface is at offset 0x28 (size 0x40) */
UINT8 MnpProtocolBuffer[0x40];/* +0x28: EFI_MANAGED_NETWORK_PROTOCOL */
LIST_ENTRY InstanceList; /* +0x68: List of MNP_INSTANCE_DATA */
LIST_ENTRY VlanList; /* +0x78: List of VLAN entries */
UINT16 VlanId; /* +0x5C: VLAN ID (0 = untagged) */
UINT8 Priority; /* +0x5E: VLAN priority */
UINT64 NumChildren; /* +0x50: Number of child instances */
};
/*
* =====================================================================
* MNP_INSTANCE_DATA (size 0xE8 = 232 bytes) from sub_D4C / sub_1E94
* =====================================================================
*
* Signature: MNP_INSTANCE_DATA_SIGNATURE (0x49706E4D = "MnpI")
* CR_OFFSET: -0x28 (from protocol interface pointer)
*
* Allocated by MnpServiceBindingCreateChild (sub_D4C, 232 bytes)
* Initialized by MnpInitInstanceData (sub_1E94)
*/
struct _MNP_INSTANCE_DATA {
UINT32 Signature; /* +0x00: MNP_INSTANCE_DATA_SIGNATURE */
MNP_SERVICE_DATA *MnpServiceData; /* +0x08: Back pointer to service data */
/* EFI_MANAGED_NETWORK_PROTOCOL installed on this instance */
UINT8 ProtocolBuffer[0x40]; /* +0x28: Copied from service data at sub_1E94 */
BOOLEAN IsConfigured; /* +0x68: Whether MnpConfigure() has been called */
BOOLEAN IsDestroyed; /* +0x69: Set during destroy */
MNP_CONFIGURE_DATA ConfigData; /* +0xD0: Last config copied */
/* -- Receive queue -- */
LIST_ENTRY RcvdPacketQueue; /* +0x70: Queue of MNP_RXDATA_WRAP */
UINT64 RcvdPacketQueueSize; /* +0xA0: Queue length */
/* -- Token maps -- */
VOID RxTokenMap; /* +0x80: NET_MAP for RX tokens */
VOID TxTokenMap; /* +0x80+? NET_MAP for TX tokens */
/* -- Group control blocks -- */
LIST_ENTRY GroupCtrlBlkList; /* +0x70: List of MNP_GROUP_CTRL_BLK */
UINT64 GroupCtrlBlkCount; /* +0xA0: Count */
UINT8 Reserved1[0x10]; /* +0xA8-0xB8 padding */
UINT64 RxTokenCount; /* +0xB8: Received token count */
UINT64 TxTokenCount; /* +0xC0: Transmit token count */
UINT32 TimeoutValue; /* +0x??: Configured packet timeout */
};
/*
* =====================================================================
* MNP_CONFIG_DATA - the configuration data structure passed to Configure
* =====================================================================
*/
typedef struct {
UINT32 ReceivedQueueTimeoutValue;
UINT32 TransmitQueueTimeoutValue;
UINT16 ProtocolTypeFilter;
BOOLEAN EnableUnicastReceive;
BOOLEAN EnableMulticastReceive;
BOOLEAN EnableBroadcastReceive;
BOOLEAN EnablePromiscuousReceive;
BOOLEAN FlushQueues;
BOOLEAN EnableReceiveTimestamps;
BOOLEAN DisableBackgroundPolling;
} MNP_CONFIG_DATA;
/*
* =====================================================================
* EFI_MANAGED_NETWORK_PROTOCOL (simplified from UEFI spec)
* =====================================================================
*/
typedef struct _EFI_MANAGED_NETWORK_PROTOCOL EFI_MANAGED_NETWORK_PROTOCOL;
/* EFI_MNP_GET_MODE_DATA */
typedef
EFI_STATUS
(EFIAPI *EFI_MNP_GET_MODE_DATA)(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
OUT VOID *MnpConfigData OPTIONAL,
OUT VOID *SnpModeData OPTIONAL
);
/* EFI_MNP_CONFIGURE */
typedef
EFI_STATUS
(EFIAPI *EFI_MNP_CONFIGURE)(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *MnpConfigData OPTIONAL
);
/* EFI_MNP_MULTICAST_JOIN (MnpGroups) */
typedef
EFI_STATUS
(EFIAPI *EFI_MNP_MULTICAST_JOIN)(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN BOOLEAN Flag,
IN EFI_MAC_ADDRESS *MacAddress OPTIONAL,
IN VOID *ExtParameters OPTIONAL
);
/* EFI_MNP_TRANSMIT */
typedef
EFI_STATUS
(EFIAPI *EFI_MNP_TRANSMIT)(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *Token
);
/* EFI_MNP_RECEIVE */
typedef
EFI_STATUS
(EFIAPI *EFI_MNP_RECEIVE)(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *Token
);
/* EFI_MNP_CANCEL */
typedef
EFI_STATUS
(EFIAPI *EFI_MNP_CANCEL)(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *Token OPTIONAL
);
/* EFI_MNP_POLL */
typedef
EFI_STATUS
(EFIAPI *EFI_MNP_POLL)(
IN EFI_MANAGED_NETWORK_PROTOCOL *This
);
struct _EFI_MANAGED_NETWORK_PROTOCOL {
UINT64 Revision;
EFI_MNP_GET_MODE_DATA GetModeData;
EFI_MNP_CONFIGURE Configure;
EFI_MNP_MULTICAST_JOIN MulticastReceive;
EFI_MNP_TRANSMIT Transmit;
EFI_MNP_RECEIVE Receive;
EFI_MNP_CANCEL Cancel;
EFI_MNP_POLL Poll;
};
/*
* =====================================================================
* VLAN_CONFIG_PROTOCOL (from AmiNetworkPkg)
* =====================================================================
*/
typedef struct _VLAN_CONFIG_PROTOCOL VLAN_CONFIG_PROTOCOL;
typedef
EFI_STATUS
(EFIAPI *VLAN_CONFIG_SET)(
IN VLAN_CONFIG_PROTOCOL *This,
IN UINT16 VlanId,
IN UINT8 Priority
);
typedef
EFI_STATUS
(EFIAPI *VLAN_CONFIG_FIND)(
IN VLAN_CONFIG_PROTOCOL *This,
IN UINT16 VlanId OPTIONAL,
OUT UINT16 *Number OPTIONAL,
OUT VOID **Buffer OPTIONAL
);
typedef
EFI_STATUS
(EFIAPI *VLAN_CONFIG_REMOVE)(
IN VLAN_CONFIG_PROTOCOL *This,
IN UINT16 VlanId
);
struct _VLAN_CONFIG_PROTOCOL {
VLAN_CONFIG_SET Set;
VLAN_CONFIG_FIND Find;
VLAN_CONFIG_REMOVE Remove;
};
/*
* =====================================================================
* FUNCTION PROTOTYPES
* =====================================================================
*/
/* ---- Module entry (MnpDriver.c) ---- */
EFI_STATUS
EFIAPI
MnpDriverEntryPoint(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
/* ---- Driver Binding (MnpDriver.c) ---- */
EFI_STATUS
EFIAPI
MnpDriverBindingSupported(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
EFI_STATUS
EFIAPI
MnpDriverBindingStart(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
);
EFI_STATUS
EFIAPI
MnpDriverBindingStop(
IN EFI_DRIVER_BINDING_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN UINTN NumberOfChildren,
IN EFI_HANDLE *ChildHandleBuffer
);
/* ---- Service Binding (MnpDriver.c) ---- */
EFI_STATUS
EFIAPI
MnpServiceBindingCreateChild(
IN EFI_SERVICE_BINDING_PROTOCOL *This,
IN EFI_HANDLE *ChildHandle
);
EFI_STATUS
EFIAPI
MnpServiceBindingDestroyChild(
IN EFI_SERVICE_BINDING_PROTOCOL *This,
IN EFI_HANDLE ChildHandle
);
/* ---- Component Name (ComponentName.c) ---- */
EFI_STATUS
EFIAPI
MnpComponentNameGetDriverName(
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN CHAR8 *Language,
OUT CHAR16 **DriverName
);
EFI_STATUS
EFIAPI
MnpComponentNameGetControllerName(
IN EFI_COMPONENT_NAME_PROTOCOL *This,
IN EFI_HANDLE ControllerHandle,
IN EFI_HANDLE ChildHandle OPTIONAL,
IN CHAR8 *Language,
OUT CHAR16 **ControllerName
);
/* ---- MNP Protocol (MnpMain.c) ---- */
EFI_STATUS
EFIAPI
MnpGetModeData(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
OUT VOID *MnpConfigData OPTIONAL,
OUT VOID *SnpModeData OPTIONAL
);
EFI_STATUS
EFIAPI
MnpConfigure(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *MnpConfigData OPTIONAL
);
EFI_STATUS
EFIAPI
MnpGroups(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN BOOLEAN Flag,
IN EFI_MAC_ADDRESS *MacAddress OPTIONAL,
IN VOID *ExtParameters OPTIONAL
);
EFI_STATUS
EFIAPI
MnpTransmit(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *Token
);
EFI_STATUS
EFIAPI
MnpReceive(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *Token
);
EFI_STATUS
EFIAPI
MnpCancel(
IN EFI_MANAGED_NETWORK_PROTOCOL *This,
IN VOID *Token OPTIONAL
);
EFI_STATUS
EFIAPI
MnpPoll(
IN EFI_MANAGED_NETWORK_PROTOCOL *This
);
/* ---- VLAN Config protocol (MnpVlan.c) ---- */
EFI_STATUS
EFIAPI
MnpVlanSet(
IN VLAN_CONFIG_PROTOCOL *This,
IN UINT16 VlanId,
IN UINT8 Priority
);
EFI_STATUS
EFIAPI
MnpVlanFind(
IN VLAN_CONFIG_PROTOCOL *This,
IN UINT16 VlanId OPTIONAL,
OUT UINT16 *Number,
OUT VOID **Buffer
);
EFI_STATUS
EFIAPI
MnpVlanRemove(
IN VLAN_CONFIG_PROTOCOL *This,
IN UINT16 VlanId
);
/* ---- Internal I/O functions (MnpIo.c) ---- */
EFI_STATUS
MnpReceivePacket(
IN MNP_DEVICE_DATA *MnpDeviceData
);
VOID
MnpCheckPacketTimeout(
IN EFI_EVENT Event,
IN VOID *Context
);
VOID
MnpMediaDetect(
IN EFI_EVENT Event,
IN VOID *Context
);
VOID
MnpPollTimer(
IN EFI_EVENT Event,
IN VOID *Context
);
EFI_STATUS
MnpSyncSendPacket(
IN MNP_SERVICE_DATA *MnpServiceData,
IN VOID *Token
);
VOID
MnpDeliverPacket(
IN MNP_INSTANCE_DATA *Instance
);
VOID
MnpDispatchPacket(
IN MNP_SERVICE_DATA *MnpServiceData,
IN NET_BUF *Nbuf
);
/* ---- Internal Config functions (MnpConfig.c) ---- */
EFI_STATUS
MnpInitializeDeviceData(
IN MNP_DEVICE_DATA *MnpDeviceData,
IN VOID *ControllerHandle,
IN EFI_HANDLE ImageHandle
);
VOID
MnpCleanDeviceData(
IN MNP_DEVICE_DATA *MnpDeviceData,
IN VOID *ImageHandle
);
EFI_STATUS
MnpAddFreeNbuf(
IN MNP_DEVICE_DATA *MnpDeviceData,
IN UINTN Count
);
NET_BUF *
MnpAllocNbuf(
IN MNP_DEVICE_DATA *MnpDeviceData
);
VOID
MnpFreeNbuf(
IN MNP_DEVICE_DATA *MnpDeviceData,
IN NET_BUF *Nbuf
);
VOID
MnpConfigInstance(
IN MNP_INSTANCE_DATA *Instance,
IN MNP_CONFIGURE_DATA *ConfigData OPTIONAL
);
EFI_STATUS
MnpConfigReceiveFilters(
IN MNP_DEVICE_DATA *MnpDeviceData
);
/* ---- Event handlers ---- */
EFI_STATUS
MnpStart(
IN MNP_SERVICE_DATA *MnpServiceData,
IN BOOLEAN IsConfig,
IN BOOLEAN EnablePoll
);
EFI_STATUS
MnpStop(
IN MNP_SERVICE_DATA *MnpServiceData
);
/* ---- Internal VLAN helpers (MnpVlan.c) ---- */
UINT8
MnpParseVlanTag(
IN MNP_DEVICE_DATA *MnpDeviceData,
IN NET_BUF *Nbuf,
OUT UINT16 *VlanId
);
VOID
MnpInsertVlanTag(
IN MNP_SERVICE_DATA *MnpServiceData,
IN VOID *Packet,
IN OUT UINT8 **MacHeader,
IN OUT UINT32 *HeaderLen
);
MNP_SERVICE_DATA *
MnpFindServiceByVlanId(
IN MNP_DEVICE_DATA *MnpDeviceData,
IN UINT16 VlanId
);
EFI_STATUS
MnpReadVlanConfiguration(
IN MNP_DEVICE_DATA *MnpDeviceData,
OUT UINT16 *NumberOfVlan,
OUT UINT8 **VlanBuffer
);
/* ---- Module entry helpers (ModuleEntry.c) ---- */
VOID
MnpInitializeGlobals(
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
);
EFI_STATUS
MnpInstallDriverProtocols(
IN EFI_HANDLE ImageHandle
);
EFI_STATUS
EFIAPI
MnpDpcCallback(
IN VOID *Context
);
EFI_DEVICE_PATH_PROTOCOL *
MnpCreateDevicePathWithMac(
IN VLAN_CONFIG_PROTOCOL *VlanConfig,
IN UINT8 *MacAddr
);
/* ---- Global GUID variables (defined in ModuleEntry.c) ---- */
extern EFI_GUID gEfiDriverBindingProtocolGuid;
extern EFI_GUID gEfiComponentName2ProtocolGuid;
extern EFI_GUID gEfiComponentNameProtocolGuid;
extern EFI_GUID gEfiManagedNetworkProtocolGuid;
extern EFI_GUID gEfiManagedNetworkServiceBindingProtocolGuid;
extern EFI_GUID gEfiLoadedImageProtocolGuid;
extern EFI_GUID gEfiDpcProtocolGuid;
extern EFI_GUID gNetworkStackVarGuid;
extern EFI_GUID gVlanConfigProtocolGuid;
extern EFI_GUID gEfiSimpleNetworkProtocolGuid;
extern EFI_GUID gEfiDevicePathProtocolGuid;
/* ---- Internal data ---- */
extern UINT8 gMnpVlanTemplateMac[6];
/* ---- Driver Binding protocol table (MnpDriver.c) ---- */
extern EFI_DRIVER_BINDING_PROTOCOL gMnpDriverBinding;
extern EFI_COMPONENT_NAME2_PROTOCOL gMnpComponentName2;
extern EFI_COMPONENT_NAME_PROTOCOL gMnpComponentName;
/* ---- Internal function forward declarations (from library/support) ---- */
VOID *
NetbufGetRawData(
IN NET_BUF *Nbuf
);
VOID
NetbufTrim(
IN NET_BUF *Nbuf,
IN UINTN Size,
IN UINTN TrimType
);
#define NET_BUF_TRIM_HEAD 0
#endif /* __MNP_DXE_H__ */