summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/IdeMode.c
AgeCommit message (Collapse)AuthorFilesLines
2026-08-05MdeModulePkg: Fix comparison with wider widthsAaron Pop1-1/+1
https://codeql.github.com/codeql-query-help/cpp/cpp-comparison-with-wider-type If the narrow type (smaller range) is compared against a wide type (larger range), the narrow value may overflow before reaching the wide value. This can cause unexpected behavior, such as: Infinite loops (loop condition never becomes false). Incorrect logic (comparison results are misleading). Signed-off-by: Aaron Pop <aaronpop@microsoft.com>
2023-08-02MdeModulePkg/Bus/Ata/AtaAtapiPassThru: Fix UNUSED_VALUE Coverity issueRanbir Singh1-2/+10
The return value stored in Status after call to SetDriveParameters is not made of any use thereafter and hence it remains as UNUSED. Based on Hao's findings (https://edk2.groups.io/g/devel/message/106844), the successful execution of SetDriveParameters() is not mandatory for initializing IDE mode of a hard disk device. Hence remove the 'Status' assignment of the return value from SetDriveParameters() and instead add error checks & DEBUG_WARN level messages within SetDriveParameters() function after sending INIT_DRIVE_PARAM & SET_MULTIPLE_MODE ATA commands. REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4204 Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Ray Ni <ray.ni@intel.com> Signed-off-by: Ranbir Singh <Ranbir.Singh3@Dell.com> Signed-off-by: Ranbir Singh <rsingh@ventanamicro.com> Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
2021-12-07MdeModulePkg: Apply uncrustify changesMichael Kubacki1-291/+299
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3737 Apply uncrustify changes to .c/.h files in the MdeModulePkg package Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael D Kinney <michael.d.kinney@intel.com> Signed-off-by: Michael Kubacki <michael.kubacki@microsoft.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
2021-12-07MdeModulePkg: Change use of EFI_D_* to DEBUG_*Michael D Kinney1-22/+21
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3739 Update all use of EFI_D_* defines in DEBUG() macros to DEBUG_* defines. Cc: Andrew Fish <afish@apple.com> Cc: Leif Lindholm <leif@nuviainc.com> Cc: Michael Kubacki <michael.kubacki@microsoft.com> Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
2020-02-11MdeModulePkg/Bus/Ata: Fix various typosAntoine Coeur1-8/+8
Fix various typos in documentation, comments and debug strings. Cc: Jian J Wang <jian.j.wang@intel.com> Cc: Hao A Wu <hao.a.wu@intel.com> Cc: Ray Ni <ray.ni@intel.com> Signed-off-by: Antoine Coeur <coeur@gmx.fr> Reviewed-by: Philippe Mathieu-Daude <philmd@redhat.com> Acked-by: Liming Gao <liming.gao@intel.com> Signed-off-by: Philippe Mathieu-Daude <philmd@redhat.com> Message-Id: <20200207010831.9046-12-philmd@redhat.com> [lersek@redhat.com: replace EFI_D_xxx w/ DEBUG_xxx to shut up PatchCheck]
2019-04-09MdeModulePkg: Replace BSD License with BSD+Patent LicenseMichael D Kinney1-7/+1
https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Hao Wu <hao.a.wu@intel.com> Reviewed-by: Jian J Wang <jian.j.wang@intel.com>
2018-08-21MdeModulePkg AtaAtapiPassThru: Remove redundant functionsshenglei1-257/+0
The functions that are never called have been removed. They are AhciCheckDeviceStatus,AhciPortReset,DRDYReady, DRDYReady2,WaitForBSYClear2 and AtaSoftReset. https://bugzilla.tianocore.org/show_bug.cgi?id=1062 v2: DRDYReady, DRDYReady2, WaitForBSYClear2 and AtaSoftReset are added to the commit message. Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: shenglei <shenglei.zhang@intel.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Star Zeng <star.zeng@intel.com>
2016-01-25MdeModulePkg/.../IdeMode: correctly report length of returned dataPaolo Bonzini1-14/+18
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 Ersek1-0/+6
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 Ersek1-6/+25
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-07MdeModulePkg/Ide: return correct status when DRQ is not ready for ATAPIFeng Tian1-1/+1
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
2015-09-22MdeModulePkg: AtaAtapiPassThru: select master/slave around DIAG commandReza Jelveh1-0/+5
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-06-03MdeModulePkg/AtaAtapiPassThru: ensure PRDT of IDE is in 64K boundaryFeng Tian1-17/+38
Follow IDE BUS Master spec to ensure the PRDT table not cross 64k boundary in memory. 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@17552 6f19259b-4bc3-4df7-8a09-765794883524
2014-05-15MdeModulePkg/AtaAtapiPassThru: Handle timeout 0 as indefinitely wait to ↵Tian, Feng1-44/+100
strictly comply with UEFI spec Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Tian, Feng <feng.tian@intel.com> Reviewed-by: Li, Elvin <elvin.li@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15534 6f19259b-4bc3-4df7-8a09-765794883524
2014-04-30MdeModulePkg/ScsiDisk: Using back-off algorithm to dynamically adjust ↵Tian, Feng1-99/+18
transfer length in a single SCSI/ATAPI transfer to reach best device compatibility. Besides this, the patch also fixed: 1) Wrong return value in SenseDataLength field of packet field of EFI_EXT_SCSI_PASS_THRU protocol, it should reflect real sense data length we got. 2) Wrong logic in ScsiDiskRequestSenseKeys that the logic makes SenseData pointer unaligned compared with BlockIo.Media.IoAlign field. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Tian, Feng <feng.tian@intel.com> Reviewed-by: Zeng, Star <star.zeng@intel.com> Reviewed-by: Fu, Siyuan <siyuan.fu@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@15491 6f19259b-4bc3-4df7-8a09-765794883524
2013-08-09Add new adding ATA related status code in PI 1.3 to definition and ATA modules.Elvin Li1-2/+27
Signed-off-by: Elvin Li <elvin.li@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@14535 6f19259b-4bc3-4df7-8a09-765794883524
2012-05-29MdeModulePkg/Ata: Use a new Pcd named "PcdAtaSmartEnable" to control if ↵erictian1-2/+2
enabling S.M.A.R.T feature by default. Signed-off-by: Feng Tian <feng.tian@intel.com> Reviewed-by: Sun Rui <rui.sun@intel.com> git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13369 6f19259b-4bc3-4df7-8a09-765794883524
2011-11-15In AtaAtapiPassThru driverqianouyang1-69/+70
1. move the non-blocking task related setting ahead to store the MapTable and PageCount in case there is a IO operation error happened then the error handler code could use those information to release the resource. 2. Enlarge the TPL protective area to make sure the simulative delay time is accurate when there is mixing usage of Non blocking and blocking I/O. Signed-off-by: qianouyang Reviewed-by: erictian git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12712 6f19259b-4bc3-4df7-8a09-765794883524
2011-11-03MdeModulePkg: ATA performance tuning.erictian1-150/+148
1. Boost IDE mode boot when slave device is absent. 2. Use D2H FIS to check if the PIO OUT/DMA IN/DMA OUT transfer is finished or error happened. ATA PIO IN has special check as it may just receive PIO SETUP FIS for success case. 3. Add command status register check for IDE DMA transfer. 4. ScsiDiskReadCapacity() in ScsiDisk should return EFI_SUCCESS if SENSE Data request is success. Signed-off-by: erictian Reviewed-by: rsun3 Reviewed-by: xdu2 Reviewed-by: mdkinney git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12658 6f19259b-4bc3-4df7-8a09-765794883524
2011-10-31MdeModulePkg: Remove variables that are set, but not usedjljusten1-4/+0
GCC 4.6 generates a warning when a variable is set, but never used. Signed-off-by: jljusten Reviewed-by: lgao4 Reviewed-by: erictian Reviewed-by: rsun3 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12617 6f19259b-4bc3-4df7-8a09-765794883524
2011-09-01Remove, correct and refine some debug messages.lzeng141-2/+0
Signed-off-by: lzeng14 Reviewed-by: erictian Reviewed-by: qianouyang Reviewed-by: niruiyu git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12248 6f19259b-4bc3-4df7-8a09-765794883524
2011-06-30Fix a potential memory free failure bug in AtaAtapiPassThruerictian1-7/+9
Signed-off-by: erictian Reviewed-by: rsun3 git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11932 6f19259b-4bc3-4df7-8a09-765794883524
2011-05-26Add more status code in drivers.li-elvin1-0/+6
Signed-off-by: li-elvin Reviewed-by: jyao1 Reviewed-by: lgao4 Reviewed-by: erictian git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11706 6f19259b-4bc3-4df7-8a09-765794883524
2011-05-19Update the function's descriptions (which is in AtaBus, AtaAtapiPassThru, ↵qianouyang1-2/+2
Partition drivers) to make them be consistent with the code. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11678 6f19259b-4bc3-4df7-8a09-765794883524
2011-05-03Add BlockIO2 Protocol.qianouyang1-249/+417
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11606 6f19259b-4bc3-4df7-8a09-765794883524
2010-10-28S.M.A.R.T feature enableerictian1-0/+177
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10985 6f19259b-4bc3-4df7-8a09-765794883524
2010-10-14fix 32bit build warningerictian1-1/+1
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10935 6f19259b-4bc3-4df7-8a09-765794883524
2010-09-30remove additional space from comments and pass ICC/GCC44 builderictian1-10/+9
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10903 6f19259b-4bc3-4df7-8a09-765794883524
2010-09-29add native ide/ahci drivererictian1-0/+2524
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10901 6f19259b-4bc3-4df7-8a09-765794883524