alder_lake_bios/Insyde/InsydeNetworkPkg/Drivers/PxeDummyDxe/PxeDummy.h

250 lines
8.5 KiB
C

//;******************************************************************************
//;* Copyright (c) 1983-2020, Insyde Software Corp. All Rights Reserved.
//;*
//;* You may not reproduce, distribute, publish, display, perform, modify, adapt,
//;* transmit, broadcast, present, recite, release, license or otherwise exploit
//;* any part of this publication in any form, by any means, without the prior
//;* written permission of Insyde Software Corporation.
//;*
//;******************************************************************************
//;
//; Module Name:
//;
//; PxeDummy.h
//;
//; Abstract:
//;
//; Refer PxeDummy.c
//;
#ifndef _PXE_DUMMY_H_
#define _PXE_DUMMY_H_
#include <Uefi.h>
#include <Library/UefiLib.h>
#include <Library/DebugLib.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DevicePathLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>
#include <Protocol/ServiceBinding.h>
#include <Protocol/DevicePath.h>
#include <Protocol/NetworkLocker.h>
#include <Protocol/LoadFile.h>
#include <Protocol/Ip4.h>
#include <Protocol/Dhcp4.h>
#include <Protocol/Ip4Config.h>
#include <Protocol/Ip4Config2.h>
#include <Protocol/Ip6.h>
#include <Protocol/Dhcp6.h>
#include <Protocol/Ip6Config.h>
#include <Protocol/NetworkInterfaceIdentifier.h>
#include <Protocol/PxeBaseCode.h>
#include <Protocol/SimpleNetwork.h>
#include <Protocol/VlanConfig.h>
#include <Protocol/HiiDatabase.h>
#include <Protocol/HiiConfigAccess.h>
#include <Protocol/H2ONetworkConfig.h>
#include <Uefi/UefiPxe.h>
#include <Guid/NetworkEventGroup.h>
#include <Guid/EventGroup.h>
#define VARIAB_NAME_BUFFER_LENGTH 100
typedef struct _COMMON_INSTANCE COMMON_INSTANCE;
enum _PXE_CAPABILITY {
PXE_NONE,
PXE_IPv4,
PXE_IPv6,
PXE_MNP,
HTTP_IPv4,
HTTP_IPv6,
PXE_MAX
};
typedef struct _FAKE_VLAN_CONFIG_INSATNCE {
EFI_VLAN_CONFIG_PROTOCOL VlanConfig;
EFI_VLAN_CONFIG_PROTOCOL *RealVlanConfig;
COMMON_INSTANCE *Instance;
} FAKE_VLAN_CONFIG_INSATNCE;
typedef struct _FAKE_MNP_SB_INSATNCE {
BOOLEAN Enabled;
EFI_SERVICE_BINDING_PROTOCOL MnpSB;
EFI_SERVICE_BINDING_PROTOCOL *RealMnpSB;
COMMON_INSTANCE *Instance;
EFI_EVENT ReadyToBootEvent;
VENDOR_DEVICE_PATH Ip4VendorDeviceNode;
EFI_DEVICE_PATH_PROTOCOL *Ip4HiiVendorDevicePath;
EFI_HANDLE Ip4ChildHandle;
EFI_HII_CONFIG_ACCESS_PROTOCOL Ip4HiiConfigAccess;
EFI_SERVICE_BINDING_PROTOCOL *MnpSb;
} FAKE_MNP_SB_INSATNCE;
typedef struct _FAKE_IP_IP4_INSATNCE {
EFI_IP4_PROTOCOL Ip4;
EFI_IP4_PROTOCOL *RealIp4;
COMMON_INSTANCE *Instance;
} FAKE_IP_IP4_INSATNCE;
typedef struct _FAKE_IP_IP4_SB_INSATNCE {
EFI_SERVICE_BINDING_PROTOCOL Ip4SB;
EFI_SERVICE_BINDING_PROTOCOL *RealIp4SB;
COMMON_INSTANCE *Instance;
} FAKE_IP_IP4_SB_INSATNCE;
typedef struct _FAKE_IP_DHCP4_SB_INSATNCE {
EFI_SERVICE_BINDING_PROTOCOL Dhcp4SB;
EFI_SERVICE_BINDING_PROTOCOL *RealDhcp4SB;
COMMON_INSTANCE *Instance;
} FAKE_IP_DHCP4_SB_INSATNCE;
typedef struct _FAKE_IP_IP4_CONFIG_INSATNCE {
EFI_IP4_CONFIG_PROTOCOL Ip4Config;
EFI_IP4_CONFIG_PROTOCOL *RealIp4Config;
COMMON_INSTANCE *Instance;
} FAKE_IP_IP4_CONFIG_INSATNCE;
typedef struct _FAKE_IP_IP4_CONFIG2_INSATNCE {
EFI_IP4_CONFIG2_PROTOCOL Ip4Config2;
EFI_IP4_CONFIG2_PROTOCOL *RealIp4Config2;
COMMON_INSTANCE *Instance;
} FAKE_IP_IP4_CONFIG2_INSATNCE;
typedef struct _FAKE_IP_IP6_INSATNCE {
EFI_IP6_PROTOCOL Ip6;
EFI_IP6_PROTOCOL *RealIp6;
COMMON_INSTANCE *Instance;
} FAKE_IP_IP6_INSATNCE;
typedef struct _FAKE_IP_IP6_SB_INSATNCE {
EFI_SERVICE_BINDING_PROTOCOL Ip6SB;
EFI_SERVICE_BINDING_PROTOCOL *RealIp6SB;
COMMON_INSTANCE *Instance;
} FAKE_IP_IP6_SB_INSATNCE;
typedef struct _FAKE_IP_DHCP6_SB_INSATNCE {
EFI_SERVICE_BINDING_PROTOCOL Dhcp6SB;
EFI_SERVICE_BINDING_PROTOCOL *RealDhcp6SB;
COMMON_INSTANCE *Instance;
} FAKE_IP_DHCP6_SB_INSATNCE;
typedef struct _FAKE_IP_IP6_CONFIG_INSATNCE {
EFI_IP6_CONFIG_PROTOCOL Ip6Config;
EFI_IP6_CONFIG_PROTOCOL *RealIp6Config;
COMMON_INSTANCE *Instance;
} FAKE_IP_IP6_CONFIG_INSATNCE;
typedef struct _FAKE_LOAD_FILE_INSTANCE {
EFI_LOAD_FILE_PROTOCOL LoadFile;
UINTN PxeCapability;
COMMON_INSTANCE *Instance;
EFI_HANDLE FakePxeHandle;
EFI_DEVICE_PATH_PROTOCOL *FakePxeDevicePath;
EFI_DEVICE_PATH_PROTOCOL *RealPxeDevicePath;
BOOLEAN Enable;
BOOLEAN IsIpv4;
BOOLEAN IsIpv6;
BOOLEAN IsHttp;
BOOLEAN IsPxe;
EFI_HANDLE RealPxeHandle;
EFI_LOAD_FILE_PROTOCOL *RealEntry;
} FAKE_LOAD_FILE_INSTANCE;
//
// The alignment do not change, the DUMMY_DHCP_SIGNATURE maybe locate failed.
//
typedef struct _DUMMY_PXE_INSTANCE {
FAKE_LOAD_FILE_INSTANCE Ip4;
FAKE_LOAD_FILE_INSTANCE Ip6;
FAKE_LOAD_FILE_INSTANCE Http4;
FAKE_LOAD_FILE_INSTANCE Http6;
} DUMMY_PXE_INSTANCE;
typedef struct _DUMMY_IP_INSTANCE {
FAKE_MNP_SB_INSATNCE MnpSB;
// FAKE_IP_IP4_INSATNCE Ip4;
FAKE_IP_IP4_SB_INSATNCE Ip4SB;
FAKE_IP_IP4_CONFIG_INSATNCE Ip4Config;
FAKE_IP_IP4_CONFIG2_INSATNCE Ip4Config2;
FAKE_IP_DHCP4_SB_INSATNCE Dhcp4SB;
// FAKE_IP_IP6_INSATNCE Ip6;
FAKE_IP_IP6_SB_INSATNCE Ip6SB;
FAKE_IP_IP6_CONFIG_INSATNCE Ip6Config;
FAKE_IP_DHCP6_SB_INSATNCE Dhcp6SB;
FAKE_VLAN_CONFIG_INSATNCE VlanConfig;
} DUMMY_IP_INSTANCE;
struct _COMMON_INSTANCE {
UINT32 Signature;
EFI_HANDLE ImageHandle;
EFI_HANDLE UndiHandle;
DUMMY_PXE_INSTANCE Pxe;
DUMMY_IP_INSTANCE Ip;
EFI_DEVICE_PATH_PROTOCOL *UndiDevicePath;
VOID *Interface;
VOID *RealMnpSb;
//
// Identifier dummy device connected or not.
//
BOOLEAN DeviceConnected;
//
// Network policy on device controller handle
//
NETWORK_LOCKER_PROTOCOL *ControllerNetworkPolicy;
};
typedef struct _DRIVER_INSTANCE {
UINT32 Signature;
EFI_DRIVER_BINDING_PROTOCOL BindingProtocol;
EFI_HANDLE ImageHandle;
BOOLEAN IsPxeIpv4Enabled;
BOOLEAN IsPxeIpv6Enabled;
BOOLEAN IsIpv4Enabled;
BOOLEAN IsIpv6Enabled;
BOOLEAN IsHttpIpv4Enabled;
BOOLEAN IsHttpIpv6Enabled;
EFI_EVENT ReadyToBootEventReleaseNetworkLocker;
//
// Information for BindingProtocol.Stop
//
UINTN BindedCount;
COMMON_INSTANCE **BindedList;
NETWORK_LOCKER_PROTOCOL *NetworkLocker;
NETWORK_STACK_CALLBACK OldNetworkLockerCallback;
H2O_NETWORK_CONFIG_PROTOCOL NetworkConfig;
} DRIVER_INSTANCE;
#define DUMMY_PXE_INSTANCE_SIGNATURE SIGNATURE_32 ('D', 'P', 'X', 'E')
#define DUMMY_IP_INSTANCE_SIGNATURE SIGNATURE_32 ('D', 'U', 'I', 'P')
#define DUMMY_PXE_DRIVER_INSTANCE_SIGNATURE SIGNATURE_32 ('D', 'P', 'S', 'B')
#define DUMMY_PXE_INSTANCE_FROM_THIS(Sb) \
CR ((Sb), DRIVER_INSTANCE, BindingProtocol, DUMMY_PXE_DRIVER_INSTANCE_SIGNATURE)
extern NETWORK_LOCKER_PROTOCOL *gNetworkLocker;
extern NETWORK_STACK_CALLBACK gOldNetworkLockerCallback;
extern EFI_GUID gEfiIp6CallerIdGuid;
extern EFI_GUID gEfiNicIp4ConfigVariableGuid;
extern DRIVER_INSTANCE *gDriverInstance;
#endif //_PXE_DUMMY_H_