summaryrefslogtreecommitdiffstats
path: root/OptionRomPkg
diff options
context:
space:
mode:
authorShivamurthy Shastri <shivamurthy.shastri@linaro.org>2016-03-30 17:14:14 +0800
committerRuiyu Ni <ruiyu.ni@intel.com>2016-03-31 08:53:51 +0800
commit7361d3ff88e51a82282d86f268d83366f79a5075 (patch)
tree7d2de8f397708167473fcf0de32d212fa047e001 /OptionRomPkg
parent45e675f2d0eeda0511b5d6e0ed54f62f94c3826f (diff)
downloadedk2-7361d3ff88e51a82282d86f268d83366f79a5075.tar.gz
edk2-7361d3ff88e51a82282d86f268d83366f79a5075.tar.bz2
edk2-7361d3ff88e51a82282d86f268d83366f79a5075.zip
OptionRomPkg: Ax88772b: Fixing register access issue in Apple Eth Adapter
The USB command CMD_RXQTC ("RX Queue Cascade Threshold Control") tries to access the register and is always failing when using the Apple Ethernet adapter. It is fixed by checking flag before sending command. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Shivamurthy Shastri <shivamurthy.shastri@linaro.org> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Diffstat (limited to 'OptionRomPkg')
-rw-r--r--OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c19
-rw-r--r--OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h4
-rw-r--r--OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c37
3 files changed, 51 insertions, 9 deletions
diff --git a/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c b/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c
index 45ba3e52ff..e014d52ac0 100644
--- a/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c
+++ b/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.c
@@ -625,15 +625,18 @@ Ax88772Reset (
if (EFI_ERROR(Status)) goto err;
- SetupMsg.RequestType = USB_REQ_TYPE_VENDOR
- | USB_TARGET_DEVICE;
- SetupMsg.Request = CMD_RXQTC;
- SetupMsg.Value = 0x8000;
- SetupMsg.Index = 0x8001;
- SetupMsg.Length = 0;
- Status = Ax88772UsbCommand ( pNicDevice,
+ if (pNicDevice->Flags != FLAG_TYPE_AX88772) {
+ SetupMsg.RequestType = USB_REQ_TYPE_VENDOR
+ | USB_TARGET_DEVICE;
+ SetupMsg.Request = CMD_RXQTC;
+ SetupMsg.Value = 0x8000;
+ SetupMsg.Index = 0x8001;
+ SetupMsg.Length = 0;
+ Status = Ax88772UsbCommand ( pNicDevice,
&SetupMsg,
- NULL );
+ NULL );
+ }
+
err:
return Status;
}
diff --git a/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h b/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h
index a2109cf673..92ac64d1b3 100644
--- a/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h
+++ b/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/Ax88772.h
@@ -404,7 +404,9 @@ typedef struct {
RX_PKT * pFirstFill;
UINTN PktCntInQueue;
UINT8 * pBulkInBuff;
-
+
+ INT32 Flags;
+
} NIC_DEVICE;
#define DEV_FROM_SIMPLE_NETWORK(a) CR (a, NIC_DEVICE, SimpleNetwork, DEV_SIGNATURE) ///< Locate NIC_DEVICE from Simple Network Protocol
diff --git a/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c b/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c
index d64bc739c1..bf05c74217 100644
--- a/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c
+++ b/OptionRomPkg/Bus/Usb/UsbNetworking/Ax88772b/DriverBinding.c
@@ -124,6 +124,8 @@ DriverStart (
UINTN LengthInBytes;
EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath = NULL;
MAC_ADDR_DEVICE_PATH MacDeviceNode;
+ EFI_USB_DEVICE_DESCRIPTOR Device;
+ UINT32 Index;
//
// Allocate the device structure
@@ -178,6 +180,41 @@ DriverStart (
goto EXIT;
}
+ Status = pNicDevice->pUsbIo->UsbGetDeviceDescriptor ( pNicDevice->pUsbIo, &Device );
+ if (EFI_ERROR ( Status )) {
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiUsbIoProtocolGuid,
+ pThis->DriverBindingHandle,
+ Controller
+ );
+ gBS->FreePool ( pNicDevice );
+ goto EXIT;
+ } else {
+ //
+ // Validate the adapter
+ //
+ for (Index = 0; ASIX_DONGLES[Index].VendorId != 0; Index++) {
+ if (ASIX_DONGLES[Index].VendorId == Device.IdVendor &&
+ ASIX_DONGLES[Index].ProductId == Device.IdProduct) {
+ break;
+ }
+ }
+
+ if (ASIX_DONGLES[Index].VendorId == 0) {
+ gBS->CloseProtocol (
+ Controller,
+ &gEfiUsbIoProtocolGuid,
+ pThis->DriverBindingHandle,
+ Controller
+ );
+ gBS->FreePool ( pNicDevice );
+ goto EXIT;
+ }
+
+ pNicDevice->Flags = ASIX_DONGLES[Index].Flags;
+ }
+
//
// Set Device Path
//