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"
27 #define NET_ETHER_FCS_SIZE 4
29 #define MNP_SYS_POLL_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
30 #define MNP_TIMEOUT_CHECK_INTERVAL (50 * TICKS_PER_MS) // 50 milliseconds
31 #define MNP_TX_TIMEOUT_TIME (500 * TICKS_PER_MS) // 500 milliseconds
32 #define MNP_INIT_NET_BUFFER_NUM 512
33 #define MNP_NET_BUFFER_INCREASEMENT 64
34 #define MNP_MAX_NET_BUFFER_NUM 65536
36 #define MNP_MAX_RCVD_PACKET_QUE_SIZE 256
38 #define MNP_RECEIVE_UNICAST 0x01
39 #define MNP_RECEIVE_BROADCAST 0x02
41 #define UNICAST_PACKET MNP_RECEIVE_UNICAST
42 #define BROADCAST_PACKET MNP_RECEIVE_BROADCAST
44 #define MNP_INSTANCE_DATA_SIGNATURE EFI_SIGNATURE_32 ('M', 'n', 'p', 'I')
46 #define MNP_INSTANCE_DATA_FROM_THIS(a) \
51 MNP_INSTANCE_DATA_SIGNATURE \
54 typedef struct _MNP_INSTANCE_DATA
{
57 MNP_SERVICE_DATA
*MnpServiceData
;
61 NET_LIST_ENTRY InstEntry
;
63 EFI_MANAGED_NETWORK_PROTOCOL ManagedNetwork
;
68 NET_LIST_ENTRY GroupCtrlBlkList
;
72 NET_LIST_ENTRY RxDeliveredPacketQueue
;
73 NET_LIST_ENTRY RcvdPacketQueue
;
74 UINTN RcvdPacketQueueSize
;
76 EFI_MANAGED_NETWORK_CONFIG_DATA ConfigData
;
81 typedef struct _MNP_GROUP_ADDRESS
{
82 NET_LIST_ENTRY AddrEntry
;
83 EFI_MAC_ADDRESS Address
;
87 typedef struct _MNP_GROUP_CONTROL_BLOCK
{
88 NET_LIST_ENTRY CtrlBlkEntry
;
89 MNP_GROUP_ADDRESS
*GroupAddress
;
90 } MNP_GROUP_CONTROL_BLOCK
;
92 typedef struct _MNP_RXDATA_WRAP
{
93 NET_LIST_ENTRY WrapEntry
;
94 MNP_INSTANCE_DATA
*Instance
;
95 EFI_MANAGED_NETWORK_RECEIVE_DATA RxData
;
101 MnpInitializeServiceData (
102 IN MNP_SERVICE_DATA
*MnpServiceData
,
103 IN EFI_HANDLE ImageHandle
,
104 IN EFI_HANDLE ControllerHandle
108 MnpFlushServiceData (
109 MNP_SERVICE_DATA
*MnpServiceData
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