From: Ming Huang <ming.huang@linaro.org>
To: leif.lindholm@linaro.org, linaro-uefi@lists.linaro.org,
edk2-devel@lists.01.org, star.zeng@intel.com,
eric.dong@intel.com
Cc: ard.biesheuvel@linaro.org, michael.d.kinney@intel.com,
liming.gao@intel.com, guoheyi@huawei.com,
wanghuiqiang@huawei.com, huangming23@huawei.com,
zhangjinsong2@huawei.com, mengfanrong@huawei.com,
huangdaode@hisilicon.com, waip23@126.com,
Ming Huang <ming.huang@linaro.org>
Subject: [edk2 UsbMassStorageDxe v1 1/1] MdeModulePkg/Usb: Replace macro USB_BOOT_IO_BLOCKS
Date: Thu, 15 Mar 2018 20:29:40 +0800 [thread overview]
Message-ID: <1521116980-120594-2-git-send-email-ming.huang@linaro.org> (raw)
In-Reply-To: <1521116980-120594-1-git-send-email-ming.huang@linaro.org>
Booting from USB may fail while the macro USB_BOOT_IO_BLOCKS
set to 128 because the block size of some USB devices are exceeded
512. So,the count blocks to transfer should be calculated by block
size of the USB devices.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ming Huang <ming.huang@linaro.org>
---
MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c | 16 ++++++++++++----
MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h | 4 ++--
2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c
index b84bfd2d7290..b38cb6116bf4 100644
--- a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c
+++ b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.c
@@ -814,11 +814,13 @@ UsbBootReadBlocks (
USB_BOOT_READ10_CMD ReadCmd;
EFI_STATUS Status;
UINT16 Count;
+ UINT16 CountMax;
UINT32 BlockSize;
UINT32 ByteSize;
UINT32 Timeout;
BlockSize = UsbMass->BlockIoMedia.BlockSize;
+ CountMax = USB_BOOT_MAX_CARRY_SIZE / BlockSize;
Status = EFI_SUCCESS;
while (TotalBlock > 0) {
@@ -827,7 +829,7 @@ UsbBootReadBlocks (
// on the device. We must split the total block because the READ10
// command only has 16 bit transfer length (in the unit of block).
//
- Count = (UINT16)((TotalBlock < USB_BOOT_IO_BLOCKS) ? TotalBlock : USB_BOOT_IO_BLOCKS);
+ Count = (UINT16)((TotalBlock < CountMax) ? TotalBlock : CountMax);
ByteSize = (UINT32)Count * BlockSize;
//
@@ -890,11 +892,13 @@ UsbBootWriteBlocks (
USB_BOOT_WRITE10_CMD WriteCmd;
EFI_STATUS Status;
UINT16 Count;
+ UINT16 CountMax;
UINT32 BlockSize;
UINT32 ByteSize;
UINT32 Timeout;
BlockSize = UsbMass->BlockIoMedia.BlockSize;
+ CountMax = USB_BOOT_MAX_CARRY_SIZE / BlockSize;
Status = EFI_SUCCESS;
while (TotalBlock > 0) {
@@ -903,7 +907,7 @@ UsbBootWriteBlocks (
// on the device. We must split the total block because the WRITE10
// command only has 16 bit transfer length (in the unit of block).
//
- Count = (UINT16)((TotalBlock < USB_BOOT_IO_BLOCKS) ? TotalBlock : USB_BOOT_IO_BLOCKS);
+ Count = (UINT16)((TotalBlock < CountMax) ? TotalBlock : CountMax);
ByteSize = (UINT32)Count * BlockSize;
//
@@ -966,18 +970,20 @@ UsbBootReadBlocks16 (
UINT8 ReadCmd[16];
EFI_STATUS Status;
UINT16 Count;
+ UINT16 CountMax;
UINT32 BlockSize;
UINT32 ByteSize;
UINT32 Timeout;
BlockSize = UsbMass->BlockIoMedia.BlockSize;
+ CountMax = USB_BOOT_MAX_CARRY_SIZE / BlockSize;
Status = EFI_SUCCESS;
while (TotalBlock > 0) {
//
// Split the total blocks into smaller pieces.
//
- Count = (UINT16)((TotalBlock < USB_BOOT_IO_BLOCKS) ? TotalBlock : USB_BOOT_IO_BLOCKS);
+ Count = (UINT16)((TotalBlock < CountMax) ? TotalBlock : CountMax);
ByteSize = (UINT32)Count * BlockSize;
//
@@ -1040,18 +1046,20 @@ UsbBootWriteBlocks16 (
UINT8 WriteCmd[16];
EFI_STATUS Status;
UINT16 Count;
+ UINT16 CountMax;
UINT32 BlockSize;
UINT32 ByteSize;
UINT32 Timeout;
BlockSize = UsbMass->BlockIoMedia.BlockSize;
+ CountMax = USB_BOOT_MAX_CARRY_SIZE / BlockSize;
Status = EFI_SUCCESS;
while (TotalBlock > 0) {
//
// Split the total blocks into smaller pieces.
//
- Count = (UINT16)((TotalBlock < USB_BOOT_IO_BLOCKS) ? TotalBlock : USB_BOOT_IO_BLOCKS);
+ Count = (UINT16)((TotalBlock < CountMax) ? TotalBlock : CountMax);
ByteSize = (UINT32)Count * BlockSize;
//
diff --git a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h
index 13a926035ceb..fc5449bde21e 100644
--- a/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h
+++ b/MdeModulePkg/Bus/Usb/UsbMassStorageDxe/UsbMassBoot.h
@@ -65,9 +65,9 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define USB_PDT_SIMPLE_DIRECT 0x0E ///< Simplified direct access device
//
-// Other parameters, Max carried size is 512B * 128 = 64KB
+// Other parameters, Max carried size is 64KB.
//
-#define USB_BOOT_IO_BLOCKS 128
+#define USB_BOOT_MAX_CARRY_SIZE 0x10000
//
// Retry mass command times, set by experience
--
1.9.1
next prev parent reply other threads:[~2018-03-15 12:23 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-15 12:29 [edk2 UsbMassStorageDxe v1 0/1] Calculating the count of blocks to transfer Ming Huang
2018-03-15 12:29 ` Ming Huang [this message]
2018-03-21 12:40 ` [edk2 UsbMassStorageDxe v1 1/1] MdeModulePkg/Usb: Replace macro USB_BOOT_IO_BLOCKS Zeng, Star
2018-03-21 14:22 ` Kinney, Michael D
2018-03-22 3:31 ` Ming Huang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1521116980-120594-2-git-send-email-ming.huang@linaro.org \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox