]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Network/MnpDxe/MnpDriver.c
1. Fix timer unit bug in MNP: default rx/tx timeout value should be 10,000,000 (10s...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / MnpDxe / MnpDriver.c
index 1c02e73f68f5bceb5b24e26fef7669d635c3c038..9541fb18e8091134769b35b881b32f2fe99e990b 100644 (file)
@@ -1,21 +1,15 @@
 /** @file\r
+  Implementation of driver entry point and driver binding protocol.\r
 \r
-Copyright (c) 2005 - 2008, Intel Corporation\r
-All rights reserved. This program and the accompanying materials\r
-are licensed and made available under the terms and conditions of the BSD License\r
-which accompanies this distribution.  The full text of the license may be found at\r
-http://opensource.org/licenses/bsd-license.php\r
+Copyright (c) 2005 - 2008, Intel Corporation. <BR> \r
+All rights reserved. This program and the accompanying materials are licensed \r
+and made available under the terms and conditions of the BSD License which \r
+accompanies this distribution. The full text of the license may be found at \r
+http://opensource.org/licenses/bsd-license.php \r
 \r
 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 \r
-Module Name:\r
-\r
-  MnpDriver.c\r
-\r
-Abstract:\r
-\r
-\r
 **/\r
 \r
 #include "MnpDriver.h"\r
@@ -31,18 +25,22 @@ EFI_DRIVER_BINDING_PROTOCOL gMnpDriverBinding = {
   NULL\r
 };\r
 \r
-\r
 /**\r
-  Test to see if this driver supports ControllerHandle.\r
-\r
-  @param  This                   Protocol instance pointer.\r
-  @param  ControllerHandle       Handle of device to test.\r
-  @param  RemainingDevicePath    Optional parameter use to pick a specific child\r
-                                 device to start.\r
-\r
-  @retval EFI_SUCCES             This driver supports this device.\r
-  @retval EFI_ALREADY_STARTED    This driver is already running on this device.\r
-  @retval other                  This driver does not support this device.\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
@@ -102,18 +100,22 @@ MnpDriverBindingSupported (
 \r
 \r
 /**\r
-  Start this driver on ControllerHandle.\r
-\r
-  @param  This                   Protocol instance pointer.\r
-  @param  ControllerHandle       Handle of device to bind driver to.\r
-  @param  RemainingDevicePath    Optional parameter use to pick a specific child\r
-                                 device to start.\r
-\r
-  @retval EFI_SUCCES             This driver is added to ControllerHandle.\r
-  @retval EFI_ALREADY_STARTED    This driver is already running on\r
-                                 ControllerHandle.\r
-  @retval other                  This driver does not support this device.\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
@@ -166,7 +168,7 @@ ErrorExit:
       //\r
       // Flush the Mnp Service Data.\r
       //\r
-      MnpFlushServiceData (MnpServiceData);\r
+      MnpFlushServiceData (MnpServiceData, This->DriverBindingHandle);\r
     }\r
 \r
     gBS->FreePool (MnpServiceData);\r
@@ -175,18 +177,22 @@ ErrorExit:
   return Status;\r
 }\r
 \r
-\r
 /**\r
-  Stop this driver on ControllerHandle.\r
-\r
-  @param  This                   Protocol instance pointer.\r
-  @param  ControllerHandle       Handle of device to stop driver on.\r
-  @param  NumberOfChildren       Number of Handles in ChildHandleBuffer. If number\r
-                                 of children is zero stop the entire bus driver.\r
-  @param  ChildHandleBuffer      List of Child Handles to Stop.\r
-\r
-  @retval EFI_SUCCES             This driver is removed ControllerHandle.\r
-  @retval other                  This driver was not removed from this device.\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
@@ -195,7 +201,7 @@ MnpDriverBindingStop (
   IN EFI_DRIVER_BINDING_PROTOCOL  *This,\r
   IN EFI_HANDLE                   ControllerHandle,\r
   IN UINTN                        NumberOfChildren,\r
-  IN EFI_HANDLE                   *ChildHandleBuffer\r
+  IN EFI_HANDLE                   *ChildHandleBuffer OPTIONAL\r
   )\r
 {\r
   EFI_STATUS                    Status;\r
@@ -237,20 +243,10 @@ MnpDriverBindingStop (
            NULL\r
            );\r
 \r
-    //\r
-    // Close the openned Snp protocol.\r
-    //\r
-    gBS->CloseProtocol (\r
-           ControllerHandle,\r
-           &gEfiSimpleNetworkProtocolGuid,\r
-           This->DriverBindingHandle,\r
-           ControllerHandle\r
-           );\r
-\r
     //\r
     // Flush the Mnp service data.\r
     //\r
-    MnpFlushServiceData (MnpServiceData);\r
+    MnpFlushServiceData (MnpServiceData, This->DriverBindingHandle);\r
 \r
     gBS->FreePool (MnpServiceData);\r
   } else {\r
@@ -276,24 +272,24 @@ MnpDriverBindingStop (
 /**\r
   Creates a child handle with a set of I/O services.\r
 \r
-  @param  This                   Protocol instance pointer.\r
-  @param  ChildHandle            Pointer to the handle of the child to create. If\r
-                                 it is NULL, then a new handle is created. If it is\r
-                                 not NULL, then the I/O services are  added to the\r
-                                 existing child handle.\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 child handle was created with the I/O\r
-                                 services.\r
-  @retval EFI_OUT_OF_RESOURCES   There are not enough resources availabe to create\r
-                                 the child.\r
-  @retval other                  The child handle was not created.\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 availabe 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 EFI_HANDLE                    *ChildHandle\r
+  IN OUT EFI_HANDLE                *ChildHandle\r
   )\r
 {\r
   EFI_STATUS         Status;\r
@@ -389,18 +385,23 @@ ErrorExit:
 \r
 /**\r
   Destroys a child handle with a set of I/O services.\r
-\r
-  @param  This                   Protocol instance pointer.\r
-  @param  ChildHandle            Handle of the child to destroy.\r
-\r
-  @retval EFI_SUCCES             The I/O services were removed from the child\r
-                                 handle.\r
-  @retval EFI_UNSUPPORTED        The child handle does not support the I/O services\r
-                                  that are being removed.\r
-  @retval EFI_INVALID_PARAMETER  Child handle is not a valid EFI Handle.\r
-  @retval EFI_ACCESS_DENIED      The child handle could not be destroyed because\r
-                                 its  I/O services are being used.\r
-  @retval other                  The child handle was not destroyed.\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 not a valid UEFI handle.\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
@@ -515,31 +516,24 @@ MnpServiceBindingDestroyChild (
   return Status;\r
 }\r
 \r
+/**\r
+  The entry point for Mnp driver which installs the driver binding and component\r
+  name protocol on its ImageHandle.\r
+\r
+  @param[in]  ImageHandle  The image handle of the driver.\r
+  @param[in]  SystemTable  The system table.\r
 \r
+  @retval EFI_SUCCES       The driver binding and component name protocols are \r
+                           successfully installed.\r
+  @retval Others           Other errors as indicated.\r
+\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 MnpDriverEntryPoint (\r
   IN EFI_HANDLE        ImageHandle,\r
   IN EFI_SYSTEM_TABLE  *SystemTable\r
   )\r
-/*++\r
-\r
-Routine Description:\r
-\r
-  The entry point for Mnp driver which installs the driver binding and component name\r
-  protocol on its ImageHandle.\r
-\r
-Arguments:\r
-\r
-  ImageHandle - The image handle of the driver.\r
-  SystemTable - The system table.\r
-\r
-Returns:\r
-\r
-  EFI_SUCCESS - If the driver binding and component name protocols are successfully\r
-                installed, otherwise if failed.\r
-\r
---*/\r
 {\r
   return EfiLibInstallDriverBindingComponentName2 (\r
            ImageHandle,\r