/** @file Declaration of strctures and functions for MnpDxe driver. Copyright (c) 2005 - 2016, Intel Corporation. All rights reserved.<BR> SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _MNP_DRIVER_H_ #define _MNP_DRIVER_H_ #include <Uefi.h> #include <Protocol/ManagedNetwork.h> #include <Protocol/SimpleNetwork.h> #include <Protocol/ServiceBinding.h> #include <Protocol/VlanConfig.h> #include <Library/BaseLib.h> #include <Library/BaseMemoryLib.h> #include <Library/DebugLib.h> #include <Library/MemoryAllocationLib.h> #include <Library/UefiBootServicesTableLib.h> #include <Library/UefiLib.h> #include <Library/NetLib.h> #include <Library/DpcLib.h> #include <Library/UefiRuntimeServicesTableLib.h> #include <Library/DevicePathLib.h> #include <Library/PrintLib.h> #include "ComponentName.h" #define MNP_DEVICE_DATA_SIGNATURE SIGNATURE_32 ('M', 'n', 'p', 'D') // // Global Variables // extern EFI_DRIVER_BINDING_PROTOCOL gMnpDriverBinding; typedef struct { UINT32 Signature; EFI_HANDLE ControllerHandle; EFI_HANDLE ImageHandle; EFI_VLAN_CONFIG_PROTOCOL VlanConfig; UINTN NumberOfVlan; CHAR16 *MacString; EFI_SIMPLE_NETWORK_PROTOCOL *Snp; // // List of MNP_SERVICE_DATA // LIST_ENTRY ServiceList; // // Number of configured MNP Service Binding child // UINTN ConfiguredChildrenNumber; LIST_ENTRY GroupAddressList; UINT32 GroupAddressCount; LIST_ENTRY FreeTxBufList; LIST_ENTRY AllTxBufList; UINT32 TxBufCount; NET_BUF_QUEUE FreeNbufQue; INTN NbufCnt; EFI_EVENT PollTimer; BOOLEAN EnableSystemPoll; EFI_EVENT TimeoutCheckTimer; EFI_EVENT MediaDetectTimer; UINT32 UnicastCount; UINT32 BroadcastCount; UINT32 MulticastCount; UINT32 PromiscuousCount; // // The size of the data buffer in the MNP_PACKET_BUFFER used to // store a packet. // UINT32 BufferLength; UINT32 PaddingSize; NET_BUF *RxNbufCache; } MNP_DEVICE_DATA; #define MNP_DEVICE_DATA_FROM_THIS(a) \ CR ( \ (a), \ MNP_DEVICE_DATA, \ VlanConfig, \ MNP_DEVICE_DATA_SIGNATURE \ ) #define MNP_SERVICE_DATA_SIGNATURE SIGNATURE_32 ('M', 'n', 'p', 'S') typedef struct { UINT32 Signature; LIST_ENTRY Link; MNP_DEVICE_DATA *MnpDeviceData; EFI_HANDLE ServiceHandle; EFI_SERVICE_BINDING_PROTOCOL ServiceBinding; EFI_DEVICE_PATH_PROTOCOL *DevicePath; LIST_ENTRY ChildrenList; UINTN ChildrenNumber; UINT32 Mtu; UINT16 VlanId; UINT8 Priority; } MNP_SERVICE_DATA; #define MNP_SERVICE_DATA_FROM_THIS(a) \ CR ( \ (a), \ MNP_SERVICE_DATA, \ ServiceBinding, \ MNP_SERVICE_DATA_SIGNATURE \ ) #define MNP_SERVICE_DATA_FROM_LINK(a) \ CR ( \ (a), \ MNP_SERVICE_DATA, \ Link, \ MNP_SERVICE_DATA_SIGNATURE \ ) /** Test to see if this driver supports ControllerHandle. This service is called by the EFI boot service ConnectController(). In order to make drivers as small as possible, there are a few calling restrictions for this service. ConnectController() must follow these calling restrictions. If any other agent wishes to call Supported() it must also follow these calling restrictions. @param[in] This Protocol instance pointer. @param[in] ControllerHandle Handle of device to test. @param[in] RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS This driver supports this device. @retval EFI_ALREADY_STARTED This driver is already running on this device. @retval Others This driver does not support this device. **/ EFI_STATUS EFIAPI MnpDriverBindingSupported ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ); /** Start this driver on ControllerHandle. This service is called by the EFI boot service ConnectController(). In order to make drivers as small as possible, there are a few calling restrictions for this service. ConnectController() must follow these calling restrictions. If any other agent wishes to call Start() it must also follow these calling restrictions. @param[in] This Protocol instance pointer. @param[in] ControllerHandle Handle of device to bind driver to. @param[in] RemainingDevicePath Optional parameter use to pick a specific child device to start. @retval EFI_SUCCESS This driver is added to ControllerHandle. @retval EFI_ALREADY_STARTED This driver is already running on ControllerHandle. @retval EFI_OUT_OF_RESOURCES Failed to allocate memory for Mnp Service Data. @retval Others This driver does not support this device. **/ EFI_STATUS EFIAPI MnpDriverBindingStart ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL ); /** Stop this driver on ControllerHandle. This service is called by the EFI boot service DisconnectController(). In order to make drivers as small as possible, there are a few calling restrictions for this service. DisconnectController() must follow these calling restrictions. If any other agent wishes to call Stop() it must also follow these calling restrictions. @param[in] This Protocol instance pointer. @param[in] ControllerHandle Handle of device to stop driver on. @param[in] NumberOfChildren Number of Handles in ChildHandleBuffer. If number of children is zero stop the entire bus driver. @param[in] ChildHandleBuffer List of Child Handles to Stop. @retval EFI_SUCCESS This driver is removed ControllerHandle. @retval EFI_DEVICE_ERROR The device could not be stopped due to a device error. **/ EFI_STATUS EFIAPI MnpDriverBindingStop ( IN EFI_DRIVER_BINDING_PROTOCOL *This, IN EFI_HANDLE ControllerHandle, IN UINTN NumberOfChildren, IN EFI_HANDLE *ChildHandleBuffer OPTIONAL ); /** Creates a child handle with a set of I/O services. @param[in] This Protocol instance pointer. @param[in, out] ChildHandle Pointer to the handle of the child to create. If it is NULL, then a new handle is created. If it is not NULL, then the I/O services are added to the existing child handle. @retval EFI_SUCCES The protocol was added to ChildHandle. @retval EFI_INVALID_PARAMETER ChildHandle is NULL. @retval EFI_OUT_OF_RESOURCES There are not enough resources available to create the child. @retval Others The child handle was not created. **/ EFI_STATUS EFIAPI MnpServiceBindingCreateChild ( IN EFI_SERVICE_BINDING_PROTOCOL *This, IN OUT EFI_HANDLE *ChildHandle ); /** Destroys a child handle with a set of I/O services. The DestroyChild() function does the opposite of CreateChild(). It removes a protocol that was installed by CreateChild() from ChildHandle. If the removed protocol is the last protocol on ChildHandle, then ChildHandle is destroyed. @param[in] This Pointer to the EFI_SERVICE_BINDING_PROTOCOL instance. @param[in] ChildHandle Handle of the child to destroy. @retval EFI_SUCCES The protocol was removed from ChildHandle. @retval EFI_UNSUPPORTED ChildHandle does not support the protocol that is being removed. @retval EFI_INVALID_PARAMETER ChildHandle is NULL. @retval EFI_ACCESS_DENIED The protocol could not be removed from the ChildHandle because its services are being used. @retval Others The child handle was not destroyed. **/ EFI_STATUS EFIAPI MnpServiceBindingDestroyChild ( IN EFI_SERVICE_BINDING_PROTOCOL *This, IN EFI_HANDLE ChildHandle ); #endif