]> git.proxmox.com Git - mirror_edk2.git/blob - NetworkPkg/UefiPxeBcDxe/PxeBcImpl.h
Add NetworkPkg (P.UDK2010.UP3.Network.P1)
[mirror_edk2.git] / NetworkPkg / UefiPxeBcDxe / PxeBcImpl.h
1 /** @file
2 This EFI_PXE_BASE_CODE_PROTOCOL and EFI_LOAD_FILE_PROTOCOL.
3 interfaces declaration.
4
5 Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
6
7 This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php.
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #ifndef __EFI_PXEBC_IMPL_H__
18 #define __EFI_PXEBC_IMPL_H__
19
20 #include <Uefi.h>
21
22 #include <Guid/SmBios.h>
23 #include <IndustryStandard/SmBios.h>
24 #include <Protocol/NetworkInterfaceIdentifier.h>
25 #include <Protocol/Arp.h>
26 #include <Protocol/Ip4.h>
27 #include <Protocol/Ip6.h>
28 #include <Protocol/Ip6Config.h>
29 #include <Protocol/Udp4.h>
30 #include <Protocol/Udp6.h>
31 #include <Protocol/Dhcp4.h>
32 #include <Protocol/Dhcp6.h>
33 #include <Protocol/Mtftp4.h>
34 #include <Protocol/Mtftp6.h>
35 #include <Protocol/PxeBaseCode.h>
36 #include <Protocol/LoadFile.h>
37 #include <Protocol/PxeBaseCodeCallBack.h>
38 #include <Protocol/ServiceBinding.h>
39 #include <Protocol/DriverBinding.h>
40
41 #include <Library/DebugLib.h>
42 #include <Library/BaseMemoryLib.h>
43 #include <Library/MemoryAllocationLib.h>
44 #include <Library/UefiDriverEntryPoint.h>
45 #include <Library/UefiBootServicesTableLib.h>
46 #include <Library/UefiLib.h>
47 #include <Library/BaseLib.h>
48 #include <Library/NetLib.h>
49 #include <Library/DpcLib.h>
50 #include <Library/DevicePathLib.h>
51 #include <Library/PcdLib.h>
52
53 typedef struct _PXEBC_PRIVATE_DATA PXEBC_PRIVATE_DATA;
54 typedef struct _PXEBC_VIRTUAL_NIC PXEBC_VIRTUAL_NIC;
55
56 #include "PxeBcDriver.h"
57 #include "PxeBcDhcp4.h"
58 #include "PxeBcDhcp6.h"
59 #include "PxeBcMtftp.h"
60 #include "PxeBcBoot.h"
61 #include "PxeBcSupport.h"
62
63 #define PXEBC_DEFAULT_HOPLIMIT 64
64 #define PXEBC_DEFAULT_LIFETIME 50000 // 50 ms, unit is microsecond
65 #define PXEBC_UDP_TIMEOUT 30000000 // 3 seconds, unit is 100nanosecond
66 #define PXEBC_MTFTP_TIMEOUT 4
67 #define PXEBC_MTFTP_RETRIES 6
68 #define PXEBC_DHCP_RETRIES 4 // refers to mPxeDhcpTimeout, also by PXE2.1 spec.
69 #define PXEBC_MENU_MAX_NUM 24
70 #define PXEBC_OFFER_MAX_NUM 16
71
72 #define PXEBC_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'P')
73 #define PXEBC_VIRTUAL_NIC_SIGNATURE SIGNATURE_32 ('P', 'X', 'E', 'V')
74 #define PXEBC_PRIVATE_DATA_FROM_PXEBC(a) CR (a, PXEBC_PRIVATE_DATA, PxeBc, PXEBC_PRIVATE_DATA_SIGNATURE)
75 #define PXEBC_VIRTUAL_NIC_FROM_LOADFILE(a) CR (a, PXEBC_VIRTUAL_NIC, LoadFile, PXEBC_VIRTUAL_NIC_SIGNATURE)
76
77 typedef union {
78 PXEBC_DHCP4_PACKET_CACHE Dhcp4;
79 PXEBC_DHCP6_PACKET_CACHE Dhcp6;
80 } PXEBC_DHCP_PACKET_CACHE;
81
82 struct _PXEBC_VIRTUAL_NIC {
83 UINT32 Signature;
84 EFI_HANDLE Controller;
85 EFI_LOAD_FILE_PROTOCOL LoadFile;
86 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
87 PXEBC_PRIVATE_DATA *Private;
88 };
89
90 struct _PXEBC_PRIVATE_DATA {
91 UINT32 Signature;
92 EFI_HANDLE Controller;
93 EFI_HANDLE Image;
94
95 PXEBC_VIRTUAL_NIC *Ip4Nic;
96 PXEBC_VIRTUAL_NIC *Ip6Nic;
97
98 EFI_HANDLE ArpChild;
99 EFI_HANDLE Ip4Child;
100 EFI_HANDLE Dhcp4Child;
101 EFI_HANDLE Mtftp4Child;
102 EFI_HANDLE Udp4ReadChild;
103 EFI_HANDLE Udp4WriteChild;
104
105 EFI_ARP_PROTOCOL *Arp;
106 EFI_IP4_PROTOCOL *Ip4;
107 EFI_DHCP4_PROTOCOL *Dhcp4;
108 EFI_MTFTP4_PROTOCOL *Mtftp4;
109 EFI_UDP4_PROTOCOL *Udp4Read;
110 EFI_UDP4_PROTOCOL *Udp4Write;
111
112 EFI_HANDLE Ip6Child;
113 EFI_HANDLE Dhcp6Child;
114 EFI_HANDLE Mtftp6Child;
115 EFI_HANDLE Udp6ReadChild;
116 EFI_HANDLE Udp6WriteChild;
117
118 EFI_IP6_PROTOCOL *Ip6;
119 EFI_IP6_CONFIG_PROTOCOL *Ip6Cfg;
120 EFI_DHCP6_PROTOCOL *Dhcp6;
121 EFI_MTFTP6_PROTOCOL *Mtftp6;
122 EFI_UDP6_PROTOCOL *Udp6Read;
123 EFI_UDP6_PROTOCOL *Udp6Write;
124
125 EFI_NETWORK_INTERFACE_IDENTIFIER_PROTOCOL *Nii;
126 EFI_PXE_BASE_CODE_PROTOCOL PxeBc;
127 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL LoadFileCallback;
128 EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL *PxeBcCallback;
129 EFI_DEVICE_PATH_PROTOCOL *DevicePath;
130
131 EFI_PXE_BASE_CODE_MODE Mode;
132 EFI_PXE_BASE_CODE_FUNCTION Function;
133 UINT32 Ip6Policy;
134
135 EFI_UDP4_CONFIG_DATA Udp4CfgData;
136 EFI_UDP6_CONFIG_DATA Udp6CfgData;
137 EFI_IP4_CONFIG_DATA Ip4CfgData;
138 EFI_IP6_CONFIG_DATA Ip6CfgData;
139
140 EFI_EVENT UdpTimeOutEvent;
141 EFI_EVENT ArpUpdateEvent;
142 EFI_IP4_COMPLETION_TOKEN IcmpToken;
143 EFI_IP6_COMPLETION_TOKEN Icmp6Token;
144
145 BOOLEAN IsAddressOk;
146 BOOLEAN IsOfferSorted;
147 BOOLEAN IsProxyRecved;
148 BOOLEAN IsDoDiscover;
149
150 EFI_IP_ADDRESS StationIp;
151 EFI_IP_ADDRESS SubnetMask;
152 EFI_IP_ADDRESS GatewayIp;
153 EFI_IP_ADDRESS ServerIp;
154 UINT16 CurSrcPort;
155
156 UINT32 Ip4MaxPacketSize;
157 UINT32 Ip6MaxPacketSize;
158 UINT8 *BootFileName;
159 UINTN BootFileSize;
160 UINTN BlockSize;
161
162 PXEBC_DHCP_PACKET_CACHE ProxyOffer;
163 PXEBC_DHCP_PACKET_CACHE DhcpAck;
164 PXEBC_DHCP_PACKET_CACHE PxeReply;
165 EFI_DHCP6_PACKET *Dhcp6Request;
166 EFI_DHCP4_PACKET SeedPacket;
167
168 //
169 // OfferIndex records the index of DhcpOffer[] buffer, and OfferCount records the num of each type of offer.
170 //
171 // It supposed that
172 //
173 // OfferNum: 8
174 // OfferBuffer: [ProxyBinl, ProxyBinl, DhcpOnly, ProxyPxe10, DhcpOnly, DhcpPxe10, DhcpBinl, ProxyBinl]
175 // (OfferBuffer is 0-based.)
176 //
177 // And assume that (DhcpPxe10 is the first priority actually.)
178 //
179 // SelectIndex: 2
180 // SelectProxyType: PXEBC_OFFER_TYPE_PROXY_BINL
181 // (SelectIndex is 1-based, and 0 means no one is selected.)
182 //
183 // So it should be
184 //
185 // DhcpOnly DhcpPxe10 DhcpWfm11a DhcpBinl ProxyPxe10 ProxyWfm11a ProxyBinl Bootp
186 // OfferCount: [ 2(n), 1(n), 0(n), 1(n), 1(1), 0(1), 3(n), 1(1)]
187 //
188 // OfferIndex: {[ 2, 5, 0, 6, 3, 0, *0, 0]
189 // [ 4, 0, 0, 0, 0, 0, 1, 0]
190 // [ 0, 0, 0, 0, 0, 0, 7, 0]
191 // ... ]}
192 // (OfferIndex is 0-based.)
193 //
194 //
195 UINT32 SelectIndex;
196 UINT32 SelectProxyType;
197 PXEBC_DHCP_PACKET_CACHE OfferBuffer[PXEBC_OFFER_MAX_NUM];
198 UINT32 OfferNum;
199 UINT32 OfferCount[PxeOfferTypeMax];
200 UINT32 OfferIndex[PxeOfferTypeMax][PXEBC_OFFER_MAX_NUM];
201 };
202
203 extern EFI_PXE_BASE_CODE_PROTOCOL gPxeBcProtocolTemplate;
204 extern EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL gPxeBcCallBackTemplate;
205 extern EFI_LOAD_FILE_PROTOCOL gLoadFileProtocolTemplate;
206
207 #endif