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