/** @file
VlanConfigDxe.h -- Header for VlanConfigDxe
Copyright (c) HR650X BIOS Decompilation Project
**/
#ifndef __VLANCONFIGDXE_H__
#define __VLANCONFIGDXE_H__
#include "../uefi_headers/Uefi.h"
//
// Function Prototypes
//
EFI_STATUS
EFIAPI
VlanConfigInitPrivateData(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigCleanupPrivateData(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigValidateConfigHeader(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigCompareConfigStrings(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigUpdateForm(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigFreePool(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigDxeEntryPoint(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigDriverBindingSupported(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigDriverBindingStart(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigDriverBindingStop(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigDxeUnload(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigSet(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigFind(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigRemove(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigExtractConfig(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigRouteConfig(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigCallback(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigComponentName2GetDriverName(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigComponentName2GetControllerName(
VOID
);
EFI_STATUS
EFIAPI
Definitions(
VOID
);
EFI_STATUS
EFIAPI
Config Protocol GUID: { B3276D32-41FC-4260-7469-D90FAA23DC4C }(
VOID
);
EFI_STATUS
EFIAPI
the data at 0x7208 in .rdata(
VOID
);
EFI_STATUS
EFIAPI
gEfiVlanConfigProtocolGuid = {(
VOID
);
EFI_STATUS
EFIAPI
Network Protocol GUID: { C1539892-9836-5822-AB31-A01843B41A4D }(
VOID
);
EFI_STATUS
EFIAPI
gEfiManagedNetworkProtocolGuid = {(
VOID
);
EFI_STATUS
EFIAPI
Path Protocol GUID: { 09576E91-6D3F-11D2-8E39-00A0C969723B }(
VOID
);
EFI_STATUS
EFIAPI
gEfiDevicePathProtocolGuid = {(
VOID
);
EFI_STATUS
EFIAPI
Network Protocol GUID: { A19832B9-AC25-11D3-9A2D-0090273FC14D }(
VOID
);
EFI_STATUS
EFIAPI
gEfiSimpleNetworkProtocolGuid = {(
VOID
);
EFI_STATUS
EFIAPI
Protocol GUIDS (standard UEFI)(
VOID
);
EFI_STATUS
EFIAPI
gEfiHiiStringProtocolGuid = {(
VOID
);
EFI_STATUS
EFIAPI
Variables(
VOID
);
EFI_STATUS
EFIAPI
handle (global)(
VOID
);
EFI_STATUS
EFIAPI
gImageHandle = NULL;(
VOID
);
EFI_STATUS
EFIAPI
Config Routing Protocol handle(
VOID
);
EFI_STATUS
EFIAPI
*gHiiConfigRouting = NULL;(
VOID
);
EFI_STATUS
EFIAPI
Database Protocol handle(
VOID
);
EFI_STATUS
EFIAPI
*gHiiDatabase = NULL;(
VOID
);
EFI_STATUS
EFIAPI
String Protocol handle(
VOID
);
EFI_STATUS
EFIAPI
*gHiiString = NULL;(
VOID
);
EFI_STATUS
EFIAPI
Config Access Protocol handle (lazy init)(
VOID
);
EFI_STATUS
EFIAPI
*gHiiConfigAccess = NULL;(
VOID
);
EFI_STATUS
EFIAPI
zero MAC address (6 bytes)(
VOID
);
EFI_STATUS
EFIAPI
mZeroMacAddress[6] = { 0, 0, 0, 0, 0, 0 };(
VOID
);
EFI_STATUS
EFIAPI
Binding Protocol instance(
VOID
);
EFI_STATUS
EFIAPI
gVlanConfigDriverBinding = {(
VOID
);
EFI_STATUS
EFIAPI
NULL, // ImageHandle (filled at entry)(
VOID
);
EFI_STATUS
EFIAPI
(filled at entry)(
VOID
);
EFI_STATUS
EFIAPI
Name 2 Protocol table(
VOID
);
EFI_STATUS
EFIAPI
gVlanConfigComponentName2 = {(
VOID
);
EFI_STATUS
EFIAPI
Config Access Protocol instance(
VOID
);
EFI_STATUS
EFIAPI
gVlanConfigHiiConfigAccess = {(
VOID
);
EFI_STATUS
EFIAPI
binary and string package references (defined in auto-generated files)(
VOID
);
EFI_STATUS
EFIAPI
UINT8 mVlanConfigVfrBin[];(
VOID
);
EFI_STATUS
EFIAPI
Prototypes for Local Functions(
VOID
);
EFI_STATUS
EFIAPI
VlanConfigInitPrivateData ((
VOID
);
EFI_STATUS
EFIAPI
Wrappers(
VOID
);
EFI_STATUS
EFIAPI
Entry Point(
VOID
);
EFI_STATUS
EFIAPI
global service pointer tables(
VOID
);
EFI_STATUS
EFIAPI
= ImageHandle;(
VOID
);
EFI_STATUS
EFIAPI
HII protocol interfaces (LocateProtocol with 0 registration)(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateProtocol ((
VOID
);
EFI_STATUS
EFIAPI
HII Config Access Protocol (for NV data storage, optional)(
VOID
);
EFI_STATUS
EFIAPI
up driver binding protocol handles(
VOID
);
EFI_STATUS
EFIAPI
the Driver Binding and Component Name 2 protocols(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallMultipleProtocolInterfaces ((
VOID
);
EFI_STATUS
EFIAPI
Binding Protocol(
VOID
);
EFI_STATUS
EFIAPI
if VLAN Config Protocol already exists on this controller.(
VOID
);
EFI_STATUS
EFIAPI
so, report ACCESS_DENIED to avoid duplicate binding.(
VOID
);
EFI_STATUS
EFIAPI
= gBS->OpenProtocol ((
VOID
);
EFI_STATUS
EFIAPI
controller must have Managed Network Protocol(
VOID
);
EFI_STATUS
EFIAPI
if VLAN Config Protocol already exists on this controller(
VOID
);
EFI_STATUS
EFIAPI
Simple Network Protocol on the controller (GET_PROTOCOL)(
VOID
);
EFI_STATUS
EFIAPI
Managed Network Protocol on the controller (BY_DRIVER)(
VOID
);
EFI_STATUS
EFIAPI
Device Path Protocol on the controller (BY_DRIVER)(
VOID
);
EFI_STATUS
EFIAPI
and initialize private data structure (0x130 bytes)(
VOID
);
EFI_STATUS
EFIAPI
= (VLAN_CONFIG_PRIVATE_DATA *)VlanConfigAllocateZeroPool (sizeof (VLAN_CONFIG_PRIVATE_DATA));(
VOID
);
EFI_STATUS
EFIAPI
private data fields(
VOID
);
EFI_STATUS
EFIAPI
VLAN Config Protocol interface(
VOID
);
EFI_STATUS
EFIAPI
the driver instance and create HII resources(
VOID
);
EFI_STATUS
EFIAPI
= VlanConfigInitPrivateData (Private);(
VOID
);
EFI_STATUS
EFIAPI
the VLAN Config Protocol on the controller handle(
VOID
);
EFI_STATUS
EFIAPI
= gBS->InstallProtocolInterface ((
VOID
);
EFI_STATUS
EFIAPI
signature and get the private data(
VOID
);
EFI_STATUS
EFIAPI
up HII resources(
VOID
);
EFI_STATUS
EFIAPI
(Private);(
VOID
);
EFI_STATUS
EFIAPI
the VLAN Config Protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->UninstallProtocolInterface ((
VOID
);
EFI_STATUS
EFIAPI
protocols opened by this driver(
VOID
);
EFI_STATUS
EFIAPI
Unload / Image Unload Handler(
VOID
);
EFI_STATUS
EFIAPI
all handles with VLAN Config Protocol(
VOID
);
EFI_STATUS
EFIAPI
= gBS->LocateHandleBuffer ((
VOID
);
EFI_STATUS
EFIAPI
the driver on each controller(
VOID
);
EFI_STATUS
EFIAPI
(Index = 0; Index < HandleCount; Index++) {(
VOID
);
EFI_STATUS
EFIAPI
the driver binding and component name protocols(
VOID
);
EFI_STATUS
EFIAPI
= gBS->UninstallMultipleProtocolInterfaces ((
VOID
);
EFI_STATUS
EFIAPI
Data Initialization and Cleanup(
VOID
);
EFI_STATUS
EFIAPI
current MAC address from SNP's mode data(
VOID
);
EFI_STATUS
EFIAPI
= sizeof (EFI_MAC_ADDRESS);(
VOID
);
EFI_STATUS
EFIAPI
the formset with HII database(
VOID
);
EFI_STATUS
EFIAPI
the HII Config Access Protocol on the controller handle(
VOID
);
EFI_STATUS
EFIAPI
the form title: "VLAN Configuration (MAC:...)"(
VOID
);
EFI_STATUS
EFIAPI
(MacStr != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
the VLAN list on the form(
VOID
);
EFI_STATUS
EFIAPI
= VlanConfigUpdateForm (Private);(
VOID
);
EFI_STATUS
EFIAPI
HII Config Access Protocol from the controller(
VOID
);
EFI_STATUS
EFIAPI
(Private->ControllerHandle != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
HII packages (strings and forms)(
VOID
);
EFI_STATUS
EFIAPI
(Private->HiiHandle != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
Config Protocol Implementation(
VOID
);
EFI_STATUS
EFIAPI
Form Population(
VOID
);
EFI_STATUS
EFIAPI
VLAN list from Managed Network(
VOID
);
EFI_STATUS
EFIAPI
current VLAN count and list(
VOID
);
EFI_STATUS
EFIAPI
= 0;(
VOID
);
EFI_STATUS
EFIAPI
op-code handles for the form(
VOID
);
EFI_STATUS
EFIAPI
= HiiAllocateOpCodeHandle ();(
VOID
);
EFI_STATUS
EFIAPI
start label(
VOID
);
EFI_STATUS
EFIAPI
= (EFI_IFR_GUID_LABEL *)HiiCreateGuidOpCode ((
VOID
);
EFI_STATUS
EFIAPI
end label(
VOID
);
EFI_STATUS
EFIAPI
VLAN count for form display (max 100)(
VOID
);
EFI_STATUS
EFIAPI
= PrivateData->NumberOfVlan;(
VOID
);
EFI_STATUS
EFIAPI
form entries for each existing VLAN(
VOID
);
EFI_STATUS
EFIAPI
(VlanCount > 0) {(
VOID
);
EFI_STATUS
EFIAPI
string: " VLAN ID: %d"(
VOID
);
EFI_STATUS
EFIAPI
((
VOID
);
EFI_STATUS
EFIAPI
to align priority text(
VOID
);
EFI_STATUS
EFIAPI
= 2 * (4 - (StrLen (VlanString) - 6));(
VOID
);
EFI_STATUS
EFIAPI
//(
VOID
);
EFI_STATUS
EFIAPI
priority sub-string(
VOID
);
EFI_STATUS
EFIAPI
not stored per-VLAN in min implementation(
VOID
);
EFI_STATUS
EFIAPI
new string in HII database(
VOID
);
EFI_STATUS
EFIAPI
= HiiSetString (PrivateData->HiiHandle, 0, VlanString, NULL);(
VOID
);
EFI_STATUS
EFIAPI
the text op-code for this VLAN entry(
VOID
);
EFI_STATUS
EFIAPI
the form(
VOID
);
EFI_STATUS
EFIAPI
up op-code handles(
VOID
);
EFI_STATUS
EFIAPI
(StartOpCodeHandle != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
Config Access Protocol(
VOID
);
EFI_STATUS
EFIAPI
the config request string if provided(
VOID
);
EFI_STATUS
EFIAPI
(Request != NULL && !VlanConfigValidateConfigHeader (Request)) {(
VOID
);
EFI_STATUS
EFIAPI
no request string, build a complete request for VLAN_CONFIGURATION_SIZE(
VOID
);
EFI_STATUS
EFIAPI
(Request == NULL || !StrStr (Request, L"OFFSET")) {(
VOID
);
EFI_STATUS
EFIAPI
HII Config Routing protocol is loaded(
VOID
);
EFI_STATUS
EFIAPI
(gHiiConfigRouting == NULL) {(
VOID
);
EFI_STATUS
EFIAPI
configuration via ConfigRouting(
VOID
);
EFI_STATUS
EFIAPI
= CR (This, VLAN_CONFIG_PRIVATE_DATA, VlanConfigProtocol(
VOID
);
EFI_STATUS
EFIAPI
the config header(
VOID
);
EFI_STATUS
EFIAPI
(!VlanConfigValidateConfigHeader (Configuration)) {(
VOID
);
EFI_STATUS
EFIAPI
to end for progress reporting(
VOID
);
EFI_STATUS
EFIAPI
data for the form(
VOID
);
EFI_STATUS
EFIAPI
((QuestionId == 0) || (Action - 3 <= 1)) {(
VOID
);
EFI_STATUS
EFIAPI
the form submission(
VOID
);
EFI_STATUS
EFIAPI
= (VLAN_CONFIGURATION *)Private->VlanConfigProtocol;(
VOID
);
EFI_STATUS
EFIAPI
a new VLAN - Value contains VLAN ID (u16) and Priority (u8 at +2)(
VOID
);
EFI_STATUS
EFIAPI
(Value != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
the form's VLAN ID/Priority fields(
VOID
);
EFI_STATUS
EFIAPI
(&Configuration->VlanId, 4);(
VOID
);
EFI_STATUS
EFIAPI
the network interface to apply the change(
VOID
);
EFI_STATUS
EFIAPI
VLANs that are marked (checkbox set)(
VOID
);
EFI_STATUS
EFIAPI
= Private->NumberOfVlan;(
VOID
);
EFI_STATUS
EFIAPI
VLAN by ID(
VOID
);
EFI_STATUS
EFIAPI
String Helpers(
VOID
);
EFI_STATUS
EFIAPI
GUID= section (between start and L"&NAME=")(
VOID
);
EFI_STATUS
EFIAPI
= VlanConfigCompareConfigStrings ((
VOID
);
EFI_STATUS
EFIAPI
&NAME= section (between L"&NAME=" and L"&PATH=")(
VOID
);
EFI_STATUS
EFIAPI
the config string header components:(
VOID
);
EFI_STATUS
EFIAPI
the device path to calculate its total size(
VOID
);
EFI_STATUS
EFIAPI
(Private != NULL && Private->DevicePath != NULL) {(
VOID
);
EFI_STATUS
EFIAPI
the maximum possible header size:(
VOID
);
EFI_STATUS
EFIAPI
(32 hex) + &NAME= + VlanNvData (8 chars as hex) + &PATH= + device path hex(
VOID
);
EFI_STATUS
EFIAPI
= 2 * (32 + 8 + 2 + 2 * DevicePathSize) + 66;(
VOID
);
EFI_STATUS
EFIAPI
the GUID= portion from the protocol GUID(
VOID
);
EFI_STATUS
EFIAPI
"&NAME="(
VOID
);
EFI_STATUS
EFIAPI
(ConfigString, (BufferSize - (ConfigString - Buffer)) / 2, L"&NAME=");(
VOID
);
EFI_STATUS
EFIAPI
"VlanNvData" as hex chars(
VOID
);
EFI_STATUS
EFIAPI
(Index = 0; Index < sizeof (L"VlanNvData") / 2 - 1; Index++) {(
VOID
);
EFI_STATUS
EFIAPI
"&PATH="(
VOID
);
EFI_STATUS
EFIAPI
(ConfigString, (BufferSize - (ConfigString - Buffer)) / 2, L"&PATH=");(
VOID
);
EFI_STATUS
EFIAPI
PATH as hex bytes of device path (or empty if none)(
VOID
);
EFI_STATUS
EFIAPI
uppercase hex to lowercase in PATH/NAME sections(
VOID
);
EFI_STATUS
EFIAPI
= FALSE;(
VOID
);
EFI_STATUS
EFIAPI
Name Protocol(
VOID
);
#endif /* __VLANCONFIGDXE_H__ */