3 Copyright (c) 2005 - 2007, Intel Corporation
4 All rights reserved. This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
24 #include "MnpDriver.h"
26 #define NET_ETHER_FCS_SIZE 4
28 #define MNP_SYS_POLL_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
29 #define MNP_TIMEOUT_CHECK_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
30 #define MNP_TX_TIMEOUT_TIME (500 * TICKS_PER_MS) // 500 milliseconds
31 #define MNP_INIT_NET_BUFFER_NUM 512
32 #define MNP_NET_BUFFER_INCREASEMENT 64
33 #define MNP_MAX_NET_BUFFER_NUM 65536
35 #define MNP_MAX_RCVD_PACKET_QUE_SIZE 256
37 #define MNP_RECEIVE_UNICAST 0x01
38 #define MNP_RECEIVE_BROADCAST 0x02
40 #define UNICAST_PACKET MNP_RECEIVE_UNICAST
41 #define BROADCAST_PACKET MNP_RECEIVE_BROADCAST
43 #define MNP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32 ('M', 'n', 'p', 'I')
45 #define MNP_INSTANCE_DATA_FROM_THIS(a) \
50 MNP_INSTANCE_DATA_SIGNATURE \
53 typedef struct _MNP_INSTANCE_DATA
{
56 MNP_SERVICE_DATA
*MnpServiceData
;
62 EFI_MANAGED_NETWORK_PROTOCOL ManagedNetwork
;
67 LIST_ENTRY GroupCtrlBlkList
;
71 LIST_ENTRY RxDeliveredPacketQueue
;
72 LIST_ENTRY RcvdPacketQueue
;
73 UINTN RcvdPacketQueueSize
;
75 EFI_MANAGED_NETWORK_CONFIG_DATA ConfigData
;
80 typedef struct _MNP_GROUP_ADDRESS
{
82 EFI_MAC_ADDRESS Address
;
86 typedef struct _MNP_GROUP_CONTROL_BLOCK
{
87 LIST_ENTRY CtrlBlkEntry
;
88 MNP_GROUP_ADDRESS
*GroupAddress
;
89 } MNP_GROUP_CONTROL_BLOCK
;
91 typedef struct _MNP_RXDATA_WRAP
{
93 MNP_INSTANCE_DATA
*Instance
;
94 EFI_MANAGED_NETWORK_RECEIVE_DATA RxData
;
100 MnpInitializeServiceData (
101 IN MNP_SERVICE_DATA
*MnpServiceData
,
102 IN EFI_HANDLE ImageHandle
,
103 IN EFI_HANDLE ControllerHandle
107 MnpFlushServiceData (
108 MNP_SERVICE_DATA
*MnpServiceData
112 MnpInitializeInstanceData (
113 IN MNP_SERVICE_DATA
*MnpServiceData
,
114 IN MNP_INSTANCE_DATA
*Instance
120 IN NET_MAP_ITEM
*Item
,
127 IN NET_MAP_ITEM
*Item
,
132 MnpFlushRcvdDataQueue (
133 IN MNP_INSTANCE_DATA
*Instance
137 MnpConfigureInstance (
138 IN MNP_INSTANCE_DATA
*Instance
,
139 IN EFI_MANAGED_NETWORK_CONFIG_DATA
*ConfigData OPTIONAL
144 IN MNP_INSTANCE_DATA
*Instance
,
146 IN EFI_MAC_ADDRESS
*MacAddr OPTIONAL
,
147 IN MNP_GROUP_CONTROL_BLOCK
*CtrlBlk OPTIONAL
152 IN MNP_INSTANCE_DATA
*Instance
,
153 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
158 IN MNP_SERVICE_DATA
*MnpServiceData
,
159 IN EFI_MANAGED_NETWORK_TRANSMIT_DATA
*TxData
,
166 IN MNP_SERVICE_DATA
*MnpServiceData
,
169 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
173 MnpInstanceDeliverPacket (
174 IN MNP_INSTANCE_DATA
*Instance
186 IN MNP_SERVICE_DATA
*MnpServiceData
191 IN MNP_SERVICE_DATA
*MnpServiceData
196 IN MNP_SERVICE_DATA
*MnpServiceData
,
202 MnpCheckPacketTimeout (
217 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
218 OUT EFI_MANAGED_NETWORK_CONFIG_DATA
*MnpConfigData OPTIONAL
,
219 OUT EFI_SIMPLE_NETWORK_MODE
*SnpModeData OPTIONAL
225 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
226 IN EFI_MANAGED_NETWORK_CONFIG_DATA
*MnpConfigData OPTIONAL
232 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
234 IN EFI_IP_ADDRESS
*IpAddress
,
235 OUT EFI_MAC_ADDRESS
*MacAddress
241 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
243 IN EFI_MAC_ADDRESS
*MacAddress OPTIONAL
249 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
250 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
256 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
257 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token OPTIONAL
263 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
264 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
270 IN EFI_MANAGED_NETWORK_PROTOCOL
*This