1057d744eee56782c476d91593b4db47305339094qhuang/** @file
2057d744eee56782c476d91593b4db47305339094qhuang
38f2a5f8012e3a6de30f5b12ce3a218efae9eaeddhhtianCopyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>
48f2a5f8012e3a6de30f5b12ce3a218efae9eaeddhhtianThis program and the accompanying materials
5057d744eee56782c476d91593b4db47305339094qhuangare licensed and made available under the terms and conditions of the BSD License
6057d744eee56782c476d91593b4db47305339094qhuangwhich accompanies this distribution.  The full text of the license may be found at
7057d744eee56782c476d91593b4db47305339094qhuanghttp://opensource.org/licenses/bsd-license.php
8057d744eee56782c476d91593b4db47305339094qhuang
9057d744eee56782c476d91593b4db47305339094qhuangTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10057d744eee56782c476d91593b4db47305339094qhuangWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11057d744eee56782c476d91593b4db47305339094qhuang
12057d744eee56782c476d91593b4db47305339094qhuangModule Name:
13057d744eee56782c476d91593b4db47305339094qhuang
14057d744eee56782c476d91593b4db47305339094qhuang  SnpNt32.h
15057d744eee56782c476d91593b4db47305339094qhuang
16057d744eee56782c476d91593b4db47305339094qhuangAbstract:
17057d744eee56782c476d91593b4db47305339094qhuang
18057d744eee56782c476d91593b4db47305339094qhuang-**/
19057d744eee56782c476d91593b4db47305339094qhuang
20057d744eee56782c476d91593b4db47305339094qhuang#ifndef _SNP_NT32_H_
21057d744eee56782c476d91593b4db47305339094qhuang#define _SNP_NT32_H_
22593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff
2360c93673b3189b7a48acdb5c300f4ee3546ffb85lgao#include <Uefi.h>
24593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff
25593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff#include <Protocol/SimpleNetwork.h>
26057d744eee56782c476d91593b4db47305339094qhuang#include <Protocol/DevicePath.h>
27593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff#include <Protocol/WinNtThunk.h>
28057d744eee56782c476d91593b4db47305339094qhuang
29593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff#include <Library/BaseLib.h>
30593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff#include <Library/DebugLib.h>
31593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff#include <Library/BaseMemoryLib.h>
32593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff#include <Library/UefiBootServicesTableLib.h>
33593a8308cc95cfff7d23f2c5e5a2ab8b8712e823vanjeff#include <Library/UefiLib.h>
34057d744eee56782c476d91593b4db47305339094qhuang#include <Library/DevicePathLib.h>
35057d744eee56782c476d91593b4db47305339094qhuang#include <Library/NetLib.h>
36057d744eee56782c476d91593b4db47305339094qhuang#include <Library/MemoryAllocationLib.h>
37057d744eee56782c476d91593b4db47305339094qhuang
38057d744eee56782c476d91593b4db47305339094qhuangtypedef struct _SNPNT32_GLOBAL_DATA  SNPNT32_GLOBAL_DATA;
39057d744eee56782c476d91593b4db47305339094qhuangtypedef struct _SNPNT32_INSTANCE_DATA SNPNT32_INSTANCE_DATA;
40057d744eee56782c476d91593b4db47305339094qhuang
41057d744eee56782c476d91593b4db47305339094qhuang#define NETWORK_LIBRARY_NAME_U          L"SnpNt32Io.dll"
42057d744eee56782c476d91593b4db47305339094qhuang
43057d744eee56782c476d91593b4db47305339094qhuang#define NETWORK_LIBRARY_INITIALIZE      "SnpInitialize"
44057d744eee56782c476d91593b4db47305339094qhuang#define NETWORK_LIBRARY_FINALIZE        "SnpFinalize"
45057d744eee56782c476d91593b4db47305339094qhuang#define NETWORK_LIBRARY_SET_RCV_FILTER  "SnpSetReceiveFilter"
46057d744eee56782c476d91593b4db47305339094qhuang#define NETWORK_LIBRARY_RECEIVE         "SnpReceive"
47057d744eee56782c476d91593b4db47305339094qhuang#define NETWORK_LIBRARY_TRANSMIT        "SnpTransmit"
48057d744eee56782c476d91593b4db47305339094qhuang
49057d744eee56782c476d91593b4db47305339094qhuang#pragma pack(1)
50057d744eee56782c476d91593b4db47305339094qhuangtypedef struct _NT_NET_INTERFACE_INFO {
51057d744eee56782c476d91593b4db47305339094qhuang  UINT32          InterfaceIndex;
52057d744eee56782c476d91593b4db47305339094qhuang  EFI_MAC_ADDRESS MacAddr;
53057d744eee56782c476d91593b4db47305339094qhuang} NT_NET_INTERFACE_INFO;
54057d744eee56782c476d91593b4db47305339094qhuang#pragma pack()
55057d744eee56782c476d91593b4db47305339094qhuang
56057d744eee56782c476d91593b4db47305339094qhuang#define NET_ETHER_HEADER_SIZE     14
57057d744eee56782c476d91593b4db47305339094qhuang
58057d744eee56782c476d91593b4db47305339094qhuang#define MAX_INTERFACE_INFO_NUMBER 16
59057d744eee56782c476d91593b4db47305339094qhuang#define MAX_FILE_NAME_LENGTH      280
60057d744eee56782c476d91593b4db47305339094qhuang
61057d744eee56782c476d91593b4db47305339094qhuang//
62057d744eee56782c476d91593b4db47305339094qhuang//  Functions in Net Library
63057d744eee56782c476d91593b4db47305339094qhuang//
64057d744eee56782c476d91593b4db47305339094qhuangtypedef
65057d744eee56782c476d91593b4db47305339094qhuangINT32
66057d744eee56782c476d91593b4db47305339094qhuang(*NT_NET_INITIALIZE) (
67057d744eee56782c476d91593b4db47305339094qhuang  IN OUT  UINT32                *InterfaceCount,
68057d744eee56782c476d91593b4db47305339094qhuang  IN OUT  NT_NET_INTERFACE_INFO * InterfaceInfoBuffer
69057d744eee56782c476d91593b4db47305339094qhuang  );
70057d744eee56782c476d91593b4db47305339094qhuang
71057d744eee56782c476d91593b4db47305339094qhuangtypedef
72057d744eee56782c476d91593b4db47305339094qhuangINT32
73057d744eee56782c476d91593b4db47305339094qhuang(*NT_NET_FINALIZE) (
74057d744eee56782c476d91593b4db47305339094qhuang  VOID
75057d744eee56782c476d91593b4db47305339094qhuang  );
76057d744eee56782c476d91593b4db47305339094qhuang
77057d744eee56782c476d91593b4db47305339094qhuangtypedef
78057d744eee56782c476d91593b4db47305339094qhuangINT32
79057d744eee56782c476d91593b4db47305339094qhuang(*NT_NET_SET_RECEIVE_FILTER) (
80057d744eee56782c476d91593b4db47305339094qhuang  IN  UINT32                        Index,
81057d744eee56782c476d91593b4db47305339094qhuang  IN  UINT32                        EnableFilter,
82057d744eee56782c476d91593b4db47305339094qhuang  IN  UINT32                        MCastFilterCnt,
83057d744eee56782c476d91593b4db47305339094qhuang  IN  EFI_MAC_ADDRESS               * MCastFilter
84057d744eee56782c476d91593b4db47305339094qhuang  );
85057d744eee56782c476d91593b4db47305339094qhuang
86057d744eee56782c476d91593b4db47305339094qhuangtypedef
87057d744eee56782c476d91593b4db47305339094qhuangINT32
88057d744eee56782c476d91593b4db47305339094qhuang(*NT_NET_RECEIVE) (
89057d744eee56782c476d91593b4db47305339094qhuang  IN      UINT32                        Index,
90057d744eee56782c476d91593b4db47305339094qhuang  IN OUT  UINT32                        *BufferSize,
91057d744eee56782c476d91593b4db47305339094qhuang  OUT     VOID                          *Buffer
92057d744eee56782c476d91593b4db47305339094qhuang  );
93057d744eee56782c476d91593b4db47305339094qhuang
94057d744eee56782c476d91593b4db47305339094qhuangtypedef
95057d744eee56782c476d91593b4db47305339094qhuangINT32
96057d744eee56782c476d91593b4db47305339094qhuang(*NT_NET_TRANSMIT) (
97057d744eee56782c476d91593b4db47305339094qhuang  IN  UINT32                        Index,
98057d744eee56782c476d91593b4db47305339094qhuang  IN  UINT32                        HeaderSize,
99057d744eee56782c476d91593b4db47305339094qhuang  IN  UINT32                        BufferSize,
100057d744eee56782c476d91593b4db47305339094qhuang  IN  VOID                          *Buffer,
101057d744eee56782c476d91593b4db47305339094qhuang  IN  EFI_MAC_ADDRESS               * SrcAddr,
102057d744eee56782c476d91593b4db47305339094qhuang  IN  EFI_MAC_ADDRESS               * DestAddr,
103057d744eee56782c476d91593b4db47305339094qhuang  IN  UINT16                        *Protocol
104057d744eee56782c476d91593b4db47305339094qhuang  );
105057d744eee56782c476d91593b4db47305339094qhuang
106057d744eee56782c476d91593b4db47305339094qhuangtypedef struct _NT_NET_UTILITY_TABLE {
107057d744eee56782c476d91593b4db47305339094qhuang  NT_NET_INITIALIZE         Initialize;
108057d744eee56782c476d91593b4db47305339094qhuang  NT_NET_FINALIZE           Finalize;
109057d744eee56782c476d91593b4db47305339094qhuang  NT_NET_SET_RECEIVE_FILTER SetReceiveFilter;
110057d744eee56782c476d91593b4db47305339094qhuang  NT_NET_RECEIVE            Receive;
111057d744eee56782c476d91593b4db47305339094qhuang  NT_NET_TRANSMIT           Transmit;
112057d744eee56782c476d91593b4db47305339094qhuang} NT_NET_UTILITY_TABLE;
113057d744eee56782c476d91593b4db47305339094qhuang
114057d744eee56782c476d91593b4db47305339094qhuang//
115057d744eee56782c476d91593b4db47305339094qhuang//  Private functions
116057d744eee56782c476d91593b4db47305339094qhuang//
117057d744eee56782c476d91593b4db47305339094qhuangtypedef
118057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
119057d744eee56782c476d91593b4db47305339094qhuang(*SNPNT32_INITIALIZE_GLOBAL_DATA) (
120057d744eee56782c476d91593b4db47305339094qhuang  IN SNPNT32_GLOBAL_DATA * This
121057d744eee56782c476d91593b4db47305339094qhuang  );
122057d744eee56782c476d91593b4db47305339094qhuang
123057d744eee56782c476d91593b4db47305339094qhuangtypedef
124057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
125057d744eee56782c476d91593b4db47305339094qhuang(*SNPNT32_INITIALIZE_INSTANCE_DATA) (
126057d744eee56782c476d91593b4db47305339094qhuang  IN SNPNT32_GLOBAL_DATA    * This,
127057d744eee56782c476d91593b4db47305339094qhuang  IN SNPNT32_INSTANCE_DATA  * Instance
128057d744eee56782c476d91593b4db47305339094qhuang  );
129057d744eee56782c476d91593b4db47305339094qhuang
130057d744eee56782c476d91593b4db47305339094qhuangtypedef
131057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
132057d744eee56782c476d91593b4db47305339094qhuang(*SNPNT32_CLOSE_INSTANCE) (
133057d744eee56782c476d91593b4db47305339094qhuang  IN SNPNT32_GLOBAL_DATA    * This,
134057d744eee56782c476d91593b4db47305339094qhuang  IN SNPNT32_INSTANCE_DATA  * Instance
135057d744eee56782c476d91593b4db47305339094qhuang  );
136057d744eee56782c476d91593b4db47305339094qhuang
137057d744eee56782c476d91593b4db47305339094qhuang//
138057d744eee56782c476d91593b4db47305339094qhuang//  Global data for this driver
139057d744eee56782c476d91593b4db47305339094qhuang//
14099e1dd896a87bc8c8548f4dcd7c1a902825c9c42qhuang#define SNP_NT32_DRIVER_SIGNATURE SIGNATURE_32 ('W', 'S', 'N', 'P')
141057d744eee56782c476d91593b4db47305339094qhuang
142a00ec39b52224a40bf9a0a813b69cb43e14407a8mdkinneystruct _SNPNT32_GLOBAL_DATA {
143057d744eee56782c476d91593b4db47305339094qhuang  UINT32                            Signature;
144057d744eee56782c476d91593b4db47305339094qhuang
145057d744eee56782c476d91593b4db47305339094qhuang  //
146057d744eee56782c476d91593b4db47305339094qhuang  //  List for all the fake SNP instance
147057d744eee56782c476d91593b4db47305339094qhuang  //
148e90e87777cfefa3569b74bcd877ae2a391d96e7fvanjeff  LIST_ENTRY                        InstanceList;
149057d744eee56782c476d91593b4db47305339094qhuang
150057d744eee56782c476d91593b4db47305339094qhuang  EFI_WIN_NT_THUNK_PROTOCOL         *WinNtThunk;
151057d744eee56782c476d91593b4db47305339094qhuang  HMODULE                           NetworkLibraryHandle;
152057d744eee56782c476d91593b4db47305339094qhuang
153057d744eee56782c476d91593b4db47305339094qhuang  NT_NET_UTILITY_TABLE              NtNetUtilityTable;
154057d744eee56782c476d91593b4db47305339094qhuang
155e90e87777cfefa3569b74bcd877ae2a391d96e7fvanjeff  EFI_LOCK                          Lock;
156057d744eee56782c476d91593b4db47305339094qhuang
157057d744eee56782c476d91593b4db47305339094qhuang  //
158057d744eee56782c476d91593b4db47305339094qhuang  //  Private functions
159057d744eee56782c476d91593b4db47305339094qhuang  //
160057d744eee56782c476d91593b4db47305339094qhuang  SNPNT32_INITIALIZE_GLOBAL_DATA    InitializeGlobalData;
161057d744eee56782c476d91593b4db47305339094qhuang  SNPNT32_INITIALIZE_INSTANCE_DATA  InitializeInstanceData;
162057d744eee56782c476d91593b4db47305339094qhuang  SNPNT32_CLOSE_INSTANCE            CloseInstance;
163a00ec39b52224a40bf9a0a813b69cb43e14407a8mdkinney};
164057d744eee56782c476d91593b4db47305339094qhuang
165057d744eee56782c476d91593b4db47305339094qhuang//
166057d744eee56782c476d91593b4db47305339094qhuang//  Instance data for each fake SNP instance
167057d744eee56782c476d91593b4db47305339094qhuang//
16899e1dd896a87bc8c8548f4dcd7c1a902825c9c42qhuang#define SNP_NT32_INSTANCE_SIGNATURE SIGNATURE_32 ('w', 'S', 'N', 'P')
169057d744eee56782c476d91593b4db47305339094qhuang
170a00ec39b52224a40bf9a0a813b69cb43e14407a8mdkinneystruct _SNPNT32_INSTANCE_DATA {
171057d744eee56782c476d91593b4db47305339094qhuang  UINT32                      Signature;
172057d744eee56782c476d91593b4db47305339094qhuang
173057d744eee56782c476d91593b4db47305339094qhuang  //
174057d744eee56782c476d91593b4db47305339094qhuang  //  List entry use for linking with other instance
175057d744eee56782c476d91593b4db47305339094qhuang  //
176e90e87777cfefa3569b74bcd877ae2a391d96e7fvanjeff  LIST_ENTRY                  Entry;
177057d744eee56782c476d91593b4db47305339094qhuang
178057d744eee56782c476d91593b4db47305339094qhuang  SNPNT32_GLOBAL_DATA         *GlobalData;
179057d744eee56782c476d91593b4db47305339094qhuang
180057d744eee56782c476d91593b4db47305339094qhuang  EFI_HANDLE                  DeviceHandle;
181057d744eee56782c476d91593b4db47305339094qhuang  EFI_DEVICE_PATH_PROTOCOL    *DevicePath;
182057d744eee56782c476d91593b4db47305339094qhuang
183057d744eee56782c476d91593b4db47305339094qhuang  EFI_SIMPLE_NETWORK_PROTOCOL Snp;
184057d744eee56782c476d91593b4db47305339094qhuang  EFI_SIMPLE_NETWORK_MODE     Mode;
185057d744eee56782c476d91593b4db47305339094qhuang
186057d744eee56782c476d91593b4db47305339094qhuang  NT_NET_INTERFACE_INFO       InterfaceInfo;
187057d744eee56782c476d91593b4db47305339094qhuang
188057d744eee56782c476d91593b4db47305339094qhuang  //
189057d744eee56782c476d91593b4db47305339094qhuang  //  Private functions
190057d744eee56782c476d91593b4db47305339094qhuang  //
191a00ec39b52224a40bf9a0a813b69cb43e14407a8mdkinney};
192057d744eee56782c476d91593b4db47305339094qhuang
193057d744eee56782c476d91593b4db47305339094qhuang#define SNP_NT32_INSTANCE_DATA_FROM_SNP_THIS(a) \
194057d744eee56782c476d91593b4db47305339094qhuang  CR ( \
195057d744eee56782c476d91593b4db47305339094qhuang  a, \
196057d744eee56782c476d91593b4db47305339094qhuang  SNPNT32_INSTANCE_DATA, \
197057d744eee56782c476d91593b4db47305339094qhuang  Snp, \
198057d744eee56782c476d91593b4db47305339094qhuang  SNP_NT32_INSTANCE_SIGNATURE \
199057d744eee56782c476d91593b4db47305339094qhuang  )
200057d744eee56782c476d91593b4db47305339094qhuang
201531237a5ef547f77b91721f5538add55bea308c9jgongextern EFI_DRIVER_BINDING_PROTOCOL    gSnpNt32DriverBinding;
202057d744eee56782c476d91593b4db47305339094qhuangextern EFI_COMPONENT_NAME_PROTOCOL    gSnpNt32DriverComponentName;
203057d744eee56782c476d91593b4db47305339094qhuangextern EFI_COMPONENT_NAME2_PROTOCOL   gSnpNt32DriverComponentName2;
204057d744eee56782c476d91593b4db47305339094qhuang
205531237a5ef547f77b91721f5538add55bea308c9jgong/**
206531237a5ef547f77b91721f5538add55bea308c9jgong  Test to see if this driver supports ControllerHandle. This service
207531237a5ef547f77b91721f5538add55bea308c9jgong  is called by the EFI boot service ConnectController(). In
208531237a5ef547f77b91721f5538add55bea308c9jgong  order to make drivers as small as possible, there are a few calling
209531237a5ef547f77b91721f5538add55bea308c9jgong  restrictions for this service. ConnectController() must
210531237a5ef547f77b91721f5538add55bea308c9jgong  follow these calling restrictions. If any other agent wishes to call
211531237a5ef547f77b91721f5538add55bea308c9jgong  Supported() it must also follow these calling restrictions.
212531237a5ef547f77b91721f5538add55bea308c9jgong
213531237a5ef547f77b91721f5538add55bea308c9jgong  @param  This                Protocol instance pointer.
214531237a5ef547f77b91721f5538add55bea308c9jgong  @param  ControllerHandle    Handle of device to test
215531237a5ef547f77b91721f5538add55bea308c9jgong  @param  RemainingDevicePath Optional parameter use to pick a specific child
216531237a5ef547f77b91721f5538add55bea308c9jgong                              device to start.
217531237a5ef547f77b91721f5538add55bea308c9jgong
218531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_SUCCESS         This driver supports this device
219531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_UNSUPPORTED     This driver does not support this device
220531237a5ef547f77b91721f5538add55bea308c9jgong
221531237a5ef547f77b91721f5538add55bea308c9jgong**/
222057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
223057d744eee56782c476d91593b4db47305339094qhuangEFIAPI
224057d744eee56782c476d91593b4db47305339094qhuangSnpNt32DriverBindingSupported (
225057d744eee56782c476d91593b4db47305339094qhuang  IN EFI_DRIVER_BINDING_PROTOCOL  * This,
226057d744eee56782c476d91593b4db47305339094qhuang  IN EFI_HANDLE                   ControllerHandle,
227057d744eee56782c476d91593b4db47305339094qhuang  IN EFI_DEVICE_PATH_PROTOCOL     * RemainingDevicePath OPTIONAL
228057d744eee56782c476d91593b4db47305339094qhuang  );
229057d744eee56782c476d91593b4db47305339094qhuang
230531237a5ef547f77b91721f5538add55bea308c9jgong/**
231531237a5ef547f77b91721f5538add55bea308c9jgong  Start this driver on ControllerHandle. This service is called by the
232531237a5ef547f77b91721f5538add55bea308c9jgong  EFI boot service ConnectController(). In order to make
233531237a5ef547f77b91721f5538add55bea308c9jgong  drivers as small as possible, there are a few calling restrictions for
234531237a5ef547f77b91721f5538add55bea308c9jgong  this service. ConnectController() must follow these
235531237a5ef547f77b91721f5538add55bea308c9jgong  calling restrictions. If any other agent wishes to call Start() it
236531237a5ef547f77b91721f5538add55bea308c9jgong  must also follow these calling restrictions.
237531237a5ef547f77b91721f5538add55bea308c9jgong
238531237a5ef547f77b91721f5538add55bea308c9jgong  @param  This                 Protocol instance pointer.
239531237a5ef547f77b91721f5538add55bea308c9jgong  @param  ControllerHandle     Handle of device to bind driver to
240531237a5ef547f77b91721f5538add55bea308c9jgong  @param  RemainingDevicePath  Optional parameter use to pick a specific child
241531237a5ef547f77b91721f5538add55bea308c9jgong                               device to start.
242531237a5ef547f77b91721f5538add55bea308c9jgong
243531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_SUCCESS          Always succeeds.
244531237a5ef547f77b91721f5538add55bea308c9jgong
245531237a5ef547f77b91721f5538add55bea308c9jgong**/
246057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
247057d744eee56782c476d91593b4db47305339094qhuangEFIAPI
248057d744eee56782c476d91593b4db47305339094qhuangSnpNt32DriverBindingStart (
249057d744eee56782c476d91593b4db47305339094qhuang  IN EFI_DRIVER_BINDING_PROTOCOL  * This,
250057d744eee56782c476d91593b4db47305339094qhuang  IN EFI_HANDLE                   ControllerHandle,
251057d744eee56782c476d91593b4db47305339094qhuang  IN EFI_DEVICE_PATH_PROTOCOL     * RemainingDevicePath OPTIONAL
252057d744eee56782c476d91593b4db47305339094qhuang  );
253057d744eee56782c476d91593b4db47305339094qhuang
254531237a5ef547f77b91721f5538add55bea308c9jgong/**
255531237a5ef547f77b91721f5538add55bea308c9jgong  Stop this driver on ControllerHandle. This service is called by the
256531237a5ef547f77b91721f5538add55bea308c9jgong  EFI boot service DisconnectController(). In order to
257531237a5ef547f77b91721f5538add55bea308c9jgong  make drivers as small as possible, there are a few calling
258531237a5ef547f77b91721f5538add55bea308c9jgong  restrictions for this service. DisconnectController()
259531237a5ef547f77b91721f5538add55bea308c9jgong  must follow these calling restrictions. If any other agent wishes
260531237a5ef547f77b91721f5538add55bea308c9jgong  to call Stop() it must also follow these calling restrictions.
261531237a5ef547f77b91721f5538add55bea308c9jgong
262531237a5ef547f77b91721f5538add55bea308c9jgong  @param  This              Protocol instance pointer.
263531237a5ef547f77b91721f5538add55bea308c9jgong  @param  ControllerHandle  Handle of device to stop driver on
264531237a5ef547f77b91721f5538add55bea308c9jgong  @param  NumberOfChildren  Number of Handles in ChildHandleBuffer. If number of
265531237a5ef547f77b91721f5538add55bea308c9jgong                            children is zero stop the entire bus driver.
266531237a5ef547f77b91721f5538add55bea308c9jgong  @param  ChildHandleBuffer List of Child Handles to Stop.
267531237a5ef547f77b91721f5538add55bea308c9jgong
268531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_SUCCESS       Always succeeds.
269531237a5ef547f77b91721f5538add55bea308c9jgong
270531237a5ef547f77b91721f5538add55bea308c9jgong**/
271057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
272057d744eee56782c476d91593b4db47305339094qhuangEFIAPI
273057d744eee56782c476d91593b4db47305339094qhuangSnpNt32DriverBindingStop (
274057d744eee56782c476d91593b4db47305339094qhuang  IN  EFI_DRIVER_BINDING_PROTOCOL  *This,
275057d744eee56782c476d91593b4db47305339094qhuang  IN  EFI_HANDLE                   ControllerHandle,
276057d744eee56782c476d91593b4db47305339094qhuang  IN  UINTN                        NumberOfChildren,
277057d744eee56782c476d91593b4db47305339094qhuang  IN  EFI_HANDLE                   *ChildHandleBuffer
278057d744eee56782c476d91593b4db47305339094qhuang  );
279057d744eee56782c476d91593b4db47305339094qhuang
280531237a5ef547f77b91721f5538add55bea308c9jgong/**
281531237a5ef547f77b91721f5538add55bea308c9jgong  Initialize the driver's global data.
282531237a5ef547f77b91721f5538add55bea308c9jgong
283531237a5ef547f77b91721f5538add55bea308c9jgong  @param  This                  Pointer to the global context data.
284531237a5ef547f77b91721f5538add55bea308c9jgong
285531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_SUCCESS           The global data is initialized.
286531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_NOT_FOUND         The required DLL is not found.
287531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_DEVICE_ERROR      Error initialize network utility library.
288531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_OUT_OF_RESOURCES  Out of resource.
289531237a5ef547f77b91721f5538add55bea308c9jgong  @retval other                 Other errors.
290531237a5ef547f77b91721f5538add55bea308c9jgong
291531237a5ef547f77b91721f5538add55bea308c9jgong**/
292057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
293057d744eee56782c476d91593b4db47305339094qhuangSnpNt32InitializeGlobalData (
294531237a5ef547f77b91721f5538add55bea308c9jgong  IN OUT SNPNT32_GLOBAL_DATA *This
295057d744eee56782c476d91593b4db47305339094qhuang  );
296057d744eee56782c476d91593b4db47305339094qhuang
297531237a5ef547f77b91721f5538add55bea308c9jgong/**
298531237a5ef547f77b91721f5538add55bea308c9jgong  Initialize the snpnt32 driver instance.
299531237a5ef547f77b91721f5538add55bea308c9jgong
300531237a5ef547f77b91721f5538add55bea308c9jgong  @param  This                  Pointer to the SnpNt32 global data.
301531237a5ef547f77b91721f5538add55bea308c9jgong  @param  Instance              Pointer to the instance context data.
302531237a5ef547f77b91721f5538add55bea308c9jgong
303531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_SUCCESS           The driver instance is initialized.
304531237a5ef547f77b91721f5538add55bea308c9jgong  @retval other                 Initialization errors.
305531237a5ef547f77b91721f5538add55bea308c9jgong
306531237a5ef547f77b91721f5538add55bea308c9jgong**/
307057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
308057d744eee56782c476d91593b4db47305339094qhuangSnpNt32InitializeInstanceData (
309531237a5ef547f77b91721f5538add55bea308c9jgong  IN SNPNT32_GLOBAL_DATA        *This,
310531237a5ef547f77b91721f5538add55bea308c9jgong  IN OUT SNPNT32_INSTANCE_DATA  *Instance
311057d744eee56782c476d91593b4db47305339094qhuang  );
312057d744eee56782c476d91593b4db47305339094qhuang
313531237a5ef547f77b91721f5538add55bea308c9jgong/**
314531237a5ef547f77b91721f5538add55bea308c9jgong  Close the SnpNt32 driver instance.
315531237a5ef547f77b91721f5538add55bea308c9jgong
316531237a5ef547f77b91721f5538add55bea308c9jgong  @param  This                  Pointer to the SnpNt32 global data.
317531237a5ef547f77b91721f5538add55bea308c9jgong  @param  Instance              Pointer to the instance context data.
318531237a5ef547f77b91721f5538add55bea308c9jgong
319531237a5ef547f77b91721f5538add55bea308c9jgong  @retval EFI_SUCCESS           The instance is closed.
320531237a5ef547f77b91721f5538add55bea308c9jgong
321531237a5ef547f77b91721f5538add55bea308c9jgong**/
322057d744eee56782c476d91593b4db47305339094qhuangEFI_STATUS
323057d744eee56782c476d91593b4db47305339094qhuangSnpNt32CloseInstance (
324531237a5ef547f77b91721f5538add55bea308c9jgong  IN SNPNT32_GLOBAL_DATA        *This,
325531237a5ef547f77b91721f5538add55bea308c9jgong  IN OUT SNPNT32_INSTANCE_DATA  *Instance
326057d744eee56782c476d91593b4db47305339094qhuang  );
327057d744eee56782c476d91593b4db47305339094qhuang
328057d744eee56782c476d91593b4db47305339094qhuang#endif
329