mirror of https://github.com/acidanthera/audk.git
In IdeBus driver block I/O read/write interface, it will always try to use UDMA mode first, if fails, then try to use PIO mode.
This may cause side effects if disk does not support UDMA mode and also let bad performance. The modification is to record supported mode and only try supported mode when do disk read/write. Also this patch combines the code for read/readex/write/writex to reduce code size. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2412 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
59e9a3659f
commit
bc4e770c78
File diff suppressed because it is too large
Load Diff
|
@ -1097,6 +1097,42 @@ AtaUdmaWriteExt (
|
|||
)
|
||||
;
|
||||
|
||||
/**
|
||||
Perform an ATA Udma operation (Read, ReadExt, Write, WriteExt).
|
||||
|
||||
@param[in] *IdeDev
|
||||
pointer pointing to IDE_BLK_IO_DEV data structure, used
|
||||
to record all the information of the IDE device.
|
||||
|
||||
@param[in] *DataBuffer
|
||||
A pointer to the source buffer for the data.
|
||||
|
||||
@param[in] StartLba
|
||||
The starting logical block address to write to
|
||||
on the device media.
|
||||
|
||||
@param[in] NumberOfBlocks
|
||||
The number of transfer data blocks.
|
||||
|
||||
@param[in] UdmaOp
|
||||
The perform operations could be AtaUdmaReadOp, AtaUdmaReadExOp,
|
||||
AtaUdmaWriteOp, AtaUdmaWriteExOp
|
||||
|
||||
@return The device status of UDMA operation. If the operation is
|
||||
successful, return EFI_SUCCESS.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
DoAtaUdma (
|
||||
IN IDE_BLK_IO_DEV *IdeDev,
|
||||
IN VOID *DataBuffer,
|
||||
IN EFI_LBA StartLba,
|
||||
IN UINTN NumberOfBlocks,
|
||||
IN ATA_UDMA_OPERATION UdmaOp
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
/**
|
||||
TODO: Add function description
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ typedef struct {
|
|||
INQUIRY_DATA *pInquiryData;
|
||||
EFI_IDENTIFY_DATA *pIdData;
|
||||
ATA_PIO_MODE PioMode;
|
||||
ATA_UDMA_MODE UDma_Mode;
|
||||
EFI_ATA_MODE UdmaMode;
|
||||
CHAR8 ModelName[41];
|
||||
REQUEST_SENSE_DATA *SenseData;
|
||||
UINT8 SenseDataNumber;
|
||||
|
|
|
@ -86,6 +86,13 @@ typedef enum {
|
|||
SenseOtherSense
|
||||
} SENSE_RESULT;
|
||||
|
||||
typedef enum {
|
||||
AtaUdmaReadOp,
|
||||
AtaUdmaReadExtOp,
|
||||
AtaUdmaWriteOp,
|
||||
AtaUdmaWriteExtOp
|
||||
} ATA_UDMA_OPERATION;
|
||||
|
||||
//
|
||||
// IDE Registers
|
||||
//
|
||||
|
|
Loading…
Reference in New Issue