MdeModulePkg/Usb: Adjust TPL to not block async transfer during usb enum.

EDKII usb stack is using a TPL_CALLBACK timer to monitor async transfer
request and signal event if it's done. As usb enumeration and usb mass
storage block i/o read/write runs on TPL_CALLBACK and TPL_NOTIFY level
respectively, It blocks usb async transfer requests, usually usb mouse
/use kb, getting time to run.

Without this change, user couldn't get usb mouse/kb state in time (will
show a little lag from UI view) when there is other usb transactions, such
as a new usb device inserted.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18169 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Feng Tian 2015-08-06 07:13:16 +00:00 committed by erictian
parent ea0f431cec
commit 3cf6450eb5
4 changed files with 7 additions and 7 deletions

View File

@ -1615,7 +1615,7 @@ EhcCreateUsb2Hc (
// //
Status = gBS->CreateEvent ( Status = gBS->CreateEvent (
EVT_TIMER | EVT_NOTIFY_SIGNAL, EVT_TIMER | EVT_NOTIFY_SIGNAL,
TPL_CALLBACK, TPL_NOTIFY,
EhcMonitorAsyncRequests, EhcMonitorAsyncRequests,
Ehc, Ehc,
&Ehc->PollTimer &Ehc->PollTimer

View File

@ -1482,7 +1482,7 @@ UhciAllocateDev (
Status = gBS->CreateEvent ( Status = gBS->CreateEvent (
EVT_TIMER | EVT_NOTIFY_SIGNAL, EVT_TIMER | EVT_NOTIFY_SIGNAL,
TPL_CALLBACK, TPL_NOTIFY,
UhciMonitorAsyncReqList, UhciMonitorAsyncReqList,
Uhc, Uhc,
&Uhc->AsyncIntMonitor &Uhc->AsyncIntMonitor

View File

@ -1822,7 +1822,7 @@ XhcCreateUsbHc (
// //
Status = gBS->CreateEvent ( Status = gBS->CreateEvent (
EVT_TIMER | EVT_NOTIFY_SIGNAL, EVT_TIMER | EVT_NOTIFY_SIGNAL,
TPL_CALLBACK, TPL_NOTIFY,
XhcMonitorAsyncRequests, XhcMonitorAsyncRequests,
Xhc, Xhc,
&Xhc->PollTimer &Xhc->PollTimer

View File

@ -1,7 +1,7 @@
/** @file /** @file
USB Mass Storage Driver that manages USB Mass Storage Device and produces Block I/O Protocol. USB Mass Storage Driver that manages USB Mass Storage Device and produces Block I/O Protocol.
Copyright (c) 2007 - 2014, Intel Corporation. All rights reserved.<BR> Copyright (c) 2007 - 2015, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at which accompanies this distribution. The full text of the license may be found at
@ -63,7 +63,7 @@ UsbMassReset (
// Raise TPL to TPL_NOTIFY to serialize all its operations // Raise TPL to TPL_NOTIFY to serialize all its operations
// to protect shared data structures. // to protect shared data structures.
// //
OldTpl = gBS->RaiseTPL (TPL_NOTIFY); OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
UsbMass = USB_MASS_DEVICE_FROM_BLOCK_IO (This); UsbMass = USB_MASS_DEVICE_FROM_BLOCK_IO (This);
Status = UsbMass->Transport->Reset (UsbMass->Context, ExtendedVerification); Status = UsbMass->Transport->Reset (UsbMass->Context, ExtendedVerification);
@ -117,7 +117,7 @@ UsbMassReadBlocks (
// Raise TPL to TPL_NOTIFY to serialize all its operations // Raise TPL to TPL_NOTIFY to serialize all its operations
// to protect shared data structures. // to protect shared data structures.
// //
OldTpl = gBS->RaiseTPL (TPL_NOTIFY); OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
UsbMass = USB_MASS_DEVICE_FROM_BLOCK_IO (This); UsbMass = USB_MASS_DEVICE_FROM_BLOCK_IO (This);
Media = &UsbMass->BlockIoMedia; Media = &UsbMass->BlockIoMedia;
@ -233,7 +233,7 @@ UsbMassWriteBlocks (
// Raise TPL to TPL_NOTIFY to serialize all its operations // Raise TPL to TPL_NOTIFY to serialize all its operations
// to protect shared data structures. // to protect shared data structures.
// //
OldTpl = gBS->RaiseTPL (TPL_NOTIFY); OldTpl = gBS->RaiseTPL (TPL_CALLBACK);
UsbMass = USB_MASS_DEVICE_FROM_BLOCK_IO (This); UsbMass = USB_MASS_DEVICE_FROM_BLOCK_IO (This);
Media = &UsbMass->BlockIoMedia; Media = &UsbMass->BlockIoMedia;