Some ISO images cannot be recognized properly when they are on media whose
block size is not 2048 bytes.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <[email protected]>
---
 MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c 
b/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c
index 2238449..3757d95 100644
--- a/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c
+++ b/MdeModulePkg/Universal/Disk/PartitionDxe/ElTorito.c
@@ -183,7 +183,7 @@ PartitionInstallElToritoChildHandles (
       }
 
       SubBlockSize  = 512;
-      SectorCount   = Catalog->Boot.SectorCount * (SIZE_2KB / 
Media->BlockSize);
+      SectorCount   = Catalog->Boot.SectorCount;
 
       switch (Catalog->Boot.MediaType) {
 
@@ -233,15 +233,15 @@ PartitionInstallElToritoChildHandles (
         //
         // When the SectorCount < 2, set the Partition as the whole CD.
         //
-        if (VolSpaceSize > (Media->LastBlock + 1)) {
-          CdDev.PartitionSize = (UINT32)(Media->LastBlock - Catalog->Boot.Lba 
+ 1);
+        if (VolSpaceSize * (SIZE_2KB / Media->BlockSize) > (Media->LastBlock + 
1)) {
+          CdDev.PartitionSize = (UINT32)(Media->LastBlock - Catalog->Boot.Lba 
* (SIZE_2KB / Media->BlockSize) + 1);
         } else {
-          CdDev.PartitionSize = (UINT32)(VolSpaceSize - Catalog->Boot.Lba);
+          CdDev.PartitionSize = (UINT32)(VolSpaceSize - Catalog->Boot.Lba) * 
(SIZE_2KB / Media->BlockSize);
         }
       } else {
         CdDev.PartitionSize = DivU64x32 (
                                 MultU64x32 (
-                                  SectorCount,
+                                  SectorCount * (SIZE_2KB / Media->BlockSize),
                                   SubBlockSize
                                   ) + Media->BlockSize - 1,
                                 Media->BlockSize
@@ -258,7 +258,7 @@ PartitionInstallElToritoChildHandles (
                 DevicePath,
                 (EFI_DEVICE_PATH_PROTOCOL *) &CdDev,
                 Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize),
-                MultU64x32 (Catalog->Boot.Lba + CdDev.PartitionSize - 1, 
SIZE_2KB / Media->BlockSize),
+                Catalog->Boot.Lba * (SIZE_2KB / Media->BlockSize) + 
CdDev.PartitionSize - 1,
                 SubBlockSize,
                 FALSE
                 );
-- 
1.9.5.msysgit.0

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to