16ae81428485020dd371eaefa5b97b24f21efe117klu/** @file 25f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 38f2a5f8012e3a6de30f5b12ce3a218efae9eaeddhhtian Copyright (c) 2010, Apple, Inc. All rights reserved.<BR> 48f2a5f8012e3a6de30f5b12ce3a218efae9eaeddhhtian Copyright (c) 2011, Intel Corporation. All rights reserved.<BR> 55f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 65f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This program and the accompanying materials 75f44f5b9bb21baefa954c0c36b5e86957ee68b86klu are licensed and made available under the terms and conditions of the BSD License 85f44f5b9bb21baefa954c0c36b5e86957ee68b86klu which accompanies this distribution. The full text of the license may be found at 95f44f5b9bb21baefa954c0c36b5e86957ee68b86klu http://opensource.org/licenses/bsd-license.php 105f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 115f44f5b9bb21baefa954c0c36b5e86957ee68b86klu THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 125f44f5b9bb21baefa954c0c36b5e86957ee68b86klu WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 145f44f5b9bb21baefa954c0c36b5e86957ee68b86kluModule Name: 155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnp.c 175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 185f44f5b9bb21baefa954c0c36b5e86957ee68b86kluAbstract: 195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu-**/ 215f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 225f44f5b9bb21baefa954c0c36b5e86957ee68b86klu#include "EmuSnpDxe.h" 235f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 265f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_SIMPLE_NETWORK_PROTOCOL gEmuSnpTemplate = { 275f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_SIMPLE_NETWORK_PROTOCOL_REVISION, 285f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpStart, 295f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpStop, 305f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpInitialize, 315f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpReset, 325f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpShutdown, 335f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpReceiveFilters, 345f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpStationAddress, 355f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpStatistics, 365f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpMcastIptoMac, 375f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpNvdata, 385f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpGetStatus, 395f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpTransmit, 405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpReceive, 415f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NULL, // WaitForPacket 425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NULL // Mode 435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu }; 445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 455f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_SIMPLE_NETWORK_MODE gEmuSnpModeTemplate = { 466ae81428485020dd371eaefa5b97b24f21efe117klu EfiSimpleNetworkStopped, // State 475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NET_ETHER_ADDR_LEN, // HwAddressSize 485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NET_ETHER_HEADER_SIZE, // MediaHeaderSize 495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1500, // MaxPacketSize 505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 0, // NvRamSize 515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 0, // NvRamAccessSize 525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 0, // ReceiveFilterMask 535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 0, // ReceiveFilterSetting 545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu MAX_MCAST_FILTER_CNT, // MaxMCastFilterCount 555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 0, // MCastFilterCount 565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu { 575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu { { 0 } } 585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu }, // MCastFilter 5982408a47c9a982ceea9290dfe2d38ece14d8c867xli { 6082408a47c9a982ceea9290dfe2d38ece14d8c867xli { 0 } 6182408a47c9a982ceea9290dfe2d38ece14d8c867xli }, // CurrentAddress 6282408a47c9a982ceea9290dfe2d38ece14d8c867xli { 6382408a47c9a982ceea9290dfe2d38ece14d8c867xli { 0 } 645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu }, // BroadcastAddress 65ff72001b5b0e581e53614015d93abd1107bee25bniruiyu { 66ff72001b5b0e581e53614015d93abd1107bee25bniruiyu { 0 } 67ff72001b5b0e581e53614015d93abd1107bee25bniruiyu }, // PermanentAddress 68ff72001b5b0e581e53614015d93abd1107bee25bniruiyu NET_IFTYPE_ETHERNET, // IfType 69ff72001b5b0e581e53614015d93abd1107bee25bniruiyu FALSE, // MacAddressChangeable 70ff72001b5b0e581e53614015d93abd1107bee25bniruiyu FALSE, // MultipleTxSupported 71ff72001b5b0e581e53614015d93abd1107bee25bniruiyu FALSE, // MediaPresentSupported 72ff72001b5b0e581e53614015d93abd1107bee25bniruiyu TRUE // MediaPresent 73ff72001b5b0e581e53614015d93abd1107bee25bniruiyu}; 74ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 75ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 76ff72001b5b0e581e53614015d93abd1107bee25bniruiyu/** 77ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Changes the state of a network interface from "stopped" to "started". 78ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 79ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @param This Protocol instance pointer. 80ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 81ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @retval EFI_SUCCESS Always succeeds. 82ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 83ff72001b5b0e581e53614015d93abd1107bee25bniruiyu**/ 84ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFI_STATUS 85ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFIAPI 86ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEmuSnpStart( 87ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN EFI_SIMPLE_NETWORK_PROTOCOL *This 88ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ) 89ff72001b5b0e581e53614015d93abd1107bee25bniruiyu{ 90ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EFI_STATUS Status; 91ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EMU_SNP_PRIVATE_DATA *Private; 92ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 93ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 94ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 95ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Status = Private->Io->Start (Private->Io); 96ff72001b5b0e581e53614015d93abd1107bee25bniruiyu return Status; 97ff72001b5b0e581e53614015d93abd1107bee25bniruiyu} 98ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 99ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 100ff72001b5b0e581e53614015d93abd1107bee25bniruiyu/** 101ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Changes the state of a network interface from "started" to "stopped". 102ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 103ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @param This Protocol instance pointer. 104ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 105ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @retval EFI_SUCCESS Always succeeds. 106ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 107ff72001b5b0e581e53614015d93abd1107bee25bniruiyu**/ 108ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFI_STATUS 109ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFIAPI 1105f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpStop ( 1115f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SIMPLE_NETWORK_PROTOCOL *This 1125f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 1135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 1145f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 1155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_SNP_PRIVATE_DATA *Private; 1165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 1185f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->Io->Stop (Private->Io); 1205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 1215f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 1225f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1235f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 1255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Resets a network adapter and allocates the transmit and receive buffers 1265f44f5b9bb21baefa954c0c36b5e86957ee68b86klu required by the network interface; optionally, also requests allocation 1275f44f5b9bb21baefa954c0c36b5e86957ee68b86klu of additional transmit and receive buffers. 1285f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1295f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 1305f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ExtraRxBufferSize The size, in bytes, of the extra receive buffer space 13104369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang that the driver should allocate for the network interface. 1325f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Some network interfaces will not be able to use the extra 1335f44f5b9bb21baefa954c0c36b5e86957ee68b86klu buffer, and the caller will not know if it is actually 1345f44f5b9bb21baefa954c0c36b5e86957ee68b86klu being used. 1355f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ExtraTxBufferSize The size, in bytes, of the extra transmit buffer space 1365f44f5b9bb21baefa954c0c36b5e86957ee68b86klu that the driver should allocate for the network interface. 13704369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang Some network interfaces will not be able to use the extra 1385f44f5b9bb21baefa954c0c36b5e86957ee68b86klu buffer, and the caller will not know if it is actually 1395f44f5b9bb21baefa954c0c36b5e86957ee68b86klu being used. 1405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1415f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS Always succeeds. 1425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 1445f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 1455f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 1465f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpInitialize ( 1475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 1485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN UINTN ExtraRxBufferSize OPTIONAL, 1495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN UINTN ExtraTxBufferSize OPTIONAL 1505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 1515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 1525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 1535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_SNP_PRIVATE_DATA *Private; 1545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 1565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->Io->Initialize (Private->Io, ExtraRxBufferSize, ExtraTxBufferSize); 1585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 1595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 1605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1615f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 1625f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Resets a network adapter and re-initializes it with the parameters that were 1635f44f5b9bb21baefa954c0c36b5e86957ee68b86klu provided in the previous call to Initialize(). 1645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 1655f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 1665f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ExtendedVerification Indicates that the driver may perform a more 1675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu exhaustive verification operation of the device 1685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu during reset. 169ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 170ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @retval EFI_SUCCESS Always succeeds. 171ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 172ff72001b5b0e581e53614015d93abd1107bee25bniruiyu**/ 173ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFI_STATUS 174ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFIAPI 175ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEmuSnpReset ( 176ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 177ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN BOOLEAN ExtendedVerification 178e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney ) 1795f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 1805f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 181f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff EMU_SNP_PRIVATE_DATA *Private; 182f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 183f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 184f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 185f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Status = Private->Io->Reset (Private->Io, ExtendedVerification); 186f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff return Status; 187f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff} 188f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 189f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff/** 190f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Resets a network adapter and leaves it in a state that is safe for 191f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff another driver to initialize. 192f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 193f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param This Protocol instance pointer. 194f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 195f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_SUCCESS Always succeeds. 196f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 197f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff**/ 198f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeffEFI_STATUS 199f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeffEFIAPI 200f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeffEmuSnpShutdown ( 201f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff IN EFI_SIMPLE_NETWORK_PROTOCOL *This 202f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff ) 203f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff{ 204f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff EFI_STATUS Status; 205f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff EMU_SNP_PRIVATE_DATA *Private; 206f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 207f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 208f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 209f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Status = Private->Io->Shutdown (Private->Io); 210f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff return Status; 211f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff} 212f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 213f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff/** 214f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Manages the multicast receive filters of a network interface. 215f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 216f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param This Protocol instance pointer. 217f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param EnableBits A bit mask of receive filters to enable on the network interface. 218f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param DisableBits A bit mask of receive filters to disable on the network interface. 219ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @param ResetMcastFilter Set to TRUE to reset the contents of the multicast receive 220ff72001b5b0e581e53614015d93abd1107bee25bniruiyu filters on the network interface to their default values. 221ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @param McastFilterCount Number of multicast HW MAC addresses in the new 222ff72001b5b0e581e53614015d93abd1107bee25bniruiyu MCastFilter list. This value must be less than or equal to 223ff72001b5b0e581e53614015d93abd1107bee25bniruiyu the MCastFilterCnt field of EFI_SIMPLE_NETWORK_MODE. This 224ff72001b5b0e581e53614015d93abd1107bee25bniruiyu field is optional if ResetMCastFilter is TRUE. 225ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @param McastFilter A pointer to a list of new multicast receive filter HW MAC 226ff72001b5b0e581e53614015d93abd1107bee25bniruiyu addresses. This list will replace any existing multicast 227ff72001b5b0e581e53614015d93abd1107bee25bniruiyu HW MAC address list. This field is optional if 228ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ResetMCastFilter is TRUE. 229ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 230f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_SUCCESS The multicast receive filter list was updated. 231f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_DEVICE_ERROR The command could not be sent to the network interface. 232f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 233f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff**/ 2345f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 2355f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 2365f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpReceiveFilters ( 2375f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 238f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff IN UINT32 EnableBits, 239f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff IN UINT32 DisableBits, 2405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN BOOLEAN ResetMcastFilter, 2415f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN UINTN McastFilterCount OPTIONAL, 2425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_MAC_ADDRESS *McastFilter OPTIONAL 2435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 2445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 245ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EFI_STATUS Status; 246ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EMU_SNP_PRIVATE_DATA *Private; 247ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 248ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 249ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 250ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Status = Private->Io->ReceiveFilters ( 251ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Private->Io, 252ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EnableBits, 253ff72001b5b0e581e53614015d93abd1107bee25bniruiyu DisableBits, 254ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ResetMcastFilter, 255ff72001b5b0e581e53614015d93abd1107bee25bniruiyu McastFilterCount, 256ff72001b5b0e581e53614015d93abd1107bee25bniruiyu McastFilter 257ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ); 258ff72001b5b0e581e53614015d93abd1107bee25bniruiyu return Status; 259ff72001b5b0e581e53614015d93abd1107bee25bniruiyu} 260ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 261ff72001b5b0e581e53614015d93abd1107bee25bniruiyu/** 262ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Modifies or resets the current station address, if supported. 263ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 264ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @param This Protocol instance pointer. 265e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney @param Reset Flag used to reset the station address to the network interfaces 266e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney permanent address. 267e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney @param NewMacAddr New station address to be used for the network interface. 268e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney 269e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney @retval EFI_UNSUPPORTED Not supported yet. 270ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 271ff72001b5b0e581e53614015d93abd1107bee25bniruiyu**/ 272ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFI_STATUS 273ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEFIAPI 274ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEmuSnpStationAddress ( 275ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 276ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN BOOLEAN Reset, 277ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN EFI_MAC_ADDRESS *NewMacAddr OPTIONAL 278ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ) 279ff72001b5b0e581e53614015d93abd1107bee25bniruiyu{ 280e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney EFI_STATUS Status; 281e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney EMU_SNP_PRIVATE_DATA *Private; 282e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney 283e74c3676e651f79d27afa986c5837eb1e103fe84mdkinney Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 284ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 285ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Status = Private->Io->StationAddress (Private->Io, Reset, NewMacAddr); 286ff72001b5b0e581e53614015d93abd1107bee25bniruiyu return Status; 287ff72001b5b0e581e53614015d93abd1107bee25bniruiyu} 288ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 289ff72001b5b0e581e53614015d93abd1107bee25bniruiyu/** 2905f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Resets or collects the statistics on a network interface. 2915f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 2925f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 2935f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param Reset Set to TRUE to reset the statistics for the network interface. 2945f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param StatisticsSize On input the size, in bytes, of StatisticsTable. On 2955f44f5b9bb21baefa954c0c36b5e86957ee68b86klu output the size, in bytes, of the resulting table of 296f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff statistics. 297af4a63857cd189964cc2c6b53b54483efaba78a3vanjeff @param StatisticsTable A pointer to the EFI_NETWORK_STATISTICS structure that 298f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff contains the statistics. 2995f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3005f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS The statistics were collected from the network interface. 301f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_NOT_STARTED The network interface has not been started. 3025f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_BUFFER_TOO_SMALL The Statistics buffer was too small. The current buffer 3035f44f5b9bb21baefa954c0c36b5e86957ee68b86klu size needed to hold the statistics is returned in 3045f44f5b9bb21baefa954c0c36b5e86957ee68b86klu StatisticsSize. 3055f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_UNSUPPORTED Not supported yet. 306f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 307f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff**/ 308f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeffEFI_STATUS 3095f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 3105f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpStatistics ( 311f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 312f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff IN BOOLEAN Reset, 3135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN OUT UINTN *StatisticsSize OPTIONAL, 3145f44f5b9bb21baefa954c0c36b5e86957ee68b86klu OUT EFI_NETWORK_STATISTICS *StatisticsTable OPTIONAL 3155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 3165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 3175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 3185f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_SNP_PRIVATE_DATA *Private; 3195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 3215f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3225f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->Io->Statistics (Private->Io, Reset, StatisticsSize, StatisticsTable); 3235f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 3245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 3255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 326f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff/** 327f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Converts a multicast IP address to a multicast HW MAC address. 328f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 329f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param This Protocol instance pointer. 330f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param Ipv6 Set to TRUE if the multicast IP address is IPv6 [RFC 2460]. Set 331f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff to FALSE if the multicast IP address is IPv4 [RFC 791]. 332f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param Ip The multicast IP address that is to be converted to a multicast 333f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff HW MAC address. 334f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param Mac The multicast HW MAC address that is to be generated from IP. 335f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 3365f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS The multicast IP address was mapped to the multicast 3375f44f5b9bb21baefa954c0c36b5e86957ee68b86klu HW MAC address. 3385f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_NOT_STARTED The network interface has not been started. 3395f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_BUFFER_TOO_SMALL The Statistics buffer was too small. The current buffer 3405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu size needed to hold the statistics is returned in 3415f44f5b9bb21baefa954c0c36b5e86957ee68b86klu StatisticsSize. 3425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_UNSUPPORTED Not supported yet. 3435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 3455f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 3465f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 3475f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpMcastIptoMac ( 3485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 3495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN BOOLEAN Ipv6, 3505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_IP_ADDRESS *Ip, 351f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff OUT EFI_MAC_ADDRESS *Mac 3525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 3535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 3545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 3555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_SNP_PRIVATE_DATA *Private; 3565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 3585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->Io->MCastIpToMac (Private->Io, Ipv6, Ip, Mac); 3605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 3615f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 3625f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3635f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 3655f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Performs read and write operations on the NVRAM device attached to a 3665f44f5b9bb21baefa954c0c36b5e86957ee68b86klu network interface. 3675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 3695f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ReadOrWrite TRUE for read operations, FALSE for write operations. 3705f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param Offset Byte offset in the NVRAM device at which to start the read or 3715f44f5b9bb21baefa954c0c36b5e86957ee68b86klu write operation. This must be a multiple of NvRamAccessSize and 3725f44f5b9bb21baefa954c0c36b5e86957ee68b86klu less than NvRamSize. 3735f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param BufferSize The number of bytes to read or write from the NVRAM device. 3745f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This must also be a multiple of NvramAccessSize. 3755f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param Buffer A pointer to the data buffer. 3765f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3775f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_UNSUPPORTED Not supported yet. 3785f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3795f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 3805f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 3815f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 3825f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpNvdata ( 3835f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 3845f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN BOOLEAN ReadOrWrite, 385ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN UINTN Offset, 3865f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN UINTN BufferSize, 3875f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN OUT VOID *Buffer 3885f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 3895f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 3905f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 391ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EMU_SNP_PRIVATE_DATA *Private; 392ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 393ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 394ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 395ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Status = Private->Io->NvData (Private->Io, ReadOrWrite, Offset, BufferSize, Buffer); 3965f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 3975f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 3985f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 3995f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4005f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 401ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Reads the current interrupt status and recycled transmit buffer status from 4025f44f5b9bb21baefa954c0c36b5e86957ee68b86klu a network interface. 4035f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4045f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 4055f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param InterruptStatus A pointer to the bit mask of the currently active interrupts 4066394182967f63d4a97a1c882861d9958657112bbqwang If this is NULL, the interrupt status will not be read from 4075f44f5b9bb21baefa954c0c36b5e86957ee68b86klu the device. If this is not NULL, the interrupt status will 4085f44f5b9bb21baefa954c0c36b5e86957ee68b86klu be read from the device. When the interrupt status is read, 4095f44f5b9bb21baefa954c0c36b5e86957ee68b86klu it will also be cleared. Clearing the transmit interrupt 4105f44f5b9bb21baefa954c0c36b5e86957ee68b86klu does not empty the recycled transmit buffer array. 4115f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param TxBuffer Recycled transmit buffer address. The network interface will 4125f44f5b9bb21baefa954c0c36b5e86957ee68b86klu not transmit if its internal recycled transmit buffer array 4135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu is full. Reading the transmit buffer does not clear the 4145f44f5b9bb21baefa954c0c36b5e86957ee68b86klu transmit interrupt. If this is NULL, then the transmit buffer 4155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu status will not be read. If there are no transmit buffers to 4165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu recycle and TxBuf is not NULL, * TxBuf will be set to NULL. 4175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4185f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS Always succeeds. 4195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 4216394182967f63d4a97a1c882861d9958657112bbqwangEFI_STATUS 4225f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 4235f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpGetStatus ( 4245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 4255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu OUT UINT32 *InterruptStatus, 4265f44f5b9bb21baefa954c0c36b5e86957ee68b86klu OUT VOID **TxBuffer 4275f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 4285f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 4295f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 4305f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_SNP_PRIVATE_DATA *Private; 4315f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4325f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 4335f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4345f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->Io->GetStatus (Private->Io, InterruptStatus, TxBuffer); 4355f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 4365f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 4375f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 438f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 439f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff/** 440f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Places a packet in the transmit queue of a network interface. 441f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 4425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 4435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param HeaderSize The size, in bytes, of the media header to be filled in by 4445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu the Transmit() function. If HeaderSize is non-zero, then it 4455f44f5b9bb21baefa954c0c36b5e86957ee68b86klu must be equal to This->Mode->MediaHeaderSize and the DestAddr 4465f44f5b9bb21baefa954c0c36b5e86957ee68b86klu and Protocol parameters must not be NULL. 4475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param BufferSize The size, in bytes, of the entire packet (media header and 4485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu data) to be transmitted through the network interface. 4495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param Buffer A pointer to the packet (media header followed by data) to be 4505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu transmitted. This parameter cannot be NULL. If HeaderSize is zero, 4515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu then the media header in Buffer must already be filled in by the 4525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu caller. If HeaderSize is non-zero, then the media header will be 4535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu filled in by the Transmit() function. 4545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param SrcAddr The source HW MAC address. If HeaderSize is zero, then this parameter 4555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu is ignored. If HeaderSize is non-zero and SrcAddr is NULL, then 4565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->Mode->CurrentAddress is used for the source HW MAC address. 4575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param DestAddr The destination HW MAC address. If HeaderSize is zero, then this 4585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu parameter is ignored. 4595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param Protocol The type of header to build. If HeaderSize is zero, then this 4605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu parameter is ignored. See RFC 1700, section "Ether Types", for 461ff72001b5b0e581e53614015d93abd1107bee25bniruiyu examples. 4625f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4635f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS The packet was placed on the transmit queue. 4645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_DEVICE_ERROR The command could not be sent to the network interface. 4656394182967f63d4a97a1c882861d9958657112bbqwang @retval EFI_INVALID_PARAMETER One or more of the parameters has an unsupported value. 4665f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_NOT_STARTED The network interface has not been started. 4675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 4685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 4695f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 4705f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 471ff72001b5b0e581e53614015d93abd1107bee25bniruiyuEmuSnpTransmit ( 4725f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 473ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN UINTN HeaderSize, 474ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN UINTN BufferSize, 475ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN VOID* Buffer, 476ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN EFI_MAC_ADDRESS *SrcAddr OPTIONAL, 477ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN EFI_MAC_ADDRESS *DestAddr OPTIONAL, 478ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN UINT16 *Protocol OPTIONAL 479ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ) 480ff72001b5b0e581e53614015d93abd1107bee25bniruiyu{ 481ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EFI_STATUS Status; 482ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EMU_SNP_PRIVATE_DATA *Private; 483ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 484ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 485ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 486ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Status = Private->Io->Transmit ( 487ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Private->Io, 488ff72001b5b0e581e53614015d93abd1107bee25bniruiyu HeaderSize, 489ff72001b5b0e581e53614015d93abd1107bee25bniruiyu BufferSize, 490ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Buffer, 491ff72001b5b0e581e53614015d93abd1107bee25bniruiyu SrcAddr, 492ff72001b5b0e581e53614015d93abd1107bee25bniruiyu DestAddr, 493ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Protocol 494ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ); 495ff72001b5b0e581e53614015d93abd1107bee25bniruiyu return Status; 496ff72001b5b0e581e53614015d93abd1107bee25bniruiyu} 497ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 498ff72001b5b0e581e53614015d93abd1107bee25bniruiyu/** 4995f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Receives a packet from a network interface. 5005f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5015f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 5025f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param HeaderSize The size, in bytes, of the media header received on the network 5039be29006683dd5fa6c02059691735715d28070c7vanjeff interface. If this parameter is NULL, then the media header size 5045f44f5b9bb21baefa954c0c36b5e86957ee68b86klu will not be returned. 5059be29006683dd5fa6c02059691735715d28070c7vanjeff @param BuffSize On entry, the size, in bytes, of Buffer. On exit, the size, in 506f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff bytes, of the packet that was received on the network interface. 507f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param Buffer A pointer to the data buffer to receive both the media header and 508ff72001b5b0e581e53614015d93abd1107bee25bniruiyu the data. 509ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @param SourceAddr The source HW MAC address. If this parameter is NULL, the 510f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff HW MAC source address will not be extracted from the media 511f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff header. 512f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param DestinationAddr The destination HW MAC address. If this parameter is NULL, 513f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff the HW MAC destination address will not be extracted from the 514f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff media header. 515f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @param Protocol The media header type. If this parameter is NULL, then the 516ff72001b5b0e581e53614015d93abd1107bee25bniruiyu protocol will not be extracted from the media header. See 517ff72001b5b0e581e53614015d93abd1107bee25bniruiyu RFC 1700 section "Ether Types" for examples. 518ff72001b5b0e581e53614015d93abd1107bee25bniruiyu 519ff72001b5b0e581e53614015d93abd1107bee25bniruiyu @retval EFI_SUCCESS The received data was stored in Buffer, and BufferSize has 520f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff been updated to the number of bytes received. 521f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_NOT_READY The network interface is too busy to accept this transmit 522f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff request. 523f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_NOT_STARTED The network interface has not been started. 524f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_BUFFER_TOO_SMALL The BufferSize parameter is too small. 525f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff @retval EFI_DEVICE_ERROR The command could not be sent to the network interface. 526f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 527f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff**/ 528f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeffEFI_STATUS 529f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeffEFIAPI 530f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeffEmuSnpReceive ( 531ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN EFI_SIMPLE_NETWORK_PROTOCOL *This, 532ff72001b5b0e581e53614015d93abd1107bee25bniruiyu OUT UINTN *HeaderSize OPTIONAL, 533ff72001b5b0e581e53614015d93abd1107bee25bniruiyu IN OUT UINTN *BuffSize, 534ff72001b5b0e581e53614015d93abd1107bee25bniruiyu OUT VOID *Buffer, 535ff72001b5b0e581e53614015d93abd1107bee25bniruiyu OUT EFI_MAC_ADDRESS *SourceAddr OPTIONAL, 536ff72001b5b0e581e53614015d93abd1107bee25bniruiyu OUT EFI_MAC_ADDRESS *DestinationAddr OPTIONAL, 537ff72001b5b0e581e53614015d93abd1107bee25bniruiyu OUT UINT16 *Protocol OPTIONAL 538f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff ) 539f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff{ 540f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff EFI_STATUS Status; 541f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff EMU_SNP_PRIVATE_DATA *Private; 542f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 543f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (This); 544f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff 5455f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->Io->Receive ( 5465f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->Io, 5475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu HeaderSize, 5485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu BuffSize, 5495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Buffer, 5505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu SourceAddr, 5515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu DestinationAddr, 5525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Protocol 5535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 5545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 5555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 5565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 5605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Test to see if this driver supports ControllerHandle. This service 5615f44f5b9bb21baefa954c0c36b5e86957ee68b86klu is called by the EFI boot service ConnectController(). In 5625f44f5b9bb21baefa954c0c36b5e86957ee68b86klu order to make drivers as small as possible, there are a few calling 5635f44f5b9bb21baefa954c0c36b5e86957ee68b86klu restrictions for this service. ConnectController() must 5645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu follow these calling restrictions. If any other agent wishes to call 5655f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Supported() it must also follow these calling restrictions. 5665f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 5685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ControllerHandle Handle of device to test 5695f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param RemainingDevicePath Optional parameter use to pick a specific child 5705f44f5b9bb21baefa954c0c36b5e86957ee68b86klu device to start. 5715f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5725f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS This driver supports this device 5735f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_UNSUPPORTED This driver does not support this device 5745f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5755f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 5765f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 5775f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 5785f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpDriverBindingSupported ( 5795f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_DRIVER_BINDING_PROTOCOL *This, 5805f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_HANDLE ControllerHandle, 5815f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL 5825f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 5835f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 5845f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 5855f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_IO_THUNK_PROTOCOL *EmuIoThunk; 586ff72001b5b0e581e53614015d93abd1107bee25bniruiyu MAC_ADDR_DEVICE_PATH *Node; 5875f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; 5885f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 5895f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (RemainingDevicePath != NULL) { 5905f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (!IsDevicePathEnd (RemainingDevicePath)) { 591ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Node = (MAC_ADDR_DEVICE_PATH *)RemainingDevicePath; 592f22911b49e8be58d364f9e21f5af6bd3f0513cf7vanjeff if (Node->Header.Type != MESSAGING_DEVICE_PATH || 59304369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang Node->Header.SubType != MSG_MAC_ADDR_DP) { 5945f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // If the remaining device path does not match we don't support the request 5955f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return EFI_UNSUPPORTED; 5965f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 59704369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang } 59804369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang } 5995f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 60004369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang 60104369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang // 60204369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang // Open the IO Abstraction(s) needed to perform the supported test 60304369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang // 60404369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang Status = gBS->OpenProtocol ( 60504369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang ControllerHandle, 60604369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang &gEmuIoThunkProtocolGuid, 60704369cd8fc2523bd45dccb1f615f97c950ed3c63qhuang (VOID **)&EmuIoThunk, 6085f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 6095f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 6105f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_OPEN_PROTOCOL_BY_DRIVER 6115f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 6125f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 6135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 6145f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 6155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 6175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Close the I/O Abstraction(s) used to perform the supported test 6185f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 6195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu gBS->CloseProtocol ( 6205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 6215f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEmuIoThunkProtocolGuid, 6225f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 6235f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle 6245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 6255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6265f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 627ff72001b5b0e581e53614015d93abd1107bee25bniruiyu // 628ff72001b5b0e581e53614015d93abd1107bee25bniruiyu // Open the EFI Device Path protocol needed to perform the supported test 629ff72001b5b0e581e53614015d93abd1107bee25bniruiyu // 630ff72001b5b0e581e53614015d93abd1107bee25bniruiyu Status = gBS->OpenProtocol ( 631ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ControllerHandle, 632ff72001b5b0e581e53614015d93abd1107bee25bniruiyu &gEfiDevicePathProtocolGuid, 633ff72001b5b0e581e53614015d93abd1107bee25bniruiyu (VOID **) &ParentDevicePath, 634ff72001b5b0e581e53614015d93abd1107bee25bniruiyu This->DriverBindingHandle, 635ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ControllerHandle, 636ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EFI_OPEN_PROTOCOL_BY_DRIVER 637ff72001b5b0e581e53614015d93abd1107bee25bniruiyu ); 638ff72001b5b0e581e53614015d93abd1107bee25bniruiyu if (Status == EFI_ALREADY_STARTED) { 639ff72001b5b0e581e53614015d93abd1107bee25bniruiyu return EFI_SUCCESS; 6405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 6415f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 6435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 6445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 6455f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6465f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 6475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Make sure GUID is for a SNP handle. 6485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 6495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = EFI_UNSUPPORTED; 6505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (CompareGuid (EmuIoThunk->Protocol, &gEmuSnpProtocolGuid)) { 6515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = EFI_SUCCESS; 6525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 6535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 6555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Close protocol, don't use device path protocol in the Support() function 6565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 6575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu gBS->CloseProtocol ( 6585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 6595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiDevicePathProtocolGuid, 6605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 6615f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle 6625f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 6635f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 6655f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 6665f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 6695f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Start this driver on ControllerHandle. This service is called by the 6705f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI boot service ConnectController(). In order to make 6715f44f5b9bb21baefa954c0c36b5e86957ee68b86klu drivers as small as possible, there are a few calling restrictions for 6725f44f5b9bb21baefa954c0c36b5e86957ee68b86klu this service. ConnectController() must follow these 6735f44f5b9bb21baefa954c0c36b5e86957ee68b86klu calling restrictions. If any other agent wishes to call Start() it 6745f44f5b9bb21baefa954c0c36b5e86957ee68b86klu must also follow these calling restrictions. 6755f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6765f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 6775f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ControllerHandle Handle of device to bind driver to 6785f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param RemainingDevicePath Optional parameter use to pick a specific child 6795f44f5b9bb21baefa954c0c36b5e86957ee68b86klu device to start. 6805f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6815f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS Always succeeds. 6825f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6835f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 6845f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 6856394182967f63d4a97a1c882861d9958657112bbqwangEFIAPI 6865f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpDriverBindingStart ( 6875f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_DRIVER_BINDING_PROTOCOL *This, 6885f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_HANDLE ControllerHandle, 6895f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath OPTIONAL 6905f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 6915f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 6925f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 6935f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_IO_THUNK_PROTOCOL *EmuIoThunk; 6945f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_SNP_PRIVATE_DATA *Private; 6955f44f5b9bb21baefa954c0c36b5e86957ee68b86klu MAC_ADDR_DEVICE_PATH Node; 6965f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath; 6975f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 6985f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = NULL; 6995f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7005f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7015f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Grab the protocols we need 7025f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7035f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->OpenProtocol( 7045f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 7055f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiDevicePathProtocolGuid, 7065f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ( VOID ** ) &ParentDevicePath, 7075f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 7085f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 7095f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_OPEN_PROTOCOL_BY_DRIVER 7105f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 7115f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status) && Status) { 7125f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 7135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 7145f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->OpenProtocol ( 7165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 7175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEmuIoThunkProtocolGuid, 7185f44f5b9bb21baefa954c0c36b5e86957ee68b86klu (VOID **)&EmuIoThunk, 7195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 7205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 7215f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_OPEN_PROTOCOL_BY_DRIVER 7225f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 7235f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 7245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 7255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 7265f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7275f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (!CompareGuid (EmuIoThunk->Protocol, &gEmuSnpProtocolGuid)) { 7285f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return EFI_UNSUPPORTED; 7295f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 7305f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7315f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = EmuIoThunk->Open (EmuIoThunk); 7325f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 7335f44f5b9bb21baefa954c0c36b5e86957ee68b86klu goto Done; 7345f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 7355f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7365f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7375f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Allocate the private data. 7385f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7395f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = AllocateZeroPool (sizeof (EMU_SNP_PRIVATE_DATA)); 7405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (Private == NULL) { 7415f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = EFI_OUT_OF_RESOURCES; 7425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu goto Done; 7435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 7445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7455f44f5b9bb21baefa954c0c36b5e86957ee68b86klu CopyMem (&Private->Snp, &gEmuSnpTemplate, sizeof (EFI_SIMPLE_NETWORK_PROTOCOL)); 7465f44f5b9bb21baefa954c0c36b5e86957ee68b86klu CopyMem (&Private->Mode, &gEmuSnpModeTemplate, sizeof (EFI_SIMPLE_NETWORK_MODE)); 7475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->Signature = EMU_SNP_PRIVATE_DATA_SIGNATURE; 7495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->IoThunk = EmuIoThunk; 7505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->Io = EmuIoThunk->Interface; 7515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->EfiHandle = ControllerHandle; 7525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->DeviceHandle = NULL; 7535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->Snp.Mode = &Private->Mode; 7545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->ControllerNameTable = NULL; 7555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->Io->CreateMapping (Private->Io, &Private->Mode); 7585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 7595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu goto Done; 7605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 7615f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7625f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7635f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Build the device path by appending the MAC node to the ParentDevicePath 7645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // from the EmuIo handle. 7655f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7665f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ZeroMem (&Node, sizeof (MAC_ADDR_DEVICE_PATH)); 7675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Node.Header.Type = MESSAGING_DEVICE_PATH; 7695f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Node.Header.SubType = MSG_MAC_ADDR_DP; 7705f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Node.IfType = Private->Mode.IfType; 7715f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7725f44f5b9bb21baefa954c0c36b5e86957ee68b86klu SetDevicePathNodeLength ((EFI_DEVICE_PATH_PROTOCOL * )&Node, sizeof (MAC_ADDR_DEVICE_PATH)); 7735f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7745f44f5b9bb21baefa954c0c36b5e86957ee68b86klu CopyMem (&Node.MacAddress, &Private->Mode.CurrentAddress, sizeof (EFI_MAC_ADDRESS)); 7755f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7765f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7775f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Build the device path by appending the MAC node to the ParentDevicePath from the EmuIo handle. 7785f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 7795f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->DevicePath = AppendDevicePathNode (ParentDevicePath, (EFI_DEVICE_PATH_PROTOCOL *)&Node); 7805f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if ( Private->DevicePath == NULL ) { 7815f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = EFI_OUT_OF_RESOURCES; 7825f44f5b9bb21baefa954c0c36b5e86957ee68b86klu goto Done; 7835f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 7845f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7855f44f5b9bb21baefa954c0c36b5e86957ee68b86klu AddUnicodeString2 ( 7865f44f5b9bb21baefa954c0c36b5e86957ee68b86klu "eng", 7875f44f5b9bb21baefa954c0c36b5e86957ee68b86klu gEmuSnpDriverComponentName.SupportedLanguages, 7886394182967f63d4a97a1c882861d9958657112bbqwang &Private->ControllerNameTable, 7895f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuIoThunk->ConfigString, 7905f44f5b9bb21baefa954c0c36b5e86957ee68b86klu TRUE 7915f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 7925f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 7935f44f5b9bb21baefa954c0c36b5e86957ee68b86klu AddUnicodeString2 ( 7945f44f5b9bb21baefa954c0c36b5e86957ee68b86klu "en", 7955f44f5b9bb21baefa954c0c36b5e86957ee68b86klu gEmuSnpDriverComponentName2.SupportedLanguages, 7965f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &Private->ControllerNameTable, 7975f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuIoThunk->ConfigString, 7985f44f5b9bb21baefa954c0c36b5e86957ee68b86klu FALSE 7995f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 8005f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8015f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8025f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Create Child Handle 8035f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8045f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->InstallMultipleProtocolInterfaces( 8055f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &Private->DeviceHandle, 8065f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiSimpleNetworkProtocolGuid, &Private->Snp, 8075f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiDevicePathProtocolGuid, Private->DevicePath, 8085f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NULL 8095f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 8105f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 8115f44f5b9bb21baefa954c0c36b5e86957ee68b86klu goto Done; 8125f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 8135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8145f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Open For Child Device 8165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->OpenProtocol ( 8185f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 8195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEmuIoThunkProtocolGuid, 8205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu (VOID **)&EmuIoThunk, 8215f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 8225f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->DeviceHandle, 8235f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 8245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 8255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8265f44f5b9bb21baefa954c0c36b5e86957ee68b86kluDone: 8275f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 8285f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (Private != NULL) { 8295f44f5b9bb21baefa954c0c36b5e86957ee68b86klu FreePool (Private); 8305f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 8315f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (ParentDevicePath != NULL) { 8325f44f5b9bb21baefa954c0c36b5e86957ee68b86klu gBS->CloseProtocol( 8335f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 8345f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiDevicePathProtocolGuid, 8355f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 8365f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle 8375f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 8385f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 8395f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 8405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8415f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 8425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu} 8435f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 8455f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Stop this driver on ControllerHandle. This service is called by the 8465f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI boot service DisconnectController(). In order to 8475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu make drivers as small as possible, there are a few calling 8485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu restrictions for this service. DisconnectController() 8495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu must follow these calling restrictions. If any other agent wishes 8505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu to call Stop() it must also follow these calling restrictions. 8515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param This Protocol instance pointer. 8535f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ControllerHandle Handle of device to stop driver on 8545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param NumberOfChildren Number of Handles in ChildHandleBuffer. If number of 8555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu children is zero stop the entire bus driver. 8565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ChildHandleBuffer List of Child Handles to Stop. 8575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS Always succeeds. 8595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 8615f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 8625f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFIAPI 8635f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEmuSnpDriverBindingStop ( 8645f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_DRIVER_BINDING_PROTOCOL *This, 8655f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_HANDLE ControllerHandle, 8665f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN UINTN NumberOfChildren, 8675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_HANDLE *ChildHandleBuffer 8685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ) 8695f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 8705f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 8715f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EMU_SNP_PRIVATE_DATA *Private = NULL; 8725f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_SIMPLE_NETWORK_PROTOCOL *Snp; 8735f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8745f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8755f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Complete all outstanding transactions to Controller. 8765f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Don't allow any new transaction to Controller to be started. 8775f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8785f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (NumberOfChildren == 0) { 8795f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8805f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Close the bus driver 8815f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 8825f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->CloseProtocol ( 8835f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 8845f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEmuIoThunkProtocolGuid, 8855f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 8865f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle 8875f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 8885f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8895f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->CloseProtocol ( 890a00ec39b52224a40bf9a0a813b69cb43e14407a8mdkinney ControllerHandle, 8915f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiDevicePathProtocolGuid, 892a00ec39b52224a40bf9a0a813b69cb43e14407a8mdkinney This->DriverBindingHandle, 8935f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle 8945f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 8955f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return Status; 8965f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 8975f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 8985f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ASSERT (NumberOfChildren == 1); 8995f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9005f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9015f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 9025f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Get our context back. 9035f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // 9045f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->OpenProtocol( 9055f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ChildHandleBuffer[0], 9065f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiSimpleNetworkProtocolGuid, 9075f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ( VOID ** ) &Snp, 9085f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 9095f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ControllerHandle, 9105f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_OPEN_PROTOCOL_GET_PROTOCOL 9115f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 9125f44f5b9bb21baefa954c0c36b5e86957ee68b86klu if (EFI_ERROR (Status)) { 9135f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return EFI_DEVICE_ERROR; 9145f44f5b9bb21baefa954c0c36b5e86957ee68b86klu } 9155f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9165f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private = EMU_SNP_PRIVATE_DATA_FROM_SNP_THIS (Snp); 9175f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = Private->IoThunk->Close (Private->IoThunk); 9185f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9195f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->CloseProtocol( 9205f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ChildHandleBuffer[0], 9215f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEmuIoThunkProtocolGuid, 9225f44f5b9bb21baefa954c0c36b5e86957ee68b86klu This->DriverBindingHandle, 9235f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Private->DeviceHandle 9245f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 9255f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9265f44f5b9bb21baefa954c0c36b5e86957ee68b86klu Status = gBS->UninstallMultipleProtocolInterfaces( 9275f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ChildHandleBuffer[0], 9285f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiSimpleNetworkProtocolGuid, &Private->Snp, 9295f44f5b9bb21baefa954c0c36b5e86957ee68b86klu &gEfiDevicePathProtocolGuid, Private->DevicePath, 9305f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NULL 9315f44f5b9bb21baefa954c0c36b5e86957ee68b86klu ); 9325f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9335f44f5b9bb21baefa954c0c36b5e86957ee68b86klu FreePool (Private->DevicePath); 9345f44f5b9bb21baefa954c0c36b5e86957ee68b86klu FreeUnicodeStringTable (Private->ControllerNameTable); 9355f44f5b9bb21baefa954c0c36b5e86957ee68b86klu FreePool (Private); 9365f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9375f44f5b9bb21baefa954c0c36b5e86957ee68b86klu return EFI_SUCCESS; 93882408a47c9a982ceea9290dfe2d38ece14d8c867xli} 9395f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9405f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9415f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_DRIVER_BINDING_PROTOCOL gEmuSnpDriverBinding = { 9425f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpDriverBindingSupported, 943ff72001b5b0e581e53614015d93abd1107bee25bniruiyu EmuSnpDriverBindingStart, 9445f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EmuSnpDriverBindingStop, 9455f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 0xA, 9465f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NULL, 9475f44f5b9bb21baefa954c0c36b5e86957ee68b86klu NULL 9485f44f5b9bb21baefa954c0c36b5e86957ee68b86klu}; 9495f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9505f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9515f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9525f44f5b9bb21baefa954c0c36b5e86957ee68b86klu/** 953f7c58a94cf72eb00f0931c89d935a164abaadf50mdkinney This is the declaration of an EFI image entry point. This entry point is 9545f44f5b9bb21baefa954c0c36b5e86957ee68b86klu the same for UEFI Applications, UEFI OS Loaders, and UEFI Drivers including 9555f44f5b9bb21baefa954c0c36b5e86957ee68b86klu both device drivers and bus drivers. 9565f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9575f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param ImageHandle The firmware allocated handle for the UEFI image. 9585f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @param SystemTable A pointer to the EFI System Table. 9595f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9605f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_SUCCESS The operation completed successfully. 9615f44f5b9bb21baefa954c0c36b5e86957ee68b86klu @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources. 9625f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 9635f44f5b9bb21baefa954c0c36b5e86957ee68b86klu**/ 9645f44f5b9bb21baefa954c0c36b5e86957ee68b86kluEFI_STATUS 965f7c58a94cf72eb00f0931c89d935a164abaadf50mdkinneyEFIAPI 9665f44f5b9bb21baefa954c0c36b5e86957ee68b86kluInitializeEmuSnpDriver ( 9675f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_HANDLE ImageHandle, 9685f44f5b9bb21baefa954c0c36b5e86957ee68b86klu IN EFI_SYSTEM_TABLE *SystemTable 969f7c58a94cf72eb00f0931c89d935a164abaadf50mdkinney ) 9705f44f5b9bb21baefa954c0c36b5e86957ee68b86klu{ 9715f44f5b9bb21baefa954c0c36b5e86957ee68b86klu EFI_STATUS Status; 9725f44f5b9bb21baefa954c0c36b5e86957ee68b86klu 973f7c58a94cf72eb00f0931c89d935a164abaadf50mdkinney // 9745f44f5b9bb21baefa954c0c36b5e86957ee68b86klu // Install the Driver Protocols 97582408a47c9a982ceea9290dfe2d38ece14d8c867xli // 97682408a47c9a982ceea9290dfe2d38ece14d8c867xli Status = EfiLibInstallDriverBindingComponentName2( 97782408a47c9a982ceea9290dfe2d38ece14d8c867xli ImageHandle, 97882408a47c9a982ceea9290dfe2d38ece14d8c867xli SystemTable, 97982408a47c9a982ceea9290dfe2d38ece14d8c867xli &gEmuSnpDriverBinding, 98082408a47c9a982ceea9290dfe2d38ece14d8c867xli ImageHandle, 98182408a47c9a982ceea9290dfe2d38ece14d8c867xli &gEmuSnpDriverComponentName, 98282408a47c9a982ceea9290dfe2d38ece14d8c867xli &gEmuSnpDriverComponentName2 98382408a47c9a982ceea9290dfe2d38ece14d8c867xli ); 98482408a47c9a982ceea9290dfe2d38ece14d8c867xli 98582408a47c9a982ceea9290dfe2d38ece14d8c867xli return Status; 98682408a47c9a982ceea9290dfe2d38ece14d8c867xli} 98782408a47c9a982ceea9290dfe2d38ece14d8c867xli