123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- /** @file
- Declaration of structures 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_SUCCESS 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_SUCCESS 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
|