From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mx.groups.io with SMTP id smtpd.web10.4763.1591662976178612609 for ; Mon, 08 Jun 2020 17:36:16 -0700 Authentication-Results: mx.groups.io; dkim=missing; spf=pass (domain: intel.com, ip: 192.55.52.88, mailfrom: ray.ni@intel.com) IronPort-SDR: kI1zHt0d1Jf1fnFjLgo6agA3Z3PnO9pyj7gSzB2qLsxGFs0AuMPujONYhVv3ptWFL45xZpcmu9 xyaon8XxPo7w== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Jun 2020 17:36:15 -0700 IronPort-SDR: nND74yHRQFPZ+GobPV7Oq+DloCYxaeOaRkSsceikDNJTGhep3kuRXl18bOGtWkysl/RFCimmc8 1R+Np0Yseo+Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,489,1583222400"; d="scan'208";a="270710400" Received: from fmsmsx105.amr.corp.intel.com ([10.18.124.203]) by orsmga003.jf.intel.com with ESMTP; 08 Jun 2020 17:36:14 -0700 Received: from shsmsx103.ccr.corp.intel.com (10.239.4.69) by FMSMSX105.amr.corp.intel.com (10.18.124.203) with Microsoft SMTP Server (TLS) id 14.3.439.0; Mon, 8 Jun 2020 17:36:13 -0700 Received: from shsmsx104.ccr.corp.intel.com ([169.254.5.161]) by SHSMSX103.ccr.corp.intel.com ([10.239.4.69]) with mapi id 14.03.0439.000; Tue, 9 Jun 2020 08:36:09 +0800 From: "Ni, Ray" To: Samer El-Haj-Mahmoud , "devel@edk2.groups.io" CC: Leif Lindholm , Ard Biesheuvel , "Kinney, Michael D" Subject: Re: [edk2-platform][PATCH v3 6/6] Drivers/OptionRomPkg: Remove old ASIX NIC drivers Thread-Topic: [edk2-platform][PATCH v3 6/6] Drivers/OptionRomPkg: Remove old ASIX NIC drivers Thread-Index: AQHWPZoupv6xiaP1UEGS7QkjlpwftajPcJpQ Date: Tue, 9 Jun 2020 00:36:08 +0000 Deferred-Delivery: Tue, 9 Jun 2020 00:36:00 +0000 Message-ID: <734D49CCEBEEF84792F5B80ED585239D5C5A48FE@SHSMSX104.ccr.corp.intel.com> References: <20200608133832.14100-1-Samer.El-Haj-Mahmoud@arm.com> <20200608133832.14100-7-Samer.El-Haj-Mahmoud@arm.com> In-Reply-To: <20200608133832.14100-7-Samer.El-Haj-Mahmoud@arm.com> Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.2.0.6 dlp-reaction: no-action x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Return-Path: ray.ni@intel.com Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Ray Ni > -----Original Message----- > From: Samer El-Haj-Mahmoud > Sent: Monday, June 8, 2020 9:39 PM > To: devel@edk2.groups.io > Cc: Ni, Ray ; Leif Lindholm ; Ard Bi= esheuvel ; Kinney, > Michael D > Subject: [edk2-platform][PATCH v3 6/6] Drivers/OptionRomPkg: Remove old A= SIX NIC drivers >=20 > Remove the olf ASIX Ax88772 and Ax88772b USB networking drivers. > These are now replaced with the new version of the driver (Ax88772c) > under Drivers/ASIX/Bus/Usb/UsbNetworking/Ax88772c >=20 > Cc: Ray Ni > Cc: Leif Lindholm > Cc: Ard Biesheuvel > Cc: Michael D Kinney >=20 > Signed-off-by: Samer El-Haj-Mahmoud > --- > Drivers/OptionRomPkg/OptionRomPkg.dsc | = 3 +- > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.inf | = 61 - > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b.inf | = 61 - > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.h | 9= 69 ------------ > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h | 10= 26 ------------ > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.c | 13= 18 ---------------- > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/ComponentName.c | 1= 78 --- > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/DriverBinding.c | 5= 07 ------ > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/SimpleNetwork.c | 15= 03 ------------------ > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c | 8= 75 ----------- > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/ComponentName.c | 1= 75 --- > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c | 6= 96 -------- > Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/SimpleNetwork.c | 16= 57 -------------------- > 13 files changed, 1 insertion(+), 9028 deletions(-) >=20 > diff --git a/Drivers/OptionRomPkg/OptionRomPkg.dsc b/Drivers/OptionRomPkg= /OptionRomPkg.dsc > index bea64b585ec6..8a13cc54e6ae 100644 > --- a/Drivers/OptionRomPkg/OptionRomPkg.dsc > +++ b/Drivers/OptionRomPkg/OptionRomPkg.dsc > @@ -8,6 +8,7 @@ > # > # Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.
> # Copyright (c) 2016, Linaro Ltd. All rights reserved.
> +# Copyright (c) 2020, ARM Limited. All rights reserved. > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -106,8 +107,6 @@ [Components] > OptionRomPkg/CirrusLogic5430Dxe/CirrusLogic5430Dxe.inf > OptionRomPkg/UndiRuntimeDxe/UndiRuntimeDxe.inf > OptionRomPkg/Bus/Usb/FtdiUsbSerialDxe/FtdiUsbSerialDxe.inf > - OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.inf > - OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b.inf >=20 > [Components.IA32, Components.X64] > OptionRomPkg/Application/BltLibSample/BltLibSample.inf > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.i= nf > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.inf > deleted file mode 100644 > index 12e7ebc5a2cd..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.inf > +++ /dev/null > @@ -1,61 +0,0 @@ > -## @file > -# Component description file for ASIX AX88772 USB/Ethernet driver. > -# > -# This module provides support for the ASIX AX88772 USB/Ethernet adapter= . > -# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
> -# > -# SPDX-License-Identifier: BSD-2-Clause-Patent > -# > -## > - > -[Defines] > - INF_VERSION =3D 0x00010018 > - BASE_NAME =3D Ax88772 > - FILE_GUID =3D B15239D6-6A01-4808-A0F7-B7F20F07355= 5 > - MODULE_TYPE =3D DXE_RUNTIME_DRIVER > - VERSION_STRING =3D 1.0 > - > - ENTRY_POINT =3D EntryPoint > - > -# > -# VALID_ARCHITECTURES =3D IA32 X64 EBC > -# > - > -[Sources.common] > - Ax88772.h > - Ax88772.c > - ComponentName.c > - DriverBinding.c > - SimpleNetwork.c > - > - > -[Packages] > - MdePkg/MdePkg.dec > - MdeModulePkg/MdeModulePkg.dec > - > -[LibraryClasses] > - UefiLib > - UefiBootServicesTableLib > - BaseMemoryLib > - DebugLib > - UefiRuntimeLib > - UefiDriverEntryPoint > - > -[Protocols] > - gEfiDevicePathProtocolGuid ## BY_START > - gEfiSimpleNetworkProtocolGuid ## BY_START > - gEfiUsbIoProtocolGuid ## TO_START > - > -[Depex] > - gEfiBdsArchProtocolGuid AND > - gEfiCpuArchProtocolGuid AND > - gEfiMetronomeArchProtocolGuid AND > - gEfiMonotonicCounterArchProtocolGuid AND > - gEfiRealTimeClockArchProtocolGuid AND > - gEfiResetArchProtocolGuid AND > - gEfiRuntimeArchProtocolGuid AND > - gEfiSecurityArchProtocolGuid AND > - gEfiTimerArchProtocolGuid AND > - gEfiVariableWriteArchProtocolGuid AND > - gEfiVariableArchProtocolGuid AND > - gEfiWatchdogTimerArchProtocolGuid > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b= .inf > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b.inf > deleted file mode 100644 > index 60e43fd2756b..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772b.inf > +++ /dev/null > @@ -1,61 +0,0 @@ > -## @file > -# Component description file for ASIX AX88772 USB/Ethernet driver. > -# > -# This module provides support for the ASIX AX88772 USB/Ethernet adapter= . > -# Copyright (c) 2011 - 2018, Intel Corporation. All rights reserved.
> -# > -# SPDX-License-Identifier: BSD-2-Clause-Patent > -# > -## > - > -[Defines] > - INF_VERSION =3D 0x00010018 > - BASE_NAME =3D Ax88772b > - FILE_GUID =3D 95C8D770-E1A4-4422-B263-E32F14FD818= 6 > - MODULE_TYPE =3D DXE_RUNTIME_DRIVER > - VERSION_STRING =3D 1.0 > - > - ENTRY_POINT =3D EntryPoint > - > -# > -# VALID_ARCHITECTURES =3D IA32 X64 EBC > -# > - > -[Sources.common] > - Ax88772.h > - Ax88772.c > - ComponentName.c > - DriverBinding.c > - SimpleNetwork.c > - > - > -[Packages] > - MdePkg/MdePkg.dec > - MdeModulePkg/MdeModulePkg.dec > - > -[LibraryClasses] > - UefiLib > - UefiBootServicesTableLib > - BaseMemoryLib > - DebugLib > - UefiRuntimeLib > - UefiDriverEntryPoint > - > -[Protocols] > - gEfiDevicePathProtocolGuid ## BY_START > - gEfiSimpleNetworkProtocolGuid ## BY_START > - gEfiUsbIoProtocolGuid ## TO_START > - > -[Depex] > - gEfiBdsArchProtocolGuid AND > - gEfiCpuArchProtocolGuid AND > - gEfiMetronomeArchProtocolGuid AND > - gEfiMonotonicCounterArchProtocolGuid AND > - gEfiRealTimeClockArchProtocolGuid AND > - gEfiResetArchProtocolGuid AND > - gEfiRuntimeArchProtocolGuid AND > - gEfiSecurityArchProtocolGuid AND > - gEfiTimerArchProtocolGuid AND > - gEfiVariableWriteArchProtocolGuid AND > - gEfiVariableArchProtocolGuid AND > - gEfiWatchdogTimerArchProtocolGuid > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.h > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.h > deleted file mode 100644 > index 8840a4f46429..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.h > +++ /dev/null > @@ -1,969 +0,0 @@ > -/** @file > - Definitions for ASIX AX88772 Ethernet adapter. > - > - Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.
> - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#ifndef _AX88772_H_ > -#define _AX88772_H_ > - > -#include > - > -#include > - > -#include > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > -#include > -#include > -#include > -#include > -#include > - > -//----------------------------------------------------------------------= -------- > -// Macros > -//----------------------------------------------------------------------= -------- > -// > -//Too many output debug info hangs system in Debug tip > -// > -//#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler spec= ifics. */ > -//#define DBG_ENTER() DEBUG (( DEBUG_INFO, "Entering " __FUN= CTION__ "\n" )) ///< Display routine entry > -//#define DBG_EXIT() DEBUG (( DEBUG_INFO, "Exiting " __FUNC= TION__ "\n" )) ///< Display routine exit > -//#define DBG_EXIT_DEC(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNC= TION__ ", Status: %d\n", Status )) ///< > Display routine exit with decimal value > -//#define DBG_EXIT_HEX(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNC= TION__ ", Status: 0x%08x\n", Status )) ///< > Display routine exit with hex value > -//#define DBG_EXIT_STATUS(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNC= TION__ ", Status: %r\n", Status )) ///< > Display routine exit with status value > -//#define DBG_EXIT_TF(Status) DEBUG (( DEBUG_INFO, "Exiting " __FUNC= TION__ ", returning %s\n", (FALSE =3D=3D Status) ? > L"FALSE" : L"TRUE" )) ///< Display routine with TRUE/FALSE value > -//#else // _MSC_VER > -#define DBG_ENTER() ///< Display routine entry > -#define DBG_EXIT() ///< Display routine exit > -#define DBG_EXIT_DEC(Status) ///< Display routine exit with decima= l value > -#define DBG_EXIT_HEX(Status) ///< Display routine exit with hex va= lue > -#define DBG_EXIT_STATUS(Status) ///< Display routine exit with status= value > -#define DBG_EXIT_TF(Status) ///< Display routine with TRUE/FALSE = value > -//#endif // _MSC_VER > - > -#define USB_IS_IN_ENDPOINT(EndPointAddr) (((EndPointAddr) & BIT7) != =3D 0) ///< Return TRUE/FALSE for IN direction > -#define USB_IS_OUT_ENDPOINT(EndPointAddr) (((EndPointAddr) & BIT7) = =3D=3D 0) ///< Return TRUE/FALSE for OUT > direction > -#define USB_IS_BULK_ENDPOINT(Attribute) (((Attribute) & (BIT0 | BI= T1)) =3D=3D USB_ENDPOINT_BULK) ///< Return > TRUE/FALSE for BULK type > -#define USB_IS_INTERRUPT_ENDPOINT(Attribute) (((Attribute) & (BIT0 | BI= T1)) =3D=3D USB_ENDPOINT_INTERRUPT) ///< > Return TRUE/FALSE for INTERRUPT type > - > -//----------------------------------------------------------------------= -------- > -// Constants > -//----------------------------------------------------------------------= -------- > - > -#define DEBUG_RX_BROADCAST 0x40000000 ///< Display RX broadcast messa= ges > -#define DEBUG_RX_MULTICAST 0x20000000 ///< Display RX multicast messa= ges > -#define DEBUG_RX_UNICAST 0x10000000 ///< Display RX unicast message= s > -#define DEBUG_MAC_ADDRESS 0x08000000 ///< Display the MAC address > -#define DEBUG_LINK 0x04000000 ///< Display the link status > -#define DEBUG_TX 0x02000000 ///< Display the TX messages > -#define DEBUG_PHY 0x01000000 ///< Display the PHY register v= alues > -#define DEBUG_SROM 0x00800000 ///< Display the SROM contents > -#define DEBUG_TIMER 0x00400000 ///< Display the timer routine = entry/exit > -#define DEBUG_TPL 0x00200000 ///< Display the timer routine = entry/exit > - > -#define AX88772_MAX_PKT_SIZE ( 2048 - 4 ) ///< Maximum packet size > -#define ETHERNET_HEADER_SIZE sizeof ( ETHERNET_HEADER ) ///< Size in = bytes of the Ethernet header > -#define MIN_ETHERNET_PKT_SIZE 60 ///< Minimum packet size including = Ethernet header > -#define MAX_ETHERNET_PKT_SIZE 1500 ///< Ethernet spec 3.1.1: Minimum p= acket size > -#define MAX_BULKIN_SIZE 2048 ///< Maximum size of one UsbBulk > - > - > -#define USB_NETWORK_CLASS 0x09 ///< USB Network class code > -#define USB_BUS_TIMEOUT 1000 ///< USB timeout in milliseconds > - > -#define TIMER_MSEC 20 ///< Polling interval for t= he NIC > -#define TPL_AX88772 TPL_CALLBACK ///< TPL for routine synchr= onization > - > -/** > - Verify new TPL value > - > - This macro which is enabled when debug is enabled verifies that > - the new TPL value is >=3D the current TPL value. > -**/ > -#ifdef VERIFY_TPL > -#undef VERIFY_TPL > -#endif // VERIFY_TPL > - > -#if !defined(MDEPKG_NDEBUG) > - > -#define VERIFY_TPL(tpl) \ > -{ \ > - EFI_TPL PreviousTpl; \ > - \ > - PreviousTpl =3D gBS->RaiseTPL ( TPL_HIGH_LEVEL ); \ > - gBS->RestoreTPL ( PreviousTpl ); \ > - if ( PreviousTpl > tpl ) { \ > - DEBUG (( DEBUG_ERROR, "Current TPL: %d, New TPL: %d\r\n", PreviousTp= l, tpl )); \ > - ASSERT ( PreviousTpl <=3D tpl ); \ > - } \ > -} > - > -#else // MDEPKG_NDEBUG > - > -#define VERIFY_TPL(tpl) > - > -#endif // MDEPKG_NDEBUG > - > -//----------------------------------------------------------------------= -------- > -// Hardware Definition > -//----------------------------------------------------------------------= -------- > - > -#define DEV_SIGNATURE SIGNATURE_32 ('A','X','8','8') ///< Signatur= e of data structures in memory > - > -#define VENDOR_ID 0x0b95 ///< Vendor ID for Asix > -#define PRODUCT_ID 0x7720 ///< Product ID for the AX88772 USB 1= 0/100 Ethernet controller > - > -#define RESET_MSEC 1000 ///< Reset duration > -#define PHY_RESET_MSEC 500 ///< PHY reset duration > - > -// > -// RX Control register > -// > - > -#define RXC_PRO 0x0001 ///< Receive all packets > -#define RXC_AMALL 0x0002 ///< Receive all multicast packets > -#define RXC_SEP 0x0004 ///< Save error packets > -#define RXC_AB 0x0008 ///< Receive broadcast packets > -#define RXC_AM 0x0010 ///< Use multicast destination addres= s hash table > -#define RXC_AP 0x0020 ///< Accept physical address from Mul= ticast Filter > -#define RXC_SO 0x0080 ///< Start operation > -#define RXC_MFB 0x0300 ///< Maximum frame burst > -#define RXC_MFB_2048 0 ///< Maximum frame size: 2048 bytes > -#define RXC_MFB_4096 0x0100 ///< Maximum frame size: 4096 bytes > -#define RXC_MFB_8192 0x0200 ///< Maximum frame size: 8192 bytes > -#define RXC_MFB_16384 0x0300 ///< Maximum frame size: 16384 bytes > - > -// > -// Medium Status register > -// > - > -#define MS_FD 0x0002 ///< Full duplex > -#define MS_ONE 0x0004 ///< Must be one > -#define MS_RFC 0x0010 ///< RX flow control enable > -#define MS_TFC 0x0020 ///< TX flow control enable > -#define MS_PF 0x0080 ///< Pause frame enable > -#define MS_RE 0x0100 ///< Receive enable > -#define MS_PS 0x0200 ///< Port speed 1=3D100, 0=3D10 Mbps > -#define MS_SBP 0x0800 ///< Stop back pressure > -#define MS_SM 0x1000 ///< Super MAC support > - > -// > -// Software PHY Select register > -// > - > -#define SPHY_PSEL 0x01 ///< Select internal PHY > -#define SPHY_ASEL 0x02 ///< 1=3DAuto select, 0=3DManual sele= ct > - > -// > -// Software Reset register > -// > - > -#define SRR_RR 0x01 ///< Clear receive frame length error > -#define SRR_RT 0x02 ///< Clear transmit frame length erro= r > -#define SRR_PRTE 0x04 ///< External PHY reset pin tri-state= enable > -#define SRR_PRL 0x08 ///< External PHY reset pin level > -#define SRR_BZ 0x10 ///< Force Bulk to return zero length= packet > -#define SRR_IPRL 0x20 ///< Internal PHY reset control > -#define SRR_IPPD 0x40 ///< Internal PHY power down > - > -// > -// PHY ID values > -// > - > -#define PHY_ID_INTERNAL 0x0010 ///< Internal PHY > - > -// > -// USB Commands > -// > - > -#define CMD_PHY_ACCESS_SOFTWARE 0x06 ///< Software in control of PHY > -#define CMD_PHY_REG_READ 0x07 ///< Read PHY register, Value: = PHY, Index: Register, Data: Register value > -#define CMD_PHY_REG_WRITE 0x08 ///< Write PHY register, Value:= PHY, Index: Register, Data: New 16-bit value > -#define CMD_PHY_ACCESS_HARDWARE 0x0a ///< Hardware in control of PHY > -#define CMD_SROM_READ 0x0b ///< Read SROM register: Value:= Address, Data: Value > -#define CMD_RX_CONTROL_WRITE 0x10 ///< Set the RX control registe= r, Value: New value > -#define CMD_GAPS_WRITE 0x12 ///< Write the gaps register, V= alue: New value > -#define CMD_MAC_ADDRESS_READ 0x13 ///< Read the MAC address, Data= : 6 byte MAC address > -#define CMD_MAC_ADDRESS_WRITE 0x14 ///< Set the MAC address, Data:= New 6 byte MAC address > -#define CMD_MULTICAST_HASH_WRITE 0x16 ///< Write the multicast hash t= able, Data: New 8 byte value > -#define CMD_MEDIUM_STATUS_READ 0x1a ///< Read medium status registe= r, Data: Register value > -#define CMD_MEDIUM_STATUS_WRITE 0x1b ///< Write medium status regist= er, Value: New value > -#define CMD_RESET 0x20 ///< Reset register, Value: New= value > -#define CMD_PHY_SELECT 0x22 ///< PHY select register, Value= : New value > - > -//------------------------------ > -// USB Endpoints > -//------------------------------ > - > -#define CONTROL_ENDPOINT 0 ///< Control endpoint > -#define INTERRUPT_ENDPOINT 1 ///< Interrupt endpoint > -#define BULK_IN_ENDPOINT 2 ///< Receive endpoint > -#define BULK_OUT_ENDPOINT 3 ///< Transmit endpoint > - > -//------------------------------ > -// PHY Registers > -//------------------------------ > - > -#define PHY_BMCR 0 ///< Control register > -#define PHY_BMSR 1 ///< Status register > -#define PHY_ANAR 4 ///< Autonegotiation ad= vertisement register > -#define PHY_ANLPAR 5 ///< Autonegotiation li= nk parter ability register > -#define PHY_ANER 6 ///< Autonegotiation ex= pansion register > - > -// BMCR - Register 0 > - > -#define BMCR_RESET 0x8000 ///< 1 =3D Reset the PH= Y, bit clears after reset > -#define BMCR_LOOPBACK 0x4000 ///< 1 =3D Loopback ena= bled > -#define BMCR_100MBPS 0x2000 ///< 100 Mbits/Sec > -#define BMCR_10MBPS 0 ///< 10 Mbits/Sec > -#define BMCR_AUTONEGOTIATION_ENABLE 0x1000 ///< 1 =3D Enable auton= egotiation > -#define BMCR_POWER_DOWN 0x0800 ///< 1 =3D Power down > -#define BMCR_ISOLATE 0x0400 ///< 0 =3D Isolate PHY > -#define BMCR_RESTART_AUTONEGOTIATION 0x0200 ///< 1 =3D Restart auto= negotiation > -#define BMCR_FULL_DUPLEX 0x0100 ///< Full duplex operat= ion > -#define BMCR_HALF_DUPLEX 0 ///< Half duplex operat= ion > -#define BMCR_COLLISION_TEST 0x0080 ///< 1 =3D Collision te= st enabled > - > -// BSMR - Register 1 > - > -#define BMSR_100BASET4 0x8000 ///< 1 =3D 100BASE-T4 m= ode > -#define BMSR_100BASETX_FDX 0x4000 ///< 1 =3D 100BASE-TX f= ull duplex > -#define BMSR_100BASETX_HDX 0x2000 ///< 1 =3D 100BASE-TX h= alf duplex > -#define BMSR_10BASET_FDX 0x1000 ///< 1 =3D 10BASE-T ful= l duplex > -#define BMSR_10BASET_HDX 0x0800 ///< 1 =3D 10BASE-T hal= f duplex > -#define BMSR_MF 0x0040 ///< 1 =3D PHY accepts = frames with preamble suppressed > -#define BMSR_AUTONEG_CMPLT 0x0020 ///< 1 =3D Autonegotiat= ion complete > -#define BMSR_RF 0x0010 ///< 1 =3D Remote fault > -#define BMSR_AUTONEG 0x0008 ///< 1 =3D Able to perf= orm autonegotiation > -#define BMSR_LINKST 0x0004 ///< 1 =3D Link up > -#define BMSR_JABBER_DETECT 0x0002 ///< 1 =3D jabber condi= tion detected > -#define BMSR_EXTENDED_CAPABILITY 0x0001 ///< 1 =3D Extended reg= ister capable > - > -// ANAR and ANLPAR Registers 4, 5 > - > -#define AN_NP 0x8000 ///< 1 =3D Next page av= ailable > -#define AN_ACK 0x4000 ///< 1 =3D Link partner= acknowledged > -#define AN_RF 0x2000 ///< 1 =3D Remote fault= indicated by link partner > -#define AN_FCS 0x0400 ///< 1 =3D Flow control= ability > -#define AN_T4 0x0200 ///< 1 =3D 100BASE-T4 s= upport > -#define AN_TX_FDX 0x0100 ///< 1 =3D 100BASE-TX F= ull duplex > -#define AN_TX_HDX 0x0080 ///< 1 =3D 100BASE-TX s= upport > -#define AN_10_FDX 0x0040 ///< 1 =3D 10BASE-T Ful= l duplex > -#define AN_10_HDX 0x0020 ///< 1 =3D 10BASE-T sup= port > -#define AN_CSMA_CD 0x0001 ///< 1 =3D IEEE 802.3 C= SMA/CD support > - > -//----------------------------------------------------------------------= -------- > -// Data Types > -//----------------------------------------------------------------------= -------- > - > -/** > - Ethernet header layout > - > - IEEE 802.3-2002 Part 3 specification, section 3.1.1. > -**/ > -#pragma pack(1) > -typedef struct { > - UINT8 dest_addr[PXE_HWADDR_LEN_ETHER]; ///< Destination LAN address > - UINT8 src_addr[PXE_HWADDR_LEN_ETHER]; ///< Source LAN address > - UINT16 type; ///< Protocol or length > -} ETHERNET_HEADER; > -#pragma pack() > - > -/** > - Receive and Transmit packet structure > -**/ > -#pragma pack(1) > -typedef struct _RX_TX_PACKET { > - struct _RX_TX_PACKET * pNext; ///< Next receive packet > - UINT16 Length; ///< Packet length > - UINT16 LengthBar; ///< Complement of the length > - UINT8 Data[ AX88772_MAX_PKT_SIZE ]; ///< Received packet data > -} RX_TX_PACKET; > -#pragma pack() > - > -/** > - AX88772 control structure > - > - The driver uses this structure to manage the Asix AX88772 10/100 > - Ethernet controller. > -**/ > -typedef struct { > - UINTN Signature; ///< Structure identification > - > - // > - // USB data > - // > - EFI_HANDLE Controller; ///< Controller handle > - EFI_USB_IO_PROTOCOL * pUsbIo; ///< USB driver interface > - > - // > - // Simple network protocol data > - // > - EFI_SIMPLE_NETWORK_PROTOCOL SimpleNetwork; ///< Driver's network sta= ck interface > - EFI_SIMPLE_NETWORK_MODE SimpleNetworkData; ///< Data for simple netw= ork > - > - // > - // Ethernet controller data > - // > - BOOLEAN bInitialized; ///< Controller initialized > - VOID * pTxBuffer; ///< Last transmit buffer > - UINT16 PhyId; ///< PHY ID > - > - // > - // Link state > - // > - BOOLEAN b100Mbps; ///< Current link speed, FALSE =3D 10 Mbps > - BOOLEAN bComplete; ///< Current state of auto-negotiation > - BOOLEAN bFullDuplex; ///< Current duplex > - BOOLEAN bLinkUp; ///< Current link state > - BOOLEAN bLinkIdle; ///< TRUE =3D No received traffic > - EFI_EVENT Timer; ///< Timer to monitor link state and receiv= e packets > - UINTN PollCount; ///< Number of times the autonegotiation st= atus was polled > - > - // > - // Receive buffer list > - // > - RX_TX_PACKET * pRxHead; ///< Head of receive packet list > - RX_TX_PACKET * pRxTail; ///< Tail of receive packet list > - RX_TX_PACKET * pRxFree; ///< Free packet list > - INT32 MulticastHash[2]; ///< Hash table for multicast destination a= ddresses > - UINT8 * pBulkInBuff; ///< Buffer for Usb Bulk > -} NIC_DEVICE; > - > -#define DEV_FROM_SIMPLE_NETWORK(a) CR (a, NIC_DEVICE, SimpleNetwork, DE= V_SIGNATURE) ///< Locate NIC_DEVICE > from Simple Network Protocol > - > -//----------------------------------------------------------------------= -------- > -// Simple Network Protocol > -//----------------------------------------------------------------------= -------- > - > -/** > - Reset the network adapter. > - > - Resets a network adapter and reinitializes it with the parameters that > - were provided in the previous call to Initialize (). The transmit and > - receive queues are cleared. Receive filters, the station address, the > - statistics, and the multicast-IP-to-HW MAC addresses are not reset by > - this call. > - > - This routine calls ::Ax88772Reset to perform the adapter specific > - reset operation. This routine also starts the link negotiation > - by calling ::Ax88772NegotiateLinkStart. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bExtendedVerification Indicates that the driver may perfo= rm a more > - exhaustive verification operation of the= device > - during reset. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Reset ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bExtendedVerification > - ); > - > -/** > - Initialize the simple network protocol. > - > - This routine calls ::Ax88772MacAddressGet to obtain the > - MAC address. > - > - @param [in] pNicDevice NIC_DEVICE_INSTANCE pointer > - > - @retval EFI_SUCCESS Setup was successful > - > -**/ > -EFI_STATUS > -SN_Setup ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - This routine starts the network interface. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_ALREADY_STARTED The network interface was already starte= d. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Start ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ); > - > -/** > - Set the MAC address. > - > - This function modifies or resets the current station address of a > - network interface. If Reset is TRUE, then the current station address > - is set ot the network interface's permanent address. If Reset if FALS= E > - then the current station address is changed to the address specified b= y > - pNew. > - > - This routine calls ::Ax88772MacAddressSet to update the MAC address > - in the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Flag used to reset the station address t= o the > - network interface's permanent address. > - @param [in] pNew New station address to be used for the n= etwork > - interface. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_StationAddress ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN EFI_MAC_ADDRESS * pNew > - ); > - > -/** > - This function resets or collects the statistics on a network interface= . > - If the size of the statistics table specified by StatisticsSize is not > - big enough for all of the statistics that are collected by the network > - interface, then a partial buffer of statistics is returned in > - StatisticsTable. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Set to TRUE to reset the statistics for = the network interface. > - @param [in, out] pStatisticsSize On input the size, in bytes, of Stat= isticsTable. On output > - the size, in bytes, of the resulting tab= le of statistics. > - @param [out] pStatisticsTable A pointer to the EFI_NETWORK_STATISTICS = structure that > - conains the statistics. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_BUFFER_TOO_SMALL The pStatisticsTable is NULL or the buff= er is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Statistics ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN OUT UINTN * pStatisticsSize, > - OUT EFI_NETWORK_STATISTICS * pStatisticsTable > - ); > - > -/** > - This function stops a network interface. This call is only valid > - if the network interface is in the started state. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Stop ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ); > - > -/** > - This function releases the memory buffers assigned in the Initialize()= call. > - Pending transmits and receives are lost, and interrupts are cleared an= d disabled. > - After this call, only Initialize() and Stop() calls may be used. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Shutdown ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ); > - > -/** > - Send a packet over the network. > - > - This function places the packet specified by Header and Buffer on > - the transmit queue. This function performs a non-blocking transmit > - operation. When the transmit is complete, the buffer is returned > - via the GetStatus() call. > - > - This routine calls ::Ax88772Rx to empty the network adapter of > - receive packets. The routine then passes the transmit packet > - to the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] HeaderSize The size, in bytes, of the media header = to be filled in by > - the Transmit() function. If HeaderSize = is non-zero, then > - it must be equal to SimpleNetwork->Mode-= >MediaHeaderSize > - and DestAddr and Protocol parameters mus= t not be NULL. > - @param [in] BufferSize The size, in bytes, of the entire packet= (media header and > - data) to be transmitted through the netw= ork interface. > - @param [in] pBuffer A pointer to the packet (media header fo= llowed by data) to > - to be transmitted. This parameter can n= ot be NULL. If > - HeaderSize is zero, then the media heade= r is Buffer must > - already be filled in by the caller. If = HeaderSize is nonzero, > - then the media header will be filled in = by the Transmit() > - function. > - @param [in] pSrcAddr The source HW MAC address. If HeaderSiz= e is zero, then > - this parameter is ignored. If HeaderSiz= e is nonzero and > - SrcAddr is NULL, then SimpleNetwork->Mod= e->CurrentAddress > - is used for the source HW MAC address. > - @param [in] pDestAddr The destination HW MAC address. If Head= erSize is zero, then > - this parameter is ignored. > - @param [in] pProtocol The type of header to build. If HeaderS= ize is zero, then > - this parameter is ignored. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_NOT_READY The network interface is too busy to acc= ept this transmit request. > - @retval EFI_BUFFER_TOO_SMALL The BufferSize parameter is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Transmit ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN HeaderSize, > - IN UINTN BufferSize, > - IN VOID * pBuffer, > - IN EFI_MAC_ADDRESS * pSrcAddr, > - IN EFI_MAC_ADDRESS * pDestAddr, > - IN UINT16 * pProtocol > - ); > - > -//----------------------------------------------------------------------= -------- > -// Support Routines > -//----------------------------------------------------------------------= -------- > - > -/** > - Get the MAC address > - > - This routine calls ::Ax88772UsbCommand to request the MAC > - address from the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [out] pMacAddress Address of a six byte buffer to receive = the MAC address. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressGet ( > - IN NIC_DEVICE * pNicDevice, > - OUT UINT8 * pMacAddress > - ); > - > -/** > - Set the MAC address > - > - This routine calls ::Ax88772UsbCommand to set the MAC address > - in the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the new MAC address. > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ); > - > -/** > - Clear the multicast hash table > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > -**/ > -VOID > -Ax88772MulticastClear ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - Enable a multicast address in the multicast hash table > - > - This routine calls ::Ax88772Crc to compute the hash bit for > - this MAC address. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the MAC address. > - > -**/ > -VOID > -Ax88772MulticastSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ); > - > -/** > - Start the link negotiation > - > - This routine calls ::Ax88772PhyWrite to start the PHY's link > - negotiation. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The link negotiation was started. > - @retval other Failed to start the link negotiation. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkStart ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - Complete the negotiation of the PHY link > - > - This routine calls ::Ax88772PhyRead to determine if the > - link negotiation is complete. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in, out] pPollCount Address of number of times this routine w= as polled > - @param [out] pbComplete Address of boolean to receive complate st= atus. > - @param [out] pbLinkUp Address of boolean to receive link status= , TRUE=3Dup. > - @param [out] pbHiSpeed Address of boolean to receive link speed,= TRUE=3D100Mbps. > - @param [out] pbFullDuplex Address of boolean to receive link duplex= , TRUE=3Dfull. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkComplete ( > - IN NIC_DEVICE * pNicDevice, > - IN OUT UINTN * pPollCount, > - OUT BOOLEAN * pbComplete, > - OUT BOOLEAN * pbLinkUp, > - OUT BOOLEAN * pbHiSpeed, > - OUT BOOLEAN * pbFullDuplex > - ); > - > -/** > - Read a register from the PHY > - > - This routine calls ::Ax88772UsbCommand to read a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in, out] pPhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data is available. > - @retval other The PHY data is not valid. > - > -**/ > -EFI_STATUS > -Ax88772PhyRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN OUT UINT16 * pPhyData > - ); > - > -/** > - Write to a PHY register > - > - This routine calls ::Ax88772UsbCommand to write a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in] PhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data was written. > - @retval other Failed to wwrite the PHY register. > - > -**/ > -EFI_STATUS > -Ax88772PhyWrite ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN UINT16 PhyData > - ); > - > -/** > - Reset the AX88772 > - > - This routine uses ::Ax88772UsbCommand to reset the network > - adapter. This routine also uses ::Ax88772PhyWrite to reset > - the PHY. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772Reset ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - Receive a frame from the network. > - > - This routine polls the USB receive interface for a packet. If a packe= t > - is available, this routine adds the receive packet to the list of > - pending receive packets. > - > - This routine calls ::Ax88772NegotiateLinkComplete to verify > - that the link is up. This routine also calls ::SN_Reset to > - reset the network adapter when necessary. Finally this > - routine attempts to receive one or more packets from the > - network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] bUpdateLink TRUE =3D Update link status > - > -**/ > -VOID > -Ax88772Rx ( > - IN NIC_DEVICE * pNicDevice, > - IN BOOLEAN bUpdateLink > - ); > - > -/** > - Enable or disable the receiver > - > - This routine calls ::Ax88772UsbCommand to update the > - receiver state. This routine also calls ::Ax88772MacAddressSet > - to establish the MAC address for the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RxFilter Simple network RX filter mask value > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772RxControl ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 RxFilter > - ); > - > -/** > - Read an SROM location > - > - This routine calls ::Ax88772UsbCommand to read data from the > - SROM. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] Address SROM address > - @param [out] pData Buffer to receive the data > - > - @retval EFI_SUCCESS The read was successful > - @retval other The read failed > - > -**/ > -EFI_STATUS > -Ax88772SromRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 Address, > - OUT UINT16 * pData > - ); > - > -/** > - This routine is called at a regular interval to poll for > - receive packets. > - > - This routine polls the link state and gets any receive packets > - by calling ::Ax88772Rx. > - > - @param [in] Event Timer event > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > -**/ > -VOID > -Ax88772Timer ( > - IN EFI_EVENT Event, > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - Send a command to the USB device. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pRequest Pointer to the request structure > - @param [in, out] pBuffer Data buffer address > - > - @retval EFI_SUCCESS The USB transfer was successful > - @retval other The USB transfer failed > - > -**/ > -EFI_STATUS > -Ax88772UsbCommand ( > - IN NIC_DEVICE * pNicDevice, > - IN USB_DEVICE_REQUEST * pRequest, > - IN OUT VOID * pBuffer > - ); > - > -//----------------------------------------------------------------------= -------- > -// EFI Component Name Protocol Support > -//----------------------------------------------------------------------= -------- > - > -extern EFI_COMPONENT_NAME_PROTOCOL gComponentName; ///< Component na= me protocol declaration > -extern EFI_COMPONENT_NAME2_PROTOCOL gComponentName2; ///< Component na= me 2 protocol declaration > - > -/** > - Retrieves a Unicode string that is the user readable name of the drive= r. > - > - This function retrieves the user readable name of a driver in the form= of a > - Unicode string. If the driver specified by This has a user readable na= me in > - the language specified by Language, then a pointer to the driver name = is > - returned in DriverName, and EFI_SUCCESS is returned. If the driver spe= cified > - by This does not support the language specified by Language, > - then EFI_UNSUPPORTED is returned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is t= he > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied > - in RFC 3066 or ISO 639-2 language code f= ormat. > - @param [out] ppDriverName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - driver specified by This in the language > - specified by Language. > - > - @retval EFI_SUCCESS The Unicode string for the Driver specif= ied by > - This and the language specified by Langu= age was > - returned in DriverName. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER DriverName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetDriverName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppDriverName > - ); > - > - > -/** > - Retrieves a Unicode string that is the user readable name of the contr= oller > - that is being managed by a driver. > - > - This function retrieves the user readable name of the controller speci= fied by > - ControllerHandle and ChildHandle in the form of a Unicode string. If t= he > - driver specified by This has a user readable name in the language spec= ified by > - Language, then a pointer to the controller name is returned in Control= lerName, > - and EFI_SUCCESS is returned. If the driver specified by This is not c= urrently > - managing the controller specified by ControllerHandle and ChildHandle, > - then EFI_UNSUPPORTED is returned. If the driver specified by This doe= s not > - support the language specified by Language, then EFI_UNSUPPORTED is re= turned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] ControllerHandle The handle of a controller that the driv= er > - specified by This is managing. This han= dle > - specifies the controller whose name is t= o be > - returned. > - @param [in] ChildHandle The handle of the child controller to re= trieve > - the name of. This is an optional parame= ter that > - may be NULL. It will be NULL for device > - drivers. It will also be NULL for a bus= drivers > - that wish to retrieve the name of the bu= s > - controller. It will not be NULL for a b= us > - driver that wishes to retrieve the name = of a > - child controller. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is = the > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied in > - RFC 3066 or ISO 639-2 language code form= at. > - @param [out] ppControllerName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - controller specified by ControllerHandle= and > - ChildHandle in the language specified by > - Language from the point of view of the d= river > - specified by This. > - > - @retval EFI_SUCCESS The Unicode string for the user readable= name in > - the language specified by Language for t= he > - driver specified by This was returned in > - DriverName. > - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HAND= LE. > - @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a = valid > - EFI_HANDLE. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER ControllerName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This is not curr= ently > - managing the controller specified by > - ControllerHandle and ChildHandle. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetControllerName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN EFI_HANDLE ControllerHandle, > - IN OPTIONAL EFI_HANDLE ChildHandle, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppControllerName > - ); > - > -//----------------------------------------------------------------------= -------- > - > -#endif // _AX88772_H_ > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.= h > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h > deleted file mode 100644 > index 365929489b8b..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h > +++ /dev/null > @@ -1,1026 +0,0 @@ > -/** @file > - Definitions for ASIX AX88772 Ethernet adapter. > - > - Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved. > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#ifndef _AX88772_H_ > -#define _AX88772_H_ > - > -#include > - > -#include > - > -#include > - > -#include > -#include > -#include > -#include > -#include > -#include > -#include > - > -#include > -#include > -#include > -#include > -#include > - > -#define MAX_QUEUE_SIZE 50 > -#define MAX_BULKIN_SIZE 16384 > -#define HW_HDR_LENGTH 8 > - > - > -#define MAX_LINKIDLE_THRESHOLD 20000 > - > - > - > -//----------------------------------------------------------------------= -------- > -// Macros > -//----------------------------------------------------------------------= -------- > - > -#if defined(_MSC_VER) /* Handle Microsoft VC++ compiler specif= ics. */ > -#define DBG_ENTER() DEBUG (( 0xffffffff, "Entering " __FUNCT= ION__ "\n" )) ///< Display routine entry > -#define DBG_EXIT() DEBUG (( 0xffffffff, "Exiting " __FUNCTI= ON__ "\n" )) ///< Display routine exit > -#define DBG_EXIT_DEC(Status) DEBUG (( 0xffffffff, "Exiting " __FUNCTI= ON__ ", Status: %d\n", Status )) ///< Display > routine exit with decimal value > -#define DBG_EXIT_HEX(Status) DEBUG (( 0xffffffff, "Exiting " __FUNCTI= ON__ ", Status: 0x%08x\n", Status )) ///< Display > routine exit with hex value > -#define DBG_EXIT_STATUS(Status) DEBUG (( 0xffffffff, "Exiting " __FUNCTI= ON__ ", Status: %r\n", Status )) ///< Display > routine exit with status value > -#define DBG_EXIT_TF(Status) DEBUG (( 0xffffffff, "Exiting " __FUNCTI= ON__ ", returning %s\n", (FALSE =3D=3D Status) ? > L"FALSE" : L"TRUE" )) ///< Display routine with TRUE/FALSE value > -#else // _MSC_VER > -#define DBG_ENTER() ///< Display routine entry > -#define DBG_EXIT() ///< Display routine exit > -#define DBG_EXIT_DEC(Status) ///< Display routine exit with decima= l value > -#define DBG_EXIT_HEX(Status) ///< Display routine exit with hex va= lue > -#define DBG_EXIT_STATUS(Status) ///< Display routine exit with status= value > -#define DBG_EXIT_TF(Status) ///< Display routine with TRUE/FALSE = value > -#endif // _MSC_VER > - > -#define USB_IS_IN_ENDPOINT(EndPointAddr) (((EndPointAddr) & BIT7) != =3D 0) ///< Return TRUE/FALSE for IN direction > -#define USB_IS_OUT_ENDPOINT(EndPointAddr) (((EndPointAddr) & BIT7) = =3D=3D 0) ///< Return TRUE/FALSE for OUT > direction > -#define USB_IS_BULK_ENDPOINT(Attribute) (((Attribute) & (BIT0 | BI= T1)) =3D=3D USB_ENDPOINT_BULK) ///< Return > TRUE/FALSE for BULK type > -#define USB_IS_INTERRUPT_ENDPOINT(Attribute) (((Attribute) & (BIT0 | BI= T1)) =3D=3D USB_ENDPOINT_INTERRUPT) ///< > Return TRUE/FALSE for INTERRUPT type > - > - > -#define PRINT(_L_STR) (gST->ConOut->OutputString(gST->ConOut,(_L_STR))) > -//----------------------------------------------------------------------= -------- > -// Constants > -//----------------------------------------------------------------------= -------- > - > -#define DEBUG_RX_BROADCAST 0x40000000 ///< Display RX broadcast messa= ges > -#define DEBUG_RX_MULTICAST 0x20000000 ///< Display RX multicast messa= ges > -#define DEBUG_RX_UNICAST 0x10000000 ///< Display RX unicast message= s > -#define DEBUG_MAC_ADDRESS 0x08000000 ///< Display the MAC address > -#define DEBUG_LINK 0x04000000 ///< Display the link status > -#define DEBUG_TX 0x02000000 ///< Display the TX messages > -#define DEBUG_PHY 0x01000000 ///< Display the PHY register v= alues > -#define DEBUG_SROM 0x00800000 ///< Display the SROM contents > -#define DEBUG_TIMER 0x00400000 ///< Display the timer routine = entry/exit > -#define DEBUG_TPL 0x00200000 ///< Display the timer routine = entry/exit > - > -#define AX88772_MAX_PKT_SIZE 2048 ///< Maximum packet size > - > -#define ETHERNET_HEADER_SIZE sizeof ( ETHERNET_HEADER ) ///< Size in = bytes of the Ethernet header > -#define MIN_ETHERNET_PKT_SIZE 60 ///< Minimum packet size including = Ethernet header > -#define MAX_ETHERNET_PKT_SIZE 1500 ///< Ethernet spec 3.1.1: Minimum p= acket size > - > -#define USB_NETWORK_CLASS 0x09 ///< USB Network class code > -#define USB_BUS_TIMEOUT 1000 ///< USB timeout in milliseconds > - > -#define TIMER_MSEC 20 ///< Polling interval for t= he NIC > -//#define TPL_AX88772 TPL_CALLBACK ///< TPL for routine sync= hronization > - > -#define HC_DEBUG 0 > -#define BULKIN_TIMEOUT 20 > -#define AUTONEG_DELAY 500000 > -#define AUTONEG_POLLCNT 20 > - > -/** > - Verify new TPL value > - > - This macro which is enabled when debug is enabled verifies that > - the new TPL value is >=3D the current TPL value. > -**/ > -#ifdef VERIFY_TPL > -#undef VERIFY_TPL > -#endif // VERIFY_TPL > - > -#if !defined(MDEPKG_NDEBUG) > - > -#define VERIFY_TPL(tpl) \ > -{ \ > - EFI_TPL PreviousTpl; \ > - \ > - PreviousTpl =3D gBS->RaiseTPL ( TPL_HIGH_LEVEL ); \ > - gBS->RestoreTPL ( PreviousTpl ); \ > - if ( PreviousTpl > tpl ) { \ > - DEBUG (( DEBUG_ERROR, "Current TPL: %d, New TPL: %d\r\n", PreviousTp= l, tpl )); \ > - ASSERT ( PreviousTpl <=3D tpl ); \ > - } \ > -} > - > -#else // MDEPKG_NDEBUG > - > -#define VERIFY_TPL(tpl) > - > -#endif // MDEPKG_NDEBUG > - > -//----------------------------------------------------------------------= -------- > -// Hardware Definition > -//----------------------------------------------------------------------= -------- > - > -#define FreeQueueSize 10 > - > -#define DEV_SIGNATURE SIGNATURE_32 ('A','X','8','8') ///< Signatur= e of data structures in memory > - > -#define RESET_MSEC 1000 ///< Reset duration > -#define PHY_RESET_MSEC 500 ///< PHY reset duration > - > -// > -// RX Control register > -// > - > -#define RXC_PRO 0x0001 ///< Receive all packets > -#define RXC_AMALL 0x0002 ///< Receive all multicast packets > -#define RXC_SEP 0x0004 ///< Save error packets > -#define RXC_AB 0x0008 ///< Receive broadcast packets > -#define RXC_AM 0x0010 ///< Use multicast destination addres= s hash table > -#define RXC_AP 0x0020 ///< Accept physical address from Mul= ticast Filter > -#define RXC_SO 0x0080 ///< Start operation > -#define RXC_MFB 0x0300 ///< Maximum frame burst > -#define RXC_MFB_2048 0 ///< Maximum frame size: 2048 bytes > -#define RXC_MFB_4096 0x0100 ///< Maximum frame size: 4096 bytes > -#define RXC_MFB_8192 0x0200 ///< Maximum frame size: 8192 bytes > -#define RXC_MFB_16384 0x0300 ///< Maximum frame size: 16384 bytes > - > -/*Freddy*/ > -#define RXC_RH1M 0x0100 ///< Rx header 1 > -#define RXC_RH2M 0x0200 ///< Rx header 2 > -#define RXC_RH3M 0x0400 ///< Rx header 3 > -/*Freddy*/ > - > -// > -// Medium Status register > -// > - > -#define MS_FD 0x0002 ///< Full duplex > -#define MS_ONE 0x0004 ///< Must be one > -#define MS_RFC 0x0010 ///< RX flow control enable > -#define MS_TFC 0x0020 ///< TX flow control enable > -#define MS_PF 0x0080 ///< Pause frame enable > -#define MS_RE 0x0100 ///< Receive enable > -#define MS_PS 0x0200 ///< Port speed 1=3D100, 0=3D10 Mbps > -#define MS_SBP 0x0800 ///< Stop back pressure > -#define MS_SM 0x1000 ///< Super MAC support > - > -// > -// Software PHY Select register > -// > - > -#define SPHY_PSEL (1 << 0) ///< Select internal PHY > -#define SPHY_SSMII (1 << 2) > -#define SPHY_SSEN (1 << 4) > -#define SPHY_ASEL 0x02 ///< 1=3DAuto select, 0=3DManual sele= ct > - > -// > -// Software Reset register > -// > - > -#define SRR_RR 0x01 ///< Clear receive frame length error > -#define SRR_RT 0x02 ///< Clear transmit frame length erro= r > -#define SRR_BZTYPE 0x04 ///< External PHY reset pin tri-state= enable > -#define SRR_PRL 0x08 ///< External PHY reset pin level > -#define SRR_BZ 0x10 ///< Force Bulk to return zero length= packet > -#define SRR_IPRL 0x20 ///< Internal PHY reset control > -#define SRR_IPPD 0x40 ///< Internal PHY power down > - > -// > -// PHY ID values > -// > - > -#define PHY_ID_INTERNAL 0x0010 ///< Internal PHY > - > -// > -// USB Commands > -// > - > -#define CMD_PHY_ACCESS_SOFTWARE 0x06 ///< Software in control of PHY > -#define CMD_PHY_REG_READ 0x07 ///< Read PHY register, Value: = PHY, Index: Register, Data: Register value > -#define CMD_PHY_REG_WRITE 0x08 ///< Write PHY register, Value:= PHY, Index: Register, Data: New 16-bit value > -#define CMD_PHY_ACCESS_HARDWARE 0x0a ///< Hardware in control of PHY > -#define CMD_SROM_READ 0x0b ///< Read SROM register: Value:= Address, Data: Value > -#define CMD_RX_CONTROL_WRITE 0x10 ///< Set the RX control registe= r, Value: New value > -#define CMD_GAPS_WRITE 0x12 ///< Write the gaps register, V= alue: New value > -#define CMD_MAC_ADDRESS_READ 0x13 ///< Read the MAC address, Data= : 6 byte MAC address > -#define CMD_MAC_ADDRESS_WRITE 0x14 ///< Set the MAC address, Data:= New 6 byte MAC address > -#define CMD_MULTICAST_HASH_WRITE 0x16 ///< Write the multicast hash t= able, Data: New 8 byte value > -#define CMD_MULTICAST_HASH_READ 0x16 ///< Read the multicast hash tab= le > -#define CMD_MEDIUM_STATUS_READ 0x1a ///< Read medium status registe= r, Data: Register value > -#define CMD_MEDIUM_STATUS_WRITE 0x1b ///< Write medium status regist= er, Value: New value > -#define CMD_WRITE_GPIOS 0x1f > -#define CMD_RESET 0x20 ///< Reset register, Value: New= value > -#define CMD_PHY_SELECT 0x22 ///< PHY select register, Value= : New value > - > -/*Freddy*/ > -#define CMD_RXQTC 0x2a ///< RX Queue Cascade Threshold= Control Register > -/*Freddy*/ > - > -//------------------------------ > -// USB Endpoints > -//------------------------------ > - > -#define CONTROL_ENDPOINT 0 ///< Control endpoint > -#define INTERRUPT_ENDPOINT 1 ///< Interrupt endpoint > -#define BULK_IN_ENDPOINT 2 ///< Receive endpoint > -#define BULK_OUT_ENDPOINT 3 ///< Transmit endpoint > - > -//------------------------------ > -// PHY Registers > -//------------------------------ > - > -#define PHY_BMCR 0 ///< Control register > -#define PHY_BMSR 1 ///< Status register > -#define PHY_ANAR 4 ///< Autonegotiation ad= vertisement register > -#define PHY_ANLPAR 5 ///< Autonegotiation li= nk parter ability register > -#define PHY_ANER 6 ///< Autonegotiation ex= pansion register > - > -// BMCR - Register 0 > - > -#define BMCR_RESET 0x8000 ///< 1 =3D Reset the PH= Y, bit clears after reset > -#define BMCR_LOOPBACK 0x4000 ///< 1 =3D Loopback ena= bled > -#define BMCR_100MBPS 0x2000 ///< 100 Mbits/Sec > -#define BMCR_10MBPS 0 ///< 10 Mbits/Sec > -#define BMCR_AUTONEGOTIATION_ENABLE 0x1000 ///< 1 =3D Enable auton= egotiation > -#define BMCR_POWER_DOWN 0x0800 ///< 1 =3D Power down > -#define BMCR_ISOLATE 0x0400 ///< 0 =3D Isolate PHY > -#define BMCR_RESTART_AUTONEGOTIATION 0x0200 ///< 1 =3D Restart auto= negotiation > -#define BMCR_FULL_DUPLEX 0x0100 ///< Full duplex operat= ion > -#define BMCR_HALF_DUPLEX 0 ///< Half duplex operat= ion > -#define BMCR_COLLISION_TEST 0x0080 ///< 1 =3D Collision te= st enabled > - > -// BSMR - Register 1 > - > -#define BMSR_100BASET4 0x8000 ///< 1 =3D 100BASE-T4 m= ode > -#define BMSR_100BASETX_FDX 0x4000 ///< 1 =3D 100BASE-TX f= ull duplex > -#define BMSR_100BASETX_HDX 0x2000 ///< 1 =3D 100BASE-TX h= alf duplex > -#define BMSR_10BASET_FDX 0x1000 ///< 1 =3D 10BASE-T ful= l duplex > -#define BMSR_10BASET_HDX 0x0800 ///< 1 =3D 10BASE-T hal= f duplex > -#define BMSR_MF 0x0040 ///< 1 =3D PHY accepts = frames with preamble suppressed > -#define BMSR_AUTONEG_CMPLT 0x0020 ///< 1 =3D Autonegotiat= ion complete > -#define BMSR_RF 0x0010 ///< 1 =3D Remote fault > -#define BMSR_AUTONEG 0x0008 ///< 1 =3D Able to perf= orm autonegotiation > -#define BMSR_LINKST 0x0004 ///< 1 =3D Link up > -#define BMSR_JABBER_DETECT 0x0002 ///< 1 =3D jabber condi= tion detected > -#define BMSR_EXTENDED_CAPABILITY 0x0001 ///< 1 =3D Extended reg= ister capable > - > -// ANAR and ANLPAR Registers 4, 5 > - > -#define AN_NP 0x8000 ///< 1 =3D Next page av= ailable > -#define AN_ACK 0x4000 ///< 1 =3D Link partner= acknowledged > -#define AN_RF 0x2000 ///< 1 =3D Remote fault= indicated by link partner > -#define AN_FCS 0x0400 ///< 1 =3D Flow control= ability > -#define AN_T4 0x0200 ///< 1 =3D 100BASE-T4 s= upport > -#define AN_TX_FDX 0x0100 ///< 1 =3D 100BASE-TX F= ull duplex > -#define AN_TX_HDX 0x0080 ///< 1 =3D 100BASE-TX s= upport > -#define AN_10_FDX 0x0040 ///< 1 =3D 10BASE-T Ful= l duplex > -#define AN_10_HDX 0x0020 ///< 1 =3D 10BASE-T sup= port > -#define AN_CSMA_CD 0x0001 ///< 1 =3D IEEE 802.3 C= SMA/CD support > - > -// asix_flags defines > -#define FLAG_NONE 0 > -#define FLAG_TYPE_AX88172 BIT0 > -#define FLAG_TYPE_AX88772 BIT1 > -#define FLAG_TYPE_AX88772B BIT2 > -#define FLAG_EEPROM_MAC BIT3 // initial mac address in eeprom > - > -//----------------------------------------------------------------------= -------- > -// Data Types > -//----------------------------------------------------------------------= -------- > - > -typedef struct { > - UINT16 VendorId; > - UINT16 ProductId; > - INT32 Flags; > -}ASIX_DONGLE; > - > -/** > - Ethernet header layout > - > - IEEE 802.3-2002 Part 3 specification, section 3.1.1. > -**/ > -#pragma pack(1) > -typedef struct { > - UINT8 dest_addr[PXE_HWADDR_LEN_ETHER]; ///< Destination LAN address > - UINT8 src_addr[PXE_HWADDR_LEN_ETHER]; ///< Source LAN address > - UINT16 type; ///< Protocol or length > -} ETHERNET_HEADER; > -#pragma pack() > - > -/** > - Receive and Transmit packet structure > -**/ > -#pragma pack(1) > -typedef struct _RX_TX_PACKET { > - struct _RX_TX_PACKET * pNext; ///< Next receive packet > - UINT16 Length; ///< Packet length > - UINT16 LengthBar; ///< Complement of the length > - UINT8 Data[ AX88772_MAX_PKT_SIZE ]; ///< Received packet data > -} RX_TX_PACKET; > -#pragma pack() > - > - > -#pragma pack(1) > -typedef struct _RX_PKT { > - struct _RX_PKT *pNext; > - BOOLEAN f_Used; > - UINT16 Length; > - UINT8 Data [AX88772_MAX_PKT_SIZE] ; > -} RX_PKT; > -#pragma pack() > - > -/** > - AX88772 control structure > - > - The driver uses this structure to manage the Asix AX88772 10/100 > - Ethernet controller. > -**/ > -typedef struct { > - UINTN Signature; ///< Structure identification > - > - // > - // USB data > - // > - EFI_HANDLE Controller; ///< Controller handle > - EFI_USB_IO_PROTOCOL * pUsbIo; ///< USB driver interface > - > - // > - // Simple network protocol data > - // > - EFI_SIMPLE_NETWORK_PROTOCOL SimpleNetwork; ///< Driver's network sta= ck interface > - EFI_SIMPLE_NETWORK_PROTOCOL SimpleNetwork_Backup; > - EFI_SIMPLE_NETWORK_MODE SimpleNetworkData; ///< Data for simple netw= ork > - > - // > - // Ethernet controller data > - // > - BOOLEAN bInitialized; ///< Controller initialized > - VOID * pTxBuffer; ///< Last transmit buffer > - UINT16 PhyId; ///< PHY ID > - > - // > - // Link state > - // > - BOOLEAN b100Mbps; ///< Current link speed, FALSE =3D 10 Mbps > - BOOLEAN bComplete; ///< Current state of auto-negotiation > - BOOLEAN bFullDuplex; ///< Current duplex > - BOOLEAN bLinkUp; ///< Current link state > - UINTN LinkIdleCnt; > - UINTN PollCount; ///< Number of times the autonegotiation st= atus was polled > - UINT16 CurRxControl; > - // > - // Receive buffer list > - // > - RX_TX_PACKET * pRxTest; > - RX_TX_PACKET * pTxTest; > - > - INT8 MulticastHash[8]; > - EFI_MAC_ADDRESS MAC; > - BOOLEAN bHavePkt; > - > - EFI_DEVICE_PATH_PROTOCOL *MyDevPath; > - > - EFI_DRIVER_BINDING_PROTOCOL * DrvBind; > - > - RX_PKT * QueueHead; > - RX_PKT * pNextFill; > - RX_PKT * pFirstFill; > - UINTN PktCntInQueue; > - UINT8 * pBulkInBuff; > - > - INT32 Flags; > - > -} NIC_DEVICE; > - > -#define DEV_FROM_SIMPLE_NETWORK(a) CR (a, NIC_DEVICE, SimpleNetwork, DE= V_SIGNATURE) ///< Locate NIC_DEVICE > from Simple Network Protocol > - > -//----------------------------------------------------------------------= -------- > -// Simple Network Protocol > -//----------------------------------------------------------------------= -------- > - > -/** > - Reset the network adapter. > - > - Resets a network adapter and reinitializes it with the parameters that > - were provided in the previous call to Initialize (). The transmit and > - receive queues are cleared. Receive filters, the station address, the > - statistics, and the multicast-IP-to-HW MAC addresses are not reset by > - this call. > - > - This routine calls ::Ax88772Reset to perform the adapter specific > - reset operation. This routine also starts the link negotiation > - by calling ::Ax88772NegotiateLinkStart. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bExtendedVerification Indicates that the driver may perfo= rm a more > - exhaustive verification operation of the= device > - during reset. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Reset ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bExtendedVerification > - ); > - > -/** > - Initialize the simple network protocol. > - > - This routine calls ::Ax88772MacAddressGet to obtain the > - MAC address. > - > - @param [in] pNicDevice NIC_DEVICE_INSTANCE pointer > - > - @retval EFI_SUCCESS Setup was successful > - > -**/ > -EFI_STATUS > -SN_Setup ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - This routine starts the network interface. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_ALREADY_STARTED The network interface was already starte= d. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Start ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ); > - > -/** > - Set the MAC address. > - > - This function modifies or resets the current station address of a > - network interface. If Reset is TRUE, then the current station address > - is set ot the network interface's permanent address. If Reset if FALS= E > - then the current station address is changed to the address specified b= y > - pNew. > - > - This routine calls ::Ax88772MacAddressSet to update the MAC address > - in the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Flag used to reset the station address t= o the > - network interface's permanent address. > - @param [in] pNew New station address to be used for the n= etwork > - interface. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_StationAddress ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN EFI_MAC_ADDRESS * pNew > - ); > - > -/** > - This function resets or collects the statistics on a network interface= . > - If the size of the statistics table specified by StatisticsSize is not > - big enough for all of the statistics that are collected by the network > - interface, then a partial buffer of statistics is returned in > - StatisticsTable. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Set to TRUE to reset the statistics for = the network interface. > - @param [in, out] pStatisticsSize On input the size, in bytes, of Stat= isticsTable. On output > - the size, in bytes, of the resulting tab= le of statistics. > - @param [out] pStatisticsTable A pointer to the EFI_NETWORK_STATISTICS = structure that > - conains the statistics. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_BUFFER_TOO_SMALL The pStatisticsTable is NULL or the buff= er is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Statistics ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN OUT UINTN * pStatisticsSize, > - OUT EFI_NETWORK_STATISTICS * pStatisticsTable > - ); > - > -/** > - This function stops a network interface. This call is only valid > - if the network interface is in the started state. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Stop ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ); > - > -/** > - This function releases the memory buffers assigned in the Initialize()= call. > - Pending transmits and receives are lost, and interrupts are cleared an= d disabled. > - After this call, only Initialize() and Stop() calls may be used. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Shutdown ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ); > - > -/** > - Send a packet over the network. > - > - This function places the packet specified by Header and Buffer on > - the transmit queue. This function performs a non-blocking transmit > - operation. When the transmit is complete, the buffer is returned > - via the GetStatus() call. > - > - This routine calls ::Ax88772Rx to empty the network adapter of > - receive packets. The routine then passes the transmit packet > - to the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] HeaderSize The size, in bytes, of the media header = to be filled in by > - the Transmit() function. If HeaderSize = is non-zero, then > - it must be equal to SimpleNetwork->Mode-= >MediaHeaderSize > - and DestAddr and Protocol parameters mus= t not be NULL. > - @param [in] BufferSize The size, in bytes, of the entire packet= (media header and > - data) to be transmitted through the netw= ork interface. > - @param [in] pBuffer A pointer to the packet (media header fo= llowed by data) to > - to be transmitted. This parameter can n= ot be NULL. If > - HeaderSize is zero, then the media heade= r is Buffer must > - already be filled in by the caller. If = HeaderSize is nonzero, > - then the media header will be filled in = by the Transmit() > - function. > - @param [in] pSrcAddr The source HW MAC address. If HeaderSiz= e is zero, then > - this parameter is ignored. If HeaderSiz= e is nonzero and > - SrcAddr is NULL, then SimpleNetwork->Mod= e->CurrentAddress > - is used for the source HW MAC address. > - @param [in] pDestAddr The destination HW MAC address. If Head= erSize is zero, then > - this parameter is ignored. > - @param [in] pProtocol The type of header to build. If HeaderS= ize is zero, then > - this parameter is ignored. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_NOT_READY The network interface is too busy to acc= ept this transmit request. > - @retval EFI_BUFFER_TOO_SMALL The BufferSize parameter is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Transmit ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN HeaderSize, > - IN UINTN BufferSize, > - IN VOID * pBuffer, > - IN EFI_MAC_ADDRESS * pSrcAddr, > - IN EFI_MAC_ADDRESS * pDestAddr, > - IN UINT16 * pProtocol > - ); > - > -//----------------------------------------------------------------------= -------- > -// Support Routines > -//----------------------------------------------------------------------= -------- > - > -/** > - Get the MAC address > - > - This routine calls ::Ax88772UsbCommand to request the MAC > - address from the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [out] pMacAddress Address of a six byte buffer to receive = the MAC address. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressGet ( > - IN NIC_DEVICE * pNicDevice, > - OUT UINT8 * pMacAddress > - ); > - > -/** > - Set the MAC address > - > - This routine calls ::Ax88772UsbCommand to set the MAC address > - in the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the new MAC address. > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ); > - > -/** > - Clear the multicast hash table > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > -**/ > -VOID > -Ax88772MulticastClear ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - Enable a multicast address in the multicast hash table > - > - This routine calls ::Ax88772Crc to compute the hash bit for > - this MAC address. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the MAC address. > - > -**/ > -VOID > -Ax88772MulticastSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ); > - > -/** > - Start the link negotiation > - > - This routine calls ::Ax88772PhyWrite to start the PHY's link > - negotiation. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The link negotiation was started. > - @retval other Failed to start the link negotiation. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkStart ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -/** > - Complete the negotiation of the PHY link > - > - This routine calls ::Ax88772PhyRead to determine if the > - link negotiation is complete. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in, out] pPollCount Address of number of times this routine w= as polled > - @param [out] pbComplete Address of boolean to receive complate st= atus. > - @param [out] pbLinkUp Address of boolean to receive link status= , TRUE=3Dup. > - @param [out] pbHiSpeed Address of boolean to receive link speed,= TRUE=3D100Mbps. > - @param [out] pbFullDuplex Address of boolean to receive link duplex= , TRUE=3Dfull. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkComplete ( > - IN NIC_DEVICE * pNicDevice, > - IN OUT UINTN * pPollCount, > - OUT BOOLEAN * pbComplete, > - OUT BOOLEAN * pbLinkUp, > - OUT BOOLEAN * pbHiSpeed, > - OUT BOOLEAN * pbFullDuplex > - ); > - > -/** > - Read a register from the PHY > - > - This routine calls ::Ax88772UsbCommand to read a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in, out] pPhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data is available. > - @retval other The PHY data is not valid. > - > -**/ > -EFI_STATUS > -Ax88772PhyRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN OUT UINT16 * pPhyData > - ); > - > -/** > - Write to a PHY register > - > - This routine calls ::Ax88772UsbCommand to write a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in] PhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data was written. > - @retval other Failed to wwrite the PHY register. > - > -**/ > -EFI_STATUS > -Ax88772PhyWrite ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN UINT16 PhyData > - ); > - > -/** > - Reset the AX88772 > - > - This routine uses ::Ax88772UsbCommand to reset the network > - adapter. This routine also uses ::Ax88772PhyWrite to reset > - the PHY. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772Reset ( > - IN NIC_DEVICE * pNicDevice > - ); > - > -VOID > -Ax88772ChkLink ( > - IN NIC_DEVICE * pNicDevice, > - IN BOOLEAN bUpdateLink > - ); > - > -/** > - Receive a frame from the network. > - > - This routine polls the USB receive interface for a packet. If a packe= t > - is available, this routine adds the receive packet to the list of > - pending receive packets. > - > - This routine calls ::Ax88772NegotiateLinkComplete to verify > - that the link is up. This routine also calls ::SN_Reset to > - reset the network adapter when necessary. Finally this > - routine attempts to receive one or more packets from the > - network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] bUpdateLink TRUE =3D Update link status > - > -**/ > -VOID > -Ax88772Rx ( > - IN NIC_DEVICE * pNicDevice, > - IN BOOLEAN bUpdateLink > - ); > - > -/** > - Enable or disable the receiver > - > - This routine calls ::Ax88772UsbCommand to update the > - receiver state. This routine also calls ::Ax88772MacAddressSet > - to establish the MAC address for the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RxFilter Simple network RX filter mask value > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772RxControl ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 RxFilter > - ); > - > -/** > - Read an SROM location > - > - This routine calls ::Ax88772UsbCommand to read data from the > - SROM. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] Address SROM address > - @param [out] pData Buffer to receive the data > - > - @retval EFI_SUCCESS The read was successful > - @retval other The read failed > - > -**/ > -EFI_STATUS > -Ax88772SromRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 Address, > - OUT UINT16 * pData > - ); > - > -/** > - Send a command to the USB device. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pRequest Pointer to the request structure > - @param [in, out] pBuffer Data buffer address > - > - @retval EFI_SUCCESS The USB transfer was successful > - @retval other The USB transfer failed > - > -**/ > -EFI_STATUS > -Ax88772UsbCommand ( > - IN NIC_DEVICE * pNicDevice, > - IN USB_DEVICE_REQUEST * pRequest, > - IN OUT VOID * pBuffer > - ); > - > -//----------------------------------------------------------------------= -------- > -// EFI Component Name Protocol Support > -//----------------------------------------------------------------------= -------- > - > -extern EFI_COMPONENT_NAME_PROTOCOL gComponentName; ///< Component na= me protocol declaration > -extern EFI_COMPONENT_NAME2_PROTOCOL gComponentName2; ///< Component na= me 2 protocol declaration > - > -/** > - Retrieves a Unicode string that is the user readable name of the drive= r. > - > - This function retrieves the user readable name of a driver in the form= of a > - Unicode string. If the driver specified by This has a user readable na= me in > - the language specified by Language, then a pointer to the driver name = is > - returned in DriverName, and EFI_SUCCESS is returned. If the driver spe= cified > - by This does not support the language specified by Language, > - then EFI_UNSUPPORTED is returned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is t= he > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied > - in RFC 3066 or ISO 639-2 language code f= ormat. > - @param [out] ppDriverName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - driver specified by This in the language > - specified by Language. > - > - @retval EFI_SUCCESS The Unicode string for the Driver specif= ied by > - This and the language specified by Langu= age was > - returned in DriverName. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER DriverName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetDriverName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppDriverName > - ); > - > - > -/** > - Retrieves a Unicode string that is the user readable name of the contr= oller > - that is being managed by a driver. > - > - This function retrieves the user readable name of the controller speci= fied by > - ControllerHandle and ChildHandle in the form of a Unicode string. If t= he > - driver specified by This has a user readable name in the language spec= ified by > - Language, then a pointer to the controller name is returned in Control= lerName, > - and EFI_SUCCESS is returned. If the driver specified by This is not c= urrently > - managing the controller specified by ControllerHandle and ChildHandle, > - then EFI_UNSUPPORTED is returned. If the driver specified by This doe= s not > - support the language specified by Language, then EFI_UNSUPPORTED is re= turned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] ControllerHandle The handle of a controller that the driv= er > - specified by This is managing. This han= dle > - specifies the controller whose name is t= o be > - returned. > - @param [in] ChildHandle The handle of the child controller to re= trieve > - the name of. This is an optional parame= ter that > - may be NULL. It will be NULL for device > - drivers. It will also be NULL for a bus= drivers > - that wish to retrieve the name of the bu= s > - controller. It will not be NULL for a b= us > - driver that wishes to retrieve the name = of a > - child controller. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is = the > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied in > - RFC 3066 or ISO 639-2 language code form= at. > - @param [out] ppControllerName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - controller specified by ControllerHandle= and > - ChildHandle in the language specified by > - Language from the point of view of the d= river > - specified by This. > - > - @retval EFI_SUCCESS The Unicode string for the user readable= name in > - the language specified by Language for t= he > - driver specified by This was returned in > - DriverName. > - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HAND= LE. > - @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a = valid > - EFI_HANDLE. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER ControllerName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This is not curr= ently > - managing the controller specified by > - ControllerHandle and ChildHandle. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetControllerName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN EFI_HANDLE ControllerHandle, > - IN OPTIONAL EFI_HANDLE ChildHandle, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppControllerName > - ); > - > -VOID > -FillPkt2Queue ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN BufLength); > - > -//----------------------------------------------------------------------= -------- > - > -#endif // _AX88772_H_ > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.c > deleted file mode 100644 > index c9329f506d5d..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Ax88772.c > +++ /dev/null > @@ -1,1318 +0,0 @@ > -/** @file > - Implement the interface to the AX88772 Ethernet controller. > - > - This module implements the interface to the ASIX AX88772 > - USB to Ethernet MAC with integrated 10/100 PHY. Note that this implem= entation > - only supports the integrated PHY since no other test cases were availa= ble. > - > - Copyright (c) 2011, Intel Corporation. All rights reserved.
> - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > - > -/** > - Compute the CRC > - > - @param [in] pMacAddress Address of a six byte buffer to containin= g the MAC address. > - > - @returns The CRC-32 value associated with this MAC address > - > -**/ > -UINT32 > -Ax88772Crc ( > - IN UINT8 * pMacAddress > - ) > -{ > - UINT32 BitNumber; > - INT32 Carry; > - INT32 Crc; > - UINT32 Data; > - UINT8 * pEnd; > - > - DBG_ENTER ( ); > - > - // > - // Walk the MAC address > - // > - Crc =3D -1; > - pEnd =3D &pMacAddress[ PXE_HWADDR_LEN_ETHER ]; > - while ( pEnd > pMacAddress ) { > - Data =3D *pMacAddress++; > - > - > - // > - // CRC32: x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 += x5 + x4 + x2 + x + 1 > - // > - // 1 0000 0100 1100 0001 0001 1101 1011 0111 > - // > - for ( BitNumber =3D 0; 8 > BitNumber; BitNumber++ ) { > - Carry =3D (( Crc >> 31 ) & 1 ) ^ ( Data & 1 ); > - Crc <<=3D 1; > - if ( 0 !=3D Carry ) { > - Crc ^=3D 0x04c11db7; > - } > - Data >>=3D 1; > - } > - } > - > - // > - // Return the CRC value > - // > - DBG_EXIT_HEX ( Crc ); > - return (UINT32) Crc; > -} > - > - > -/** > - Get the MAC address > - > - This routine calls ::Ax88772UsbCommand to request the MAC > - address from the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [out] pMacAddress Address of a six byte buffer to receive = the MAC address. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressGet ( > - IN NIC_DEVICE * pNicDevice, > - OUT UINT8 * pMacAddress > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Set the register address. > - // > - SetupMsg.RequestType =3D USB_ENDPOINT_DIR_IN > - | USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MAC_ADDRESS_READ; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D PXE_HWADDR_LEN_ETHER; > - > - // > - // Read the PHY register > - // > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - pMacAddress ); > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Set the MAC address > - > - This routine calls ::Ax88772UsbCommand to set the MAC address > - in the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the new MAC address. > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Set the register address. > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MAC_ADDRESS_WRITE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D PXE_HWADDR_LEN_ETHER; > - > - // > - // Read the PHY register > - // > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - pMacAddress ); > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Clear the multicast hash table > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > -**/ > -VOID > -Ax88772MulticastClear ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - DBG_ENTER ( ); > - > - // > - // Clear the multicast hash table > - // > - pNicDevice->MulticastHash[0] =3D 0; > - pNicDevice->MulticastHash[1] =3D 0; > - > - DBG_EXIT ( ); > -} > - > - > -/** > - Enable a multicast address in the multicast hash table > - > - This routine calls ::Ax88772Crc to compute the hash bit for > - this MAC address. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the MAC address. > - > -**/ > -VOID > -Ax88772MulticastSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ) > -{ > - UINT32 BitNumber; > - UINT32 Crc; > - UINT32 Mask; > - > - DBG_ENTER ( ); > - > - // > - // Compute the CRC on the destination address > - // > - Crc =3D Ax88772Crc ( pMacAddress ); > - > - // > - // Set the bit corresponding to the destination address > - // > - BitNumber =3D Crc >> 26; > - if ( 32 > BitNumber ) { > - Mask =3D 1 << BitNumber; > - pNicDevice->MulticastHash[0] |=3D Mask; > - } > - else { > - Mask =3D 1 << ( BitNumber - 32 ); > - pNicDevice->MulticastHash[1] |=3D Mask; > - } > - > - // > - // Display the multicast address > - // > - DEBUG (( DEBUG_RX_MULTICAST | DEBUG_INFO, > - "Enable multicast: 0x%02x-%02x-%02x-%02x-%02x-%02x, CRC: 0x%= 08x, Bit number: 0x%02x\r\n", > - pMacAddress[0], > - pMacAddress[1], > - pMacAddress[2], > - pMacAddress[3], > - pMacAddress[4], > - pMacAddress[5], > - Crc, > - BitNumber )); > - > - DBG_EXIT ( ); > -} > - > - > -/** > - Start the link negotiation > - > - This routine calls ::Ax88772PhyWrite to start the PHY's link > - negotiation. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The link negotiation was started. > - @retval other Failed to start the link negotiation. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkStart ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - UINT16 Control; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Set the supported capabilities. > - // > - Status =3D Ax88772PhyWrite ( pNicDevice, > - PHY_ANAR, > - AN_CSMA_CD > - | AN_TX_FDX | AN_TX_HDX > - | AN_10_FDX | AN_10_HDX ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Set the link speed and duplex > - // > - Control =3D BMCR_AUTONEGOTIATION_ENABLE > - | BMCR_RESTART_AUTONEGOTIATION; > - if ( pNicDevice->b100Mbps ) { > - Control |=3D BMCR_100MBPS; > - } > - if ( pNicDevice->bFullDuplex ) { > - Control |=3D BMCR_FULL_DUPLEX; > - } > - Status =3D Ax88772PhyWrite ( pNicDevice, PHY_BMCR, Control ); > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Complete the negotiation of the PHY link > - > - This routine calls ::Ax88772PhyRead to determine if the > - link negotiation is complete. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in, out] pPollCount Address of number of times this routine w= as polled > - @param [out] pbComplete Address of boolean to receive complate st= atus. > - @param [out] pbLinkUp Address of boolean to receive link status= , TRUE=3Dup. > - @param [out] pbHiSpeed Address of boolean to receive link speed,= TRUE=3D100Mbps. > - @param [out] pbFullDuplex Address of boolean to receive link duplex= , TRUE=3Dfull. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkComplete ( > - IN NIC_DEVICE * pNicDevice, > - IN OUT UINTN * pPollCount, > - OUT BOOLEAN * pbComplete, > - OUT BOOLEAN * pbLinkUp, > - OUT BOOLEAN * pbHiSpeed, > - OUT BOOLEAN * pbFullDuplex > - ) > -{ > - UINT16 Mask; > - UINT16 PhyData; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Determine if the link is up. > - // > - *pbComplete =3D FALSE; > - > - // > - // Get the link status > - // > - Status =3D Ax88772PhyRead ( pNicDevice, > - PHY_BMSR, > - &PhyData ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Determine if the autonegotiation is complete. > - // > - *pbLinkUp =3D (BOOLEAN)( 0 !=3D ( PhyData & BMSR_LINKST )); > - *pbComplete =3D *pbLinkUp; > - if ( 0 !=3D *pbComplete ) { > - // > - // Get the partners capabilities. > - // > - Status =3D Ax88772PhyRead ( pNicDevice, > - PHY_ANLPAR, > - &PhyData ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Autonegotiation is complete > - // Determine the link speed. > - // > - *pbHiSpeed =3D (BOOLEAN)( 0 !=3D ( PhyData & ( AN_TX_FDX | AN_TX= _HDX ))); > - > - // > - // Determine the link duplex. > - // > - Mask =3D ( *pbHiSpeed ) ? AN_TX_FDX : AN_10_FDX; > - *pbFullDuplex =3D (BOOLEAN)( 0 !=3D ( PhyData & Mask )); > - } > - } > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Read a register from the PHY > - > - This routine calls ::Ax88772UsbCommand to read a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in, out] pPhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data is available. > - @retval other The PHY data is not valid. > - > -**/ > -EFI_STATUS > -Ax88772PhyRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN OUT UINT16 * pPhyData > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Request access to the PHY > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_SOFTWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Read the PHY register address. > - // > - SetupMsg.RequestType =3D USB_ENDPOINT_DIR_IN > - | USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_REG_READ; > - SetupMsg.Value =3D pNicDevice->PhyId; > - SetupMsg.Index =3D RegisterAddress; > - SetupMsg.Length =3D sizeof ( *pPhyData ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - pPhyData ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_PHY | DEBUG_INFO, > - "PHY %d: 0x%02x --> 0x%04x\r\n", > - pNicDevice->PhyId, > - RegisterAddress, > - *pPhyData )); > - > - // > - // Release the PHY to the hardware > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_HARDWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - } > - } > - > - // > - // Return the operation status. > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Write to a PHY register > - > - This routine calls ::Ax88772UsbCommand to write a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in] PhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data was written. > - @retval other Failed to wwrite the PHY register. > - > -**/ > -EFI_STATUS > -Ax88772PhyWrite ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN UINT16 PhyData > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Request access to the PHY > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_SOFTWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Write the PHY register > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_REG_WRITE; > - SetupMsg.Value =3D pNicDevice->PhyId; > - SetupMsg.Index =3D RegisterAddress; > - SetupMsg.Length =3D sizeof ( PhyData ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - &PhyData ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_PHY | DEBUG_INFO, > - "PHY %d: 0x%02x <-- 0x%04x\r\n", > - pNicDevice->PhyId, > - RegisterAddress, > - PhyData )); > - > - // > - // Release the PHY to the hardware > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_HARDWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - } > - } > - > - // > - // Return the operation status. > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Reset the AX88772 > - > - This routine uses ::Ax88772UsbCommand to reset the network > - adapter. This routine also uses ::Ax88772PhyWrite to reset > - the PHY. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772Reset ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Turn off the MAC > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RX_CONTROL_WRITE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_PHY | DEBUG_RX_BROADCAST | DEBUG_RX_MULTICAST > - | DEBUG_RX_UNICAST | DEBUG_TX | DEBUG_INFO, > - "MAC reset\r\n" )); > - > - // > - // The link is now idle > - // > - pNicDevice->bLinkIdle =3D TRUE; > - > - // > - // Delay for a bit > - // > - gBS->Stall ( RESET_MSEC ); > - > - // > - // Select the internal PHY > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_SELECT; > - SetupMsg.Value =3D SPHY_PSEL; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Delay for a bit > - // > - gBS->Stall ( PHY_RESET_MSEC ); > - > - // > - // Clear the internal PHY reset > - // > - SetupMsg.Request =3D CMD_RESET; > - SetupMsg.Value =3D SRR_IPRL | SRR_PRL; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Reset the PHY > - // > - Status =3D Ax88772PhyWrite ( pNicDevice, > - PHY_BMCR, > - BMCR_RESET ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Set the gaps > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_GAPS_WRITE; > - SetupMsg.Value =3D 0x0c15; > - SetupMsg.Index =3D 0x0e; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - } > - } > - } > - } > - > - // > - // Return the operation status. > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -VOID > -FillPkt2Queue ( > - IN NIC_DEVICE * pNicDevice, > - IN UINTN BufLength) > -{ > - > - UINT16 * pLength; > - UINT16 * pLengthBar; > - UINT8* pData; > - UINT32 offset; > - RX_TX_PACKET * pRxPacket; > - EFI_STATUS Status; > - > - for ( offset =3D 0; offset < BufLength; ){ > - pLength =3D (UINT16*) (pNicDevice->pBulkInBuff + offset); > - pLengthBar =3D (UINT16*) (pNicDevice->pBulkInBuff + offset +2); > - > - *pLength &=3D 0x7ff; > - *pLengthBar &=3D 0x7ff; > - *pLengthBar |=3D 0xf800; > - > - if ((*pLength ^ *pLengthBar ) !=3D 0xFFFF) { > - DEBUG (( EFI_D_ERROR , "Pkt length error. BufLength =3D %d\n", Buf= Length)); > - return; > - } > - > - pRxPacket =3D pNicDevice->pRxFree; > - if ( NULL =3D=3D pRxPacket ) { > - Status =3D gBS->AllocatePool ( EfiRuntimeServicesData, > - sizeof( RX_TX_PACKET ), > - (VOID **) &pRxPacket ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Add this packet to the free packet list > - // > - pNicDevice->pRxFree =3D pRxPacket; > - pRxPacket->pNext =3D NULL; > - } > - else { > - // > - // Use the discard packet buffer > - // > - //pRxPacket =3D &Packet; > - } > - } > - > - > - pData =3D pNicDevice->pBulkInBuff + offset + 4; > - pRxPacket->Length =3D *pLength; > - pRxPacket->LengthBar =3D *(UINT16*) (pNicDevice->pBulkInBuff + offse= t +2); > - CopyMem (&pRxPacket->Data[0], pData, *pLength); > - //DEBUG((DEBUG_INFO, "Packet [%d]\n", *pLength)); > - > - pNicDevice->pRxFree =3D pRxPacket->pNext; > - pRxPacket->pNext =3D NULL; > - > - if ( NULL =3D=3D pNicDevice->pRxTail ) { > - pNicDevice->pRxHead =3D pRxPacket; > - } > - else { > - pNicDevice->pRxTail->pNext =3D pRxPacket; > - } > - pNicDevice->pRxTail =3D pRxPacket; > - offset +=3D (*pLength + 4); > - > - } > -} > - > - > - > -/** > - Receive a frame from the network. > - > - This routine polls the USB receive interface for a packet. If a packe= t > - is available, this routine adds the receive packet to the list of > - pending receive packets. > - > - This routine calls ::Ax88772NegotiateLinkComplete to verify > - that the link is up. This routine also calls ::SN_Reset to > - reset the network adapter when necessary. Finally this > - routine attempts to receive one or more packets from the > - network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] bUpdateLink TRUE =3D Update link status > - > -**/ > -VOID > -Ax88772Rx ( > - IN NIC_DEVICE * pNicDevice, > - IN BOOLEAN bUpdateLink > - ) > -{ > - BOOLEAN bFullDuplex; > - BOOLEAN bLinkUp; > - BOOLEAN bRxPacket; > - BOOLEAN bSpeed100; > - UINTN LengthInBytes; > - RX_TX_PACKET Packet; > - RX_TX_PACKET * pRxPacket; > - EFI_USB_IO_PROTOCOL *pUsbIo; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - UINT32 TransferStatus; > - > - // > - // Synchronize with Ax88772Timer > - // > - VERIFY_TPL ( TPL_AX88772 ); > - TplPrevious =3D gBS->RaiseTPL ( TPL_AX88772 ); > - DEBUG (( DEBUG_TPL | DEBUG_INFO, > - "%d: TPL\r\n", > - TPL_AX88772 )); > - > - // > - // Get the link status > - // > - if ( bUpdateLink ) { > - bLinkUp =3D pNicDevice->bLinkUp; > - bSpeed100 =3D pNicDevice->b100Mbps; > - bFullDuplex =3D pNicDevice->bFullDuplex; > - Status =3D Ax88772NegotiateLinkComplete ( pNicDevice, > - &pNicDevice->PollCount, > - &pNicDevice->bComplete, > - &pNicDevice->bLinkUp, > - &pNicDevice->b100Mbps, > - &pNicDevice->bFullDuplex ); > - > - // > - // Determine if the autonegotiation is complete > - // > - if ( pNicDevice->bComplete ) { > - if ( pNicDevice->bLinkUp ) { > - if (( bSpeed100 && ( !pNicDevice->b100Mbps )) > - || (( !bSpeed100 ) && pNicDevice->b100Mbps ) > - || ( bFullDuplex && ( !pNicDevice->bFullDuplex )) > - || (( !bFullDuplex ) && pNicDevice->bFullDuplex )) { > - pNicDevice->PollCount =3D 0; > - DEBUG (( DEBUG_LINK | DEBUG_INFO, > - "Reset to establish proper link setup: %d Mbps, %s d= uplex\r\n", > - pNicDevice->b100Mbps ? 100 : 10, > - pNicDevice->bFullDuplex ? L"Full" : L"Half" )); > - Status =3D SN_Reset ( &pNicDevice->SimpleNetwork, FALSE ); > - } > - if (( !bLinkUp ) && pNicDevice->bLinkUp ) { > - // > - // Display the autonegotiation status > - // > - DEBUG (( DEBUG_LINK | DEBUG_INFO, > - "Link: Up, %d Mbps, %s duplex\r\n", > - pNicDevice->b100Mbps ? 100 : 10, > - pNicDevice->bFullDuplex ? L"Full" : L"Half" )); > - } > - } > - } > - > - // > - // Update the link status > - // > - if ( bLinkUp && ( !pNicDevice->bLinkUp )) { > - DEBUG (( DEBUG_LINK | DEBUG_INFO, "Link: Down\r\n" )); > - } > - } > - > - // > - // Loop until all the packets are emptied from the receiver > - // > - do { > - bRxPacket =3D FALSE; > - > - // > - // Locate a packet for use > - // > - pRxPacket =3D pNicDevice->pRxFree; > - LengthInBytes =3D MAX_BULKIN_SIZE; > - if ( NULL =3D=3D pRxPacket ) { > - Status =3D gBS->AllocatePool ( EfiRuntimeServicesData, > - sizeof ( *pRxPacket ), > - (VOID **) &pRxPacket ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Add this packet to the free packet list > - // > - pNicDevice->pRxFree =3D pRxPacket; > - pRxPacket->pNext =3D NULL; > - } > - else { > - // > - // Use the discard packet buffer > - // > - pRxPacket =3D &Packet; > - } > - } > - > - // > - // Attempt to receive a packet > - // > - SetMem (&pNicDevice->pBulkInBuff[0], MAX_BULKIN_SIZE, 0); > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbBulkTransfer ( pUsbIo, > - USB_ENDPOINT_DIR_IN | BULK_IN_END= POINT, > - &pNicDevice->pBulkInBuff[0], > - &LengthInBytes, > - 2, > - &TransferStatus ); > - if ( LengthInBytes > 0 ) { > - FillPkt2Queue(pNicDevice, LengthInBytes); > - } > - pRxPacket =3D pNicDevice->pRxHead; > - if (( !EFI_ERROR ( Status )) > - && ( 0 < pRxPacket->Length ) > - && ( pRxPacket->Length <=3D sizeof ( pRxPacket->Data )) > - && ( LengthInBytes > 0)) { > - > - // > - // Determine if the packet should be received > - // > - bRxPacket =3D TRUE; > - LengthInBytes =3D pRxPacket->Length; > - pNicDevice->bLinkIdle =3D FALSE; > - if ( pNicDevice->pRxFree =3D=3D pRxPacket ) { > - // > - // Display the received packet > - // > - if ( 0 !=3D ( pRxPacket->Data[0] & 1 )) { > - if (( 0xff =3D=3D pRxPacket->Data[0]) > - && ( 0xff =3D=3D pRxPacket->Data[1]) > - && ( 0xff =3D=3D pRxPacket->Data[2]) > - && ( 0xff =3D=3D pRxPacket->Data[3]) > - && ( 0xff =3D=3D pRxPacket->Data[4]) > - && ( 0xff =3D=3D pRxPacket->Data[5])) { > - DEBUG (( DEBUG_RX_BROADCAST | DEBUG_INFO, > - "RX: %02x-%02x-%02x-%02x-%02x-%02x %02x-%02x-%02x= -%02x-%02x-%02x %02x-%02x %d bytes\r\n", > - pRxPacket->Data[0], > - pRxPacket->Data[1], > - pRxPacket->Data[2], > - pRxPacket->Data[3], > - pRxPacket->Data[4], > - pRxPacket->Data[5], > - pRxPacket->Data[6], > - pRxPacket->Data[7], > - pRxPacket->Data[8], > - pRxPacket->Data[9], > - pRxPacket->Data[10], > - pRxPacket->Data[11], > - pRxPacket->Data[12], > - pRxPacket->Data[13], > - LengthInBytes )); > - } > - else { > - DEBUG (( DEBUG_RX_MULTICAST | DEBUG_INFO, > - "RX: %02x-%02x-%02x-%02x-%02x-%02x %02x-%02x-%02x= -%02x-%02x-%02x %02x-%02x %d bytes\r\n", > - pRxPacket->Data[0], > - pRxPacket->Data[1], > - pRxPacket->Data[2], > - pRxPacket->Data[3], > - pRxPacket->Data[4], > - pRxPacket->Data[5], > - pRxPacket->Data[6], > - pRxPacket->Data[7], > - pRxPacket->Data[8], > - pRxPacket->Data[9], > - pRxPacket->Data[10], > - pRxPacket->Data[11], > - pRxPacket->Data[12], > - pRxPacket->Data[13], > - LengthInBytes )); > - } > - } > - else { > - DEBUG (( DEBUG_RX_UNICAST | DEBUG_INFO, > - "RX: %02x-%02x-%02x-%02x-%02x-%02x %02x-%02x-%02x-%= 02x-%02x-%02x %02x-%02x %d bytes\r\n", > - pRxPacket->Data[0], > - pRxPacket->Data[1], > - pRxPacket->Data[2], > - pRxPacket->Data[3], > - pRxPacket->Data[4], > - pRxPacket->Data[5], > - pRxPacket->Data[6], > - pRxPacket->Data[7], > - pRxPacket->Data[8], > - pRxPacket->Data[9], > - pRxPacket->Data[10], > - pRxPacket->Data[11], > - pRxPacket->Data[12], > - pRxPacket->Data[13], > - LengthInBytes )); > - } > - > - } > - else { > - // > - // Error, not enough buffers for this packet, discard packet > - // > - DEBUG (( DEBUG_WARN | DEBUG_INFO, > - "WARNING - No buffer, discarding RX packet: %02x-%02x-= %02x-%02x-%02x-%02x %02x-%02x-%02x-%02x-%02x- > %02x %02x-%02x %d bytes\r\n", > - pRxPacket->Data[0], > - pRxPacket->Data[1], > - pRxPacket->Data[2], > - pRxPacket->Data[3], > - pRxPacket->Data[4], > - pRxPacket->Data[5], > - pRxPacket->Data[6], > - pRxPacket->Data[7], > - pRxPacket->Data[8], > - pRxPacket->Data[9], > - pRxPacket->Data[10], > - pRxPacket->Data[11], > - pRxPacket->Data[12], > - pRxPacket->Data[13], > - LengthInBytes )); > - } > - } > - }while ( bRxPacket ); > - > - // > - // Release the synchronization withhe Ax88772Timer > - // > - gBS->RestoreTPL ( TplPrevious ); > - DEBUG (( DEBUG_TPL | DEBUG_INFO, > - "%d: TPL\r\n", > - TplPrevious )); > -} > - > - > -/** > - Enable or disable the receiver > - > - This routine calls ::Ax88772UsbCommand to update the > - receiver state. This routine also calls ::Ax88772MacAddressSet > - to establish the MAC address for the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RxFilter Simple network RX filter mask value > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772RxControl ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 RxFilter > - ) > -{ > - UINT16 MediumStatus; > - INT32 MulticastHash[2]; > - UINT16 RxControl; > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Disable all multicast > - // > - MulticastHash[0] =3D 0; > - MulticastHash[1] =3D 0; > - > - // > - // Enable the receiver if something is to be received > - // > - Status =3D EFI_SUCCESS; > - RxControl =3D RXC_SO | RXC_MFB_16384; > - if ( 0 !=3D RxFilter ) { > - // > - // Enable the receiver > - // > - SetupMsg.RequestType =3D USB_ENDPOINT_DIR_IN > - | USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MEDIUM_STATUS_READ; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D sizeof ( MediumStatus ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - &MediumStatus ); > - if ( !EFI_ERROR ( Status )) { > - if ( 0 =3D=3D ( MediumStatus & MS_RE )) { > - MediumStatus |=3D MS_RE | MS_ONE; > - if ( pNicDevice->bFullDuplex ) { > - MediumStatus |=3D MS_TFC | MS_RFC; > - } > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MEDIUM_STATUS_WRITE; > - SetupMsg.Value =3D MediumStatus; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_ERROR | DEBUG_INFO, > - "ERROR - Failed to enable receiver, Status: %r\r\n", > - Status )); > - } > - } > - } > - else { > - DEBUG (( DEBUG_ERROR | DEBUG_INFO, > - "ERROR - Failed to read receiver status, Status: %r\r\n"= , > - Status )); > - } > - > - // > - // Enable multicast if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST )) { > - RxControl |=3D RXC_AM; > - MulticastHash[0] =3D pNicDevice->MulticastHash[0]; > - MulticastHash[1] =3D pNicDevice->MulticastHash[1]; > - } > - > - // > - // Enable all multicast if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULT= ICAST )) { > - RxControl |=3D RXC_AMALL; > - MulticastHash[0] =3D -1; > - MulticastHash[1] =3D -1; > - } > - > - // > - // Enable broadcast if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST )) { > - RxControl |=3D RXC_AB; > - } > - > - // > - // Enable promiscuous mode if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS )) { > - RxControl |=3D RXC_PRO; > - MulticastHash[0] =3D -1; > - MulticastHash[1] =3D -1; > - } > - } > - > - // > - // Update the MAC address > - // > - if ( !EFI_ERROR ( Status )) { > - Status =3D Ax88772MacAddressSet ( pNicDevice, &pNicDevice->SimpleNet= workData.CurrentAddress.Addr[0]); > - } > - > - // > - // Update the receiver control > - // > - if ( !EFI_ERROR ( Status )) { > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RX_CONTROL_WRITE; > - SetupMsg.Value =3D RxControl; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_RX_BROADCAST | DEBUG_RX_MULTICAST | DEBUG_RX_UNICAS= T | DEBUG_INFO, > - "RxControl: 0x%04x\r\n", > - RxControl )); > - > - // > - // Update the multicast hash table > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MULTICAST_HASH_WRITE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D sizeof ( pNicDevice ->MulticastHash ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - &pNicDevice->MulticastHash ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_RX_MULTICAST | DEBUG_INFO, > - "Multicast Hash: 0x%02x %02x %02x %02x %02x %02x %02x = %02x\r\n", > - (UINT8) MulticastHash[0], > - (UINT8)( MulticastHash[0] >> 8 ), > - (UINT8)( MulticastHash[0] >> 16 ), > - (UINT8)( MulticastHash[0] >> 24 ), > - (UINT8) MulticastHash[1], > - (UINT8)( MulticastHash[1] >> 8 ), > - (UINT8)( MulticastHash[1] >> 16 ), > - (UINT8)( MulticastHash[1] >> 24 ))); > - } > - else { > - DEBUG (( DEBUG_ERROR | DEBUG_INFO, > - "ERROR - Failed to update multicast hash table, Status= : %r\r\n", > - Status )); > - } > - } > - else { > - DEBUG (( DEBUG_ERROR | DEBUG_INFO, > - "ERROR - Failed to set receiver control, Status: %r\r\n"= , > - Status )); > - } > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Read an SROM location > - > - This routine calls ::Ax88772UsbCommand to read data from the > - SROM. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] Address SROM address > - @param [out] pData Buffer to receive the data > - > - @retval EFI_SUCCESS The read was successful > - @retval other The read failed > - > -**/ > -EFI_STATUS > -Ax88772SromRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 Address, > - OUT UINT16 * pData > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Read a value from the SROM > - // > - SetupMsg.RequestType =3D USB_ENDPOINT_DIR_IN > - | USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_SROM_READ; > - SetupMsg.Value =3D (UINT16) Address; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D sizeof ( *pData ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - pData ); > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This routine is called at a regular interval to poll for > - receive packets. > - > - This routine polls the link state and gets any receive packets > - by calling ::Ax88772Rx. > - > - @param [in] Event Timer event > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > -**/ > -VOID > -Ax88772Timer ( > - IN EFI_EVENT Event, > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - // > - // Use explicit DEBUG messages since the output frequency is too > - // high for DEBUG_INFO to keep up and have spare cycles for the > - // shell > - // > - DEBUG (( DEBUG_TIMER, "Entering Ax88772Timer\r\n" )); > - > - // > - // Poll the link state and get any receive packets > - // > - Ax88772Rx ( pNicDevice, FALSE ); > - > - DEBUG (( DEBUG_TIMER, "Exiting Ax88772Timer\r\n" )); > -} > - > - > -/** > - Send a command to the USB device. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pRequest Pointer to the request structure > - @param [in, out] pBuffer Data buffer address > - > - @retval EFI_SUCCESS The USB transfer was successful > - @retval other The USB transfer failed > - > -**/ > -EFI_STATUS > -Ax88772UsbCommand ( > - IN NIC_DEVICE * pNicDevice, > - IN USB_DEVICE_REQUEST * pRequest, > - IN OUT VOID * pBuffer > - ) > -{ > - UINT32 CmdStatus; > - EFI_USB_DATA_DIRECTION Direction; > - EFI_USB_IO_PROTOCOL * pUsbIo; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Determine the transfer direction > - // > - Direction =3D EfiUsbNoData; > - if ( 0 !=3D pRequest->Length ) { > - Direction =3D ( 0 !=3D ( pRequest->RequestType & USB_ENDPOINT_DIR_IN= )) > - ? EfiUsbDataIn : EfiUsbDataOut; > - } > - > - // > - // Issue the command > - // > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbControlTransfer ( pUsbIo, > - pRequest, > - Direction, > - USB_BUS_TIMEOUT, > - pBuffer, > - pRequest->Length, > - &CmdStatus ); > - > - // > - // Determine the operation status > - // > - if ( !EFI_ERROR ( Status )) { > - Status =3D CmdStatus; > - } > - else { > - // > - // Display any errors > - // > - DEBUG (( DEBUG_INFO, > - "Ax88772UsbCommand - Status: %r\n", > - Status )); > - > - // > - // Only use status values associated with the Simple Network protoco= l > - // > - if ( EFI_TIMEOUT =3D=3D Status ) { > - Status =3D EFI_DEVICE_ERROR; > - } > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/Component= Name.c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/ComponentName.c > deleted file mode 100644 > index b6dce7e7cbc4..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/ComponentName.c > +++ /dev/null > @@ -1,178 +0,0 @@ > -/** @file > - UEFI Component Name(2) protocol implementation. > - > - Copyright (c) 2011, Intel Corporation. All rights reserved.
> - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > -/** > - EFI Component Name Protocol declaration > -**/ > -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gComponentNam= e =3D { > - GetDriverName, > - GetControllerName, > - "eng" > -}; > - > -/** > - EFI Component Name 2 Protocol declaration > -**/ > -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gComponentNam= e2 =3D { > - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) GetDriverName, > - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) GetControllerName, > - "en" > -}; > - > - > -/** > - Driver name table declaration > -**/ > -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE > -mDriverNameTable[] =3D { > - {"eng;en", L"AX88772 Ethernet Driver"}, > - {NULL, NULL} > -}; > - > -/** > - Retrieves a Unicode string that is the user readable name of the drive= r. > - > - This function retrieves the user readable name of a driver in the form= of a > - Unicode string. If the driver specified by This has a user readable na= me in > - the language specified by Language, then a pointer to the driver name = is > - returned in DriverName, and EFI_SUCCESS is returned. If the driver spe= cified > - by This does not support the language specified by Language, > - then EFI_UNSUPPORTED is returned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is t= he > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied > - in RFC 3066 or ISO 639-2 language code f= ormat. > - @param [out] ppDriverName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - driver specified by This in the language > - specified by Language. > - > - @retval EFI_SUCCESS The Unicode string for the Driver specif= ied by > - This and the language specified by Langu= age was > - returned in DriverName. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER DriverName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetDriverName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppDriverName > - ) > -{ > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - Status =3D LookupUnicodeString2 ( > - pLanguage, > - pThis->SupportedLanguages, > - mDriverNameTable, > - ppDriverName, > - (BOOLEAN)(pThis =3D=3D &gComponentName) > - ); > - DBG_EXIT_HEX ( Status ); > - return Status; > -} > - > -/** > - Retrieves a Unicode string that is the user readable name of the contr= oller > - that is being managed by a driver. > - > - This function retrieves the user readable name of the controller speci= fied by > - ControllerHandle and ChildHandle in the form of a Unicode string. If t= he > - driver specified by This has a user readable name in the language spec= ified by > - Language, then a pointer to the controller name is returned in Control= lerName, > - and EFI_SUCCESS is returned. If the driver specified by This is not c= urrently > - managing the controller specified by ControllerHandle and ChildHandle, > - then EFI_UNSUPPORTED is returned. If the driver specified by This doe= s not > - support the language specified by Language, then EFI_UNSUPPORTED is re= turned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] ControllerHandle The handle of a controller that the driv= er > - specified by This is managing. This han= dle > - specifies the controller whose name is t= o be > - returned. > - @param [in] ChildHandle The handle of the child controller to re= trieve > - the name of. This is an optional parame= ter that > - may be NULL. It will be NULL for device > - drivers. It will also be NULL for a bus= drivers > - that wish to retrieve the name of the bu= s > - controller. It will not be NULL for a b= us > - driver that wishes to retrieve the name = of a > - child controller. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is = the > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied in > - RFC 3066 or ISO 639-2 language code form= at. > - @param [out] ppControllerName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - controller specified by ControllerHandle= and > - ChildHandle in the language specified by > - Language from the point of view of the d= river > - specified by This. > - > - @retval EFI_SUCCESS The Unicode string for the user readable= name in > - the language specified by Language for t= he > - driver specified by This was returned in > - DriverName. > - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HAND= LE. > - @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a = valid > - EFI_HANDLE. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER ControllerName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This is not curr= ently > - managing the controller specified by > - ControllerHandle and ChildHandle. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetControllerName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN EFI_HANDLE ControllerHandle, > - IN OPTIONAL EFI_HANDLE ChildHandle, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppControllerName > - ) > -{ > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Set the controller name > - // > - *ppControllerName =3D L"AX88772 10/100 Ethernet"; > - Status =3D EFI_SUCCESS; > - > - // > - // Return the operation status > - // > - DBG_EXIT_HEX ( Status ); > - return Status; > -} > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/DriverBin= ding.c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/DriverBinding.c > deleted file mode 100644 > index 5bcde4b21163..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/DriverBinding.c > +++ /dev/null > @@ -1,507 +0,0 @@ > -/** @file > - Implement the driver binding protocol for Asix AX88772 Ethernet driver= . > - > - Copyright (c) 2011-2013, Intel Corporation. All rights reserved.
> - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > -/** > - Verify the controller type > - > - @param [in] pThis Protocol instance pointer. > - @param [in] Controller Handle of device to test. > - @param [in] pRemainingDevicePath Not used. > - > - @retval EFI_SUCCESS This driver supports this device. > - @retval other This driver does not support this device. > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverSupported ( > - IN EFI_DRIVER_BINDING_PROTOCOL * pThis, > - IN EFI_HANDLE Controller, > - IN EFI_DEVICE_PATH_PROTOCOL * pRemainingDevicePath > - ) > -{ > - EFI_USB_DEVICE_DESCRIPTOR Device; > - EFI_USB_IO_PROTOCOL * pUsbIo; > - EFI_STATUS Status; > - > - // > - // Connect to the USB stack > - // > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - (VOID **) &pUsbIo, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_BY_DRIVER > - ); > - if (!EFI_ERROR ( Status )) { > - > - // > - // Get the interface descriptor to check the USB class and find a t= ransport > - // protocol handler. > - // > - Status =3D pUsbIo->UsbGetDeviceDescriptor ( pUsbIo, &Device ); > - if (!EFI_ERROR ( Status )) { > - > - // > - // Validate the adapter > - // > - if (( VENDOR_ID !=3D Device.IdVendor ) > - || ( PRODUCT_ID !=3D Device.IdProduct )) { > - Status =3D EFI_UNSUPPORTED; > - } > - } > - > - // > - // Done with the USB stack > - // > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - } > - > - // > - // Return the device supported status > - // > - return Status; > -} > - > - > -/** > - Start this driver on Controller by opening UsbIo and DevicePath protoc= ols. > - Initialize PXE structures, create a copy of the Controller Device Path= with the > - NIC's MAC address appended to it, install the NetworkInterfaceIdentifi= er protocol > - on the newly created Device Path. > - > - @param [in] pThis Protocol instance pointer. > - @param [in] Controller Handle of device to work with. > - @param [in] pRemainingDevicePath Not used, always produce all possible= children. > - > - @retval EFI_SUCCESS This driver is added to Controller. > - @retval other This driver does not support this device. > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverStart ( > - IN EFI_DRIVER_BINDING_PROTOCOL * pThis, > - IN EFI_HANDLE Controller, > - IN EFI_DEVICE_PATH_PROTOCOL * pRemainingDevicePath > - ) > -{ > - EFI_STATUS Status; > - NIC_DEVICE * pNicDevice; > - UINTN LengthInBytes; > - > - DBG_ENTER ( ); > - > - // > - // Allocate the device structure > - // > - LengthInBytes =3D sizeof ( *pNicDevice ); > - Status =3D gBS->AllocatePool ( > - EfiRuntimeServicesData, > - LengthInBytes, > - (VOID **) &pNicDevice > - ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_POOL | DEBUG_INIT, > - "0x%08x: Allocate pNicDevice, %d bytes\r\n", > - pNicDevice, > - sizeof ( *pNicDevice ))); > - > - // > - // Set the structure signature > - // > - ZeroMem ( pNicDevice, LengthInBytes ); > - pNicDevice->Signature =3D DEV_SIGNATURE; > - > - // > - // Connect to the USB I/O protocol > - // > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - (VOID **) &pNicDevice->pUsbIo, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_BY_DRIVER > - ); > - > - if ( !EFI_ERROR ( Status )) { > - // > - // Allocate the necessary events > - // > - Status =3D gBS->CreateEvent ( EVT_TIMER, > - TPL_AX88772, > - (EFI_EVENT_NOTIFY)Ax88772Timer, > - pNicDevice, > - (VOID **)&pNicDevice->Timer ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "0x%08x: Allocated timer\r\n", > - pNicDevice->Timer )); > - > - // > - // Initialize the simple network protocol > - // > - pNicDevice->Controller =3D Controller; > - SN_Setup ( pNicDevice ); > - > - // > - // Start the timer > - // > - Status =3D gBS->SetTimer ( pNicDevice->Timer, > - TimerPeriodic, > - TIMER_MSEC ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Install both the simple network and device path protocols. > - // > - Status =3D gBS->InstallMultipleProtocolInterfaces ( > - &Controller, > - &gEfiCallerIdGuid, > - pNicDevice, > - &gEfiSimpleNetworkProtocolGuid, > - &pNicDevice->SimpleNetwork, > - NULL > - ); > - > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Installed: gEfiCallerIdGuid on 0x%08x\r\n", > - Controller )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Installed: gEfiSimpleNetworkProtocolGuid on 0x%= 08x\r\n", > - Controller )); > - DBG_EXIT_STATUS ( Status ); > - return Status; > - } > - DEBUG (( DEBUG_ERROR | DEBUG_INIT | DEBUG_INFO, > - "ERROR - Failed to install gEfiSimpleNetworkProtocol= on 0x%08x\r\n", > - Controller )); > - } > - else { > - DEBUG (( DEBUG_ERROR | DEBUG_INIT | DEBUG_INFO, > - "ERROR - Failed to start the timer, Status: %r\r\n", > - Status )); > - } > - } > - else { > - DEBUG (( DEBUG_ERROR | DEBUG_INIT | DEBUG_INFO, > - "ERROR - Failed to create timer event, Status: %r\r\n"= , > - Status )); > - } > - > - // > - // Done with the USB stack > - // > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - } > - > - // > - // Done with the device > - // > - gBS->FreePool ( pNicDevice ); > - } > - > - // > - // Display the driver start status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Stop this driver on Controller by removing NetworkInterfaceIdentifier = protocol and > - closing the DevicePath and PciIo protocols on Controller. > - > - @param [in] pThis Protocol instance pointer. > - @param [in] Controller Handle of device to stop driver on. > - @param [in] NumberOfChildren How many children need to be stopped. > - @param [in] pChildHandleBuffer Not used. > - > - @retval EFI_SUCCESS This driver is removed Controller. > - @retval EFI_DEVICE_ERROR The device could not be stopped due to a = device error. > - @retval other This driver was not removed from this dev= ice. > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverStop ( > - IN EFI_DRIVER_BINDING_PROTOCOL * pThis, > - IN EFI_HANDLE Controller, > - IN UINTN NumberOfChildren, > - IN EFI_HANDLE * pChildHandleBuffer > - ) > -{ > - NIC_DEVICE * pNicDevice; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Determine if this driver is already attached > - // > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiCallerIdGuid, > - (VOID **) &pNicDevice, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_GET_PROTOCOL > - ); > - if ( !EFI_ERROR ( Status )) { > - // > - // AX88772 driver is no longer running on this device > - // > - gBS->UninstallMultipleProtocolInterfaces ( > - Controller, > - &gEfiSimpleNetworkProtocolGuid, > - &pNicDevice->SimpleNetwork, > - &gEfiCallerIdGuid, > - pNicDevice, > - NULL ); > - DEBUG (( DEBUG_POOL | DEBUG_INIT, > - "Removed: gEfiSimpleNetworkProtocolGuid from 0x%08x\r\= n", > - Controller )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT, > - "Removed: gEfiCallerIdGuid from 0x%08x\r\n", > - Controller )); > - > - // > - // Stop the timer > - // > - if ( NULL !=3D pNicDevice->Timer ) { > - gBS->SetTimer ( pNicDevice->Timer, TimerCancel, 0 ); > - gBS->CloseEvent ( pNicDevice->Timer ); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "0x%08x: Released timer\r\n", > - pNicDevice->Timer )); > - } > - > - // > - // Done with the device context > - // > - DEBUG (( DEBUG_POOL | DEBUG_INIT, > - "0x%08x: Free pNicDevice, %d bytes\r\n", > - pNicDevice, > - sizeof ( *pNicDevice ))); > - gBS->FreePool ( pNicDevice ); > - } > - > - // > - // Return the shutdown status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Driver binding protocol declaration > -**/ > -EFI_DRIVER_BINDING_PROTOCOL gDriverBinding =3D { > - DriverSupported, > - DriverStart, > - DriverStop, > - 0xa, > - NULL, > - NULL > -}; > - > - > -/** > - Ax88772 driver unload routine. > - > - @param [in] ImageHandle Handle for the image. > - > - @retval EFI_SUCCESS Image may be unloaded > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverUnload ( > - IN EFI_HANDLE ImageHandle > - ) > -{ > - UINTN BufferSize; > - UINTN Index; > - UINTN Max; > - EFI_HANDLE * pHandle; > - EFI_STATUS Status; > - > - // > - // Determine which devices are using this driver > - // > - BufferSize =3D 0; > - pHandle =3D NULL; > - Status =3D gBS->LocateHandle ( > - ByProtocol, > - &gEfiCallerIdGuid, > - NULL, > - &BufferSize, > - NULL ); > - if ( EFI_BUFFER_TOO_SMALL =3D=3D Status ) { > - for ( ; ; ) { > - // > - // One or more block IO devices are present > - // > - Status =3D gBS->AllocatePool ( > - EfiRuntimeServicesData, > - BufferSize, > - (VOID **) &pHandle > - ); > - if ( EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_ERROR | DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Insufficient memory, failed handle buffer allocation\= r\n" )); > - break; > - } > - > - // > - // Locate the block IO devices > - // > - Status =3D gBS->LocateHandle ( > - ByProtocol, > - &gEfiCallerIdGuid, > - NULL, > - &BufferSize, > - pHandle ); > - if ( EFI_ERROR ( Status )) { > - // > - // Error getting handles > - // > - DEBUG (( DEBUG_ERROR | DEBUG_INIT | DEBUG_INFO, > - "Failure getting Telnet handles\r\n" )); > - break; > - } > - > - // > - // Remove any use of the driver > - // > - Max =3D BufferSize / sizeof ( pHandle[ 0 ]); > - for ( Index =3D 0; Max > Index; Index++ ) { > - Status =3D DriverStop ( &gDriverBinding, > - pHandle[ Index ], > - 0, > - NULL ); > - if ( EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_WARN | DEBUG_INIT | DEBUG_INFO, > - "WARNING - Failed to shutdown the driver on handle %= 08x\r\n", pHandle[ Index ])); > - break; > - } > - } > - break; > - } > - } > - else { > - if ( EFI_NOT_FOUND =3D=3D Status ) { > - // > - // No devices were found > - // > - Status =3D EFI_SUCCESS; > - } > - } > - > - // > - // Free the handle array > - // > - if ( NULL !=3D pHandle ) { > - gBS->FreePool ( pHandle ); > - } > - > - // > - // Remove the protocols installed by the EntryPoint routine. > - // > - if ( !EFI_ERROR ( Status )) { > - gBS->UninstallMultipleProtocolInterfaces ( > - ImageHandle, > - &gEfiDriverBindingProtocolGuid, > - &gDriverBinding, > - &gEfiComponentNameProtocolGuid, > - &gComponentName, > - &gEfiComponentName2ProtocolGuid, > - &gComponentName2, > - NULL > - ); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Removed: gEfiComponentName2ProtocolGuid from 0x%08x\r\n", > - ImageHandle )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Removed: gEfiComponentNameProtocolGuid from 0x%08x\r\n"= , > - ImageHandle )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Removed: gEfiDriverBindingProtocolGuid from 0x%08x\r\n"= , > - ImageHandle )); > - } > - > - // > - // Return the unload status > - // > - return Status; > -} > - > - > -/** > -Ax88772 driver entry point. > - > -@param [in] ImageHandle Handle for the image. > -@param [in] pSystemTable Address of the system table. > - > -@retval EFI_SUCCESS Image successfully loaded. > - > -**/ > -EFI_STATUS > -EFIAPI > -EntryPoint ( > - IN EFI_HANDLE ImageHandle, > - IN EFI_SYSTEM_TABLE * pSystemTable > - ) > -{ > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Add the driver to the list of drivers > - // > - Status =3D EfiLibInstallDriverBindingComponentName2 ( > - ImageHandle, > - pSystemTable, > - &gDriverBinding, > - ImageHandle, > - &gComponentName, > - &gComponentName2 > - ); > - ASSERT_EFI_ERROR (Status); > - if ( !EFI_ERROR ( Status )) { > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Installed: gEfiDriverBindingProtocolGuid on 0x%08x\r\n"= , > - ImageHandle )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Installed: gEfiComponentNameProtocolGuid on 0x%08x\r\n"= , > - ImageHandle )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Installed: gEfiComponentName2ProtocolGuid on 0x%08x\r\n= ", > - ImageHandle )); > - } > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/SimpleNet= work.c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/SimpleNetwork.c > deleted file mode 100644 > index 0105d04f5d61..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772/SimpleNetwork.c > +++ /dev/null > @@ -1,1503 +0,0 @@ > -/** @file > - Provides the Simple Network functions. > - > - Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved.
> - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > -/** > - This function updates the filtering on the receiver. > - > - This support routine calls ::Ax88772MacAddressSet to update > - the MAC address. This routine then rebuilds the multicast > - hash by calling ::Ax88772MulticastClear and ::Ax88772MulticastSet. > - Finally this routine enables the receiver by calling > - ::Ax88772RxControl. > - > - @param [in] pSimpleNetwork Simple network mode pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -ReceiveFilterUpdate ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_STATUS Status; > - UINT32 Index; > - > - DBG_ENTER ( ); > - > - // > - // Set the MAC address > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pMode =3D pSimpleNetwork->Mode; > - Status =3D Ax88772MacAddressSet ( pNicDevice, > - &pMode->CurrentAddress.Addr[0]); > - if ( !EFI_ERROR ( Status )) { > - // > - // Clear the multicast hash table > - // > - Ax88772MulticastClear ( pNicDevice ); > - > - // > - // Load the multicast hash table > - // > - if ( 0 !=3D ( pMode->ReceiveFilterSetting & EFI_SIMPLE_NETWORK_RECEI= VE_MULTICAST )) { > - for ( Index =3D 0; > - ( !EFI_ERROR ( Status )) && ( Index < pMode->MCastFilterCoun= t ); > - Index++ ) { > - // > - // Enable the next multicast address > - // > - Ax88772MulticastSet ( pNicDevice, > - &pMode->MCastFilter[ Index ].Addr[0]); > - } > - } > - > - // > - // Enable the receiver > - // > - if ( !EFI_ERROR ( Status )) { > - Status =3D Ax88772RxControl ( pNicDevice, pMode->ReceiveFilterSett= ing ); > - } > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This function updates the SNP driver status. > - > - This function gets the current interrupt and recycled transmit > - buffer status from the network interface. The interrupt status > - and the media status are returned as a bit mask in InterruptStatus. > - If InterruptStatus is NULL, the interrupt status will not be read. > - Upon successful return of the media status, the MediaPresent field > - of EFI_SIMPLE_NETWORK_MODE will be updated to reflect any change > - of media status. If TxBuf is not NULL, a recycled transmit buffer > - address will be retrived. If a recycled transmit buffer address > - is returned in TxBuf, then the buffer has been successfully > - transmitted, and the status for that buffer is cleared. > - > - This function calls ::Ax88772Rx to update the media status and > - queue any receive packets. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] pInterruptStatus A pointer to the bit mask of the current= active interrupts. > - If this is NULL, the interrupt status wi= ll not be read from > - the device. If this is not NULL, the in= terrupt status will > - be read from teh device. When the inter= rupt status is read, > - it will also be cleared. Clearing the t= ransmit interrupt > - does not empty the recycled transmit buf= fer array. > - @param [out] ppTxBuf Recycled transmit buffer address. The n= etwork interface will > - not transmit if its internal recycled tr= ansmit buffer array is > - full. Reading the transmit buffer does = not clear the transmit > - interrupt. If this is NULL, then the tr= ansmit buffer status > - will not be read. If there are not tran= smit buffers to recycle > - and TxBuf is not NULL, *TxBuf will be se= t to NULL. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_GetStatus ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - OUT UINT32 * pInterruptStatus, > - OUT VOID ** ppTxBuf > - ) > -{ > - BOOLEAN bLinkIdle; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Return the transmit buffer > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - if (( NULL !=3D ppTxBuf ) && ( NULL !=3D pNicDevice->pTxBuffer )) { > - *ppTxBuf =3D pNicDevice->pTxBuffer; > - pNicDevice->pTxBuffer =3D NULL; > - } > - > - // > - // Determine if interface is running > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStopped !=3D pMode->State ) { > - // > - // Synchronize with Ax88772Timer > - // > - VERIFY_TPL ( TPL_AX88772 ); > - TplPrevious =3D gBS->RaiseTPL ( TPL_AX88772 ); > - > - // > - // Update the link status > - // > - bLinkIdle =3D pNicDevice->bLinkIdle; > - pNicDevice->bLinkIdle =3D TRUE; > - Ax88772Rx ( pNicDevice, bLinkIdle ); > - pMode->MediaPresent =3D pNicDevice->bLinkUp; > - > - // > - // Release the synchronization with Ax88772Timer > - // > - gBS->RestoreTPL ( TplPrevious ); > - > - // > - // Return the interrupt status > - // > - if ( NULL !=3D pInterruptStatus ) { > - *pInterruptStatus =3D 0; > - } > - Status =3D EFI_SUCCESS; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Resets the network adapter and allocates the transmit and receive buff= ers > - required by the network interface; optionally, also requests allocatio= n of > - additional transmit and receive buffers. This routine must be called = before > - any other routine in the Simple Network protocol is called. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] ExtraRxBufferSize Size in bytes to add to the receive buff= er allocation > - @param [in] ExtraTxBufferSize Size in bytes to add to the transmit buf= fer allocation > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_OUT_OF_RESOURCES There was not enough memory for the tran= smit and receive buffers > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Initialize ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN ExtraRxBufferSize, > - IN UINTN ExtraTxBufferSize > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Determine if the interface is already started > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStarted =3D=3D pMode->State ) { > - if (( 0 =3D=3D ExtraRxBufferSize ) && ( 0 =3D=3D ExtraTxBufferSize= )) { > - // > - // Start the adapter > - // > - Status =3D SN_Reset ( pSimpleNetwork, FALSE ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Update the network state > - // > - pMode->State =3D EfiSimpleNetworkInitialized; > - } > - } > - else { > - Status =3D EFI_UNSUPPORTED; > - } > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This function converts a multicast IP address to a multicast HW MAC ad= dress > - for all packet transactions. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bIPv6 Set to TRUE if the multicast IP address = is IPv6 [RFC2460]. > - Set to FALSE if the multicast IP address= is IPv4 [RFC 791]. > - @param [in] pIP The multicast IP address that is to be c= onverted to a > - multicast HW MAC address. > - @param [in] pMAC The multicast HW MAC address that is to = be generated from IP. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_MCastIPtoMAC ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bIPv6, > - IN EFI_IP_ADDRESS * pIP, > - IN EFI_MAC_ADDRESS * pMAC > - ) > -{ > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // This is not currently supported > - // > - Status =3D EFI_UNSUPPORTED; > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This function performs read and write operations on the NVRAM device > - attached to a network interface. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] ReadWrite TRUE for read operations, FALSE for writ= e operations. > - @param [in] Offset Byte offset in the NVRAM device at which= to start the > - read or write operation. This must be a= multiple of > - NvRamAccessSize and less than NvRamSize. > - @param [in] BufferSize The number of bytes to read or write fro= m the NVRAM device. > - This must also be a multiple of NvramAcc= essSize. > - @param [in, out] pBuffer A pointer to the data buffer. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_NvData ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN ReadWrite, > - IN UINTN Offset, > - IN UINTN BufferSize, > - IN OUT VOID * pBuffer > - ) > -{ > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // This is not currently supported > - // > - Status =3D EFI_UNSUPPORTED; > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Attempt to receive a packet from the network adapter. > - > - This function retrieves one packet from the receive queue of the netwo= rk > - interface. If there are no packets on the receive queue, then EFI_NOT= _READY > - will be returned. If there is a packet on the receive queue, and the = size > - of the packet is smaller than BufferSize, then the contents of the pac= ket > - will be placed in Buffer, and BufferSize will be udpated with the actu= al > - size of the packet. In addition, if SrcAddr, DestAddr, and Protocol a= re > - not NULL, then these values will be extracted from the media header an= d > - returned. If BufferSize is smaller than the received packet, then the > - size of the receive packet will be placed in BufferSize and > - EFI_BUFFER_TOO_SMALL will be returned. > - > - This routine calls ::Ax88772Rx to update the media status and > - empty the network adapter of receive packets. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [out] pHeaderSize The size, in bytes, of the media header = to be filled in by > - the Transmit() function. If HeaderSize = is non-zero, then > - it must be equal to SimpleNetwork->Mode-= >MediaHeaderSize > - and DestAddr and Protocol parameters mus= t not be NULL. > - @param [out] pBufferSize The size, in bytes, of the entire packet= (media header and > - data) to be transmitted through the netw= ork interface. > - @param [out] pBuffer A pointer to the packet (media header fo= llowed by data) to > - to be transmitted. This parameter can n= ot be NULL. If > - HeaderSize is zero, then the media heade= r is Buffer must > - already be filled in by the caller. If = HeaderSize is nonzero, > - then the media header will be filled in = by the Transmit() > - function. > - @param [out] pSrcAddr The source HW MAC address. If HeaderSiz= e is zero, then > - this parameter is ignored. If HeaderSiz= e is nonzero and > - SrcAddr is NULL, then SimpleNetwork->Mod= e->CurrentAddress > - is used for the source HW MAC address. > - @param [out] pDestAddr The destination HW MAC address. If Head= erSize is zero, then > - this parameter is ignored. > - @param [out] pProtocol The type of header to build. If HeaderS= ize is zero, then > - this parameter is ignored. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_NOT_READY No packets have been received on the net= work interface. > - @retval EFI_BUFFER_TOO_SMALL The packet is larger than BufferSize byt= es. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Receive ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - OUT UINTN * pHeaderSize, > - OUT UINTN * pBufferSize, > - OUT VOID * pBuffer, > - OUT EFI_MAC_ADDRESS * pSrcAddr, > - OUT EFI_MAC_ADDRESS * pDestAddr, > - OUT UINT16 * pProtocol > - ) > -{ > - ETHERNET_HEADER * pHeader; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - RX_TX_PACKET * pRxPacket; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - UINT16 Type; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // The interface must be running > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Synchronize with Ax88772Timer > - // > - VERIFY_TPL ( TPL_AX88772 ); > - TplPrevious =3D gBS->RaiseTPL ( TPL_AX88772 ); > - > - // > - // Update the link status > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - Ax88772Rx ( pNicDevice, FALSE ); > - pMode->MediaPresent =3D pNicDevice->bLinkUp; > - if ( pMode->MediaPresent ) { > - // > - // Attempt to receive a packet > - // > - pRxPacket =3D pNicDevice->pRxHead; > - if ( NULL !=3D pRxPacket ) { > - pNicDevice->pRxHead =3D pRxPacket->pNext; > - if ( NULL =3D=3D pNicDevice->pRxHead ) { > - pNicDevice->pRxTail =3D NULL; > - } > - > - // > - // Copy the received packet into the receive buffer > - // > - *pBufferSize =3D pRxPacket->Length; > - CopyMem ( pBuffer, &pRxPacket->Data[0], pRxPacket->Length ); > - pHeader =3D (ETHERNET_HEADER *) &pRxPacket->Data[0]; > - if ( NULL !=3D pHeaderSize ) { > - *pHeaderSize =3D sizeof ( *pHeader ); > - } > - if ( NULL !=3D pDestAddr ) { > - CopyMem ( pDestAddr, &pHeader->dest_addr, PXE_HWADDR_LEN_ETH= ER ); > - } > - if ( NULL !=3D pSrcAddr ) { > - CopyMem ( pSrcAddr, &pHeader->src_addr, PXE_HWADDR_LEN_ETHER= ); > - } > - if ( NULL !=3D pProtocol ) { > - Type =3D pHeader->type; > - Type =3D (UINT16)(( Type >> 8 ) | ( Type << 8 )); > - *pProtocol =3D Type; > - } > - Status =3D EFI_SUCCESS; > - } > - else { > - // > - // No receive packets available > - // > - Status =3D EFI_NOT_READY; > - } > - } > - else { > - // > - // Link no up > - // > - Status =3D EFI_NOT_READY; > - } > - > - // > - // Release the synchronization with Ax88772Timer > - // > - gBS->RestoreTPL ( TplPrevious ); > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This function is used to enable and disable the hardware and software = receive > - filters for the underlying network device. > - > - The receive filter change is broken down into three steps: > - > - 1. The filter mask bits that are set (ON) in the Enable parameter > - are added to the current receive filter settings. > - > - 2. The filter mask bits that are set (ON) in the Disable parameter > - are subtracted from the updated receive filter settins. > - > - 3. If the resulting filter settigns is not supported by the hardwar= e > - a more liberal setting is selected. > - > - If the same bits are set in the Enable and Disable parameters, then th= e bits > - in the Disable parameter takes precedence. > - > - If the ResetMCastFilter parameter is TRUE, then the multicast address = list > - filter is disabled (irregardless of what other multicast bits are set = in > - the enable and Disable parameters). The SNP->Mode->MCastFilterCount f= ield > - is set to zero. The SNP->Mode->MCastFilter contents are undefined. > - > - After enableing or disabling receive filter settings, software should > - verify the new settings by checking the SNP->Mode->ReceeiveFilterSetti= ngs, > - SNP->Mode->MCastFilterCount and SNP->Mode->MCastFilter fields. > - > - Note: Some network drivers and/or devices will automatically promote > - receive filter settings if the requested setting can not be honored. > - For example, if a request for four multicast addresses is made and > - the underlying hardware only supports two multicast addresses the > - driver might set the promiscuous or promiscuous multicast receive filt= ers > - instead. The receiving software is responsible for discarding any ext= ra > - packets that get through the hardware receive filters. > - > - If ResetMCastFilter is TRUE, then the multicast receive filter list > - on the network interface will be reset to the default multicast receiv= e > - filter list. If ResetMCastFilter is FALSE, and this network interface > - allows the multicast receive filter list to be modified, then the > - MCastFilterCnt and MCastFilter are used to update the current multicas= t > - receive filter list. The modified receive filter list settings can be > - found in the MCastFilter field of EFI_SIMPLE_NETWORK_MODE. > - > - This routine calls ::ReceiveFilterUpdate to update the receive > - state in the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] Enable A bit mask of receive filters to enable = on the network interface. > - @param [in] Disable A bit mask of receive filters to disable= on the network interface. > - For backward compatibility with EFI 1.1 = platforms, the > - EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST bit= must be set > - when the ResetMCastFilter parameter is T= RUE. > - @param [in] bResetMCastFilter Set to TRUE to reset the contents of the= multicast receive > - filters on the network interface to thei= r default values. > - @param [in] MCastFilterCnt Number of multicast HW MAC address in th= e new MCastFilter list. > - This value must be less than or equal to= the MaxMCastFilterCnt > - field of EFI_SIMPLE_NETWORK_MODE. This = field is optional if > - ResetMCastFilter is TRUE. > - @param [in] pMCastFilter A pointer to a list of new multicast rec= eive filter HW MAC > - addresses. This list will replace any e= xisting multicast > - HW MAC address list. This field is opti= onal if ResetMCastFilter > - is TRUE. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_ReceiveFilters ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINT32 Enable, > - IN UINT32 Disable, > - IN BOOLEAN bResetMCastFilter, > - IN UINTN MCastFilterCnt, > - IN EFI_MAC_ADDRESS * pMCastFilter > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_MAC_ADDRESS * pMulticastAddress; > - EFI_MAC_ADDRESS * pTableEnd; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - Status =3D EFI_INVALID_PARAMETER; > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - pMode =3D pSimpleNetwork->Mode; > - > - // > - // Update the multicast list if necessary > - // > - if ( !bResetMCastFilter ) { > - if ( 0 !=3D MCastFilterCnt ) { > - if (( MAX_MCAST_FILTER_CNT >=3D MCastFilterCnt ) > - && ( NULL !=3D pMCastFilter )) { > - // > - // Verify the multicast addresses > - // > - pMulticastAddress =3D pMCastFilter; > - pTableEnd =3D pMulticastAddress + MCastFilterCnt; > - while ( pTableEnd > pMulticastAddress ) { > - // > - // The first digit of the multicast address must have the LS= B set > - // > - if ( 0 =3D=3D ( pMulticastAddress->Addr[0] & 1 )) { > - // > - // Invalid multicast address > - // > - break; > - } > - pMulticastAddress +=3D 1; > - } > - if ( pTableEnd =3D=3D pMulticastAddress ) { > - // > - // Update the multicast filter list. > - // > - CopyMem (&pMode->MCastFilter[0], > - pMCastFilter, > - MCastFilterCnt * sizeof ( *pMCastFilter )); > - Status =3D EFI_SUCCESS; > - } > - } > - } > - else { > - Status =3D EFI_SUCCESS; > - } > - } > - else { > - // > - // No multicast address list is specified > - // > - MCastFilterCnt =3D 0; > - Status =3D EFI_SUCCESS; > - } > - if ( !EFI_ERROR ( Status )) { > - // > - // The parameters are valid! > - // > - pMode->ReceiveFilterSetting |=3D Enable; > - pMode->ReceiveFilterSetting &=3D ~Disable; > - pMode->MCastFilterCount =3D (UINT32)MCastFilterCnt; > - > - // > - // Update the receive filters in the adapter > - // > - Status =3D ReceiveFilterUpdate ( pSimpleNetwork ); > - } > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Reset the network adapter. > - > - Resets a network adapter and reinitializes it with the parameters that > - were provided in the previous call to Initialize (). The transmit and > - receive queues are cleared. Receive filters, the station address, the > - statistics, and the multicast-IP-to-HW MAC addresses are not reset by > - this call. > - > - This routine calls ::Ax88772Reset to perform the adapter specific > - reset operation. This routine also starts the link negotiation > - by calling ::Ax88772NegotiateLinkStart. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bExtendedVerification Indicates that the driver may perfo= rm a more > - exhaustive verification operation of the= device > - during reset. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Reset ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bExtendedVerification > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - RX_TX_PACKET * pRxPacket; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Synchronize with Ax88772Timer > - // > - VERIFY_TPL ( TPL_AX88772 ); > - TplPrevious =3D gBS->RaiseTPL ( TPL_AX88772 ); > - > - // > - // Update the device state > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pNicDevice->bComplete =3D FALSE; > - pNicDevice->bLinkUp =3D FALSE; > - > - pMode =3D pSimpleNetwork->Mode; > - pMode->MediaPresent =3D FALSE; > - > - // > - // Discard any received packets > - // > - while ( NULL !=3D pNicDevice->pRxHead ) { > - // > - // Remove the packet from the received packet list > - // > - pRxPacket =3D pNicDevice->pRxHead; > - pNicDevice->pRxHead =3D pRxPacket->pNext; > - > - // > - // Queue the packet to the free list > - // > - pRxPacket->pNext =3D pNicDevice->pRxFree; > - pNicDevice->pRxFree =3D pRxPacket; > - } > - pNicDevice->pRxTail =3D NULL; > - > - // > - // Reset the device > - // > - Status =3D Ax88772Reset ( pNicDevice ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Update the receive filters in the adapter > - // > - Status =3D ReceiveFilterUpdate ( pSimpleNetwork ); > - > - // > - // Try to get a connection to the network > - // > - if ( !EFI_ERROR ( Status )) { > - // > - // Start the autonegotiation > - // > - Status =3D Ax88772NegotiateLinkStart ( pNicDevice ); > - } > - } > - > - // > - // Release the synchronization with Ax88772Timer > - // > - gBS->RestoreTPL ( TplPrevious ); > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Initialize the simple network protocol. > - > - This routine calls ::Ax88772MacAddressGet to obtain the > - MAC address. > - > - @param [in] pNicDevice NIC_DEVICE_INSTANCE pointer > - > - @retval EFI_SUCCESS Setup was successful > - > -**/ > -EFI_STATUS > -SN_Setup ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Initialize the simple network protocol > - // > - pSimpleNetwork =3D &pNicDevice->SimpleNetwork; > - pSimpleNetwork->Revision =3D EFI_SIMPLE_NETWORK_PROTOCOL_REVISION; > - pSimpleNetwork->Start =3D (EFI_SIMPLE_NETWORK_START)SN_Start; > - pSimpleNetwork->Stop =3D (EFI_SIMPLE_NETWORK_STOP)SN_Stop; > - pSimpleNetwork->Initialize =3D (EFI_SIMPLE_NETWORK_INITIALIZE)SN_Initi= alize; > - pSimpleNetwork->Reset =3D (EFI_SIMPLE_NETWORK_RESET)SN_Reset; > - pSimpleNetwork->Shutdown =3D (EFI_SIMPLE_NETWORK_SHUTDOWN)SN_Shutdown; > - pSimpleNetwork->ReceiveFilters =3D (EFI_SIMPLE_NETWORK_RECEIVE_FILTERS= )SN_ReceiveFilters; > - pSimpleNetwork->StationAddress =3D (EFI_SIMPLE_NETWORK_STATION_ADDRESS= )SN_StationAddress; > - pSimpleNetwork->Statistics =3D (EFI_SIMPLE_NETWORK_STATISTICS)SN_Stati= stics; > - pSimpleNetwork->MCastIpToMac =3D (EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC)S= N_MCastIPtoMAC; > - pSimpleNetwork->NvData =3D (EFI_SIMPLE_NETWORK_NVDATA)SN_NvData; > - pSimpleNetwork->GetStatus =3D (EFI_SIMPLE_NETWORK_GET_STATUS)SN_GetSta= tus; > - pSimpleNetwork->Transmit =3D (EFI_SIMPLE_NETWORK_TRANSMIT)SN_Transmit; > - pSimpleNetwork->Receive =3D (EFI_SIMPLE_NETWORK_RECEIVE)SN_Receive; > - pSimpleNetwork->WaitForPacket =3D NULL; > - pMode =3D &pNicDevice->SimpleNetworkData; > - pSimpleNetwork->Mode =3D pMode; > - > - pMode->State =3D EfiSimpleNetworkStopped; > - pMode->HwAddressSize =3D PXE_HWADDR_LEN_ETHER; > - pMode->MediaHeaderSize =3D sizeof ( ETHERNET_HEADER ); > - pMode->MaxPacketSize =3D MAX_ETHERNET_PKT_SIZE; > - pMode->NvRamSize =3D 0; > - pMode->NvRamAccessSize =3D 0; > - pMode->ReceiveFilterMask =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULT= ICAST; > - pMode->ReceiveFilterSetting =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST; > - pMode->MaxMCastFilterCount =3D MAX_MCAST_FILTER_CNT; > - pMode->MCastFilterCount =3D 0; > - SetMem ( &pMode->BroadcastAddress, > - PXE_HWADDR_LEN_ETHER, > - 0xff ); > - pMode->IfType =3D EfiNetworkInterfaceUndi; > - pMode->MacAddressChangeable =3D TRUE; > - pMode->MultipleTxSupported =3D TRUE; > - pMode->MediaPresentSupported =3D TRUE; > - pMode->MediaPresent =3D FALSE; > - > - // > - // Read the MAC address > - // > - pNicDevice->PhyId =3D PHY_ID_INTERNAL; > - pNicDevice->b100Mbps =3D TRUE; > - pNicDevice->bFullDuplex =3D TRUE; > - > - Status =3D gBS->AllocatePool ( EfiRuntimeServicesData, > - MAX_BULKIN_SIZE, > - (VOID **) &pNicDevice->pBulkInBuff); > - if ( EFI_ERROR(Status)) { > - DEBUG (( EFI_D_ERROR, "Memory are not enough\n")); > - return Status; > - } > - > - Status =3D Ax88772MacAddressGet ( > - pNicDevice, > - &pMode->PermanentAddress.Addr[0]); > - if ( !EFI_ERROR ( Status )) { > - // > - // Display the MAC address > - // > - DEBUG (( DEBUG_MAC_ADDRESS | DEBUG_INFO, > - "MAC: %02x-%02x-%02x-%02x-%02x-%02x\n", > - pMode->PermanentAddress.Addr[0], > - pMode->PermanentAddress.Addr[1], > - pMode->PermanentAddress.Addr[2], > - pMode->PermanentAddress.Addr[3], > - pMode->PermanentAddress.Addr[4], > - pMode->PermanentAddress.Addr[5])); > - > - // > - // Use the hardware address as the current address > - // > - CopyMem ( &pMode->CurrentAddress, > - &pMode->PermanentAddress, > - PXE_HWADDR_LEN_ETHER ); > - } > - > - // > - // Return the setup status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This routine starts the network interface. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_ALREADY_STARTED The network interface was already starte= d. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Start ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - NIC_DEVICE * pNicDevice; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - Status =3D EFI_INVALID_PARAMETER; > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStopped =3D=3D pMode->State ) { > - // > - // Initialize the mode structure > - // NVRAM access is not supported > - // > - ZeroMem ( pMode, sizeof ( *pMode )); > - > - pMode->State =3D EfiSimpleNetworkStarted; > - pMode->HwAddressSize =3D PXE_HWADDR_LEN_ETHER; > - pMode->MediaHeaderSize =3D sizeof ( ETHERNET_HEADER ); > - pMode->MaxPacketSize =3D MAX_ETHERNET_PKT_SIZE; > - pMode->ReceiveFilterMask =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_= MULTICAST; > - pMode->ReceiveFilterSetting =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST= ; > - pMode->MaxMCastFilterCount =3D MAX_MCAST_FILTER_CNT; > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - Status =3D Ax88772MacAddressGet ( pNicDevice, &pMode->PermanentAdd= ress.Addr[0]); > - CopyMem ( &pMode->CurrentAddress, > - &pMode->PermanentAddress, > - sizeof ( pMode->CurrentAddress )); > - pMode->BroadcastAddress.Addr[0] =3D 0xff; > - pMode->BroadcastAddress.Addr[1] =3D 0xff; > - pMode->BroadcastAddress.Addr[2] =3D 0xff; > - pMode->BroadcastAddress.Addr[3] =3D 0xff; > - pMode->BroadcastAddress.Addr[4] =3D 0xff; > - pMode->BroadcastAddress.Addr[5] =3D 0xff; > - pMode->IfType =3D 1; > - pMode->MacAddressChangeable =3D TRUE; > - pMode->MultipleTxSupported =3D TRUE; > - pMode->MediaPresentSupported =3D TRUE; > - pMode->MediaPresent =3D FALSE; > - } > - else { > - Status =3D EFI_ALREADY_STARTED; > - } > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Set the MAC address. > - > - This function modifies or resets the current station address of a > - network interface. If Reset is TRUE, then the current station address > - is set ot the network interface's permanent address. If Reset if FALS= E > - then the current station address is changed to the address specified b= y > - pNew. > - > - This routine calls ::Ax88772MacAddressSet to update the MAC address > - in the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Flag used to reset the station address t= o the > - network interface's permanent address. > - @param [in] pNew New station address to be used for the n= etwork > - interface. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_StationAddress ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN EFI_MAC_ADDRESS * pNew > - ) > -{ > - NIC_DEVICE * pNicDevice; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) > - && ( NULL !=3D pSimpleNetwork->Mode ) > - && (( !bReset ) || ( bReset && ( NULL !=3D pNew )))) { > - // > - // Verify that the adapter is already started > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStarted =3D=3D pMode->State ) { > - // > - // Determine the adapter MAC address > - // > - if ( bReset ) { > - // > - // Use the permanent address > - // > - CopyMem ( &pMode->CurrentAddress, > - &pMode->PermanentAddress, > - sizeof ( pMode->CurrentAddress )); > - } > - else { > - // > - // Use the specified address > - // > - CopyMem ( &pMode->CurrentAddress, > - pNew, > - sizeof ( pMode->CurrentAddress )); > - } > - > - // > - // Update the address on the adapter > - // > - Status =3D Ax88772MacAddressSet ( pNicDevice, &pMode->CurrentAddre= ss.Addr[0]); > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This function resets or collects the statistics on a network interface= . > - If the size of the statistics table specified by StatisticsSize is not > - big enough for all of the statistics that are collected by the network > - interface, then a partial buffer of statistics is returned in > - StatisticsTable. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Set to TRUE to reset the statistics for = the network interface. > - @param [in, out] pStatisticsSize On input the size, in bytes, of Stat= isticsTable. On output > - the size, in bytes, of the resulting tab= le of statistics. > - @param [out] pStatisticsTable A pointer to the EFI_NETWORK_STATISTICS = structure that > - conains the statistics. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_BUFFER_TOO_SMALL The pStatisticsTable is NULL or the buff= er is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Statistics ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN OUT UINTN * pStatisticsSize, > - OUT EFI_NETWORK_STATISTICS * pStatisticsTable > - ) > -{ > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // This is not currently supported > - // > - Status =3D EFI_UNSUPPORTED; > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This function stops a network interface. This call is only valid > - if the network interface is in the started state. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Stop ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Determine if the interface is started > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStopped !=3D pMode->State ) { > - if ( EfiSimpleNetworkStarted =3D=3D pMode->State ) { > - // > - // Release the resources acquired in SN_Start > - // > - > - // > - // Mark the adapter as stopped > - // > - pMode->State =3D EfiSimpleNetworkStopped; > - Status =3D EFI_SUCCESS; > - } > - else { > - Status =3D EFI_UNSUPPORTED; > - } > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - This function releases the memory buffers assigned in the Initialize()= call. > - Pending transmits and receives are lost, and interrupts are cleared an= d disabled. > - After this call, only Initialize() and Stop() calls may be used. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Shutdown ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - UINT32 RxFilter; > - EFI_STATUS Status; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Determine if the interface is already started > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Stop the adapter > - // > - RxFilter =3D pMode->ReceiveFilterSetting; > - pMode->ReceiveFilterSetting =3D 0; > - Status =3D SN_Reset ( pSimpleNetwork, FALSE ); > - pMode->ReceiveFilterSetting =3D RxFilter; > - if ( !EFI_ERROR ( Status )) { > - // > - // Release the resources acquired by SN_Initialize > - // > - > - // > - // Update the network state > - // > - pMode->State =3D EfiSimpleNetworkStarted; > - } > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > - > - > -/** > - Send a packet over the network. > - > - This function places the packet specified by Header and Buffer on > - the transmit queue. This function performs a non-blocking transmit > - operation. When the transmit is complete, the buffer is returned > - via the GetStatus() call. > - > - This routine calls ::Ax88772Rx to empty the network adapter of > - receive packets. The routine then passes the transmit packet > - to the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] HeaderSize The size, in bytes, of the media header = to be filled in by > - the Transmit() function. If HeaderSize = is non-zero, then > - it must be equal to SimpleNetwork->Mode-= >MediaHeaderSize > - and DestAddr and Protocol parameters mus= t not be NULL. > - @param [in] BufferSize The size, in bytes, of the entire packet= (media header and > - data) to be transmitted through the netw= ork interface. > - @param [in] pBuffer A pointer to the packet (media header fo= llowed by data) to > - to be transmitted. This parameter can n= ot be NULL. If > - HeaderSize is zero, then the media heade= r is Buffer must > - already be filled in by the caller. If = HeaderSize is nonzero, > - then the media header will be filled in = by the Transmit() > - function. > - @param [in] pSrcAddr The source HW MAC address. If HeaderSiz= e is zero, then > - this parameter is ignored. If HeaderSiz= e is nonzero and > - SrcAddr is NULL, then SimpleNetwork->Mod= e->CurrentAddress > - is used for the source HW MAC address. > - @param [in] pDestAddr The destination HW MAC address. If Head= erSize is zero, then > - this parameter is ignored. > - @param [in] pProtocol The type of header to build. If HeaderS= ize is zero, then > - this parameter is ignored. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_NOT_READY The network interface is too busy to acc= ept this transmit request. > - @retval EFI_BUFFER_TOO_SMALL The BufferSize parameter is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Transmit ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN HeaderSize, > - IN UINTN BufferSize, > - IN VOID * pBuffer, > - IN EFI_MAC_ADDRESS * pSrcAddr, > - IN EFI_MAC_ADDRESS * pDestAddr, > - IN UINT16 * pProtocol > - ) > -{ > - RX_TX_PACKET Packet; > - ETHERNET_HEADER * pHeader; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_USB_IO_PROTOCOL * pUsbIo; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - UINTN TransferLength; > - UINT32 TransferStatus; > - UINT16 Type; > - > - DBG_ENTER ( ); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // The interface must be running > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Synchronize with Ax88772Timer > - // > - VERIFY_TPL ( TPL_AX88772 ); > - TplPrevious =3D gBS->RaiseTPL ( TPL_AX88772 ); > - > - // > - // Update the link status > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - > - // > - //No need to call receive to receive packet > - // > - //Ax88772Rx ( pNicDevice, FALSE ); > - pMode->MediaPresent =3D pNicDevice->bLinkUp; > - > - // > - // Release the synchronization with Ax88772Timer > - // > - gBS->RestoreTPL ( TplPrevious ); > - if ( pMode->MediaPresent ) { > - // > - // Copy the packet into the USB buffer > - // > - CopyMem ( &Packet.Data[0], pBuffer, BufferSize ); > - Packet.Length =3D (UINT16) BufferSize; > - > - // > - // Transmit the packet > - // > - pHeader =3D (ETHERNET_HEADER *) &Packet.Data[0]; > - if ( 0 !=3D HeaderSize ) { > - if ( NULL !=3D pDestAddr ) { > - CopyMem ( &pHeader->dest_addr, pDestAddr, PXE_HWADDR_LEN_ETH= ER ); > - } > - if ( NULL !=3D pSrcAddr ) { > - CopyMem ( &pHeader->src_addr, pSrcAddr, PXE_HWADDR_LEN_ETHER= ); > - } > - else { > - CopyMem ( &pHeader->src_addr, &pMode->CurrentAddress.Addr[0]= , PXE_HWADDR_LEN_ETHER ); > - } > - if ( NULL !=3D pProtocol ) { > - Type =3D *pProtocol; > - } > - else { > - Type =3D Packet.Length; > - } > - Type =3D (UINT16)(( Type >> 8 ) | ( Type << 8 )); > - pHeader->type =3D Type; > - } > - if ( Packet.Length < MIN_ETHERNET_PKT_SIZE ) { > - Packet.Length =3D MIN_ETHERNET_PKT_SIZE; > - ZeroMem ( &Packet.Data[ BufferSize ], > - Packet.Length - BufferSize ); > - } > - DEBUG (( DEBUG_TX | DEBUG_INFO, > - "TX: %02x-%02x-%02x-%02x-%02x-%02x %02x-%02x-%02x-%02= x-%02x-%02x %02x-%02x %d bytes\r\n", > - Packet.Data[0], > - Packet.Data[1], > - Packet.Data[2], > - Packet.Data[3], > - Packet.Data[4], > - Packet.Data[5], > - Packet.Data[6], > - Packet.Data[7], > - Packet.Data[8], > - Packet.Data[9], > - Packet.Data[10], > - Packet.Data[11], > - Packet.Data[12], > - Packet.Data[13], > - Packet.Length )); > - Packet.LengthBar =3D ~Packet.Length; > - TransferLength =3D sizeof ( Packet.Length ) > - + sizeof ( Packet.LengthBar ) > - + Packet.Length; > - > - // > - // Work around USB bus driver bug where a timeout set by receiv= e > - // succeeds but the timeout expires immediately after, causing = the > - // transmit operation to timeout. > - // > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbBulkTransfer ( pUsbIo, > - BULK_OUT_ENDPOINT, > - &Packet.Length, > - &TransferLength, > - 0xfffffffe, > - &TransferStatus ); > - if ( !EFI_ERROR ( Status )) { > - Status =3D TransferStatus; > - } > - if (( !EFI_ERROR ( Status )) > - && ( TransferLength !=3D (UINTN)( Packet.Length + 4 ))) { > - Status =3D EFI_WARN_WRITE_FAILURE; > - } > - if ( EFI_SUCCESS =3D=3D Status ) { > - pNicDevice->pTxBuffer =3D pBuffer; > - } > - else { > - DEBUG (( DEBUG_ERROR | DEBUG_INFO, > - "Ax88772 USB transmit error, TransferLength: %d, Sta= tus: %r\r\n", > - sizeof ( Packet.Length ) + Packet.Length, > - Status )); > - // > - // Reset the controller to fix the error > - // > - if ( EFI_DEVICE_ERROR =3D=3D Status ) { > - SN_Reset ( pSimpleNetwork, FALSE ); > - } > - } > - } > - else { > - // > - // No packets available. > - // > - Status =3D EFI_NOT_READY; > - } > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - DEBUG (( DEBUG_ERROR | DEBUG_INFO, > - "Ax88772 invalid transmit parameter\r\n" > - " 0x%08x: HeaderSize\r\n" > - " 0x%08x: BufferSize\r\n" > - " 0x%08x: Buffer\r\n" > - " 0x%08x: SrcAddr\r\n" > - " 0x%08x: DestAddr\r\n" > - " 0x%04x: Protocol\r\n", > - HeaderSize, > - BufferSize, > - pBuffer, > - pSrcAddr, > - pDestAddr, > - pProtocol )); > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - // > - // Return the operation status > - // > - DBG_EXIT_STATUS ( Status ); > - return Status; > -} > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.= c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c > deleted file mode 100644 > index 12684a6bd16b..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c > +++ /dev/null > @@ -1,875 +0,0 @@ > -/** @file > - Implement the interface to the AX88772 Ethernet controller. > - > - This module implements the interface to the ASIX AX88772 > - USB to Ethernet MAC with integrated 10/100 PHY. Note that this implem= entation > - only supports the integrated PHY since no other test cases were availa= ble. > - > - Copyright (c) 2011, Intel Corporation. All rights reserved. > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > - > -/** > - Compute the CRC > - > - @param [in] pMacAddress Address of a six byte buffer to containin= g the MAC address. > - > - @returns The CRC-32 value associated with this MAC address > - > -**/ > -UINT32 > -Ax88772Crc ( > - IN UINT8 * pMacAddress > - ) > -{ > - UINT32 BitNumber; > - INT32 Carry; > - INT32 Crc; > - UINT32 Data; > - UINT8 * pEnd; > - > - // > - // Walk the MAC address > - // > - Crc =3D -1; > - pEnd =3D &pMacAddress[ PXE_HWADDR_LEN_ETHER ]; > - while ( pEnd > pMacAddress ) { > - Data =3D *pMacAddress++; > - // > - // CRC32: x32 + x26 + x23 + x22 + x16 + x12 + x11 + x10 + x8 + x7 += x5 + x4 + x2 + x + 1 > - // > - // 1 0000 0100 1100 0001 0001 1101 1011 0111 > - // > - for ( BitNumber =3D 0; 8 > BitNumber; BitNumber++ ) { > - Carry =3D (( Crc >> 31 ) & 1 ) ^ ( Data & 1 ); > - Crc <<=3D 1; > - if ( 0 !=3D Carry ) { > - Crc ^=3D 0x04c11db7; > - } > - Data >>=3D 1; > - } > - } > - // > - // Return the CRC value > - // > - return (UINT32) Crc; > -} > - > - > -/** > - Get the MAC address > - > - This routine calls ::Ax88772UsbCommand to request the MAC > - address from the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [out] pMacAddress Address of a six byte buffer to receive = the MAC address. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressGet ( > - IN NIC_DEVICE * pNicDevice, > - OUT UINT8 * pMacAddress > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - // > - // Set the register address. > - // > - SetupMsg.RequestType =3D USB_ENDPOINT_DIR_IN > - | USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MAC_ADDRESS_READ; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D PXE_HWADDR_LEN_ETHER; > - > - // > - // Read the PHY register > - // > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - pMacAddress ); > - return Status; > -} > - > - > -/** > - Set the MAC address > - > - This routine calls ::Ax88772UsbCommand to set the MAC address > - in the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the new MAC address. > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772MacAddressSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - // > - // Set the register address. > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MAC_ADDRESS_WRITE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D PXE_HWADDR_LEN_ETHER; > - > - // > - // Read the PHY register > - // > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - pMacAddress ); > - return Status; > -} > - > -/** > - Clear the multicast hash table > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > -**/ > -VOID > -Ax88772MulticastClear ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - int i =3D 0; > - // > - // Clear the multicast hash table > - // > - for ( i =3D 0 ; i < 8 ; i ++ ) > - pNicDevice->MulticastHash[0] =3D 0; > -} > - > -/** > - Enable a multicast address in the multicast hash table > - > - This routine calls ::Ax88772Crc to compute the hash bit for > - this MAC address. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pMacAddress Address of a six byte buffer to containin= g the MAC address. > - > -**/ > -VOID > -Ax88772MulticastSet ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 * pMacAddress > - ) > -{ > - UINT32 Crc; > - > - // > - // Compute the CRC on the destination address > - // > - Crc =3D Ax88772Crc ( pMacAddress ) >> 26; > - > - // > - // Set the bit corresponding to the destination address > - // > - pNicDevice->MulticastHash [ Crc >> 3 ] |=3D ( 1<< (Crc& 7)); > -} > - > -/** > - Start the link negotiation > - > - This routine calls ::Ax88772PhyWrite to start the PHY's link > - negotiation. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The link negotiation was started. > - @retval other Failed to start the link negotiation. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkStart ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - UINT16 Control; > - EFI_STATUS Status; > - int i; > - // > - // Set the supported capabilities. > - // > - Status =3D Ax88772PhyWrite ( pNicDevice, > - PHY_ANAR, > - AN_CSMA_CD > - | AN_TX_FDX | AN_TX_HDX > - | AN_10_FDX | AN_10_HDX ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Set the link speed and duplex > - // > - Control =3D BMCR_AUTONEGOTIATION_ENABLE > - | BMCR_RESTART_AUTONEGOTIATION; > - if ( pNicDevice->b100Mbps ) { > - Control |=3D BMCR_100MBPS; > - } > - if ( pNicDevice->bFullDuplex ) { > - Control |=3D BMCR_FULL_DUPLEX; > - } > - Status =3D Ax88772PhyWrite ( pNicDevice, PHY_BMCR, Control ); > - } > - > - if (!EFI_ERROR(Status)) { > - i =3D 0; > - do { > - > - if (pNicDevice->bComplete && pNicDevice->bLinkUp) { > - pNicDevice->SimpleNetwork.Mode->MediaPresent > - =3D pNicDevice->bLinkUp & pNicDevice->bComplete; > - break; > - } > - else { > - gBS->Stall(AUTONEG_DELAY); > - Status =3D Ax88772NegotiateLinkComplete ( pNicDevice, > - &pNicDevice->PollCount, > - &pNicDevice->bComplete, > - &pNicDevice->bLinkUp, > - &pNicDevice->b100Mbps, > - &pNicDevice->bFullDuplex ); > - i++; > - } > - }while(!pNicDevice->bLinkUp && i < AUTONEG_POLLCNT); > - } > - return Status; > -} > - > - > -/** > - Complete the negotiation of the PHY link > - > - This routine calls ::Ax88772PhyRead to determine if the > - link negotiation is complete. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in, out] pPollCount Address of number of times this routine w= as polled > - @param [out] pbComplete Address of boolean to receive complate st= atus. > - @param [out] pbLinkUp Address of boolean to receive link status= , TRUE=3Dup. > - @param [out] pbHiSpeed Address of boolean to receive link speed,= TRUE=3D100Mbps. > - @param [out] pbFullDuplex Address of boolean to receive link duplex= , TRUE=3Dfull. > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772NegotiateLinkComplete ( > - IN NIC_DEVICE * pNicDevice, > - IN OUT UINTN * pPollCount, > - OUT BOOLEAN * pbComplete, > - OUT BOOLEAN * pbLinkUp, > - OUT BOOLEAN * pbHiSpeed, > - OUT BOOLEAN * pbFullDuplex > - ) > -{ > - UINT16 Mask; > - UINT16 PhyData; > - EFI_STATUS Status; > - > - // > - // Determine if the link is up. > - // > - *pbComplete =3D FALSE; > - > - // > - // Get the link status > - // > - Status =3D Ax88772PhyRead ( pNicDevice, > - PHY_BMSR, > - &PhyData ); > - > - if ( !EFI_ERROR ( Status )) { > - *pbLinkUp =3D (BOOLEAN)( 0 !=3D ( PhyData & BMSR_LINKST )); > - if ( 0 =3D=3D *pbLinkUp ) { > - DEBUG (( EFI_D_INFO, "Link Down\n" )); > - } > - else { > - *pbComplete =3D (BOOLEAN)( 0 !=3D ( PhyData & 0x20 )); > - if ( 0 =3D=3D *pbComplete ) { > - DEBUG (( EFI_D_INFO, "Autoneg is not yet Complete\n" )); > - } > - else { > - Status =3D Ax88772PhyRead ( pNicDevice, > - PHY_ANLPAR, > - &PhyData ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Autonegotiation is complete > - // Determine the link speed. > - // > - *pbHiSpeed =3D (BOOLEAN)( 0 !=3D ( PhyData & ( AN_TX_FDX | A= N_TX_HDX ))); > - > - // > - // Determine the link duplex. > - // > - Mask =3D ( *pbHiSpeed ) ? AN_TX_FDX : AN_10_FDX; > - *pbFullDuplex =3D (BOOLEAN)( 0 !=3D ( PhyData & Mask )); > - } > - } > - } > - } > - else { > - DEBUG (( EFI_D_ERROR, "Failed to read BMCR\n" )); > - } > - return Status; > -} > - > - > -/** > - Read a register from the PHY > - > - This routine calls ::Ax88772UsbCommand to read a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in, out] pPhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data is available. > - @retval other The PHY data is not valid. > - > -**/ > -EFI_STATUS > -Ax88772PhyRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN OUT UINT16 * pPhyData > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - // > - // Request access to the PHY > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_SOFTWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Read the PHY register address. > - // > - SetupMsg.RequestType =3D USB_ENDPOINT_DIR_IN > - | USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_REG_READ; > - SetupMsg.Value =3D pNicDevice->PhyId; > - SetupMsg.Index =3D RegisterAddress; > - SetupMsg.Length =3D sizeof ( *pPhyData ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - pPhyData ); > - if ( !EFI_ERROR ( Status )) { > - > - // > - // Release the PHY to the hardware > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_HARDWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - } > - } > - return Status; > -} > - > - > -/** > - Write to a PHY register > - > - This routine calls ::Ax88772UsbCommand to write a PHY register. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RegisterAddress Number of the register to read. > - @param [in] PhyData Address of a buffer to receive the PHY re= gister value > - > - @retval EFI_SUCCESS The PHY data was written. > - @retval other Failed to wwrite the PHY register. > - > -**/ > -EFI_STATUS > -Ax88772PhyWrite ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT8 RegisterAddress, > - IN UINT16 PhyData > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - // > - // Request access to the PHY > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_SOFTWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Write the PHY register > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_REG_WRITE; > - SetupMsg.Value =3D pNicDevice->PhyId; > - SetupMsg.Index =3D RegisterAddress; > - SetupMsg.Length =3D sizeof ( PhyData ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - &PhyData ); > - if ( !EFI_ERROR ( Status )) { > - > - // > - // Release the PHY to the hardware > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_HARDWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - } > - } > - > - return Status; > -} > - > - > -/** > - Reset the AX88772 > - > - This routine uses ::Ax88772UsbCommand to reset the network > - adapter. This routine also uses ::Ax88772PhyWrite to reset > - the PHY. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - > - @retval EFI_SUCCESS The MAC address is available. > - @retval other The MAC address is not valid. > - > -**/ > -EFI_STATUS > -Ax88772Reset ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - > - EFI_USB_IO_PROTOCOL *pUsbIo; > - EFI_USB_DEVICE_DESCRIPTOR Device; > - > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbGetDeviceDescriptor ( pUsbIo, &Device ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_ACCESS_HARDWARE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_SELECT; > - SetupMsg.Value =3D SPHY_PSEL; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RESET; > - SetupMsg.Value =3D SRR_IPRL ; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RESET; > - SetupMsg.Value =3D SRR_IPPD | SRR_IPRL ; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - gBS->Stall ( 200000 ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RESET; > - SetupMsg.Value =3D SRR_IPRL ; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - gBS->Stall ( 200000 ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RESET; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_PHY_SELECT; > - SetupMsg.Value =3D SPHY_PSEL; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RESET; > - SetupMsg.Value =3D SRR_IPRL | SRR_BZ | SRR_BZTYPE; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - if (EFI_ERROR(Status)) goto err; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RX_CONTROL_WRITE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - > - if (EFI_ERROR(Status)) goto err; > - > - if (pNicDevice->Flags !=3D FLAG_TYPE_AX88772) { > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RXQTC; > - SetupMsg.Value =3D 0x8000; > - SetupMsg.Index =3D 0x8001; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - } > - > -err: > - return Status; > -} > - > -/** > - Enable or disable the receiver > - > - This routine calls ::Ax88772UsbCommand to update the > - receiver state. This routine also calls ::Ax88772MacAddressSet > - to establish the MAC address for the network adapter. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] RxFilter Simple network RX filter mask value > - > - @retval EFI_SUCCESS The MAC address was set. > - @retval other The MAC address was not set. > - > -**/ > -EFI_STATUS > -Ax88772RxControl ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 RxFilter > - ) > -{ > - UINT16 MediumStatus; > - UINT16 RxControl; > - USB_DEVICE_REQUEST SetupMsg; > - EFI_STATUS Status; > - EFI_USB_IO_PROTOCOL *pUsbIo; > - EFI_USB_DEVICE_DESCRIPTOR Device; > - > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbGetDeviceDescriptor ( pUsbIo, &Device ); > - > - if (EFI_ERROR(Status)) { > - DEBUG (( EFI_D_ERROR, "Failed to get device descriptor\n" )); > - return Status; > - } > - > - // > - // Enable the receiver if something is to be received > - // > - > - if ( 0 !=3D RxFilter ) { > - // > - // Enable the receiver > - // > - SetupMsg.RequestType =3D USB_ENDPOINT_DIR_IN > - | USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MEDIUM_STATUS_READ; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D sizeof ( MediumStatus ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - &MediumStatus ); > - if ( !EFI_ERROR ( Status )) { > - if ( 0 =3D=3D ( MediumStatus & MS_RE )) { > - MediumStatus |=3D MS_RE | MS_ONE; > - > - if ( pNicDevice->bFullDuplex ) > - MediumStatus |=3D MS_TFC | MS_RFC | MS_FD; > - else > - MediumStatus &=3D ~(MS_TFC | MS_RFC | MS_FD); > - > - if ( pNicDevice->b100Mbps ) > - MediumStatus |=3D MS_PS; > - else > - MediumStatus &=3D ~MS_PS; > - > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MEDIUM_STATUS_WRITE; > - SetupMsg.Value =3D MediumStatus; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( EFI_ERROR ( Status )) { > - DEBUG (( EFI_D_ERROR, "Failed to enable receiver, Status: %r= \r\n", > - Status )); > - } > - } > - } > - else { > - DEBUG (( EFI_D_ERROR, "Failed to read receiver status, Status: %= r\r\n", > - Status )); > - } > - } > - > - RxControl =3D RXC_SO | RXC_RH1M; > - // > - // Enable multicast if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST )) { > - RxControl |=3D RXC_AM; > - // > - // Update the multicast hash table > - // > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_MULTICAST_HASH_WRITE; > - SetupMsg.Value =3D 0; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D sizeof ( pNicDevice ->MulticastHash ); > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - &pNicDevice->MulticastHash ); > - } > - // > - // Enable all multicast if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTIC= AST )) { > - RxControl |=3D RXC_AMALL; > - } > - > - // > - // Enable broadcast if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST )) { > - RxControl |=3D RXC_AB; > - } > - > - // > - // Enable promiscuous mode if requested > - // > - if ( 0 !=3D ( RxFilter & EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS )) { > - RxControl |=3D RXC_PRO; > - } > - > - // > - // Update the receiver control > - // > - if (pNicDevice->CurRxControl !=3D RxControl) { > - SetupMsg.RequestType =3D USB_REQ_TYPE_VENDOR > - | USB_TARGET_DEVICE; > - SetupMsg.Request =3D CMD_RX_CONTROL_WRITE; > - SetupMsg.Value =3D RxControl; > - SetupMsg.Index =3D 0; > - SetupMsg.Length =3D 0; > - Status =3D Ax88772UsbCommand ( pNicDevice, > - &SetupMsg, > - NULL ); > - if ( !EFI_ERROR ( Status )) { > - pNicDevice->CurRxControl =3D RxControl; > - > - } > - else { > - DEBUG (( EFI_D_ERROR, "ERROR - Failed to set receiver control, S= tatus: %r\r\n", > - Status )); > - } > - } > - return Status; > -} > - > - > -/** > - Read an SROM location > - > - This routine calls ::Ax88772UsbCommand to read data from the > - SROM. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] Address SROM address > - @param [out] pData Buffer to receive the data > - > - @retval EFI_SUCCESS The read was successful > - @retval other The read failed > - > -**/ > -EFI_STATUS > -Ax88772SromRead ( > - IN NIC_DEVICE * pNicDevice, > - IN UINT32 Address, > - OUT UINT16 * pData > - ) > -{ > - return EFI_UNSUPPORTED; > -} > - > -/** > - Send a command to the USB device. > - > - @param [in] pNicDevice Pointer to the NIC_DEVICE structure > - @param [in] pRequest Pointer to the request structure > - @param [in, out] pBuffer Data buffer address > - > - @retval EFI_SUCCESS The USB transfer was successful > - @retval other The USB transfer failed > - > -**/ > -EFI_STATUS > -Ax88772UsbCommand ( > - IN NIC_DEVICE * pNicDevice, > - IN USB_DEVICE_REQUEST * pRequest, > - IN OUT VOID * pBuffer > - ) > -{ > - UINT32 CmdStatus; > - EFI_USB_DATA_DIRECTION Direction; > - EFI_USB_IO_PROTOCOL * pUsbIo; > - EFI_STATUS Status; > - > - // > - // Determine the transfer direction > - // > - Direction =3D EfiUsbNoData; > - if ( 0 !=3D pRequest->Length ) { > - Direction =3D ( 0 !=3D ( pRequest->RequestType & USB_ENDPOINT_DIR_IN= )) > - ? EfiUsbDataIn : EfiUsbDataOut; > - } > - > - // > - // Issue the command > - // > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbControlTransfer ( pUsbIo, > - pRequest, > - Direction, > - USB_BUS_TIMEOUT, > - pBuffer, > - pRequest->Length, > - &CmdStatus ); > - // > - // Determine the operation status > - // > - if ( !EFI_ERROR ( Status )) { > - Status =3D CmdStatus; > - } > - else { > - // > - // Only use status values associated with the Simple Network protoco= l > - // > - if ( EFI_TIMEOUT =3D=3D Status ) { > - Status =3D EFI_DEVICE_ERROR; > - } > - } > - return Status; > -} > - > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Componen= tName.c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/ComponentName.c > deleted file mode 100644 > index 76a732a7b007..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/ComponentName.c > +++ /dev/null > @@ -1,175 +0,0 @@ > -/** @file > - UEFI Component Name(2) protocol implementation. > - > - Copyright (c) 2011, Intel Corporation. All rights reserved. > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > -/** > - EFI Component Name Protocol declaration > -**/ > -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME_PROTOCOL gComponentNam= e =3D { > - GetDriverName, > - GetControllerName, > - "eng" > -}; > - > -/** > - EFI Component Name 2 Protocol declaration > -**/ > -GLOBAL_REMOVE_IF_UNREFERENCED EFI_COMPONENT_NAME2_PROTOCOL gComponentNam= e2 =3D { > - (EFI_COMPONENT_NAME2_GET_DRIVER_NAME) GetDriverName, > - (EFI_COMPONENT_NAME2_GET_CONTROLLER_NAME) GetControllerName, > - "en" > -}; > - > - > -/** > - Driver name table declaration > -**/ > -GLOBAL_REMOVE_IF_UNREFERENCED EFI_UNICODE_STRING_TABLE > -mDriverNameTable[] =3D { > - {"eng;en", L"ASIX AX88772B Ethernet Driver 1.0"}, > - {NULL, NULL} > -}; > - > -/** > - Retrieves a Unicode string that is the user readable name of the drive= r. > - > - This function retrieves the user readable name of a driver in the form= of a > - Unicode string. If the driver specified by This has a user readable na= me in > - the language specified by Language, then a pointer to the driver name = is > - returned in DriverName, and EFI_SUCCESS is returned. If the driver spe= cified > - by This does not support the language specified by Language, > - then EFI_UNSUPPORTED is returned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is t= he > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied > - in RFC 3066 or ISO 639-2 language code f= ormat. > - @param [out] ppDriverName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - driver specified by This in the language > - specified by Language. > - > - @retval EFI_SUCCESS The Unicode string for the Driver specif= ied by > - This and the language specified by Langu= age was > - returned in DriverName. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER DriverName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetDriverName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppDriverName > - ) > -{ > - EFI_STATUS Status; > - > - Status =3D LookupUnicodeString2 ( > - pLanguage, > - pThis->SupportedLanguages, > - mDriverNameTable, > - ppDriverName, > - (BOOLEAN)(pThis =3D=3D &gComponentName) > - ); > - > - return Status; > -} > - > -/** > - Retrieves a Unicode string that is the user readable name of the contr= oller > - that is being managed by a driver. > - > - This function retrieves the user readable name of the controller speci= fied by > - ControllerHandle and ChildHandle in the form of a Unicode string. If t= he > - driver specified by This has a user readable name in the language spec= ified by > - Language, then a pointer to the controller name is returned in Control= lerName, > - and EFI_SUCCESS is returned. If the driver specified by This is not c= urrently > - managing the controller specified by ControllerHandle and ChildHandle, > - then EFI_UNSUPPORTED is returned. If the driver specified by This doe= s not > - support the language specified by Language, then EFI_UNSUPPORTED is re= turned. > - > - @param [in] pThis A pointer to the EFI_COMPONENT_NAME2_PRO= TOCOL or > - EFI_COMPONENT_NAME_PROTOCOL instance. > - @param [in] ControllerHandle The handle of a controller that the driv= er > - specified by This is managing. This han= dle > - specifies the controller whose name is t= o be > - returned. > - @param [in] ChildHandle The handle of the child controller to re= trieve > - the name of. This is an optional parame= ter that > - may be NULL. It will be NULL for device > - drivers. It will also be NULL for a bus= drivers > - that wish to retrieve the name of the bu= s > - controller. It will not be NULL for a b= us > - driver that wishes to retrieve the name = of a > - child controller. > - @param [in] pLanguage A pointer to a Null-terminated ASCII str= ing > - array indicating the language. This is = the > - language of the driver name that the cal= ler is > - requesting, and it must match one of the > - languages specified in SupportedLanguage= s. The > - number of languages supported by a drive= r is up > - to the driver writer. Language is specif= ied in > - RFC 3066 or ISO 639-2 language code form= at. > - @param [out] ppControllerName A pointer to the Unicode string to retur= n. > - This Unicode string is the name of the > - controller specified by ControllerHandle= and > - ChildHandle in the language specified by > - Language from the point of view of the d= river > - specified by This. > - > - @retval EFI_SUCCESS The Unicode string for the user readable= name in > - the language specified by Language for t= he > - driver specified by This was returned in > - DriverName. > - @retval EFI_INVALID_PARAMETER ControllerHandle is not a valid EFI_HAND= LE. > - @retval EFI_INVALID_PARAMETER ChildHandle is not NULL and it is not a = valid > - EFI_HANDLE. > - @retval EFI_INVALID_PARAMETER Language is NULL. > - @retval EFI_INVALID_PARAMETER ControllerName is NULL. > - @retval EFI_UNSUPPORTED The driver specified by This is not curr= ently > - managing the controller specified by > - ControllerHandle and ChildHandle. > - @retval EFI_UNSUPPORTED The driver specified by This does not su= pport > - the language specified by Language. > - > -**/ > -EFI_STATUS > -EFIAPI > -GetControllerName ( > - IN EFI_COMPONENT_NAME_PROTOCOL * pThis, > - IN EFI_HANDLE ControllerHandle, > - IN OPTIONAL EFI_HANDLE ChildHandle, > - IN CHAR8 * pLanguage, > - OUT CHAR16 ** ppControllerName > - ) > -{ > - EFI_STATUS Status; > - > - // > - // Set the controller name > - // > - *ppControllerName =3D L"ASIX AX88772B USB Fast Ethernet Controller"; > - Status =3D EFI_SUCCESS; > - > - // > - // Return the operation status > - // > - > - return Status; > -} > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBi= nding.c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c > deleted file mode 100644 > index 2bec94414000..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c > +++ /dev/null > @@ -1,696 +0,0 @@ > -/** @file > - Implement the driver binding protocol for Asix AX88772 Ethernet driver= . > - > - Copyright (c) 2011-2013, Intel Corporation. All rights reserved. > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > -ASIX_DONGLE ASIX_DONGLES[] =3D { > - { 0x05AC, 0x1402, FLAG_TYPE_AX88772 }, // Apple USB Ethernet Adapter > - // ASIX 88772B > - { 0x0B95, 0x772B, FLAG_TYPE_AX88772B | FLAG_EEPROM_MAC }, > - { 0x0000, 0x0000, FLAG_NONE } // END - Do not remove > -}; > - > -/** > - Verify the controller type > - > - @param [in] pThis Protocol instance pointer. > - @param [in] Controller Handle of device to test. > - @param [in] pRemainingDevicePath Not used. > - > - @retval EFI_SUCCESS This driver supports this device. > - @retval other This driver does not support this device. > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverSupported ( > - IN EFI_DRIVER_BINDING_PROTOCOL * pThis, > - IN EFI_HANDLE Controller, > - IN EFI_DEVICE_PATH_PROTOCOL * pRemainingDevicePath > - ) > -{ > - EFI_USB_DEVICE_DESCRIPTOR Device; > - EFI_USB_IO_PROTOCOL * pUsbIo; > - EFI_STATUS Status; > - UINT32 Index; > - > - // > - // Connect to the USB stack > - // > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - (VOID **) &pUsbIo, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_BY_DRIVER > - ); > - if (!EFI_ERROR ( Status )) { > - > - // > - // Get the interface descriptor to check the USB class and find a t= ransport > - // protocol handler. > - // > - Status =3D pUsbIo->UsbGetDeviceDescriptor ( pUsbIo, &Device ); > - if (EFI_ERROR ( Status )) { > - Status =3D EFI_UNSUPPORTED; > - } > - else { > - // > - // Validate the adapter > - // > - for (Index =3D 0; ASIX_DONGLES[Index].VendorId !=3D 0; Index++) { > - if (ASIX_DONGLES[Index].VendorId =3D=3D Device.IdVendor && > - ASIX_DONGLES[Index].ProductId =3D=3D Device.IdProduct) { > - DEBUG ((EFI_D_INFO, "Found the AX88772B\r\n")); > - break; > - } > - } > - > - if (ASIX_DONGLES[Index].VendorId =3D=3D 0) > - Status =3D EFI_UNSUPPORTED; > - } > - > - // > - // Done with the USB stack > - // > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - } > - return Status; > -} > - > - > -/** > - Start this driver on Controller by opening UsbIo and DevicePath protoc= ols. > - Initialize PXE structures, create a copy of the Controller Device Path= with the > - NIC's MAC address appended to it, install the NetworkInterfaceIdentifi= er protocol > - on the newly created Device Path. > - > - @param [in] pThis Protocol instance pointer. > - @param [in] Controller Handle of device to work with. > - @param [in] pRemainingDevicePath Not used, always produce all possible= children. > - > - @retval EFI_SUCCESS This driver is added to Controller. > - @retval other This driver does not support this device. > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverStart ( > - IN EFI_DRIVER_BINDING_PROTOCOL * pThis, > - IN EFI_HANDLE Controller, > - IN EFI_DEVICE_PATH_PROTOCOL * pRemainingDevicePath > - ) > -{ > - > - EFI_STATUS Status; > - NIC_DEVICE *pNicDevice; > - UINTN LengthInBytes; > - EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath =3D NULL; > - MAC_ADDR_DEVICE_PATH MacDeviceNode; > - EFI_USB_DEVICE_DESCRIPTOR Device; > - UINT32 Index; > - > - // > - // Allocate the device structure > - // > - LengthInBytes =3D sizeof ( *pNicDevice ); > - Status =3D gBS->AllocatePool ( > - EfiRuntimeServicesData, > - LengthInBytes, > - (VOID **) &pNicDevice > - ); > - > - if (EFI_ERROR (Status)) { > - DEBUG ((EFI_D_ERROR, "gBS->AllocatePool:pNicDevice ERROR Status =3D %r= \n", Status)); > - goto EXIT; > - } > - > - // > - // Set the structure signature > - // > - ZeroMem ( pNicDevice, LengthInBytes ); > - pNicDevice->Signature =3D DEV_SIGNATURE; > - > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - (VOID **) &pNicDevice->pUsbIo, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_BY_DRIVER > - ); > - > - if (EFI_ERROR (Status)) { > - DEBUG ((EFI_D_ERROR, "gBS->OpenProtocol:EFI_USB_IO_PROTOCOL ERROR Stat= us =3D %r\n", Status)); > - gBS->FreePool ( pNicDevice ); > - goto EXIT; > - } > - > - // > - // Initialize the simple network protocol > - // > - Status =3D SN_Setup ( pNicDevice ); > - > - if (EFI_ERROR(Status)){ > - DEBUG ((EFI_D_ERROR, "SN_Setup ERROR Status =3D %r\n", Status)); > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - gBS->FreePool ( pNicDevice ); > - goto EXIT; > - } > - > - Status =3D pNicDevice->pUsbIo->UsbGetDeviceDescriptor ( pNicDevice->pU= sbIo, &Device ); > - if (EFI_ERROR ( Status )) { > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - gBS->FreePool ( pNicDevice ); > - goto EXIT; > - } else { > - // > - // Validate the adapter > - // > - for (Index =3D 0; ASIX_DONGLES[Index].VendorId !=3D 0; Index++) { > - if (ASIX_DONGLES[Index].VendorId =3D=3D Device.IdVendor && > - ASIX_DONGLES[Index].ProductId =3D=3D Device.IdProduct) { > - break; > - } > - } > - > - if (ASIX_DONGLES[Index].VendorId =3D=3D 0) { > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - gBS->FreePool ( pNicDevice ); > - goto EXIT; > - } > - > - pNicDevice->Flags =3D ASIX_DONGLES[Index].Flags; > - } > - > - // > - // Set Device Path > - // > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiDevicePathProtocolGuid, > - (VOID **) &ParentDevicePath, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_BY_DRIVER > - ); > - if (EFI_ERROR(Status)) { > - DEBUG ((EFI_D_ERROR, "gBS->OpenProtocol:EFI_DEVICE_PATH_PROTOCOL= error. Status =3D %r\n", > - Status)); > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - gBS->FreePool ( pNicDevice ); > - goto EXIT; > - } > - > - ZeroMem (&MacDeviceNode, sizeof (MAC_ADDR_DEVICE_PATH)); > - MacDeviceNode.Header.Type =3D MESSAGING_DEVICE_PATH; > - MacDeviceNode.Header.SubType =3D MSG_MAC_ADDR_DP; > - > - SetDevicePathNodeLength (&MacDeviceNode.Header, sizeof (MAC_ADDR_DEVIC= E_PATH)); > - > - CopyMem (&MacDeviceNode.MacAddress, > - &pNicDevice->SimpleNetworkData.CurrentAddress, > - PXE_HWADDR_LEN_ETHER); > - > - MacDeviceNode.IfType =3D pNicDevice->SimpleNetworkData.IfType; > - > - pNicDevice->MyDevPath =3D AppendDevicePathNode ( > - ParentDevicePath, > - (EFI_DEVICE_PATH_PROTOCOL *) &= MacDeviceNode > - ); > - > - pNicDevice->Controller =3D NULL; > - > - // > - // Install both the simple network and device path protocols. > - // > - Status =3D gBS->InstallMultipleProtocolInterfaces ( > - &pNicDevice->Controller, > - &gEfiCallerIdGuid, > - pNicDevice, > - &gEfiSimpleNetworkProtocolGuid, > - &pNicDevice->SimpleNetwork, > - &gEfiDevicePathProtocolGuid, > - pNicDevice->MyDevPath, > - NULL > - ); > - > - if (EFI_ERROR(Status)){ > - DEBUG ((EFI_D_ERROR, "gBS->InstallMultipleProtocolInterfaces error. St= atus =3D %r\n", > - Status)); > - gBS->CloseProtocol ( > - Controller, > - &gEfiDevicePathProtocolGuid, > - pThis->DriverBindingHandle, > - Controller); > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - gBS->FreePool ( pNicDevice ); > - goto EXIT; > - } > - > - // > - // Open For Child Device > - // > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - (VOID **) &pNicDevice->pUsbIo, > - pThis->DriverBindingHandle, > - pNicDevice->Controller, > - EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER > - ); > - > - if (EFI_ERROR(Status)){ > - gBS->UninstallMultipleProtocolInterfaces ( > - &pNicDevice->Controller, > - &gEfiCallerIdGuid, > - pNicDevice, > - &gEfiSimpleNetworkProtocolGuid, > - &pNicDevice->SimpleNetwork, > - &gEfiDevicePathProtocolGuid, > - pNicDevice->MyDevPath, > - NULL > - ); > - gBS->CloseProtocol ( > - Controller, > - &gEfiDevicePathProtocolGuid, > - pThis->DriverBindingHandle, > - Controller); > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - gBS->FreePool ( pNicDevice ); > - } > - > -EXIT: > - return Status; > - > -} > - > -/** > - Stop this driver on Controller by removing NetworkInterfaceIdentifier = protocol and > - closing the DevicePath and PciIo protocols on Controller. > - > - @param [in] pThis Protocol instance pointer. > - @param [in] Controller Handle of device to stop driver on. > - @param [in] NumberOfChildren How many children need to be stopped. > - @param [in] pChildHandleBuffer Not used. > - > - @retval EFI_SUCCESS This driver is removed Controller. > - @retval EFI_DEVICE_ERROR The device could not be stopped due to a = device error. > - @retval other This driver was not removed from this dev= ice. > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverStop ( > - IN EFI_DRIVER_BINDING_PROTOCOL * pThis, > - IN EFI_HANDLE Controller, > - IN UINTN NumberOfChildren, > - IN EFI_HANDLE * ChildHandleBuffer > - ) > -{ > - BOOLEAN AllChildrenStopped; > - UINTN Index; > - EFI_SIMPLE_NETWORK_PROTOCOL *SimpleNetwork; > - EFI_STATUS Status =3D EFI_SUCCESS; > - NIC_DEVICE *pNicDevice; > - > - // > - // Complete all outstanding transactions to Controller. > - // Don't allow any new transaction to Controller to be started. > - // > - if (NumberOfChildren =3D=3D 0) { > - > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiSimpleNetworkProtocolGuid, > - (VOID **) &SimpleNetwork, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_GET_PROTOCOL > - ); > - > - if (EFI_ERROR(Status)) { > - // > - // This is a 2nd type handle(multi-lun root), it needs to close = devicepath > - // and usbio protocol. > - // > - gBS->CloseProtocol ( > - Controller, > - &gEfiDevicePathProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - return EFI_SUCCESS; > - } > - > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( SimpleNetwork ); > - > - Status =3D gBS->UninstallMultipleProtocolInterfaces ( > - Controller, > - &gEfiCallerIdGuid, > - pNicDevice, > - &gEfiSimpleNetworkProtocolGuid, > - &pNicDevice->SimpleNetwork, > - &gEfiDevicePathProtocolGuid, > - pNicDevice->MyDevPath, > - NULL > - ); > - > - if (EFI_ERROR (Status)) { > - return Status; > - } > - // > - // Close the bus driver > - // > - Status =3D gBS->CloseProtocol ( > - Controller, > - &gEfiDevicePathProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - > - if (EFI_ERROR(Status)){ > - DEBUG ((EFI_D_ERROR, "driver stop: gBS->CloseProtocol:EfiDevic= ePathProtocol error. Status %r\n", Status)); > - } > - > - Status =3D gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - Controller > - ); > - > - if (EFI_ERROR(Status)){ > - DEBUG ((EFI_D_ERROR, "driver stop: gBS->CloseProtocol:EfiUsbIo= Protocol error. Status %r\n", Status)); > - } > - return EFI_SUCCESS; > - } > - AllChildrenStopped =3D TRUE; > - > - for (Index =3D 0; Index < NumberOfChildren; Index++) { > - > - Status =3D gBS->OpenProtocol ( > - ChildHandleBuffer[Index], > - &gEfiSimpleNetworkProtocolGuid, > - (VOID **) &SimpleNetwork, > - pThis->DriverBindingHandle, > - Controller, > - EFI_OPEN_PROTOCOL_GET_PROTOCOL > - ); > - > - if (EFI_ERROR (Status)) { > - AllChildrenStopped =3D FALSE; > - DEBUG ((EFI_D_ERROR, "Fail to stop No.%d multi-lun child handl= e when opening SimpleNetwork\n", (UINT32)Index)); > - continue; > - } > - > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( SimpleNetwork ); > - > - gBS->CloseProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - pThis->DriverBindingHandle, > - ChildHandleBuffer[Index] > - ); > - > - Status =3D gBS->UninstallMultipleProtocolInterfaces ( > - ChildHandleBuffer[Index], > - &gEfiCallerIdGuid, > - pNicDevice, > - &gEfiSimpleNetworkProtocolGuid, > - &pNicDevice->SimpleNetwork, > - &gEfiDevicePathProtocolGuid, > - pNicDevice->MyDevPath, > - NULL > - ); > - > - if (EFI_ERROR (Status)) { > - Status =3D gBS->OpenProtocol ( > - Controller, > - &gEfiUsbIoProtocolGuid, > - (VOID **) &pNicDevice->pUsbIo, > - pThis->DriverBindingHandle, > - ChildHandleBuffer[Index], > - EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER > - ); > - } > - else { > - int i; > - RX_PKT * pCurr =3D pNicDevice->QueueHead; > - RX_PKT * pFree; > - > - for ( i =3D 0 ; i < MAX_QUEUE_SIZE ; i++) { > - if ( NULL !=3D pCurr ) { > - pFree =3D pCurr; > - pCurr =3D pCurr->pNext; > - gBS->FreePool (pFree); > - } > - } > - > - if ( NULL !=3D pNicDevice->pRxTest) > - gBS->FreePool (pNicDevice->pRxTest); > - > - if ( NULL !=3D pNicDevice->pTxTest) > - gBS->FreePool (pNicDevice->pTxTest); > - > - if ( NULL !=3D pNicDevice->MyDevPath) > - gBS->FreePool (pNicDevice->MyDevPath); > - > - if ( NULL !=3D pNicDevice) > - gBS->FreePool (pNicDevice); > - } > - } > - > - if (!AllChildrenStopped) { > - return EFI_DEVICE_ERROR; > - } > - return EFI_SUCCESS; > -} > - > - > -/** > - Driver binding protocol declaration > -**/ > -EFI_DRIVER_BINDING_PROTOCOL gDriverBinding =3D { > - DriverSupported, > - DriverStart, > - DriverStop, > - 0xa, > - NULL, > - NULL > -}; > - > - > -/** > - Ax88772 driver unload routine. > - > - @param [in] ImageHandle Handle for the image. > - > - @retval EFI_SUCCESS Image may be unloaded > - > -**/ > -EFI_STATUS > -EFIAPI > -DriverUnload ( > - IN EFI_HANDLE ImageHandle > - ) > -{ > - UINTN BufferSize; > - UINTN Index; > - UINTN Max; > - EFI_HANDLE * pHandle; > - EFI_STATUS Status; > - > - // > - // Determine which devices are using this driver > - // > - BufferSize =3D 0; > - pHandle =3D NULL; > - Status =3D gBS->LocateHandle ( > - ByProtocol, > - &gEfiCallerIdGuid, > - NULL, > - &BufferSize, > - NULL ); > - if ( EFI_BUFFER_TOO_SMALL =3D=3D Status ) { > - for ( ; ; ) { > - // > - // One or more block IO devices are present > - // > - Status =3D gBS->AllocatePool ( > - EfiRuntimeServicesData, > - BufferSize, > - (VOID **) &pHandle > - ); > - if ( EFI_ERROR ( Status )) { > - DEBUG ((EFI_D_ERROR, "Insufficient memory, failed handle buffer = allocation\r\n")); > - break; > - } > - > - // > - // Locate the block IO devices > - // > - Status =3D gBS->LocateHandle ( > - ByProtocol, > - &gEfiCallerIdGuid, > - NULL, > - &BufferSize, > - pHandle ); > - if ( EFI_ERROR ( Status )) { > - // > - // Error getting handles > - // > - break; > - } > - > - // > - // Remove any use of the driver > - // > - Max =3D BufferSize / sizeof ( pHandle[ 0 ]); > - for ( Index =3D 0; Max > Index; Index++ ) { > - Status =3D DriverStop ( &gDriverBinding, > - pHandle[ Index ], > - 0, > - NULL ); > - if ( EFI_ERROR ( Status )) { > - DEBUG ((EFI_D_ERROR, "WARNING - Failed to shutdown the driver = on handle %08x\r\n", pHandle[ Index ])); > - break; > - } > - } > - break; > - } > - } > - else { > - if ( EFI_NOT_FOUND =3D=3D Status ) { > - // > - // No devices were found > - // > - Status =3D EFI_SUCCESS; > - } > - } > - > - // > - // Free the handle array > - // > - if ( NULL !=3D pHandle ) { > - gBS->FreePool ( pHandle ); > - } > - > - // > - // Remove the protocols installed by the EntryPoint routine. > - // > - if ( !EFI_ERROR ( Status )) { > - gBS->UninstallMultipleProtocolInterfaces ( > - ImageHandle, > - &gEfiDriverBindingProtocolGuid, > - &gDriverBinding, > - &gEfiComponentNameProtocolGuid, > - &gComponentName, > - &gEfiComponentName2ProtocolGuid, > - &gComponentName2, > - NULL > - ); > - > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Removed: gEfiComponentName2ProtocolGuid from 0x%08x\r\n", > - ImageHandle )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Removed: gEfiComponentNameProtocolGuid from 0x%08x\r\n"= , > - ImageHandle )); > - DEBUG (( DEBUG_POOL | DEBUG_INIT | DEBUG_INFO, > - "Removed: gEfiDriverBindingProtocolGuid from 0x%08x\r\n"= , > - ImageHandle )); > - > - } > - > - return Status; > -} > - > - > -/** > -Ax88772 driver entry point. > - > -@param [in] ImageHandle Handle for the image. > -@param [in] pSystemTable Address of the system table. > - > -@retval EFI_SUCCESS Image successfully loaded. > - > -**/ > -EFI_STATUS > -EFIAPI > -EntryPoint ( > - IN EFI_HANDLE ImageHandle, > - IN EFI_SYSTEM_TABLE * pSystemTable > - ) > -{ > - EFI_STATUS Status; > - > - // > - // Add the driver to the list of drivers > - // > - Status =3D EfiLibInstallDriverBindingComponentName2 ( > - ImageHandle, > - pSystemTable, > - &gDriverBinding, > - ImageHandle, > - &gComponentName, > - &gComponentName2 > - ); > - if ( !EFI_ERROR ( Status )) { > - DEBUG ((EFI_D_INFO, "Installed: gEfiDriverBindingProtocolGuid on 0= x%08x\r\n", > - ImageHandle)); > - DEBUG ((EFI_D_INFO, "Installed: gEfiComponentNameProtocolGuid on 0= x%08x\r\n", > - ImageHandle)); > - DEBUG ((EFI_D_INFO,"Installed: gEfiComponentName2ProtocolGuid on 0= x%08x\r\n", > - ImageHandle )); > - > - } > - return Status; > -} > diff --git a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/SimpleNe= twork.c > b/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/SimpleNetwork.c > deleted file mode 100644 > index 76babedb2001..000000000000 > --- a/Drivers/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/SimpleNetwork.c > +++ /dev/null > @@ -1,1657 +0,0 @@ > -/** @file > - Provides the Simple Network functions. > - > - Copyright (c) 2011 - 2016, Intel Corporation. All rights reserved. > - SPDX-License-Identifier: BSD-2-Clause-Patent > - > -**/ > - > -#include "Ax88772.h" > - > -/** > - This function updates the filtering on the receiver. > - > - This support routine calls ::Ax88772MacAddressSet to update > - the MAC address. This routine then rebuilds the multicast > - hash by calling ::Ax88772MulticastClear and ::Ax88772MulticastSet. > - Finally this routine enables the receiver by calling > - ::Ax88772RxControl. > - > - @param [in] pSimpleNetwork Simple network mode pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -ReceiveFilterUpdate ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_STATUS Status; > - UINT32 Index; > - > - // > - // Set the MAC address > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pMode =3D pSimpleNetwork->Mode; > - > - // > - // Clear the multicast hash table > - // > - Ax88772MulticastClear ( pNicDevice ); > - > - // > - // Load the multicast hash table > - // > - if ( 0 !=3D ( pMode->ReceiveFilterSetting & EFI_SIMPLE_NETWORK_RECEIVE= _MULTICAST )) { > - for ( Index =3D 0; Index < pMode->MCastFilterCount; Index++ ) { > - // > - // Enable the next multicast address > - // > - Ax88772MulticastSet ( pNicDevice, > - &pMode->MCastFilter[ Index ].Addr[0]); > - } > - } > - > - Status =3D Ax88772RxControl ( pNicDevice, pMode->ReceiveFilterSetting = ); > - > - return Status; > -} > - > - > -/** > - This function updates the SNP driver status. > - > - This function gets the current interrupt and recycled transmit > - buffer status from the network interface. The interrupt status > - and the media status are returned as a bit mask in InterruptStatus. > - If InterruptStatus is NULL, the interrupt status will not be read. > - Upon successful return of the media status, the MediaPresent field > - of EFI_SIMPLE_NETWORK_MODE will be updated to reflect any change > - of media status. If TxBuf is not NULL, a recycled transmit buffer > - address will be retrived. If a recycled transmit buffer address > - is returned in TxBuf, then the buffer has been successfully > - transmitted, and the status for that buffer is cleared. > - > - This function calls ::Ax88772Rx to update the media status and > - queue any receive packets. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] pInterruptStatus A pointer to the bit mask of the current= active interrupts. > - If this is NULL, the interrupt status wi= ll not be read from > - the device. If this is not NULL, the in= terrupt status will > - be read from teh device. When the inter= rupt status is read, > - it will also be cleared. Clearing the t= ransmit interrupt > - does not empty the recycled transmit buf= fer array. > - @param [out] ppTxBuf Recycled transmit buffer address. The n= etwork interface will > - not transmit if its internal recycled tr= ansmit buffer array is > - full. Reading the transmit buffer does = not clear the transmit > - interrupt. If this is NULL, then the tr= ansmit buffer status > - will not be read. If there are not tran= smit buffers to recycle > - and TxBuf is not NULL, *TxBuf will be se= t to NULL. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_GetStatus ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - OUT UINT32 * pInterruptStatus, > - OUT VOID ** ppTxBuf > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_STATUS Status; > - BOOLEAN bFullDuplex; > - BOOLEAN bLinkUp; > - BOOLEAN bSpeed100; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Return the transmit buffer > - // > - > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - if (( NULL !=3D ppTxBuf ) && ( NULL !=3D pNicDevice->pTxBuffer )) { > - *ppTxBuf =3D pNicDevice->pTxBuffer; > - pNicDevice->pTxBuffer =3D NULL; > - } > - > - // > - // Determine if interface is running > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - > - if ( pNicDevice->LinkIdleCnt > MAX_LINKIDLE_THRESHOLD) { > - > - bLinkUp =3D pNicDevice->bLinkUp; > - bSpeed100 =3D pNicDevice->b100Mbps; > - bFullDuplex =3D pNicDevice->bFullDuplex; > - Status =3D Ax88772NegotiateLinkComplete ( pNicDevice, > - &pNicDevice->PollCount, > - &pNicDevice->bComplete, > - &pNicDevice->bLinkUp, > - &pNicDevice->b100Mbps, > - &pNicDevice->bFullDuplex ); > - > - // > - // Determine if the autonegotiation is complete > - // > - if ( pNicDevice->bComplete ) { > - if ( pNicDevice->bLinkUp ) { > - if (( bSpeed100 && ( !pNicDevice->b100Mbps )) > - || (( !bSpeed100 ) && pNicDevice->b100Mbps ) > - || ( bFullDuplex && ( !pNicDevice->bFullDuplex )) > - || (( !bFullDuplex ) && pNicDevice->bFullDuplex ))= { > - pNicDevice->PollCount =3D 0; > - DEBUG (( EFI_D_INFO , "Reset to establish prop= er link setup: %d Mbps, %a duplex\r\n", > - pNicDevice->b100Mbps ? 100 : 10, pNi= cDevice->bFullDuplex ? "Full" : "Half")); > - Status =3D SN_Reset ( &pNicDevice->SimpleNetwo= rk, FALSE ); > - } > - if (( !bLinkUp ) && pNicDevice->bLinkUp ) { > - // > - // Display the autonegotiation status > - // > - DEBUG (( EFI_D_INFO , "Link: Up, %d Mbps, %a duple= x\r\n", > - pNicDevice->b100Mbps ? 100 : 10, pNicDev= ice->bFullDuplex ? "Full" : "Half")); > - > - } > - pNicDevice->LinkIdleCnt =3D 0; > - } > - } > - // > - // Update the link status > - // > - if ( bLinkUp && ( !pNicDevice->bLinkUp )) { > - DEBUG (( EFI_D_INFO , "Link: Down\r\n")); > - } > - } > - > - pMode->MediaPresent =3D pNicDevice->bLinkUp; > - // > - // Return the interrupt status > - // > - if ( NULL !=3D pInterruptStatus ) { > - *pInterruptStatus =3D 0; > - } > - Status =3D EFI_SUCCESS; > - } > - else { > - if ( EfiSimpleNetworkStarted =3D=3D pMode->State ) { > - Status =3D EFI_DEVICE_ERROR; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - gBS->RestoreTPL(TplPrevious) ; > - > - return Status; > -} > - > - > -/** > - Resets the network adapter and allocates the transmit and receive buff= ers > - required by the network interface; optionally, also requests allocatio= n of > - additional transmit and receive buffers. This routine must be called = before > - any other routine in the Simple Network protocol is called. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] ExtraRxBufferSize Size in bytes to add to the receive buff= er allocation > - @param [in] ExtraTxBufferSize Size in bytes to add to the transmit buf= fer allocation > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_OUT_OF_RESOURCES There was not enough memory for the tran= smit and receive buffers > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Initialize ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN ExtraRxBufferSize, > - IN UINTN ExtraTxBufferSize > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - UINT32 TmpState; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL (TPL_CALLBACK); > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Determine if the interface is already started > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStarted =3D=3D pMode->State ) { > - if (( 0 =3D=3D ExtraRxBufferSize ) && ( 0 =3D=3D ExtraTxBufferSize= )) { > - // > - // Start the adapter > - // > - TmpState =3D pMode->State; > - pMode->State =3D EfiSimpleNetworkInitialized; > - Status =3D SN_Reset ( pSimpleNetwork, FALSE ); > - if ( EFI_ERROR ( Status )) { > - // > - // Update the network state > - // > - pMode->State =3D TmpState; > - DEBUG (( EFI_D_ERROR , "SN_reset failed\n")); > - } > - } > - else { > - DEBUG (( EFI_D_ERROR , "Increase ExtraRxBufferSize =3D %d ExtraT= xBufferSize=3D%d\n", > - ExtraRxBufferSize, ExtraTxBufferSize)); > - Status =3D EFI_UNSUPPORTED; > - } > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - gBS->RestoreTPL (TplPrevious); > - > - return Status; > -} > - > - > -/** > - This function converts a multicast IP address to a multicast HW MAC ad= dress > - for all packet transactions. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bIPv6 Set to TRUE if the multicast IP address = is IPv6 [RFC2460]. > - Set to FALSE if the multicast IP address= is IPv4 [RFC 791]. > - @param [in] pIP The multicast IP address that is to be c= onverted to a > - multicast HW MAC address. > - @param [in] pMAC The multicast HW MAC address that is to = be generated from IP. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_MCastIPtoMAC ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bIPv6, > - IN EFI_IP_ADDRESS * pIP, > - OUT EFI_MAC_ADDRESS * pMAC > - ) > -{ > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - // > - // Get pointer to SNP driver instance for *this. > - // > - if (pSimpleNetwork =3D=3D NULL) { > - gBS->RestoreTPL(TplPrevious); > - return EFI_INVALID_PARAMETER; > - } > - > - if (pIP =3D=3D NULL || pMAC =3D=3D NULL) { > - gBS->RestoreTPL(TplPrevious); > - return EFI_INVALID_PARAMETER; > - } > - > - if (bIPv6){ > - Status =3D EFI_UNSUPPORTED; > - } > - else { > - // > - // check if the ip given is a mcast IP > - // > - if ((pIP->v4.Addr[0] & 0xF0) !=3D 0xE0) { > - gBS->RestoreTPL(TplPrevious); > - return EFI_INVALID_PARAMETER; > - } > - else { > - if (pSimpleNetwork->Mode->State =3D=3D EfiSimpleNetworkInitializ= ed) > - { > - pMAC->Addr[0] =3D 0x01; > - pMAC->Addr[1] =3D 0x00; > - pMAC->Addr[2] =3D 0x5e; > - pMAC->Addr[3] =3D (UINT8) (pIP->v4.Addr[1] & 0x7f); > - pMAC->Addr[4] =3D (UINT8) pIP->v4.Addr[2]; > - pMAC->Addr[5] =3D (UINT8) pIP->v4.Addr[3]; > - Status =3D EFI_SUCCESS; > - } > - else if (pSimpleNetwork->Mode->State =3D=3D EfiSimpleNetworkStar= ted) { > - Status =3D EFI_DEVICE_ERROR; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - gBS->RestoreTPL(TplPrevious); > - } > - } > - return Status; > -} > - > - > -/** > - This function performs read and write operations on the NVRAM device > - attached to a network interface. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] ReadWrite TRUE for read operations, FALSE for writ= e operations. > - @param [in] Offset Byte offset in the NVRAM device at which= to start the > - read or write operation. This must be a= multiple of > - NvRamAccessSize and less than NvRamSize. > - @param [in] BufferSize The number of bytes to read or write fro= m the NVRAM device. > - This must also be a multiple of NvramAcc= essSize. > - @param [in, out] pBuffer A pointer to the data buffer. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_NvData ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN ReadWrite, > - IN UINTN Offset, > - IN UINTN BufferSize, > - IN OUT VOID * pBuffer > - ) > -{ > - EFI_STATUS Status; > - // > - // This is not currently supported > - // > - Status =3D EFI_UNSUPPORTED; > - return Status; > -} > - > -VOID > -FillPkt2Queue ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN BufLength) > -{ > - > - UINT16 * pLength; > - UINT16 * pLengthBar; > - UINT8* pData; > - UINT32 offset; > - NIC_DEVICE * pNicDevice; > - > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork); > - for ( offset =3D 0; offset < BufLength; ){ > - pLength =3D (UINT16*) (pNicDevice->pBulkInBuff + offset); > - pLengthBar =3D (UINT16*) (pNicDevice->pBulkInBuff + offset +2); > - > - *pLength &=3D 0x7ff; > - *pLengthBar &=3D 0x7ff; > - *pLengthBar |=3D 0xf800; > - > - if ((*pLength ^ *pLengthBar ) !=3D 0xFFFF) { > - DEBUG (( EFI_D_ERROR , "Pkt length error. BufLength =3D %d\n",= BufLength)); > - return; > - } > - > - if (TRUE =3D=3D pNicDevice->pNextFill->f_Used) { > - return; > - } > - else { > - pData =3D pNicDevice->pBulkInBuff + offset + 4; > - pNicDevice->pNextFill->f_Used =3D TRUE; > - pNicDevice->pNextFill->Length =3D *pLength; > - CopyMem (&pNicDevice->pNextFill->Data[0], pData, *pLength); > - > - pNicDevice->pNextFill =3D pNicDevice->pNextFill->pNext; > - offset +=3D ((*pLength + HW_HDR_LENGTH - 1) &~3) + 1; > - pNicDevice->PktCntInQueue++; > - } > - > - } > -} > - > -EFI_STATUS > -EFIAPI > -SN_Receive ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - OUT UINTN * pHeaderSize, > - OUT UINTN * pBufferSize, > - OUT VOID * pBuffer, > - OUT EFI_MAC_ADDRESS * pSrcAddr, > - OUT EFI_MAC_ADDRESS * pDestAddr, > - OUT UINT16 * pProtocol > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - UINT16 Type; > - EFI_USB_IO_PROTOCOL *pUsbIo; > - UINTN LengthInBytes; > - UINT32 TransferStatus; > - RX_PKT * pFirstFill; > - TplPrevious =3D gBS->RaiseTPL (TPL_CALLBACK); > - > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && > - ( NULL !=3D pSimpleNetwork->Mode ) && > - (NULL !=3D pBufferSize) && > - (NULL !=3D pBuffer)) { > - // > - // The interface must be running > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Update the link status > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pNicDevice->LinkIdleCnt++; > - pMode->MediaPresent =3D pNicDevice->bLinkUp; > - > - if ( pMode->MediaPresent && pNicDevice->bComplete) { > - > - > - if (pNicDevice->PktCntInQueue !=3D 0 ) { > - DEBUG (( EFI_D_INFO, "pNicDevice->PktCntInQueue =3D %d\n", > - pNicDevice->PktCntInQueue)); > - } > - > - LengthInBytes =3D MAX_BULKIN_SIZE; > - if (pNicDevice->PktCntInQueue =3D=3D 0 ){ > - // > - // Attempt to do bulk in > - // > - SetMem (&pNicDevice->pBulkInBuff[0], 4, 0); > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbBulkTransfer ( pUsbIo, > - USB_ENDPOINT_DIR_IN | BULK_IN_END= POINT, > - &pNicDevice->pBulkInBuff[0], > - &LengthInBytes, > - BULKIN_TIMEOUT, > - &TransferStatus ); > - > - if (LengthInBytes !=3D 0 && !EFI_ERROR(Status) && !EFI_ERROR= (TransferStatus) ){ > - FillPkt2Queue(pSimpleNetwork, LengthInBytes); > - } > - } > - > - pFirstFill =3D pNicDevice->pFirstFill; > - > - if (TRUE =3D=3D pFirstFill->f_Used) { > - ETHERNET_HEADER * pHeader; > - pNicDevice->LinkIdleCnt =3D 0; > - CopyMem (pBuffer, &pFirstFill->Data[0], pFirstFill->Length)= ; > - pHeader =3D (ETHERNET_HEADER *) &pFirstFill->Data[0]; > - > - DEBUG (( EFI_D_INFO, "RX: %02x-%02x-%02x-%02x-%02x-%02x " > - "%02x-%02x-%02x-%02x-%02x-%02x %02x-%02x %d byte= s\r\n", > - pFirstFill->Data[0], > - pFirstFill->Data[1], > - pFirstFill->Data[2], > - pFirstFill->Data[3], > - pFirstFill->Data[4], > - pFirstFill->Data[5], > - pFirstFill->Data[6], > - pFirstFill->Data[7], > - pFirstFill->Data[8], > - pFirstFill->Data[9], > - pFirstFill->Data[10], > - pFirstFill->Data[11], > - pFirstFill->Data[12], > - pFirstFill->Data[13], > - pFirstFill->Length)); > - > - if ( NULL !=3D pHeaderSize ) { > - *pHeaderSize =3D sizeof ( *pHeader ); > - } > - if ( NULL !=3D pDestAddr ) { > - CopyMem ( pDestAddr, &pHeader->dest_addr, PXE_HWADDR_LEN_= ETHER ); > - } > - if ( NULL !=3D pSrcAddr ) { > - CopyMem ( pSrcAddr, &pHeader->src_addr, PXE_HWADDR_LEN_ETHE= R ); > - } > - if ( NULL !=3D pProtocol ) { > - Type =3D pHeader->type; > - Type =3D (UINT16)(( Type >> 8 ) | ( Type << 8 )); > - *pProtocol =3D Type; > - } > - Status =3D EFI_SUCCESS; > - if (*pBufferSize < pFirstFill->Length) { > - DEBUG (( EFI_D_ERROR, "RX: Buffer was too small")); > - Status =3D EFI_BUFFER_TOO_SMALL; > - } > - *pBufferSize =3D pFirstFill->Length; > - pFirstFill->f_Used =3D FALSE; > - pNicDevice->pFirstFill =3D pFirstFill->pNext; > - pNicDevice->PktCntInQueue--; > - } > - else { > - pNicDevice->LinkIdleCnt++; > - Status =3D EFI_NOT_READY; > - } > - } > - else { > - // > - // Link no up > - // > - pNicDevice->LinkIdleCnt++; > - Status =3D EFI_NOT_READY; > - } > - > - } > - else { > - if (EfiSimpleNetworkStarted =3D=3D pMode->State) { > - Status =3D EFI_DEVICE_ERROR; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - gBS->RestoreTPL (TplPrevious); > - return Status; > -} > - > -/** > - This function is used to enable and disable the hardware and software = receive > - filters for the underlying network device. > - > - The receive filter change is broken down into three steps: > - > - 1. The filter mask bits that are set (ON) in the Enable parameter > - are added to the current receive filter settings. > - > - 2. The filter mask bits that are set (ON) in the Disable parameter > - are subtracted from the updated receive filter settins. > - > - 3. If the resulting filter settigns is not supported by the hardwar= e > - a more liberal setting is selected. > - > - If the same bits are set in the Enable and Disable parameters, then th= e bits > - in the Disable parameter takes precedence. > - > - If the ResetMCastFilter parameter is TRUE, then the multicast address = list > - filter is disabled (irregardless of what other multicast bits are set = in > - the enable and Disable parameters). The SNP->Mode->MCastFilterCount f= ield > - is set to zero. The SNP->Mode->MCastFilter contents are undefined. > - > - After enableing or disabling receive filter settings, software should > - verify the new settings by checking the SNP->Mode->ReceeiveFilterSetti= ngs, > - SNP->Mode->MCastFilterCount and SNP->Mode->MCastFilter fields. > - > - Note: Some network drivers and/or devices will automatically promote > - receive filter settings if the requested setting can not be honored. > - For example, if a request for four multicast addresses is made and > - the underlying hardware only supports two multicast addresses the > - driver might set the promiscuous or promiscuous multicast receive filt= ers > - instead. The receiving software is responsible for discarding any ext= ra > - packets that get through the hardware receive filters. > - > - If ResetMCastFilter is TRUE, then the multicast receive filter list > - on the network interface will be reset to the default multicast receiv= e > - filter list. If ResetMCastFilter is FALSE, and this network interface > - allows the multicast receive filter list to be modified, then the > - MCastFilterCnt and MCastFilter are used to update the current multicas= t > - receive filter list. The modified receive filter list settings can be > - found in the MCastFilter field of EFI_SIMPLE_NETWORK_MODE. > - > - This routine calls ::ReceiveFilterUpdate to update the receive > - state in the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] Enable A bit mask of receive filters to enable = on the network interface. > - @param [in] Disable A bit mask of receive filters to disable= on the network interface. > - For backward compatibility with EFI 1.1 = platforms, the > - EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST bit= must be set > - when the ResetMCastFilter parameter is T= RUE. > - @param [in] bResetMCastFilter Set to TRUE to reset the contents of the= multicast receive > - filters on the network interface to thei= r default values. > - @param [in] MCastFilterCnt Number of multicast HW MAC address in th= e new MCastFilter list. > - This value must be less than or equal to= the MaxMCastFilterCnt > - field of EFI_SIMPLE_NETWORK_MODE. This = field is optional if > - ResetMCastFilter is TRUE. > - @param [in] pMCastFilter A pointer to a list of new multicast rec= eive filter HW MAC > - addresses. This list will replace any e= xisting multicast > - HW MAC address list. This field is opti= onal if ResetMCastFilter > - is TRUE. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_ReceiveFilters ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINT32 Enable, > - IN UINT32 Disable, > -/* > -#define EFI_SIMPLE_NETWORK_RECEIVE_UNICAST 0x01 > -#define EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST 0x02 > -#define EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST 0x04 > -#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS 0x08 > -#define EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULTICAST 0x10 > -*/ > - IN BOOLEAN bResetMCastFilter, > - IN UINTN MCastFilterCnt, > - IN EFI_MAC_ADDRESS * pMCastFilter > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status =3D EFI_SUCCESS; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - pMode =3D pSimpleNetwork->Mode; > - > - if (pSimpleNetwork =3D=3D NULL) { > - gBS->RestoreTPL(TplPrevious); > - return EFI_INVALID_PARAMETER; > - } > - > - switch (pMode->State) { > - case EfiSimpleNetworkInitialized: > - break; > - case EfiSimpleNetworkStopped: > - Status =3D EFI_NOT_STARTED; > - gBS->RestoreTPL(TplPrevious); > - return Status; > - default: > - Status =3D EFI_DEVICE_ERROR; > - gBS->RestoreTPL(TplPrevious); > - return Status; > - } > - > - // > - // check if we are asked to enable or disable something that the UNDI > - // does not even support! > - // > - if (((Enable &~pMode->ReceiveFilterMask) !=3D 0) || > - ((Disable &~pMode->ReceiveFilterMask) !=3D 0)) { > - Status =3D EFI_INVALID_PARAMETER; > - gBS->RestoreTPL(TplPrevious); > - return Status; > - } > - > - if (bResetMCastFilter) { > - Disable |=3D (EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST & pMode->ReceiveF= ilterMask); > - pMode->MCastFilterCount =3D 0; > - if ( (0 =3D=3D (pMode->ReceiveFilterSetting & EFI_SIMPLE_NETWORK_R= ECEIVE_MULTICAST)) > - && Enable =3D=3D 0 && Disable =3D=3D 2) { > - gBS->RestoreTPL(TplPrevious); > - return EFI_SUCCESS; > - } > - } > - else { > - if (MCastFilterCnt !=3D 0) { > - UINTN i; > - EFI_MAC_ADDRESS * pMulticastAddress; > - pMulticastAddress =3D pMCastFilter; > - > - if ((MCastFilterCnt > pMode->MaxMCastFilterCount) || > - (pMCastFilter =3D=3D NULL)) { > - Status =3D EFI_INVALID_PARAMETER; > - gBS->RestoreTPL(TplPrevious); > - return Status; > - } > - > - for ( i =3D 0 ; i < MCastFilterCnt ; i++ ) { > - UINT8 tmp; > - tmp =3D pMulticastAddress->Addr[0]; > - if ( (tmp & 0x01) !=3D 0x01 ) { > - gBS->RestoreTPL(TplPrevious); > - return EFI_INVALID_PARAMETER; > - } > - pMulticastAddress++; > - } > - > - pMode->MCastFilterCount =3D (UINT32)MCastFilterCnt; > - CopyMem (&pMode->MCastFilter[0], > - pMCastFilter, > - MCastFilterCnt * sizeof ( EFI_MAC_ADDRESS)); > - } > - } > - > - if (Enable =3D=3D 0 && Disable =3D=3D 0 && !bResetMCastFilter && MCast= FilterCnt =3D=3D 0) { > - Status =3D EFI_SUCCESS; > - gBS->RestoreTPL(TplPrevious); > - return Status; > - } > - > - if ((Enable & EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST) !=3D 0 && MCastFil= terCnt =3D=3D 0) { > - Status =3D EFI_INVALID_PARAMETER; > - gBS->RestoreTPL(TplPrevious); > - return Status; > - } > - > - pMode->ReceiveFilterSetting |=3D Enable; > - pMode->ReceiveFilterSetting &=3D ~Disable; > - Status =3D ReceiveFilterUpdate (pSimpleNetwork); > - > - if (EFI_DEVICE_ERROR =3D=3D Status || EFI_INVALID_PARAMETER =3D=3D Sta= tus) > - Status =3D EFI_SUCCESS; > - > - gBS->RestoreTPL(TplPrevious); > - return Status; > -} > - > -/** > - Reset the network adapter. > - > - Resets a network adapter and reinitializes it with the parameters that > - were provided in the previous call to Initialize (). The transmit and > - receive queues are cleared. Receive filters, the station address, the > - statistics, and the multicast-IP-to-HW MAC addresses are not reset by > - this call. > - > - This routine calls ::Ax88772Reset to perform the adapter specific > - reset operation. This routine also starts the link negotiation > - by calling ::Ax88772NegotiateLinkStart. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bExtendedVerification Indicates that the driver may perfo= rm a more > - exhaustive verification operation of the= device > - during reset. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Reset ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bExtendedVerification > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Update the device state > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pNicDevice->bComplete =3D FALSE; > - pNicDevice->bLinkUp =3D FALSE; > - pNicDevice->bHavePkt =3D FALSE; > - pMode =3D pSimpleNetwork->Mode; > - pMode->MediaPresent =3D FALSE; > - > - // > - // Reset the device > - // > - Status =3D Ax88772Reset ( pNicDevice ); > - if ( !EFI_ERROR ( Status )) { > - // > - // Update the receive filters in the adapter > - // > - Status =3D ReceiveFilterUpdate ( pSimpleNetwork ); > - > - // > - // Try to get a connection to the network > - // > - if ( !EFI_ERROR ( Status )) { > - // > - // Start the autonegotiation > - // > - Status =3D Ax88772NegotiateLinkStart ( pNicDevice ); > - } > - } > - } > - else { > - if (EfiSimpleNetworkStarted =3D=3D pMode->State) { > - Status =3D EFI_DEVICE_ERROR; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - gBS->RestoreTPL ( TplPrevious ); > - return Status; > -} > - > -/** > - Initialize the simple network protocol. > - > - This routine calls ::Ax88772MacAddressGet to obtain the > - MAC address. > - > - @param [in] pNicDevice NIC_DEVICE_INSTANCE pointer > - > - @retval EFI_SUCCESS Setup was successful > - > -**/ > -EFI_STATUS > -SN_Setup ( > - IN NIC_DEVICE * pNicDevice > - ) > -{ > - > - > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork; > - EFI_STATUS Status; > - RX_PKT * pCurr =3D NULL; > - RX_PKT * pPrev =3D NULL; > - > - pSimpleNetwork =3D &pNicDevice->SimpleNetwork; > - pSimpleNetwork->Revision =3D EFI_SIMPLE_NETWORK_PROTOCOL_REVISION; > - pSimpleNetwork->Start =3D (EFI_SIMPLE_NETWORK_START)SN_Start; > - pSimpleNetwork->Stop =3D (EFI_SIMPLE_NETWORK_STOP)SN_Stop; > - pSimpleNetwork->Initialize =3D (EFI_SIMPLE_NETWORK_INITIALIZE)SN_Initi= alize; > - pSimpleNetwork->Reset =3D (EFI_SIMPLE_NETWORK_RESET)SN_Reset; > - pSimpleNetwork->Shutdown =3D (EFI_SIMPLE_NETWORK_SHUTDOWN)SN_Shutdown; > - pSimpleNetwork->ReceiveFilters =3D (EFI_SIMPLE_NETWORK_RECEIVE_FILTERS= )SN_ReceiveFilters; > - pSimpleNetwork->StationAddress =3D (EFI_SIMPLE_NETWORK_STATION_ADDRESS= )SN_StationAddress; > - pSimpleNetwork->Statistics =3D (EFI_SIMPLE_NETWORK_STATISTICS)SN_Stati= stics; > - pSimpleNetwork->MCastIpToMac =3D (EFI_SIMPLE_NETWORK_MCAST_IP_TO_MAC)S= N_MCastIPtoMAC; > - pSimpleNetwork->NvData =3D (EFI_SIMPLE_NETWORK_NVDATA)SN_NvData; > - pSimpleNetwork->GetStatus =3D (EFI_SIMPLE_NETWORK_GET_STATUS)SN_GetSta= tus; > - pSimpleNetwork->Transmit =3D (EFI_SIMPLE_NETWORK_TRANSMIT)SN_Transmit; > - pSimpleNetwork->Receive =3D (EFI_SIMPLE_NETWORK_RECEIVE)SN_Receive; > - pSimpleNetwork->WaitForPacket =3D NULL; > - pMode =3D &pNicDevice->SimpleNetworkData; > - pSimpleNetwork->Mode =3D pMode; > - pMode->State =3D EfiSimpleNetworkStopped; > - pMode->HwAddressSize =3D PXE_HWADDR_LEN_ETHER; > - pMode->MediaHeaderSize =3D sizeof ( ETHERNET_HEADER ); > - pMode->MaxPacketSize =3D MAX_ETHERNET_PKT_SIZE; > - pMode->NvRamSize =3D 0; > - pMode->NvRamAccessSize =3D 0; > - pMode->ReceiveFilterMask =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_MULT= ICAST; > - pMode->ReceiveFilterSetting =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST; > - pMode->MaxMCastFilterCount =3D MAX_MCAST_FILTER_CNT; > - pMode->MCastFilterCount =3D 0; > - SetMem ( &pMode->BroadcastAddress, > - PXE_HWADDR_LEN_ETHER, > - 0xff ); > - pMode->IfType =3D EfiNetworkInterfaceUndi; > - pMode->MacAddressChangeable =3D TRUE; > - pMode->MultipleTxSupported =3D FALSE; > - pMode->MediaPresentSupported =3D TRUE; > - pMode->MediaPresent =3D FALSE; > - pNicDevice->LinkIdleCnt =3D 0; > - // > - // Read the MAC address > - // > - pNicDevice->PhyId =3D PHY_ID_INTERNAL; > - pNicDevice->b100Mbps =3D TRUE; > - pNicDevice->bFullDuplex =3D TRUE; > - > - Status =3D Ax88772MacAddressGet ( > - pNicDevice, > - &pMode->PermanentAddress.Addr[0]); > - > - if ( !EFI_ERROR ( Status )) { > - int i; > - // > - // Use the hardware address as the current address > - // > - > - CopyMem ( &pMode->CurrentAddress, > - &pMode->PermanentAddress, > - PXE_HWADDR_LEN_ETHER ); > - > - CopyMem ( &pNicDevice->MAC, > - &pMode->PermanentAddress, > - PXE_HWADDR_LEN_ETHER ); > - > - pNicDevice->PktCntInQueue =3D 0; > - > - for ( i =3D 0 ; i < MAX_QUEUE_SIZE ; i++) { > - Status =3D gBS->AllocatePool ( EfiRuntimeServicesData, > - sizeof (RX_PKT), > - (VOID **) &pCurr); > - if ( EFI_ERROR(Status)) { > - DEBUG (( EFI_D_ERROR, "Memory are not enough\n")); > - return Status; > - } > - pCurr->f_Used =3D FALSE; > - > - if ( i ) { > - pPrev->pNext =3D pCurr; > - } > - else { > - pNicDevice->QueueHead =3D pCurr; > - } > - > - if (MAX_QUEUE_SIZE - 1 =3D=3D i) { > - pCurr->pNext =3D pNicDevice->QueueHead; > - } > - > - pPrev =3D pCurr; > - } > - > - pNicDevice->pNextFill =3D pNicDevice->QueueHead; > - pNicDevice->pFirstFill =3D pNicDevice->QueueHead; > - > - Status =3D gBS->AllocatePool (EfiRuntimeServicesData, > - MAX_BULKIN_SIZE, > - (VOID **) &pNicDevice->pBulkInBuff); > - > - if (EFI_ERROR(Status)) { > - DEBUG (( EFI_D_ERROR, "gBS->AllocatePool for pBulkInBuff error. = Status =3D %r\n", > - Status)); > - return Status; > - } > - } > - else { > - DEBUG (( EFI_D_ERROR, "Ax88772MacAddressGet error. Status =3D %r\n",= Status)); > - return Status; > - } > - > - Status =3D gBS->AllocatePool ( EfiRuntimeServicesData, > - sizeof ( RX_TX_PACKET ), > - (VOID **) &pNicDevice->pRxTest ); > - > - if (EFI_ERROR (Status)) { > - DEBUG (( EFI_D_ERROR, "gBS->AllocatePool:pNicDevice->pRxTest error. = Status =3D %r\n", > - Status)); > - return Status; > - } > - > - Status =3D gBS->AllocatePool ( EfiRuntimeServicesData, > - sizeof ( RX_TX_PACKET ), > - (VOID **) &pNicDevice->pTxTest ); > - > - if (EFI_ERROR (Status)) { > - DEBUG (( EFI_D_ERROR, "gBS->AllocatePool:pNicDevice->pTxTest error. = Status =3D %r\n", > - Status)); > - gBS->FreePool (pNicDevice->pRxTest); > - } > - > - return Status; > -} > - > - > -/** > - This routine starts the network interface. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_ALREADY_STARTED The network interface was already starte= d. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Start ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - NIC_DEVICE * pNicDevice; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - int i =3D 0; > - RX_PKT * pCurr =3D NULL; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - // > - // Verify the parameters > - // > - Status =3D EFI_INVALID_PARAMETER; > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStopped =3D=3D pMode->State ) { > - // > - // Initialize the mode structuref > - // NVRAM access is not supported > - // > - ZeroMem ( pMode, sizeof ( *pMode )); > - > - pMode->State =3D EfiSimpleNetworkStarted; > - pMode->HwAddressSize =3D PXE_HWADDR_LEN_ETHER; > - pMode->MediaHeaderSize =3D sizeof ( ETHERNET_HEADER ); > - pMode->MaxPacketSize =3D MAX_ETHERNET_PKT_SIZE; > - pMode->ReceiveFilterMask =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_MULTICAST > - | EFI_SIMPLE_NETWORK_RECEIVE_BROADCAST > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS > - | EFI_SIMPLE_NETWORK_RECEIVE_PROMISCUOUS_= MULTICAST; > - pMode->ReceiveFilterSetting =3D EFI_SIMPLE_NETWORK_RECEIVE_UNICAST= ; > - pMode->MaxMCastFilterCount =3D MAX_MCAST_FILTER_CNT; > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - Status =3D Ax88772MacAddressGet ( pNicDevice, &pMode->PermanentAdd= ress.Addr[0]); > - CopyMem ( &pMode->CurrentAddress, > - &pMode->PermanentAddress, > - sizeof ( pMode->CurrentAddress )); > - SetMem(&pMode->BroadcastAddress, PXE_HWADDR_LEN_ETHER, 0xff); > - pMode->IfType =3D EfiNetworkInterfaceUndi; > - pMode->MacAddressChangeable =3D TRUE; > - pMode->MultipleTxSupported =3D FALSE; > - pMode->MediaPresentSupported =3D TRUE; > - pMode->MediaPresent =3D FALSE; > - pNicDevice->PktCntInQueue =3D 0; > - pNicDevice->pNextFill =3D pNicDevice->QueueHead; > - pNicDevice->pFirstFill =3D pNicDevice->QueueHead; > - pCurr =3D pNicDevice->QueueHead; > - > - for ( i =3D 0 ; i < MAX_QUEUE_SIZE ; i++) { > - pCurr->f_Used =3D FALSE; > - pCurr =3D pCurr->pNext; > - } > - > - } > - else { > - Status =3D EFI_ALREADY_STARTED; > - } > - } > - gBS->RestoreTPL ( TplPrevious ); > - return Status; > -} > - > - > -/** > - Set the MAC address. > - > - This function modifies or resets the current station address of a > - network interface. If Reset is TRUE, then the current station address > - is set ot the network interface's permanent address. If Reset if FALS= E > - then the current station address is changed to the address specified b= y > - pNew. > - > - This routine calls ::Ax88772MacAddressSet to update the MAC address > - in the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Flag used to reset the station address t= o the > - network interface's permanent address. > - @param [in] pNew New station address to be used for the n= etwork > - interface. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_StationAddress ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN EFI_MAC_ADDRESS * pNew > - ) > -{ > - NIC_DEVICE * pNicDevice; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) > - && ( NULL !=3D pSimpleNetwork->Mode ) > - && (( bReset ) || ( ( !bReset) && ( NULL !=3D pNew )))) { > - // > - // Verify that the adapter is already started > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Determine the adapter MAC address > - // > - if ( bReset ) { > - // > - // Use the permanent address > - // > - CopyMem ( &pMode->CurrentAddress, > - &pMode->PermanentAddress, > - sizeof ( pMode->CurrentAddress )); > - } > - else { > - // > - // Use the specified address > - // > - CopyMem ( &pMode->CurrentAddress, > - pNew, > - sizeof ( pMode->CurrentAddress )); > - } > - > - // > - // Update the address on the adapter > - // > - Status =3D Ax88772MacAddressSet ( pNicDevice, &pMode->CurrentAddre= ss.Addr[0]); > - } > - else { > - if (EfiSimpleNetworkStarted =3D=3D pMode->State) { > - Status =3D EFI_DEVICE_ERROR; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - gBS->RestoreTPL ( TplPrevious ); > - return Status; > -} > - > - > -/** > - This function resets or collects the statistics on a network interface= . > - If the size of the statistics table specified by StatisticsSize is not > - big enough for all of the statistics that are collected by the network > - interface, then a partial buffer of statistics is returned in > - StatisticsTable. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] bReset Set to TRUE to reset the statistics for = the network interface. > - @param [in, out] pStatisticsSize On input the size, in bytes, of Stat= isticsTable. On output > - the size, in bytes, of the resulting tab= le of statistics. > - @param [out] pStatisticsTable A pointer to the EFI_NETWORK_STATISTICS = structure that > - conains the statistics. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_BUFFER_TOO_SMALL The pStatisticsTable is NULL or the buff= er is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > - typedef struct { > - UINT64 RxTotalFrames; > - UINT64 RxGoodFrames; > - UINT64 RxUndersizeFrames; > - UINT64 RxOversizeFrames; > - UINT64 RxDroppedFrames; > - UINT64 RxUnicastFrames; > - UINT64 RxBroadcastFrames; > - UINT64 RxMulticastFrames; > - UINT64 RxCrcErrorFrames; > - UINT64 RxTotalBytes; > - UINT64 TxTotalFrames; > - UINT64 TxGoodFrames; > - UINT64 TxUndersizeFrames; > - UINT64 TxOversizeFrames; > - UINT64 TxDroppedFrames; > - UINT64 TxUnicastFrames; > - UINT64 TxBroadcastFrames; > - UINT64 TxMulticastFrames; > - UINT64 TxCrcErrorFrames; > - UINT64 TxTotalBytes; > - UINT64 Collisions; > - UINT64 UnsupportedProtocol; > - } EFI_NETWORK_STATISTICS; > -**/ > -EFI_STATUS > -EFIAPI > -SN_Statistics ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN BOOLEAN bReset, > - IN OUT UINTN * pStatisticsSize, > - OUT EFI_NETWORK_STATISTICS * pStatisticsTable > - ) > -{ > - EFI_STATUS Status; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - // > - // Verify the prarameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - pMode =3D pSimpleNetwork->Mode; > - // > - // Determine if the interface is started > - // > - if (EfiSimpleNetworkInitialized =3D=3D pMode->State){ > - // > - // Determine if the StatisticsSize is big enough > - // > - if (sizeof (EFI_NETWORK_STATISTICS) <=3D *pStatisticsSize){ > - if (bReset) { > - Status =3D EFI_SUCCESS; > - } > - else { > - Status =3D EFI_UNSUPPORTED; > - } > - } > - else { > - Status =3D EFI_BUFFER_TOO_SMALL; > - } > - } > - else{ > - if (EfiSimpleNetworkStarted =3D=3D pMode->State) { > - Status =3D EFI_DEVICE_ERROR; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - return Status; > -} > - > - > -/** > - This function stops a network interface. This call is only valid > - if the network interface is in the started state. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Stop ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Determine if the interface is started > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkStarted =3D=3D pMode->State ) { > - pMode->State =3D EfiSimpleNetworkStopped; > - Status =3D EFI_SUCCESS; > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - gBS->RestoreTPL ( TplPrevious ); > - return Status; > -} > - > - > -/** > - This function releases the memory buffers assigned in the Initialize()= call. > - Pending transmits and receives are lost, and interrupts are cleared an= d disabled. > - After this call, only Initialize() and Stop() calls may be used. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - @retval EFI_UNSUPPORTED The increased buffer size feature is not= supported. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Shutdown ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork > - ) > -{ > - EFI_SIMPLE_NETWORK_MODE * pMode; > - UINT32 RxFilter; > - EFI_STATUS Status; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - // > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && ( NULL !=3D pSimpleNetwork->Mode )= ) { > - // > - // Determine if the interface is already started > - // > - pMode =3D pSimpleNetwork->Mode; > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Stop the adapter > - // > - RxFilter =3D pMode->ReceiveFilterSetting; > - pMode->ReceiveFilterSetting =3D 0; > - Status =3D SN_Reset ( pSimpleNetwork, FALSE ); > - pMode->ReceiveFilterSetting =3D RxFilter; > - if ( !EFI_ERROR ( Status )) { > - > - // > - // Update the network state > - // > - pMode->State =3D EfiSimpleNetworkStarted; > - } > - else if ( EFI_DEVICE_ERROR =3D=3D Status ) { > - pMode->State =3D EfiSimpleNetworkStopped; > - } > - } > - else { > - Status =3D EFI_NOT_STARTED; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - gBS->RestoreTPL ( TplPrevious ); > - return Status; > -} > - > - > -/** > - Send a packet over the network. > - > - This function places the packet specified by Header and Buffer on > - the transmit queue. This function performs a non-blocking transmit > - operation. When the transmit is complete, the buffer is returned > - via the GetStatus() call. > - > - This routine calls ::Ax88772Rx to empty the network adapter of > - receive packets. The routine then passes the transmit packet > - to the network adapter. > - > - @param [in] pSimpleNetwork Protocol instance pointer > - @param [in] HeaderSize The size, in bytes, of the media header = to be filled in by > - the Transmit() function. If HeaderSize = is non-zero, then > - it must be equal to SimpleNetwork->Mode-= >MediaHeaderSize > - and DestAddr and Protocol parameters mus= t not be NULL. > - @param [in] BufferSize The size, in bytes, of the entire packet= (media header and > - data) to be transmitted through the netw= ork interface. > - @param [in] pBuffer A pointer to the packet (media header fo= llowed by data) to > - to be transmitted. This parameter can n= ot be NULL. If > - HeaderSize is zero, then the media heade= r is Buffer must > - already be filled in by the caller. If = HeaderSize is nonzero, > - then the media header will be filled in = by the Transmit() > - function. > - @param [in] pSrcAddr The source HW MAC address. If HeaderSiz= e is zero, then > - this parameter is ignored. If HeaderSiz= e is nonzero and > - SrcAddr is NULL, then SimpleNetwork->Mod= e->CurrentAddress > - is used for the source HW MAC address. > - @param [in] pDestAddr The destination HW MAC address. If Head= erSize is zero, then > - this parameter is ignored. > - @param [in] pProtocol The type of header to build. If HeaderS= ize is zero, then > - this parameter is ignored. > - > - @retval EFI_SUCCESS This operation was successful. > - @retval EFI_NOT_STARTED The network interface was not started. > - @retval EFI_NOT_READY The network interface is too busy to acc= ept this transmit request. > - @retval EFI_BUFFER_TOO_SMALL The BufferSize parameter is too small. > - @retval EFI_INVALID_PARAMETER pSimpleNetwork parameter was NULL or did= not point to a valid > - EFI_SIMPLE_NETWORK_PROTOCOL structure. > - @retval EFI_DEVICE_ERROR The command could not be sent to the net= work interface. > - > -**/ > -EFI_STATUS > -EFIAPI > -SN_Transmit ( > - IN EFI_SIMPLE_NETWORK_PROTOCOL * pSimpleNetwork, > - IN UINTN HeaderSize, > - IN UINTN BufferSize, > - IN VOID * pBuffer, > - IN EFI_MAC_ADDRESS * pSrcAddr, > - IN EFI_MAC_ADDRESS * pDestAddr, > - IN UINT16 * pProtocol > - ) > -{ > - ETHERNET_HEADER * pHeader; > - EFI_SIMPLE_NETWORK_MODE * pMode; > - NIC_DEVICE * pNicDevice; > - EFI_USB_IO_PROTOCOL * pUsbIo; > - EFI_STATUS Status; > - UINTN TransferLength; > - UINT32 TransferStatus; > - UINT16 Type; > - EFI_TPL TplPrevious; > - > - TplPrevious =3D gBS->RaiseTPL(TPL_CALLBACK); > - > - // Verify the parameters > - // > - if (( NULL !=3D pSimpleNetwork ) && > - ( NULL !=3D pSimpleNetwork->Mode ) && > - ( NULL !=3D pBuffer) && > - ( (HeaderSize =3D=3D 0) || ( (NULL !=3D pDestAddr) && (NULL !=3D p= Protocol) ))) { > - // > - // The interface must be running > - // > - pMode =3D pSimpleNetwork->Mode; > - // > - // Verify parameter of HeaderSize > - // > - if ((HeaderSize =3D=3D 0) || (HeaderSize =3D=3D pMode->MediaHeaderSi= ze)){ > - // > - // Determine if BufferSize is big enough > - // > - if (BufferSize >=3D pMode->MediaHeaderSize){ > - if ( EfiSimpleNetworkInitialized =3D=3D pMode->State ) { > - // > - // Update the link status > - // > - pNicDevice =3D DEV_FROM_SIMPLE_NETWORK ( pSimpleNetwork ); > - pMode->MediaPresent =3D pNicDevice->bLinkUp; > - > - // > - // Release the synchronization with Ax88772Timer > - // > - if ( pMode->MediaPresent && pNicDevice->bComplete) { > - // > - // Copy the packet into the USB buffer > - // > - > - CopyMem ( &pNicDevice->pTxTest->Data[0], pBuffer, BufferSize= ); > - pNicDevice->pTxTest->Length =3D (UINT16) BufferSize; > - > - // > - // Transmit the packet > - // > - pHeader =3D (ETHERNET_HEADER *) &pNicDevice->pTxTest->Data[0= ]; > - if ( 0 !=3D HeaderSize ) { > - if ( NULL !=3D pDestAddr ) { > - CopyMem ( &pHeader->dest_addr, pDestAddr, PXE_HWADDR_LEN= _ETHER ); > - } > - if ( NULL !=3D pSrcAddr ) { > - CopyMem ( &pHeader->src_addr, pSrcAddr, PXE_HWADDR_LEN_E= THER ); > - } > - else { > - CopyMem ( &pHeader->src_addr, &pMode->CurrentAddress.Add= r[0], PXE_HWADDR_LEN_ETHER ); > - } > - if ( NULL !=3D pProtocol ) { > - Type =3D *pProtocol; > - } > - else { > - Type =3D pNicDevice->pTxTest->Length; > - } > - Type =3D (UINT16)(( Type >> 8 ) | ( Type << 8 )); > - pHeader->type =3D Type; > - } > - if ( pNicDevice->pTxTest->Length < MIN_ETHERNET_PKT_SIZE ) { > - pNicDevice->pTxTest->Length =3D MIN_ETHERNET_PKT_SIZE; > - ZeroMem ( &pNicDevice->pTxTest->Data[ BufferSize ], > - pNicDevice->pTxTest->Length - BufferSize ); > - } > - > - DEBUG ((EFI_D_INFO, "TX: %02x-%02x-%02x-%02x-%02x-%02x %02x= -%02x-%02x-%02x-%02x-%02x" > - " %02x-%02x %d bytes\r\n", > - pNicDevice->pTxTest->Data[0], > - pNicDevice->pTxTest->Data[1], > - pNicDevice->pTxTest->Data[2], > - pNicDevice->pTxTest->Data[3], > - pNicDevice->pTxTest->Data[4], > - pNicDevice->pTxTest->Data[5], > - pNicDevice->pTxTest->Data[6], > - pNicDevice->pTxTest->Data[7], > - pNicDevice->pTxTest->Data[8], > - pNicDevice->pTxTest->Data[9], > - pNicDevice->pTxTest->Data[10], > - pNicDevice->pTxTest->Data[11], > - pNicDevice->pTxTest->Data[12], > - pNicDevice->pTxTest->Data[13], > - pNicDevice->pTxTest->Length )); > - > - pNicDevice->pTxTest->LengthBar =3D ~(pNicDevice->pTxTest->Le= ngth); > - TransferLength =3D sizeof ( pNicDevice->pTxTest->Length ) > - + sizeof ( pNicDevice->pTxTest->LengthBar ) > - + pNicDevice->pTxTest->Length; > - > - if (TransferLength % 512 =3D=3D 0 || TransferLength % 1024 = =3D=3D 0) > - TransferLength +=3D4; > - > - // > - // Work around USB bus driver bug where a timeout set by re= ceive > - // succeeds but the timeout expires immediately after, caus= ing the > - // transmit operation to timeout. > - // > - pUsbIo =3D pNicDevice->pUsbIo; > - Status =3D pUsbIo->UsbBulkTransfer ( pUsbIo, > - BULK_OUT_ENDPOINT, > - &pNicDevice->pTxTest->Len= gth, > - &TransferLength, > - 0xfffffffe, > - &TransferStatus ); > - if ( !EFI_ERROR ( Status )) { > - Status =3D TransferStatus; > - } > - > - if ( !EFI_ERROR ( Status )) { > - pNicDevice->pTxBuffer =3D pBuffer; > - } > - else { > - if ((TransferLength !=3D (UINTN)( pNicDevice->pTxTest->Len= gth + 4 )) && > - (TransferLength !=3D (UINTN)(( pNicDevice->pTxTest->L= ength + 4 ) + 4))) { > - DEBUG ((EFI_D_INFO, "TransferLength didn't match Packet = Length\n")); > - } > - // > - // Reset the controller to fix the error > - // > - if ( EFI_DEVICE_ERROR =3D=3D Status ) { > - SN_Reset ( pSimpleNetwork, FALSE ); > - } > - Status =3D EFI_NOT_READY; > - } > - } > - else { > - // > - // No packets available. > - // > - Status =3D EFI_NOT_READY; > - } > - > - } > - else { > - if (EfiSimpleNetworkStarted =3D=3D pMode->State) { > - Status =3D EFI_DEVICE_ERROR; > - } > - else { > - Status =3D EFI_NOT_STARTED ; > - } > - } > - } > - else { > - Status =3D EFI_BUFFER_TOO_SMALL; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - } > - else { > - Status =3D EFI_INVALID_PARAMETER; > - } > - > - gBS->RestoreTPL (TplPrevious); > - > - return Status; > -} > -- > 2.17.1