]> git.proxmox.com Git - mirror_edk2.git/blame - MdeModulePkg/Universal/Network/SnpDxe/snp.h
Remove gEfiNetworkInterfaceIdentifierProtocolGuid reference from code base. Only...
[mirror_edk2.git] / MdeModulePkg / Universal / Network / SnpDxe / snp.h
CommitLineData
83cbd279 1/** @file\r
2\r
3Copyright (c) 2004 - 2007, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12Module name:\r
13 snp.h\r
14\r
15Abstract:\r
16\r
17Revision history:\r
18\r
19\r
20**/\r
21#ifndef _SNP_H\r
22#define _SNP_H\r
23\r
24\r
8a67d61d 25#include <PiDxe.h>\r
26\r
27#include <Protocol/SimpleNetwork.h>\r
28#include <Protocol/PciIo.h>\r
29#include <Protocol/NetworkInterfaceIdentifier.h>\r
30#include <Protocol/DevicePath.h>\r
31\r
32#include <Library/DebugLib.h>\r
33#include <Library/BaseMemoryLib.h>\r
34#include <Library/UefiDriverEntryPoint.h>\r
35#include <Library/UefiBootServicesTableLib.h>\r
36#include <Library/BaseLib.h>\r
83cbd279 37#include <Library/UefiLib.h>\r
38#include <Library/MemoryAllocationLib.h>\r
39\r
40#include <IndustryStandard/Pci22.h>\r
41\r
42#define FOUR_GIGABYTES (UINT64) 0x100000000ULL\r
43\r
44\r
45#define SNP_DRIVER_SIGNATURE EFI_SIGNATURE_32 ('s', 'n', 'd', 's')\r
46#define MAX_MAP_LENGTH 100\r
47\r
48#define PCI_BAR_IO_MASK 0x00000003\r
49#define PCI_BAR_IO_MODE 0x00000001\r
50\r
51#define PCI_BAR_MEM_MASK 0x0000000F\r
52#define PCI_BAR_MEM_MODE 0x00000000\r
53#define PCI_BAR_MEM_64BIT 0x00000004\r
54\r
55typedef struct {\r
56 UINT32 Signature;\r
57 EFI_LOCK lock;\r
58\r
59 EFI_SIMPLE_NETWORK_PROTOCOL snp;\r
60 EFI_SIMPLE_NETWORK_MODE mode;\r
61\r
62 EFI_HANDLE device_handle;\r
63 EFI_DEVICE_PATH_PROTOCOL *device_path;\r
64\r
65 //\r
66 // Local instance data needed by SNP driver\r
67 //\r
68 // Pointer to S/W UNDI API entry point\r
69 // This will be NULL for H/W UNDI\r
70 //\r
71 EFI_STATUS (*issue_undi32_command) (UINT64 cdb);\r
72\r
73 BOOLEAN is_swundi;\r
74\r
75 //\r
76 // undi interface number, if one undi manages more nics\r
77 //\r
78 PXE_IFNUM if_num;\r
79\r
80 //\r
81 // Allocated tx/rx buffer that was passed to UNDI Initialize.\r
82 //\r
83 UINT32 tx_rx_bufsize;\r
84 VOID *tx_rx_buffer;\r
85 //\r
86 // mappable buffers for receive and fill header for undi3.0\r
87 // these will be used if the user buffers are above 4GB limit (instead of\r
88 // mapping the user buffers)\r
89 //\r
90 UINT8 *receive_buf;\r
91 VOID *ReceiveBufUnmap;\r
92 UINT8 *fill_hdr_buf;\r
93 VOID *FillHdrBufUnmap;\r
94\r
95 EFI_PCI_IO_PROTOCOL *IoFncs;\r
96 UINT8 IoBarIndex;\r
97 UINT8 MemoryBarIndex;\r
41057d77 98\r
83cbd279 99 //\r
100 // Buffers for command descriptor block, command parameter block\r
101 // and data block.\r
102 //\r
103 PXE_CDB cdb;\r
104 VOID *cpb;\r
105 VOID *CpbUnmap;\r
106 VOID *db;\r
107\r
108 //\r
109 // UNDI structure, we need to remember the init info for a long time!\r
110 //\r
111 PXE_DB_GET_INIT_INFO init_info;\r
112\r
113 VOID *SnpDriverUnmap;\r
114 //\r
115 // when ever we map an address, we must remember it's address and the un-map\r
116 // cookie so that we can unmap later\r
117 //\r
118 struct s_map_list {\r
119 EFI_PHYSICAL_ADDRESS virt;\r
120 VOID *map_cookie;\r
121 } map_list[MAX_MAP_LENGTH];\r
122}\r
123SNP_DRIVER;\r
124\r
125#define EFI_SIMPLE_NETWORK_DEV_FROM_THIS(a) CR (a, SNP_DRIVER, snp, SNP_DRIVER_SIGNATURE)\r
126\r
127//\r
128// Global Variables\r
129//\r
130extern EFI_COMPONENT_NAME_PROTOCOL gSimpleNetworkComponentName;\r
131extern EFI_COMPONENT_NAME2_PROTOCOL gSimpleNetworkComponentName2;\r
132\r
133//\r
134// Virtual to physical mapping for all UNDI 3.0s.\r
135//\r
136extern struct s_v2p {\r
137 struct s_v2p *next;\r
138 VOID *vaddr;\r
139 UINTN bsize;\r
140 EFI_PHYSICAL_ADDRESS paddr;\r
141 VOID *unmap;\r
142}\r
143*_v2p;\r
144\r
145EFI_STATUS\r
146add_v2p (\r
147 struct s_v2p **v2p,\r
148 EFI_PCI_IO_PROTOCOL_OPERATION type,\r
149 VOID *vaddr,\r
150 UINTN bsize\r
151 )\r
152;\r
153\r
154EFI_STATUS\r
155find_v2p (\r
156 struct s_v2p **v2p,\r
157 VOID *vaddr\r
158 )\r
159;\r
160\r
161EFI_STATUS\r
162del_v2p (\r
163 VOID *vaddr\r
164 )\r
165;\r
166\r
167extern\r
168VOID \r
169snp_undi32_callback_block_30 (\r
170 IN UINT32 Enable\r
171 )\r
172;\r
173\r
174extern\r
175VOID \r
176snp_undi32_callback_delay_30 (\r
177 IN UINT64 MicroSeconds\r
178 )\r
179;\r
180\r
181extern\r
182VOID \r
183snp_undi32_callback_memio_30 (\r
184 IN UINT8 ReadOrWrite,\r
185 IN UINT8 NumBytes,\r
186 IN UINT64 MemOrPortAddress,\r
187 IN OUT UINT64 BufferPtr\r
188 )\r
189;\r
190\r
191extern\r
192VOID \r
193snp_undi32_callback_v2p_30 (\r
194 IN UINT64 CpuAddr,\r
195 IN OUT UINT64 DeviceAddrPtr\r
196 )\r
197;\r
198\r
199extern\r
200VOID \r
201snp_undi32_callback_block (\r
202 IN UINT64 UniqueId,\r
203 IN UINT32 Enable\r
204 )\r
205;\r
206\r
207extern\r
208VOID \r
209snp_undi32_callback_delay (\r
210 IN UINT64 UniqueId,\r
211 IN UINT64 MicroSeconds\r
212 )\r
213;\r
214\r
215extern\r
216VOID \r
217snp_undi32_callback_memio (\r
218 IN UINT64 UniqueId,\r
219 IN UINT8 ReadOrWrite,\r
220 IN UINT8 NumBytes,\r
221 IN UINT64 MemOrPortAddr,\r
222 IN OUT UINT64 BufferPtr\r
223 )\r
224;\r
225\r
226extern\r
227VOID \r
228snp_undi32_callback_map (\r
229 IN UINT64 UniqueId,\r
230 IN UINT64 CpuAddr,\r
231 IN UINT32 NumBytes,\r
232 IN UINT32 Direction,\r
233 IN OUT UINT64 DeviceAddrPtr\r
234 )\r
235;\r
236\r
237extern\r
238VOID \r
239snp_undi32_callback_unmap (\r
240 IN UINT64 UniqueId,\r
241 IN UINT64 CpuAddr,\r
242 IN UINT32 NumBytes,\r
243 IN UINT32 Direction,\r
244 IN UINT64 DeviceAddr // not a pointer to device address\r
245 )\r
246;\r
247\r
248extern\r
249VOID \r
250snp_undi32_callback_sync (\r
251 IN UINT64 UniqueId,\r
252 IN UINT64 CpuAddr,\r
253 IN UINT32 NumBytes,\r
254 IN UINT32 Direction,\r
255 IN UINT64 DeviceAddr // not a pointer to device address\r
256 )\r
257;\r
258\r
259extern\r
260EFI_STATUS \r
261EFIAPI\r
262snp_undi32_start (\r
263 IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
264 )\r
265;\r
266\r
267extern\r
268EFI_STATUS \r
269EFIAPI\r
270snp_undi32_stop (\r
271 IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
272 )\r
273;\r
274\r
275extern\r
276EFI_STATUS \r
277EFIAPI\r
278snp_undi32_initialize (\r
279 IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
280 IN UINTN extra_rx_buffer_size OPTIONAL,\r
281 IN UINTN extra_tx_buffer_size OPTIONAL\r
282 )\r
283;\r
284\r
285extern\r
286EFI_STATUS \r
287EFIAPI\r
288snp_undi32_reset (\r
289 IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
290 IN BOOLEAN ExtendedVerification\r
291 )\r
292;\r
293\r
294extern\r
295EFI_STATUS \r
296EFIAPI\r
297snp_undi32_shutdown (\r
298 IN EFI_SIMPLE_NETWORK_PROTOCOL *this\r
299 )\r
300;\r
301\r
302extern\r
303EFI_STATUS \r
304EFIAPI\r
305snp_undi32_receive_filters (\r
306 IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
307 IN UINT32 enable,\r
308 IN UINT32 disable,\r
309 IN BOOLEAN reset_mcast_filter,\r
310 IN UINTN mcast_filter_count OPTIONAL,\r
311 IN EFI_MAC_ADDRESS * mcast_filter OPTIONAL\r
312 )\r
313;\r
314\r
315extern\r
316EFI_STATUS \r
317EFIAPI\r
318snp_undi32_station_address (\r
319 IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
320 IN BOOLEAN reset,\r
321 IN EFI_MAC_ADDRESS *new OPTIONAL\r
322 )\r
323;\r
324\r
325extern\r
326EFI_STATUS \r
327EFIAPI\r
328snp_undi32_statistics (\r
329 IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
330 IN BOOLEAN reset,\r
331 IN OUT UINTN *statistics_size OPTIONAL,\r
332 IN OUT EFI_NETWORK_STATISTICS * statistics_table OPTIONAL\r
333 )\r
334;\r
335\r
336extern\r
337EFI_STATUS \r
338EFIAPI\r
339snp_undi32_mcast_ip_to_mac (\r
340 IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
341 IN BOOLEAN IPv6,\r
342 IN EFI_IP_ADDRESS *IP,\r
343 OUT EFI_MAC_ADDRESS *MAC\r
344 )\r
345;\r
346\r
347extern\r
348EFI_STATUS \r
349EFIAPI\r
350snp_undi32_nvdata (\r
351 IN EFI_SIMPLE_NETWORK_PROTOCOL *this,\r
352 IN BOOLEAN read_write,\r
353 IN UINTN offset,\r
354 IN UINTN buffer_size,\r
355 IN OUT VOID *buffer\r
356 )\r
357;\r
358\r
359extern\r
360EFI_STATUS \r
361EFIAPI\r
362snp_undi32_get_status (\r
363 IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
364 OUT UINT32 *interrupt_status OPTIONAL,\r
365 OUT VOID **tx_buffer OPTIONAL\r
366 )\r
367;\r
368\r
369extern\r
370EFI_STATUS \r
371EFIAPI\r
372snp_undi32_transmit (\r
373 IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
374 IN UINTN header_size,\r
375 IN UINTN buffer_size,\r
376 IN VOID *buffer,\r
377 IN EFI_MAC_ADDRESS * src_addr OPTIONAL,\r
378 IN EFI_MAC_ADDRESS * dest_addr OPTIONAL,\r
379 IN UINT16 *protocol OPTIONAL\r
380 )\r
381;\r
382\r
383extern\r
384EFI_STATUS \r
385EFIAPI\r
386snp_undi32_receive (\r
387 IN EFI_SIMPLE_NETWORK_PROTOCOL * this,\r
388 OUT UINTN *header_size OPTIONAL,\r
389 IN OUT UINTN *buffer_size,\r
390 OUT VOID *buffer,\r
391 OUT EFI_MAC_ADDRESS * src_addr OPTIONAL,\r
392 OUT EFI_MAC_ADDRESS * dest_addr OPTIONAL,\r
393 OUT UINT16 *protocol OPTIONAL\r
394 )\r
395;\r
396\r
397typedef\r
398EFI_STATUS\r
399(*issue_undi32_command) (\r
400 UINT64 cdb\r
401 );\r
402typedef\r
403VOID\r
404(*ptr) (\r
405 VOID\r
406 );\r
407\r
408\r
409/**\r
410 Install all the driver protocol\r
411\r
412 @param ImageHandle Driver image handle\r
413 @param SystemTable System services table\r
414\r
415 @retval EFI_SUCEESS Initialization routine has found UNDI hardware, loaded it's\r
416 ROM, and installed a notify event for the Network\r
417 Indentifier Interface Protocol successfully.\r
418 @retval Other Return value from HandleProtocol for DeviceIoProtocol or\r
419 LoadedImageProtocol\r
420\r
421**/\r
422EFI_STATUS\r
423EFIAPI\r
424InitializeSnpNiiDriver (\r
425 IN EFI_HANDLE ImageHandle,\r
426 IN EFI_SYSTEM_TABLE *SystemTable\r
427 )\r
428;\r
429\r
430#define SNP_MEM_PAGES(x) (((x) - 1) / 4096 + 1)\r
431\r
432\r
433#endif /* _SNP_H */\r