Uefi iscsi sanboot does not require a block size of 2048, and changing
the block size breaks windows installations which expose an iso9660
filesystem in addition to a GPT.

Therefore, remove the block remapping code and just keep the default
block size in uefi mode.
---
 src/interface/efi/efi_block.c | 87 +------------------------------------------
 1 file changed, 2 insertions(+), 85 deletions(-)

diff --git a/src/interface/efi/efi_block.c b/src/interface/efi/efi_block.c
index 0609029..3dc0348 100644
--- a/src/interface/efi/efi_block.c
+++ b/src/interface/efi/efi_block.c
@@ -626,76 +626,12 @@ efi_block_path ( struct uri *uri, 
EFI_DEVICE_PATH_PROTOCOL *parent ) {
 }
 
 /**
- * Configure EFI block device as a CD-ROM, if applicable
- *
- * @v block            Block device
- * @v scratch          Scratch data area
- * @ret rc             Return status code
- *
- * The EDK2 code will ignore CD-ROM devices with a block size other
- * than 2048.  While we could require the user to configure the block
- * size appropriately, this is non-trivial and would impose a
- * substantial learning effort on the user.  Instead, we perform
- * essentially the same auto-detection as under a BIOS SAN boot; if
- * the ISO9660 primary volume descriptor is present then we force a
- * block size of 2048 and map read/write requests appropriately.
- */
-static int efi_block_parse_iso9660 ( struct efi_block *block, void *scratch ) {
-       static const struct iso9660_primary_descriptor_fixed primary_check = {
-               .type = ISO9660_TYPE_PRIMARY,
-               .id = ISO9660_ID,
-       };
-       struct iso9660_primary_descriptor *primary = scratch;
-       struct efi_block_command_context context;
-       unsigned int blksize;
-       unsigned int blksize_shift;
-       int rc;
-
-       /* Calculate required blocksize shift for potential CD-ROM access */
-       blksize = block->capacity.blksize;
-       blksize_shift = 0;
-       while ( blksize < ISO9660_BLKSIZE ) {
-               blksize <<= 1;
-               blksize_shift++;
-       }
-       if ( blksize > ISO9660_BLKSIZE ) {
-               /* Cannot be a CD-ROM */
-               return 0;
-       }
-
-       /* Read primary volume descriptor */
-       memset ( &context, 0, sizeof ( context ) );
-       context.lba = ( ISO9660_PRIMARY_LBA << blksize_shift );
-       context.data = primary;
-       context.len = ISO9660_BLKSIZE;
-       context.block_rw = block_read;
-       if ( ( rc = efi_block_command ( block, efi_block_cmd_rw,
-                                       &context ) ) != 0 ) {
-               DBGC ( block, "EFIBLK %#02x could not read ISO9660 primary "
-                      "volume descriptor: %s\n",
-                      block->drive, strerror ( rc ) );
-               return rc;
-       }
-
-       /* Do nothing unless this is an ISO image */
-       if ( memcmp ( primary, &primary_check, sizeof ( primary_check ) ) != 0 )
-               return 0;
-       DBGC ( block, "EFIBLK %#02x contains an ISO9660 filesystem; treating "
-              "as CD-ROM\n", block->drive );
-       block->blksize_shift = blksize_shift;
-
-       return 0;
-}
-
-/**
  * Determing EFI block device capacity and block size
  *
  * @v block            Block device
  * @ret rc             Return status code
  */
 static int efi_block_capacity ( struct efi_block *block ) {
-       size_t scratch_len;
-       void *scratch;
        int rc;
 
        /* Read read block capacity */
@@ -704,32 +640,13 @@ static int efi_block_capacity ( struct efi_block *block ) 
{
                goto err_read_capacity;
        block->blksize_shift = 0;
 
-       /* Allocate scratch area */
-       scratch_len = ( block->capacity.blksize );
-       if ( scratch_len < ISO9660_BLKSIZE )
-               scratch_len = ISO9660_BLKSIZE;
-       scratch = malloc ( scratch_len );
-       if ( ! scratch ) {
-               rc = -ENOMEM;
-               goto err_alloc;
-       }
-
-       /* Configure as a CD-ROM, if applicable */
-       if ( ( rc = efi_block_parse_iso9660 ( block, scratch ) ) != 0 )
-               goto err_parse_iso9660;
-
        /* Update media descriptor */
-       block->media.BlockSize =
-               ( block->capacity.blksize << block->blksize_shift );
-       block->media.LastBlock =
-               ( ( block->capacity.blocks >> block->blksize_shift ) - 1 );
+       block->media.BlockSize = block->capacity.blksize;
+       block->media.LastBlock = block->capacity.blocks - 1 ;
 
        /* Success */
        rc = 0;
 
- err_parse_iso9660:
-       free ( scratch );
- err_alloc:
  err_read_capacity:
        return rc;
 }
-- 
2.5.0

_______________________________________________
ipxe-devel mailing list
ipxe-devel@lists.ipxe.org
https://lists.ipxe.org/mailman/listinfo.cgi/ipxe-devel

Reply via email to