1 /** @file
2   Implement the constructor and destructor for the EFI socket library
3 
4   Copyright (c) 2011, Intel Corporation
5   All rights reserved. This program and the accompanying materials
6   are licensed and made available under the terms and conditions of the BSD License
7   which accompanies this distribution.  The full text of the license may be found at
8   http://opensource.org/licenses/bsd-license.
9 
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12 
13 **/
14 
15 #include "Socket.h"
16 
17 
18 /**
19   EFI Socket Library Constructor
20 
21   This routine supports an implementation dependent constructor
22   depending upon whether the library is linked to a socket
23   application or the SocketDxe driver.  The following modules
24   declare the redirection for the constructor in ::mpfnEslConstructor:
25   <ul>
26     <li>StdLib/EfiSocketLib/UseSocketLib.c - Application links against EfiSocketLib</li>
27     <li>StdLib/SocketDxe/EntryUnload.c - SocketDxe links against EfiSocketLib</li>
28   </ul>
29 
30   The EfiSocketLib.inf file lists ::EslConstructor as the CONSTRUCTOR
31   in the [Defines] section.  As a result, this routine is called by
32   the ProcessLibraryConstructorList routine of the AutoGen.c module
33   in the Build directory associated with the socket application or
34   the SocketDxe driver.
35 
36   @retval EFI_SUCCESS       The socket layer initialization was successful
37 
38  **/
39 EFI_STATUS
40 EFIAPI
EslConstructor(VOID)41 EslConstructor (
42   VOID
43   )
44 {
45   EFI_STATUS Status;
46 
47   DBG_ENTER ( );
48 
49   //
50   //  Assume success
51   //
52   Status = EFI_SUCCESS;
53 
54   //
55   //  Call the image dependent constructor if available
56   //
57   if ( NULL != mpfnEslConstructor ) {
58     Status = mpfnEslConstructor ( );
59   }
60 
61   //
62   //  Return the constructor status
63   //
64   DBG_EXIT_STATUS ( Status );
65   return Status;
66 }
67 
68 
69 /**
70   EFI Socket Library Destructor
71 
72   This routine supports an implementation dependent destructor
73   depending upon whether the library is linked to a socket
74   application or the SocketDxe driver.  The following modules
75   declare the redirection for the destructor in ::mpfnEslDestructor:
76   <ul>
77     <li>StdLib/EfiSocketLib/UseSocketLib.c - Application links against EfiSocketLib</li>
78     <li>StdLib/SocketDxe/EntryUnload.c - SocketDxe links against EfiSocketLib</li>
79   </ul>
80 
81   The EfiSocketLib.inf file lists ::EslDestructor as the DESTRUCTOR
82   in the [Defines] section.  As a result, this routine is called by
83   the ProcessLibraryDestructorList routine of the AutoGen.c module
84   in the Build directory associated with the socket application or
85   the SocketDxe driver.
86 
87   @retval EFI_SUCCESS       The socket layer shutdown was successful
88 
89  **/
90 EFI_STATUS
91 EFIAPI
EslDestructor(VOID)92 EslDestructor (
93   VOID
94   )
95 {
96   EFI_STATUS Status;
97 
98   DBG_ENTER ( );
99 
100   //
101   //  Assume success
102   //
103   Status = EFI_SUCCESS;
104 
105   //
106   //  Call the image dependent destructor if available
107   //
108   if ( NULL != mpfnEslDestructor ) {
109     Status = mpfnEslDestructor ( );
110   }
111 
112   //
113   //  Return the constructor status
114   //
115   DBG_EXIT_STATUS ( Status );
116   return Status;
117 }
118