3 Copyright (c) 2005 - 2008, 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 IN MNP_SERVICE_DATA
*MnpServiceData
,
109 IN EFI_HANDLE ImageHandle
113 MnpInitializeInstanceData (
114 IN MNP_SERVICE_DATA
*MnpServiceData
,
115 IN MNP_INSTANCE_DATA
*Instance
121 IN NET_MAP_ITEM
*Item
,
128 IN NET_MAP_ITEM
*Item
,
133 MnpFlushRcvdDataQueue (
134 IN MNP_INSTANCE_DATA
*Instance
138 MnpConfigureInstance (
139 IN MNP_INSTANCE_DATA
*Instance
,
140 IN EFI_MANAGED_NETWORK_CONFIG_DATA
*ConfigData OPTIONAL
145 IN MNP_INSTANCE_DATA
*Instance
,
147 IN EFI_MAC_ADDRESS
*MacAddr OPTIONAL
,
148 IN MNP_GROUP_CONTROL_BLOCK
*CtrlBlk OPTIONAL
153 IN MNP_INSTANCE_DATA
*Instance
,
154 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
159 IN MNP_SERVICE_DATA
*MnpServiceData
,
160 IN EFI_MANAGED_NETWORK_TRANSMIT_DATA
*TxData
,
167 IN MNP_SERVICE_DATA
*MnpServiceData
,
170 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
174 MnpInstanceDeliverPacket (
175 IN MNP_INSTANCE_DATA
*Instance
187 IN MNP_SERVICE_DATA
*MnpServiceData
192 IN MNP_SERVICE_DATA
*MnpServiceData
197 IN MNP_SERVICE_DATA
*MnpServiceData
,
203 MnpCheckPacketTimeout (
218 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
219 OUT EFI_MANAGED_NETWORK_CONFIG_DATA
*MnpConfigData OPTIONAL
,
220 OUT EFI_SIMPLE_NETWORK_MODE
*SnpModeData OPTIONAL
226 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
227 IN EFI_MANAGED_NETWORK_CONFIG_DATA
*MnpConfigData OPTIONAL
233 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
235 IN EFI_IP_ADDRESS
*IpAddress
,
236 OUT EFI_MAC_ADDRESS
*MacAddress
242 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
244 IN EFI_MAC_ADDRESS
*MacAddress OPTIONAL
250 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
251 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
257 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
258 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token OPTIONAL
264 IN EFI_MANAGED_NETWORK_PROTOCOL
*This
,
265 IN EFI_MANAGED_NETWORK_COMPLETION_TOKEN
*Token
271 IN EFI_MANAGED_NETWORK_PROTOCOL
*This