Index: /trunk/src/VBox/Devices/PC/BIOS/ahci.c
===================================================================
--- /trunk/src/VBox/Devices/PC/BIOS/ahci.c	(revision 58723)
+++ /trunk/src/VBox/Devices/PC/BIOS/ahci.c	(revision 58724)
@@ -360,6 +360,6 @@
 
     ahci->abCmd[8]  = (bios_dsk->drqp.lba >> 24) & 0xff;
-    ahci->abCmd[9]  = 0;
-    ahci->abCmd[10] = 0;
+    ahci->abCmd[9]  = (bios_dsk->drqp.lba >> 32) & 0xff;
+    ahci->abCmd[10] = (bios_dsk->drqp.lba >> 40) & 0xff;
     ahci->abCmd[11] = 0;
 
@@ -525,7 +525,7 @@
         BX_PANIC("%s: device_id out of range %d\n", __func__, device_id);
 
-    DBG_AHCI("%s: %u sectors @ LBA %lu, device %d, port %d\n", __func__,
-             bios_dsk->drqp.nsect, bios_dsk->drqp.lba, device_id,
-             bios_dsk->ahcidev[device_id].port);
+    DBG_AHCI("%s: %u sectors @ LBA 0x%llx, device %d, port %d\n", __func__,
+             bios_dsk->drqp.nsect, bios_dsk->drqp.lba,
+             device_id, bios_dsk->ahcidev[device_id].port);
 
     high_bits_save(bios_dsk->ahci_seg :> 0);
@@ -557,5 +557,5 @@
         BX_PANIC("%s: device_id out of range %d\n", __func__, device_id);
 
-    DBG_AHCI("%s: %u sectors @ LBA %lu, device %d, port %d\n", __func__,
+    DBG_AHCI("%s: %u sectors @ LBA 0x%llx, device %d, port %d\n", __func__,
              bios_dsk->drqp.nsect, bios_dsk->drqp.lba, device_id,
              bios_dsk->ahcidev[device_id].port);
@@ -602,5 +602,5 @@
              bios_dsk->drqp.nsect, bios_dsk->drqp.sect_sz);
 
-    bios_dsk->drqp.lba     = (uint32_t)length << 8;     //@todo: xfer length limit
+    bios_dsk->drqp.lba     = length << 8;     //@todo: xfer length limit
     bios_dsk->drqp.buffer  = buffer;
     bios_dsk->drqp.nsect   = length / bios_dsk->drqp.sect_sz;
@@ -690,5 +690,5 @@
             if (val == 0x101)
             {
-                uint32_t    sectors;
+                uint64_t    sectors;
                 uint16_t    cylinders, heads, spt;
                 chs_t       lgeo;
@@ -713,9 +713,8 @@
                 sectors   = *(uint32_t *)(abBuffer+(60*2)); // word 60 and word 61
 
-                /** @todo update sectors to be a 64 bit number (also lba...). */
                 if (sectors == 0x0FFFFFFF)  /* For disks bigger than ~128GB */
-                    sectors = *(uint32_t *)(abBuffer+(100*2)); // words 100 to 103 (someday)
-
-                DBG_AHCI("AHCI: %ld sectors\n", sectors);
+                    sectors = *(uint64_t *)(abBuffer+(100*2)); // words 100 to 103
+
+                DBG_AHCI("AHCI: 0x%llx sectors\n", sectors);
 
                 bios_dsk->ahcidev[devcount_ahci].port = u8Port;
@@ -759,6 +758,7 @@
                     set_geom_lba(&lgeo, sectors);   /* Default EDD-style translated LBA geometry. */
 
-                BX_INFO("AHCI %d-P#%d: PCHS=%u/%u/%u LCHS=%u/%u/%u %lu sectors\n", devcount_ahci,
-                        u8Port, cylinders, heads, spt, lgeo.cylinders, lgeo.heads, lgeo.spt, sectors);
+                BX_INFO("AHCI %d-P#%d: PCHS=%u/%u/%u LCHS=%u/%u/%u 0x%llx sectors\n", devcount_ahci,
+                        u8Port, cylinders, heads, spt, lgeo.cylinders, lgeo.heads, lgeo.spt,
+                        sectors);
 
                 bios_dsk->devices[hd_index].lchs = lgeo;
Index: /trunk/src/VBox/Devices/PC/BIOS/ata.c
===================================================================
--- /trunk/src/VBox/Devices/PC/BIOS/ata.c	(revision 58723)
+++ /trunk/src/VBox/Devices/PC/BIOS/ata.c	(revision 58724)
@@ -109,5 +109,5 @@
         bios_dsk->devices[device].pchs.cylinders = 0;
         bios_dsk->devices[device].pchs.spt       = 0;
-        bios_dsk->devices[device].sectors     = 0;
+        bios_dsk->devices[device].sectors        = 0;
     }
 
@@ -207,5 +207,5 @@
 uint16_t ata_cmd_data_in(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t count)
 {
-    uint32_t        lba;
+    uint64_t        lba;
     uint16_t        iobase1, iobase2, blksize, mult_blk_cnt;
     uint16_t        cylinder;
@@ -256,6 +256,6 @@
         if (lba + count >= 268435456)
         {
-            sector = (lba & 0xff000000L) >> 24;
-            cylinder = 0; /* The parameter lba is just a 32 bit value. */
+            sector = (lba >> 24) & 0x00ff;
+            cylinder = (lba >> 32) & 0xffff;
             outb(iobase1 + ATA_CB_SC, (count & 0xff00) >> 8);
             outb(iobase1 + ATA_CB_SN, sector);
@@ -460,5 +460,5 @@
         // Now we send a IDENTIFY command to ATA device
         if (type == DSK_TYPE_ATA) {
-            uint32_t    sectors;
+            uint64_t    sectors;
             uint16_t    cylinders, heads, spt, blksize;
             chs_t       lgeo;
@@ -484,7 +484,6 @@
 
             sectors   = *(uint32_t *)(buffer+(60*2)); // word 60 and word 61
-            /** @todo update sectors to be a 64 bit number (also lba...). */
             if (sectors == 0x0FFFFFFF)  /* For disks bigger than ~128GB */
-                sectors = *(uint32_t *)(buffer+(100*2)); // words 100 to 103 (someday)
+                sectors = *(uint64_t *)(buffer+(100*2)); // words 100 to 103
             switch (device)
             {
@@ -595,6 +594,5 @@
             switch (type) {
             case DSK_TYPE_ATA:
-                sizeinmb = bios_dsk->devices[device].sectors;
-                sizeinmb >>= 11;
+                sizeinmb = (bios_dsk->devices[device].sectors >> 11);
             case DSK_TYPE_ATAPI:
                 // Read ATA/ATAPI version
@@ -683,5 +681,5 @@
 uint16_t ata_cmd_data_out(bio_dsk_t __far *bios_dsk, uint16_t command, uint16_t count)
 {
-    uint32_t        lba;
+    uint64_t        lba;
     char __far      *buffer;
     uint16_t        iobase1, iobase2, blksize;
@@ -724,6 +722,6 @@
         if (lba + count >= 268435456)
         {
-            sector = (lba & 0xff000000L) >> 24;
-            cylinder = 0; /* The parameter lba is just a 32 bit value. */
+            sector = (lba >> 24) & 0x00ff;
+            cylinder = (lba >> 32) & 0xffff;
             outb(iobase1 + ATA_CB_SC, (count & 0xff00) >> 8);
             outb(iobase1 + ATA_CB_SN, sector);
@@ -837,12 +835,15 @@
         /* CHS addressing. */
         bios_dsk->devices[device_id].blksize = n_sect * 0x200;
+        BX_DEBUG_ATA("%s: reading %u sectors (CHS)\n", __func__, n_sect);
         status = ata_cmd_data_in(bios_dsk, ATA_CMD_READ_MULTIPLE, n_sect);
         bios_dsk->devices[device_id].blksize = 0x200;
     } else {
         /* LBA addressing. */
-        if (bios_dsk->drqp.lba + n_sect >= 268435456)
+        if (bios_dsk->drqp.lba + n_sect >= 268435456) {
+            BX_DEBUG_ATA("%s: reading %u sector (LBA,EXT)\n", __func__, n_sect);
             status = ata_cmd_data_in(bios_dsk, ATA_CMD_READ_SECTORS_EXT, n_sect);
-        else {
+        } else {
             bios_dsk->devices[device_id].blksize = n_sect * 0x200;
+            BX_DEBUG_ATA("%s: reading %u sector (LBA,MULT)\n", __func__, n_sect);
             status = ata_cmd_data_in(bios_dsk, ATA_CMD_READ_MULTIPLE, n_sect);
             bios_dsk->devices[device_id].blksize = 0x200;
Index: /trunk/src/VBox/Devices/PC/BIOS/disk.c
===================================================================
--- /trunk/src/VBox/Devices/PC/BIOS/disk.c	(revision 58723)
+++ /trunk/src/VBox/Devices/PC/BIOS/disk.c	(revision 58724)
@@ -99,10 +99,12 @@
  * geometry in case none was provided in CMOS.
  */
-void set_geom_lba(chs_t __far *lgeo, uint32_t nsectors)
+void set_geom_lba(chs_t __far *lgeo, uint64_t nsectors64)
 {
     uint32_t    limit = 8257536;    /* 1024 * 128 * 63 */
+    uint32_t    nsectors;
     unsigned    heads = 255;
     int         i;
 
+    nsectors = (nsectors64 >> 32) ? 0xFFFFFFFFL : (uint32_t)nsectors64;
     /* Start with ~4GB limit, go down to 504MB. */
     for (i = 0; i < 4; ++i) {
@@ -331,5 +333,5 @@
 void BIOSCALL int13_harddisk_ext(disk_regs_t r)
 {
-    uint32_t            lba;
+    uint64_t            lba;
     uint16_t            ebda_seg = read_word(0x0040,0x000E);
     uint16_t            segment, offset;
@@ -384,16 +386,11 @@
         offset  = i13_ext->offset;
 
-        BX_DEBUG_INT13_HD("%s: %d sectors from lba %lu @ %04x:%04x\n", __func__,
-                          count, i13_ext->lba1, segment, offset);
-
-        // Can't use 64 bits lba
+        // Get 64 bits lba and check
         lba = i13_ext->lba2;
-        if (lba != 0L) {
-            BX_PANIC("%s: function %02x. Can't use 64bits lba\n", __func__, GET_AH());
-            goto int13x_fail;
-        }
-
-        // Get 32 bits lba and check
-        lba = i13_ext->lba1;
+        lba <<= 32;
+        lba |= i13_ext->lba1;
+
+        BX_DEBUG_INT13_HD("%s: %d sectors from LBA 0x%llx @ %04x:%04x\n", __func__,
+                          count, lba, segment, offset);
 
         type = bios_dsk->devices[device].type;
@@ -467,6 +464,6 @@
             dpt->spt       = npspt;
             dpt->blksize   = blksize;
-            dpt->sector_count1 = lba;   // FIXME should be Bit64
-            dpt->sector_count2 = 0;
+            dpt->sector_count1 = lba;
+            dpt->sector_count2 = lba >> 32;
         }
 
Index: /trunk/src/VBox/Devices/PC/BIOS/ebda.h
===================================================================
--- /trunk/src/VBox/Devices/PC/BIOS/ebda.h	(revision 58723)
+++ /trunk/src/VBox/Devices/PC/BIOS/ebda.h	(revision 58724)
@@ -193,5 +193,5 @@
     chs_t       lchs;         /* Logical CHS geometry. */
     chs_t       pchs;         /* Physical CHS geometry. */
-    uint32_t    sectors;      /* Total sector count. */
+    uint64_t    sectors;      /* Total sector count. */
 } disk_dev_t;
 
@@ -201,5 +201,5 @@
  */
 typedef struct {
-    uint32_t    lba;                /* Starting LBA. */
+    uint64_t    lba;                /* Starting LBA. */
     void __far  *buffer;            /* Read/write data buffer pointer. */
     uint8_t     dev_id;             /* Device ID; index into devices array. */
@@ -318,5 +318,5 @@
 int __fastcall ahci_write_sectors(bio_dsk_t __far *bios_dsk);
 
-extern void set_geom_lba(chs_t __far *lgeo, uint32_t nsectors);
+extern void set_geom_lba(chs_t __far *lgeo, uint64_t nsectors);
 
 // @todo: put this elsewhere (and change/eliminate?)
Index: /trunk/src/VBox/Devices/PC/BIOS/print.c
===================================================================
--- /trunk/src/VBox/Devices/PC/BIOS/print.c	(revision 58723)
+++ /trunk/src/VBox/Devices/PC/BIOS/print.c	(revision 58724)
@@ -145,5 +145,7 @@
 //   Supports %[format_width][length]format
 //   where format can be x,X,u,d,s,S,c
-//   and the optional length modifier is l (ell)
+//   and the optional length modifier is l (ell, long 32-bit) or ll
+//   (long long, 64-bit).
+//   Only x,X work with ll
 //--------------------------------------------------------------------------
 void bios_printf(uint16_t action, const char *s, ...)
@@ -190,4 +192,30 @@
                     put_uint(action, arg, format_width, 0);
                 }
+                else if (c == 'l' && s[1] == 'l') {
+                    uint64_t llval;
+                    uint16_t *cp16;
+
+                    s += 2;
+                    c = *s;
+                    cp16 = (uint16_t *)&llval;
+                    cp16[0] = arg;
+                    cp16[1] = va_arg( args, uint16_t );
+                    cp16[2] = va_arg( args, uint16_t );
+                    cp16[3] = va_arg( args, uint16_t );
+                    if (c == 'x' || c == 'X') {
+                        if (format_width == 0)
+                            format_width = 16;
+                        if (c == 'x')
+                            hexadd = 'a';
+                        else
+                            hexadd = 'A';
+                        for (i=format_width-1; i>=0; i--) {
+                            nibble =  (llval >> (i * 4)) & 0x000f;
+                            send (action, (nibble<=9)? (nibble+'0') : (nibble-10+hexadd));
+                        }
+                    } else {
+                        BX_PANIC("bios_printf: unknown %ll format\n");
+                    }
+                }
                 else if (c == 'l') {
                     s++;
Index: /trunk/src/VBox/Devices/PC/BIOS/scsi.c
===================================================================
--- /trunk/src/VBox/Devices/PC/BIOS/scsi.c	(revision 58723)
+++ /trunk/src/VBox/Devices/PC/BIOS/scsi.c	(revision 58724)
@@ -49,8 +49,12 @@
 
 /* Command opcodes. */
+#define SCSI_SERVICE_ACT   0x9e
 #define SCSI_INQUIRY       0x12
-#define SCSI_READ_CAPACITY 0x25
+#define SCSI_READ_CAP_10   0x25
 #define SCSI_READ_10       0x28
 #define SCSI_WRITE_10      0x2a
+#define SCSI_READ_CAP_16   0x10    /* Not an opcode by itself, sub-action for the "Service Action" */
+#define SCSI_READ_16       0x88
+#define SCSI_WRITE_16      0x8a
 
 /* Data transfer direction. */
@@ -69,8 +73,17 @@
 } cdb_rw10;
 
+/* READ_16/WRITE_16 CDB layout. */
+typedef struct {
+    uint16_t    command;    /* Command. */
+    uint64_t    lba;        /* LBA, MSB first! */
+    uint32_t    nsect32;    /* Sector count, MSB first! */
+    uint8_t     pad1;       /* Unused. */
+    uint8_t     pad2;       /* Unused. */
+} cdb_rw16;
+
 #pragma pack()
 
 ct_assert(sizeof(cdb_rw10) == 10);
-
+ct_assert(sizeof(cdb_rw16) == 16);
 
 void insb_discard(unsigned nbytes, unsigned port);
@@ -94,6 +107,5 @@
     while (status & VBSCSI_BUSY);
 
-
-    sizes = ((length >> 12) & 0xF0) | cbCDB;
+    sizes = ((length >> 12) & 0xF0) | (cbCDB == 16) ? 0 : cbCDB;
     outb(io_base + VBSCSI_REGISTER_COMMAND, target_id);                 /* Write the target ID. */
     outb(io_base + VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_FROM_DEVICE);    /* Write the transfer direction. */
@@ -146,5 +158,5 @@
 
 
-    sizes = ((length >> 12) & 0xF0) | cbCDB;
+    sizes = ((length >> 12) & 0xF0) | (cbCDB == 16) ? 0 : cbCDB;
     outb(io_base + VBSCSI_REGISTER_COMMAND, target_id);                 /* Write the target ID. */
     outb(io_base + VBSCSI_REGISTER_COMMAND, SCSI_TXDIR_TO_DEVICE);      /* Write the transfer direction. */
@@ -185,4 +197,15 @@
 }
 
+static uint64_t swap_64(uint64_t val)
+{
+    uint64_t rval;
+
+    rval = swap_32(val & 0xffffffff);
+    rval <<= 32;
+    rval |= swap_32(val >> 32);
+
+    return rval;
+}
+
 /**
  * Read sectors from an attached SCSI device.
@@ -195,6 +218,6 @@
 {
     uint8_t             rc;
-    cdb_rw10            cdb;
-    uint16_t            count;
+    cdb_rw16            cdb;
+    uint32_t            count;
     uint16_t            io_base;
     uint8_t             target_id;
@@ -208,8 +231,8 @@
 
     /* Prepare a CDB. */
-    cdb.command = SCSI_READ_10;
-    cdb.lba     = swap_32(bios_dsk->drqp.lba);
+    cdb.command = SCSI_READ_16;
+    cdb.lba     = swap_64(bios_dsk->drqp.lba);
     cdb.pad1    = 0;
-    cdb.nsect   = swap_16(count);
+    cdb.nsect32 = swap_32(count);
     cdb.pad2    = 0;
 
@@ -221,5 +244,5 @@
              count, device_id, bios_dsk->scsidev[device_id].target_id);
 
-    rc = scsi_cmd_data_in(io_base, target_id, (void __far *)&cdb, 10,
+    rc = scsi_cmd_data_in(io_base, target_id, (void __far *)&cdb, 16,
                           bios_dsk->drqp.buffer, (count * 512L));
 
@@ -244,6 +267,6 @@
 {
     uint8_t             rc;
-    cdb_rw10            cdb;
-    uint16_t            count;
+    cdb_rw16            cdb;
+    uint32_t            count;
     uint16_t            io_base;
     uint8_t             target_id;
@@ -257,8 +280,8 @@
 
     /* Prepare a CDB. */
-    cdb.command = SCSI_WRITE_10;
-    cdb.lba     = swap_32(bios_dsk->drqp.lba);
+    cdb.command = SCSI_WRITE_16;
+    cdb.lba     = swap_64(bios_dsk->drqp.lba);
     cdb.pad1    = 0;
-    cdb.nsect   = swap_16(count);
+    cdb.nsect32 = swap_32(count);
     cdb.pad2    = 0;
 
@@ -269,5 +292,5 @@
              count, device_id, bios_dsk->scsidev[device_id].target_id);
 
-    rc = scsi_cmd_data_out(io_base, target_id, (void __far *)&cdb, 10,
+    rc = scsi_cmd_data_out(io_base, target_id, (void __far *)&cdb, 16,
                            bios_dsk->drqp.buffer, (count * 512L));
 
@@ -403,5 +426,5 @@
     {
         uint8_t     rc;
-        uint8_t     aCDB[10];
+        uint8_t     aCDB[16];
         uint8_t     hd_index, devcount_scsi;
 
@@ -428,5 +451,6 @@
             if (devcount_scsi < BX_MAX_SCSI_DEVICES)
             {
-                uint32_t    sectors, sector_size, cylinders;
+                uint64_t    sectors, t;
+                uint32_t    sector_size, cylinders;
                 uint16_t    heads, sectors_per_track;
                 uint8_t     hdcount;
@@ -435,22 +459,21 @@
                 /* Issue a read capacity command now. */
                 _fmemset(aCDB, 0, sizeof(aCDB));
-                aCDB[0] = SCSI_READ_CAPACITY;
-
-                rc = scsi_cmd_data_in(io_base, i, aCDB, 10, buffer, 8);
+                aCDB[0] = SCSI_SERVICE_ACT;
+                aCDB[1] = SCSI_READ_CAP_16;
+                aCDB[13] = 32; /* Allocation length. */
+
+                rc = scsi_cmd_data_in(io_base, i, aCDB, 16, buffer, 32);
                 if (rc != 0)
                     BX_PANIC("%s: SCSI_READ_CAPACITY failed\n", __func__);
 
-                /* Build sector number and size from the buffer. */
-                //@todo: byte swapping for dword sized items should be farmed out...
-                sectors =   ((uint32_t)buffer[0] << 24)
-                          | ((uint32_t)buffer[1] << 16)
-                          | ((uint32_t)buffer[2] << 8)
-                          | ((uint32_t)buffer[3]);
-                ++sectors;  /* Returned value is the last LBA, zero-based. */
-
-                sector_size =   ((uint32_t)buffer[4] << 24)
-                              | ((uint32_t)buffer[5] << 16)
-                              | ((uint32_t)buffer[6] << 8)
-                              | ((uint32_t)buffer[7]);
+                /* The value returned is the last addressable LBA, not
+                 * the size, which what "+ 1" is for.
+                 */
+                sectors = swap_64(*(uint64_t *)buffer) + 1;
+
+                sector_size =   ((uint32_t)buffer[8] << 24)
+                              | ((uint32_t)buffer[9] << 16)
+                              | ((uint32_t)buffer[10] << 8)
+                              | ((uint32_t)buffer[11]);
 
                 /* We only support the disk if sector size is 512 bytes. */
@@ -497,4 +520,7 @@
                         heads = 255;
                         sectors_per_track = 63;
+                        /* Approximate x / (255 * 63) using shifts */
+                        t = (sectors >> 6) + (sectors >> 12);
+                        cylinders = (t >> 8) + (t >> 16);
                     }
                     else if (sectors >= (uint32_t)2 * 1024 * 1024)
@@ -502,4 +528,5 @@
                         heads = 128;
                         sectors_per_track = 32;
+                        cylinders = sectors >> 12;
                     }
                     else
@@ -507,6 +534,6 @@
                         heads = 64;
                         sectors_per_track = 32;
+                        cylinders = sectors >> 11;
                     }
-                    cylinders = (uint32_t)(sectors / (heads * sectors_per_track));
                 }
 
@@ -523,22 +550,20 @@
                 bios_dsk->devices[hd_index].translation = GEO_TRANSLATION_LBA;
 
-                /* Write LCHS values. */
+                /* Write LCHS/PCHS values. */
                 bios_dsk->devices[hd_index].lchs.heads = heads;
                 bios_dsk->devices[hd_index].lchs.spt   = sectors_per_track;
-                if (cylinders > 1024)
-                    bios_dsk->devices[hd_index].lchs.cylinders = 1024;
-                else
-                    bios_dsk->devices[hd_index].lchs.cylinders = (uint16_t)cylinders;
-
-                BX_INFO("SCSI %d-ID#%d: LCHS=%u/%u/%u %lu sectors\n", devcount_scsi,
-                        i, (uint16_t)cylinders, heads, sectors_per_track, sectors);
-
-                /* Write PCHS values. */
                 bios_dsk->devices[hd_index].pchs.heads = heads;
                 bios_dsk->devices[hd_index].pchs.spt   = sectors_per_track;
-                if (cylinders > 1024)
+
+                if (cylinders > 1024) {
+                    bios_dsk->devices[hd_index].lchs.cylinders = 1024;
                     bios_dsk->devices[hd_index].pchs.cylinders = 1024;
-                else
+                } else {
+                    bios_dsk->devices[hd_index].lchs.cylinders = (uint16_t)cylinders;
                     bios_dsk->devices[hd_index].pchs.cylinders = (uint16_t)cylinders;
+                }
+
+                BX_INFO("SCSI %d-ID#%d: LCHS=%lu/%u/%u 0x%llx sectors\n", devcount_scsi,
+                        i, (uint32_t)cylinders, heads, sectors_per_track, sectors);
 
                 bios_dsk->devices[hd_index].sectors = sectors;
Index: /trunk/src/VBox/Devices/Storage/VBoxSCSI.cpp
===================================================================
--- /trunk/src/VBox/Devices/Storage/VBoxSCSI.cpp	(revision 58723)
+++ /trunk/src/VBox/Devices/Storage/VBoxSCSI.cpp	(revision 58724)
@@ -176,4 +176,7 @@
             {
                 uint8_t cbCDB = uVal & 0x0F;
+
+                if (cbCDB == 0)
+                    cbCDB = 16;
                 if (cbCDB > VBOXSCSI_CDB_SIZE_MAX)
                     vboxscsiReset(pVBoxSCSI, true /*fEverything*/);
Index: /trunk/src/VBox/Devices/Storage/VBoxSCSI.h
===================================================================
--- /trunk/src/VBox/Devices/Storage/VBoxSCSI.h	(revision 58723)
+++ /trunk/src/VBox/Devices/Storage/VBoxSCSI.h	(revision 58724)
@@ -88,5 +88,5 @@
 
 /** Maximum CDB size the BIOS driver sends. */
-#define VBOXSCSI_CDB_SIZE_MAX     10
+#define VBOXSCSI_CDB_SIZE_MAX     16
 
 typedef struct VBOXSCSI
@@ -101,5 +101,5 @@
     uint8_t              cbCDB;
     /** The command to issue. */
-    uint8_t              abCDB[12];
+    uint8_t              abCDB[VBOXSCSI_CDB_SIZE_MAX + 4];
     /** Current position in the array. */
     uint8_t              iCDB;
