summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Bus
AgeCommit message (Collapse)Author
2016-02-24MdeModulePkg/UsbBusDxe: Fix memory leakAlcantara, Paulo
Cc: Feng Tian <feng.tian@intel.com> Cc: Star Zeng <star.zeng@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Paulo Alcantara <paulo.alc.cavalcanti@hp.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
2016-02-03MdeModulePkg/UsbAbsPointer:Fix GetState() to return absolute valueRuiyu Ni
Fix UsbMouseAbsolutePointer driver GetState() interface to return absolute value instead of relative value. The driver is ported from UsbMouse driver. The GetState of SimplePointer protocol returns relative value but the GetState of AbsolutePointer protocol should return absolute value. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com>
2016-01-28MdeModulePkg: NvmExpressDxe: clean up NvmeRead() / NvmeWrite() debug msgsLaszlo Ersek
These workhorse functions are part of the BlockIo protocol that NvmExpressDxe produces. For bulk data access, they are called very frequently. Their debug messages should be therefore downgraded to EFI_D_VERBOSE. In addition, the following DEBUG() warts are cleaned up: - The function name should be printed with %a / __FUNCTION__, so that renaming the function, or copying the DEBUG() elsewhere, be reflected in the debug output automatically. (In fact, after this patch, the DEBUG() calls become identical.) - "Lba" is of type UINT64, therefore it should be printed with %Lx, not %x. - "OrginalBlocks" and "Blocks" are both UINTN. The only portable way to print UINTN is to convert it to UINT64 manually, then format it with the %Lx (or %Lu) conversion specifier. Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@Intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19763 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-26MdeModulePkg/PciHostBridgeDxe: Fix GCC build failure.Ruiyu Ni
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19744 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-25MdeModulePkg/.../IdeMode: correctly report length of returned dataPaolo Bonzini
For some SCSI commands, notably INQUIRY, it's relatively common for the device to provide less data than we intended to read, and for this reason EFI_EXT_SCSI_PASS_THRU_SCSI_REQUEST_PACKET makes InTransferLength and OutTransferLength read-write. Make ATAPI aware of this. This makes it possible to handle EFI_NOT_READY always, not just for read as done in r19685. I've chosen to use a break statement instead of calling CheckStatusRegister directly; the break statement reaches a pre-existing call the CheckStatusRegister function. This ensures that the assignment to *ByteCount is not missed, and adds a further sanity check to DRQClear. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Tested-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19737 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-19MdeModulePkg/.../IdeMode: report early finish of packet read as successLaszlo Ersek
SVN r19611 (git commit 7cac240163), "MdeModulePkg/Ide: return correct status when DRQ is not ready for ATAPI", changed the behavior of AtaPacketReadWrite(), when DRQReady2() reported an error. The previous logic had been to: (a) terminate the transfer loop, (b) check the status register with CheckStatusRegister(), and determine AtaPacketReadWrite()'s return code directly from that. Action (a) had been correct, but action (b) had masked genuine errors. For example, when DRQReady2() reported EFI_TIMEOUT -- because the BSY bit had not been cleared within the allotted time --, CheckStatusRegister() would report EFI_SUCCESS, simply *because* BSY was still set, and the rest of the status bits could not be evaluated. SVN r19611 (git commit 7cac240163) intended to fix action (b) by directly propagating the error code of DRQReady2() from AtaPacketReadWrite(), eliminating the CheckStatusRegister() call. This was the right thing for most of the errors reported by DRQReady2() -- timeout, command abort, other device error --, but there was one exception: the "read" sub-case of EFI_NOT_READY, which stands for "'read' complete, with less data available than the requested amount". Regarding the "write" sub-case of EFI_NOT_READY: the AtaPacketCommandExecute() function programs the full transfer length into the IDE device before it calls AtaPacketReadWrite(), and AtaPacketReadWrite() only uses CylinderLsb and CylinderMsb for "chunking" (as requested by the device). Therefore the device cannot justifiedly clear DRQ earlier than seeing the entire data, when writing. However, when reading from the device, a "short read" is a successful operation. (The actual read length will be decoded by the higher level protocols.) And "short reads" had been handled correctly by the logic before git 7cac240163. Namely, when DRQReady2() returns EFI_NOT_READY, the BSY bit is already clear, and we can call CheckStatusRegister() to investigate all the other bits it cares about. Therefore restore the logic from before git 7cac240163, but only for the "read" sub-case of EFI_NOT_READY. This problem was encountered with OVMF running on QEMU's i440fx IDE emulation. Many thanks to John Snow for analyzing QEMU's behavior, and pointing out that it adhered to the relevant specs. Cc: Feng Tian <feng.tian@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: John Snow <jsnow@redhat.com> Reference: https://github.com/tianocore/edk2/issues/43 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19685 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-19MdeModulePkg/.../IdeMode: actualize DRQReady*() comment blocksLaszlo Ersek
The DRQReady() and DRQReady2() functions only differ in that they poll different status registers for BSY, ERR, and DRQ: the former looks at the Status Register (clearing interrupt status), while the latter looks at the Alternate Status Register (not clearing interrupt status). They both correctly return a unique status code, EFI_NOT_READY, for the BSY==0 && ERR==0 && DRQ==0 case; that is, when the device reports "command complete". However, the functions' leading comments don't explain this case, so it's easy to miss in callers. Update the comments. Cc: Feng Tian <feng.tian@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: John Snow <jsnow@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19684 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-18MdeModulePkg: Add generic PciHostBridgeDxe driver.Ruiyu Ni
This driver links to PciHostBridgeLib provided by platform/silicon to produce PciRootBridgeIo and PciHostBridgeResourceAllocation protocol. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19658 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-11MdeModulePkg/NvmExpressDxe: Fix MS toolchain /Od 32bit build failureFeng Tian
Note NVME_ACQ & NVME_ASQ internal data structure are changed to make build pass. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19632 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-11MdeModulePkg/UfsBlockIoPei: Fix MS toolchain /Od 32bit build failureFeng Tian
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19631 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-07MdeModulePkg/ScsiDisk: Increase the value of SCSI_DISK_TIMEOUT to 30sFeng Tian
As ScsiDisk and ScsiBus driver are used to manage SCSI or ATAPI devices, the timeout value is updated to 30s to follow ATA/ATAPI spec in which the device may take up to 30s to respond command. The change is used to solve device compatibility issue found with a TEAC DV-W28S-WZ3 slim DVD plus a SONY AccuCORE DVD-R media in which the DVD spends 8s to response READ_CAPACITY cmd after resetting the host machine. 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@19612 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-07MdeModulePkg/Ide: return correct status when DRQ is not ready for ATAPIFeng Tian
When executing ATAPI cmd at IDE mode, EFI_SUCCESS may be returned wrongly with old logic but in fact DRQ is not ready and the transaction doesn't get executed correctly at this time. 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@19611 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-06MdeModulePkg: Add error DEBUG statements in ATA passthru driverSamer El-Haj-Mahmoud
DEBUG errors for COMRESET and Port phy not ready. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Samer El-Haj-Mahmoud <elhaj@hpe.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19605 6f19259b-4bc3-4df7-8a09-765794883524
2016-01-06MdeModulePkg UhciDxe: Fix a typo in function descriptionHao Wu
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19595 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg UfsPassThruDxe: Raise to TPL_NOTIFY when dealing async taskHao Wu
This commit will raise the Tpl to TPL_NOTIFY when adding non-blocking SCSI I/O requests to the asynchronous task list. This commit will also raise the Tpl of asynchronous task polling timer to TPL_NOTIFY. These changes are made to match the behavior in ScsiDiskDxe driver. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19455 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiBusDxe: Raise the Tpl of async IO callback to TPL_NOTIFYHao Wu
Raise the Tpl of async SCSI I/O callback function to TPL_NOTIFY to match the behavior in ScsiDiskDxe driver. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19454 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiDiskDxe: Raise the Tpl of async IO callback to TPL_NOTIFYHao Wu
When reading data from non-blockingly from a CD-ROM logic partition, the procedure can be shown by the following call stack: (The write process is similar) |-------------------| | DiskIoDxe (logic) |<---Raise Tpl to TPL_CALLBACK |-------------------| | | Sub-task 1 (UnderRun) succeeds | | |-----------------| |-----------------| |-----------------| +--->| PartitionDxe |---->| DiskIoDxe (Phy) |---->| ScsiDiskDxe | | |-----------------| |-----------------| |-----------------| | | Sub-task 2 (OverRun) fails | | |-----------------| |-----------------| |-----------------| +--->| PartitionDxe |---->| DiskIoDxe (Phy) |---->| ScsiDiskDxe | | |-----------------| |-----------------| |-----------------| | ^ | | More subtasks... Wait indefinitely | |<---Restore Tpl | Completes In PartitionDxe, if the 'Lba' and 'BufferSize' parameters passed to function PartitionReadBlocksEx() are invalid, the function will issue a blocking ReadDisk call (in function ProbeMediaStatusEx()). In DiskIoDxe, blocking I/O request will wait for all the non-blocking I/O requests to complete first before sending down the blocking request. If the Tpl of the async I/O callback in ScsiDiskDxe is TPL_CALLBACK and Sub-task 1 (UnderRun) succeeds but Sub-task 2 (OverRun) fails with an invalid parameter, DiskIoDxe will wait indefinitely for the event created by ScsiDiskDxe of Sub-task 1 to signal. Hence, this commit will raise the Tpl of async IO callback in ScsiDiskDxe to TPL_NOTIFY so that the indefinite wait in DiskIoDxe can be avoided. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19452 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiDiskDxe: Add retry scheme for async SCSI I/O commandHao Wu
Some SCSI devices will return EFI_DEVICE_ERROR or EFI_TIMEOUT when the data length of a SCSI I/O command is too large. This commit will repeatedly retry sending the SCSI command with a data length half of its previous value. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19451 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiDiskDxe: Fix async request retry times info lost issueHao Wu
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19450 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiDiskDxe: Close event when SCSI command failsHao Wu
The functions ScsiRead10CommandEx(), ScsiWrite10CommandEx(), ScsiRead16CommandEx() and ScsiWrite16CommandEx() in UefiScsiLib will not signal the event passed from ScsiDiskDxe when error occurs. In this case, ScsiDiskDxe should close the event passing to these APIs in UefiScsiLib. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19449 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiBusDxe: Only signal caller event when PassThru() succeedsHao Wu
In ScsiExecuteSCSICommand(), when SCSI devices do not support non-blocking I/O but an event is passed from caller (UefiScsiLib), the function will execute the SCSI I/O command in a blocking manner and signal the caller event when the command completes. Originally, caller event from UefiScsiLib will be signaled if the SCSI command fails. UefiScsiLib will continue to signal its caller (BlockIO2 request from ScsiDiskDxe driver), which is not aligned with the UEFI spec that event will not be signaled when BlockIO2 request returns with error. This commit will signal ScsiExecuteSCSICommand()'s caller event only when the SCSI command succeeds. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19447 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiDiskDxe: Modify WriteBlocks(Ex)() to follow UEFI specHao Wu
The functions ScsiDiskWriteBlocks(Ex) in ScsiDiskDxe/ScsiDisk.c do not check whether the device is allow to be written originally. This commit will add read-only check to follow the UEFI spec. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19445 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiDiskDxe: Modify FlushBlocksEx() to follow UEFI specHao Wu
The function ScsiDiskFlushBlocksEx() in ScsiDiskDxe/ScsiDisk.c originally always returns EFI_SUCCESS, which is not aligned with the UEFI spec. This commit adds addtional checks to see if the media in the device is changed or removed. Check for whether the device can be written is also added. Corresponding status will be returned according to the check result. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19444 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-22MdeModulePkg ScsiDiskDxe: Set block I/O media of SCSI CDROM to read-onlyHao Wu
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19443 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-17MdeModulePkg/PciSioSerialDxe:bitwise operation have same width operandsFeng Tian
Operands in a bitwise operation have different size. Update code to fix it. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Qiu Shumin <shumin.qiu@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19309 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-17MdeModulePkg/PciSioSerialDxe:add non-null pointer dereference assertionFeng Tian
Add assertion to make sure there doesn't exist null pointer dereference. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Qiu Shumin <shumin.qiu@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19308 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-15MdeModulePkg UfsPassThru: ASSERT if params are NULL in SignalCallerEventHao Wu
In function SignalCallerEvent(), 'Private' and 'TransReq' are dereferenced before NULL checking. Since the function assumes that both 'Private' and 'TransReq' passed in are not NULL pointer, this commit will add an ASSERT to make sure the above assumption is satisfied. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19266 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-15MdeModulePkg: Convert all .uni files to utf-8Jordan Justen
To convert these files I ran: $ python3 BaseTools/Scripts/ConvertUni.py MdeModulePkg Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Jordan Justen <jordan.l.justen@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19257 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-14MdeModulePkg/PciSioSerialDxe: Fix compiler warningsMichael Kinney
Add missing braces in module global mControllerDevicePathTemplate. Initialize ControllerNumber and ContainsControllerNode in SerialControllerDriverStart() to address warning for potential use before initialization warning. Move initialization of local SerialIo earlier in SerialControllerDriverStart() to address warning for potential use before initialization warning. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Michael Kinney <michael.d.kinney@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19232 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-11MdeModulePkg ScsiBusDxe: Fix caller event may nerver be signaledHao Wu
For function ScsiExecuteSCSICommand(), when the 'Event' parameter is not NULL but the target SCSI device does not support non-blocking I/O, it will execute a blocking I/O operation instead. However, after the SCSI operation is done, the 'Event' is not signaled to inform the caller. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19217 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-11MdeModulePkg UfsPassThruDxe: Add Non-blocking I/O SupportHao Wu
Previously, UfsPassThruPassThru function does not handle the 'Event' parameter and blocking read/write operations are always executed. This commit enables non-blocking read/write feature for UFS devices. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19216 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-11MdeModulePkg ScsiDiskDxe: Add BlockIO2 SupportHao Wu
Together with EFI_BLOCK_IO_PROTOCOL, EFI_BLOCK_IO2_PROTOCOL is installed as well in ScsiDiskDxe. Block I/O 2 functions are implemented: Reset ReadBlocksEx WriteBlocksEx FlushBlocksEx Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19215 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-10MdeModulePkg: Add PciSioSerialDxe driverRuiyu Ni
PciSioSerialDxe driver can manages UARTs on a SIO chip or a PCI/PCIE card. It manages the SIO instance whose last device path node is a ACPI device path and the HID in the ACPI device path node equals to EISA_PNP_ID (0x501). It also manages the PCI IO instance whose class code is 7/0/2 (16550 UART). But when proper value is set to PcdPciSerialParameters, the driver can also manage non-standard PCI serial cards by matching the Vendor ID and Device ID specified in PcdPciSerialParameters. The PCI BAR index, IO/MMIO offset, register stride, clock rate can also be specified through the same PCD. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Michael Kinney <michael.d.kinney@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19179 6f19259b-4bc3-4df7-8a09-765794883524
2015-12-01MdeModulePkg/NvmExpressDxe: Fix wrong logic in GetControllerName()Anbazhagan, Baraneedharan
NvmExpressComponentNameGetControllerName returns EFI_UNSUPPORTED if child handle is passed. gEfiNvmExpressPassThruProtocolGuid needs to be passed to EfiTestChildHandle instead of gEfiPciIoProtocolGuid. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: "Anbazhagan, Baraneedharan" <anbazhagan@hp.com> Reviewed-by: "Tian, Feng" <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19071 6f19259b-4bc3-4df7-8a09-765794883524
2015-11-03MdeModulePkg: Fix a PciBusDxe hot plug bugRuiyu Ni
For a hot plug bridge with device attached, PciBusDxe driver reserves the resources which equal to the total amount of padding resource returned from HotPlug->GetResourcePadding() and the actual occupied resource by the attached device. The behavior is incorrect. Correct behavior is to reserve the bigger one between the padding resource and the actual occupied resource. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18719 6f19259b-4bc3-4df7-8a09-765794883524
2015-11-03MdeModulePkg: Fix a PCI resource dumping bug in PciBusDxe driverRuiyu Ni
The resource dumping logic contains a bug which cannot dump the resource for hot plug controller correctly. The patch fixes this bug. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18718 6f19259b-4bc3-4df7-8a09-765794883524
2015-11-03Revert "MdeModulePkg: Fix a PciBusDxe hot plug bug"Ruiyu Ni
Leif suggested to split the big patch to smaller ones. This reverts commit 73b7f115c653c807b9d0be97bf516871d8aff7ba. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18717 6f19259b-4bc3-4df7-8a09-765794883524
2015-10-29MdeModulePkg: Do not dump NULL padding resource descriptorRuiyu Ni
Add a check for ResourcePaddingDescriptors being a valid pointer in DumpPpbPaddingResource() to prevent looping on memory not owned by PciBusDxe. The ResourcePaddingDescriptors is initialized to NULL when the PCI_IO_DEVICE structure is allocated and remains NULL if no PCI hot plug controllers are present. This issue is only observed when DEBUG_CODE() macros are enabled and was introduced by the following patch: [edk2] [Patch] MdeModulePkg: Fix a PciBusDxe hot plug bug SVN revsion 18658 Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Kinney Michael <michael.d.kinney@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18696 6f19259b-4bc3-4df7-8a09-765794883524
2015-10-23MdeModulePkg: Fix a PciBusDxe hot plug bugRuiyu Ni
For a hot plug bridge with device attached, PciBusDxe driver reserves the resources which equal to the total amount of padding resource returned from HotPlug->GetResourcePadding() and the actual occupied resource by the attached device. The behavior is incorrect. Correct behavior is to reserve the bigger one between the padding resource and the actual occupied resource. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18658 6f19259b-4bc3-4df7-8a09-765794883524
2015-10-06MdeModulePkg: exit pci function loops early if device is not multi-functionJoseph Shifflett
When looping through all PCI functions, code should not look for functions 1-7 if function 0 is not present or if function 0 indicates the device is not multifunction. Prior to this fix the code would use stale data in a buffer to determine if a device is multifunction even if function 0 is not present. This fixes a code bug and provides very small performance improvements. PCI 2.3 Specification states: They [multifunction devices] are also required to always implement function 0 in the device. Implementing other functions is optional and may be assigned in any order. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Joseph Shifflett <joseph.shifflett@hpe.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18574 6f19259b-4bc3-4df7-8a09-765794883524
2015-09-22MdeModulePkg: AtaAtapiPassThru: select master/slave around DIAG commandReza Jelveh
Some IDE controllers only update ID fields such as sector information on specific commands such as the DIAG command. The master/slave device is therefore selected both before and after sending the DIAG command; otherwise reading the IDE registers yields the master's ID fields. (Reza's patch originally *moved* the master/slave selection from after the DIAG command before it, however Feng asked for the original master/slave select to be preserved; effectively making the master/slave select *bracket* the DIAG command. See this subthread: <http://thread.gmane.org/gmane.comp.bios.tianocore.devel/10545/focus=10550>.) Cc: Alexander Graf <agraf@suse.de> Cc: Reza Jelveh <reza.jelveh@tuhh.de> Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Hannes Reinecke <hare@suse.de> Cc: Gabriel L. Somlo <somlo@cmu.edu> Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Reza Jelveh <reza.jelveh@tuhh.de> [feng.tian@intel.com: see above] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian <feng.tian@intel.com> [lersek@redhat.com: updated commit message] Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Tested-by: Gabriel Somlo <somlo@cmu.edu> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18529 6f19259b-4bc3-4df7-8a09-765794883524
2015-09-15MdeModulePkg: Enhance PCI capability looking up logic to avoid hangRuiyu Ni
Certain PCI device may have capability pointing to itself. Update LocateCapabilityRegBlock() to break when detecting such loop. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18473 6f19259b-4bc3-4df7-8a09-765794883524
2015-09-10MdeModulePkg: ScsiDiskDxe: adapt SectorCount when shortening transfersLaszlo Ersek
The specification of the EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() function documents the EFI_BAD_BUFFER_SIZE return status, and the EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN host adapter status. These allow an EFI_EXT_SCSI_PASS_THRU_PROTOCOL implementation to request higher layers in the stack (in this instance, UefiScsiLib and ScsiDiskDxe) to break up the transfer into smaller pieces. These conditions percolate up the stack correctly: the retry loops in ScsiDiskDxe's ScsiDiskReadSectors() and ScsiDiskWriteSectors() functions correctly and transparently update the transfer size (ByteCount), accommodating any shortening requested by lower levels of the stack. After the loop -- if the request ultimately succeeds -- SectorCount is even recalculated from the final ByteCount, to see how many sectors the outer loop should advance. However, the inner (ie. retry) loops both have the same error: when the underlying protocols request the transfer to be shortened, the decrease in transfer size (ie. ByteCount) should immediately be reflected in SectorCount. Otherwise the sector count encoded in the CDB will exceed the transfer size, which is a permanent error. This issue has been witnessed while booting en_windows_8.1_pro_n_vl_with_update_x86_dvd_6051127.iso on the 32-bit build of OVMF, from a virtio-scsi CD-ROM: (1) "cdboot.efi" correctly requested (from far atop) a long read: Timeout=940000000 CdbLength=10 DataDir=Read InTransferLength=134215680 OutTransferLength=0 SenseDataLength=108 Cdb: 28 00 00 00 25 DD 00 FF FF 00 ^ ^^^^^^^^^^^ ^^^^^ | | | | | number of 2KB sectors to read, | | corresponding to 2048 * 65535 = 134215680 bytes | | (see InTransferLength above) | | | LBA to read from | READ (10) (2) In turn, the EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru() function provided by "OvmfPkg/VirtioScsiDxe/VirtioScsi.c" asked for the request to be shortened: InTransferLength=16776704 OutTransferLength=16776704 SenseDataLength=0 HostAdapterStatus=EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN TargetStatus=0 Status=EFI_BAD_BUFFER_SIZE (3) Then ScsiDiskReadSectors() in "MdeModulePkg/Bus/Scsi/ScsiDiskDxe/ScsiDisk.c" retried the request with correctly shortened transfer length, but incorrectly unchanged sector count: Timeout=940000000 CdbLength=10 DataDir=Read InTransferLength=16776704 <--- updated as requested OutTransferLength=0 SenseDataLength=108 Cdb: 28 00 00 00 25 DD 00 FF FF 00 ^ ^^^^^^^^^^^ ^^^^^ | | | | | not changed! | | | LBA to read from | READ (10) (4) Since 65535 sectors of 2KB each wouldn't fit in a buffer of approx. 16MB, QEMU's virtio-scsi controller unconditionally rejected this request with VIRTIO_SCSI_S_OVERRUN, which VirtioScsiDxe then mapped to: InTransferLength=16776704 OutTransferLength=0 SenseDataLength=0 HostAdapterStatus=EFI_EXT_SCSI_STATUS_HOST_ADAPTER_DATA_OVERRUN_UNDERRUN TargetStatus=0 Status=EFI_DEVICE_ERROR (5) After two more tries of the same, ScsiDiskDxe passed up the error, which ultimately caused "cdboot.efi" to BSOD. Many thanks to Larry Cleeton from Microsoft for helping debug "cdboot.efi". Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18438 6f19259b-4bc3-4df7-8a09-765794883524
2015-09-10MdeModulePkg: ScsiDiskDxe: recognize EFI_BAD_BUFFER_SIZELaszlo Ersek
Acting specifically upon this error condition from UefiScsiLib (and ultimately from EFI_EXT_SCSI_PASS_THRU_PROTOCOL.PassThru()) in the - ScsiDiskRead10(), - ScsiDiskWrite10(), - ScsiDiskRead16(), - ScsiDiskWrite16() functions allows us to retry these operations from ScsiDiskReadSectors() and ScsiDiskWriteSectors(), with adjusted transfer sizes, without investigating further error details like Host Adapter Status, Target Status, and Sense Data. Cc: Feng Tian <feng.tian@intel.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18437 6f19259b-4bc3-4df7-8a09-765794883524
2015-08-28MdeModulePkg: Add the missing module UNI files.Liming Gao
Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Liming Gao <liming.gao@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18342 6f19259b-4bc3-4df7-8a09-765794883524
2015-08-26MdeModulePkg/Xhci: Remove TDs from transfer ring when timeout happensFeng Tian
The error handling for timeout case is enhanced to remove TDs from transfer ring. The original code only removed s/w URB, but the h/w transfer descriptor TDs didn't get removed. It would cause data lost for data stream peripheral, such as usb-to-serial device, from the s/w perspective. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Baraneedharan Anbazhagan <anbazhagan@hp.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18313 6f19259b-4bc3-4df7-8a09-765794883524
2015-08-19MdeModulePkg/Xhci: make all timeout values be consistent with comments.Feng Tian
In the original code, there exists some mismatches between the real waiting time and the corresponding timeout comments. For example, the XHC_GENERIC_TIMEOUT comment says it's 10ms timeout value, but the real code in fact waits 10s. So the code is refined to be consistent in code logic and comments. Note XHC_POLL_DELAY macro also be removed and the polling interval in XhcWaitOpRegBit() is changed from 1ms to 1us to keep same code style with other code. It has no real functionality impact. 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@18235 6f19259b-4bc3-4df7-8a09-765794883524
2015-08-06MdeModulePkg/Usb: Adjust TPL to not block async transfer during usb enum.Feng Tian
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
2015-07-30MdeModulePkg: Enhance PciBusDxe to handle high 32bit of MEM64 BAR returns 0Ruiyu Ni
According to the PCI spec, when software writes all-one to BAR for size probing, the value read back should be 0b1...10...0 after masking the BAR type bits. But in real world, it's possible that certain device returns 0b0...01...10...0 for MEM64 BAR size probing: some bits in the high 32bit may be 0. PciBus driver has the code to handle such case. However, it doesn't handle the case that the high 32bit is totally 0. The patch is to handle the special case. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Eric Dong <eric.dong@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18114 6f19259b-4bc3-4df7-8a09-765794883524
2015-07-29MdeModulePkg/PciBus: Simplify an complex if statement to pass VS2015Michael D Kinney
The logic in an if statement in PciIo is too complex and hard to understand and make VS2015 build failure. The fix simplifies the logic. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@18109 6f19259b-4bc3-4df7-8a09-765794883524