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