Changeset 43724 in vbox for trunk/src/VBox/Devices/PC/BIOS
- Timestamp:
- Oct 24, 2012 11:26:54 AM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 81608
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/PC/BIOS/eltorito.c
r43671 r43724 94 94 ct_assert(sizeof(cdb_atapi) == 12); 95 95 96 /* Generic ATAPI/SCSI CD-ROM access routine signature. */ 97 typedef uint16_t (* cd_pkt_func)(uint16_t device_id, uint8_t cmdlen, char __far *cmdbuf, 98 uint16_t header, uint32_t length, uint8_t inout, char __far *buffer); 99 100 /* Pointers to HW specific CD-ROM access routines. */ 101 cd_pkt_func pktacc[DSKTYP_CNT] = { 102 [DSK_TYPE_ATAPI] = { ata_cmd_packet }, 103 #ifdef VBOX_WITH_AHCI 104 [DSK_TYPE_AHCI] = { ahci_cmd_packet }, 105 #endif 106 #ifdef VBOX_WITH_SCSI 107 [DSK_TYPE_SCSI] = { scsi_cmd_packet }, 108 #endif 109 }; 110 96 111 // --------------------------------------------------------------------------- 97 112 // Start of El-Torito boot functions … … 267 282 for (read_try = 0; read_try <= 4; ++read_try) 268 283 { 269 //@todo: Use indirect calls instead? 270 if (VBOX_IS_AHCI_DEVICE(device)) 271 error = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 272 else if (VBOX_IS_SCSI_DEVICE(device)) 273 error = scsi_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 274 else 275 error = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 284 error = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 276 285 if (!error) 277 286 break; … … 306 315 #endif 307 316 308 if (VBOX_IS_AHCI_DEVICE(device)) 309 error = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 310 else if (VBOX_IS_SCSI_DEVICE(device)) 311 error = scsi_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 312 else 313 error = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 314 317 error = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, 2048L, ATA_DATA_IN, &buffer); 315 318 if (error != 0) 316 319 return 7; … … 372 375 bios_dsk->drqp.skip_a = (2048 - nbsectors * 512) % 2048; 373 376 374 if (VBOX_IS_AHCI_DEVICE(device)) 375 error = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, nbsectors*512L, ATA_DATA_IN, MK_FP(boot_segment,0)); 376 else if (VBOX_IS_SCSI_DEVICE(device)) 377 error = scsi_cmd_packet(device, 12, (char __far *)&atapicmd, 0, nbsectors*512L, ATA_DATA_IN, MK_FP(boot_segment,0)); 378 else 379 error = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, nbsectors*512L, ATA_DATA_IN, MK_FP(boot_segment,0)); 377 error = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, nbsectors*512L, ATA_DATA_IN, MK_FP(boot_segment,0)); 380 378 381 379 bios_dsk->drqp.skip_a = 0; … … 560 558 bios_dsk->drqp.skip_a = ((4 - nbsectors % 4 - before) * 512) % 2048; 561 559 562 if (VBOX_IS_AHCI_DEVICE(device)) 563 status = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, before*512, nbsectors*512L, ATA_DATA_IN, MK_FP(segment,offset)); 564 else if (VBOX_IS_SCSI_DEVICE(device)) 565 status = scsi_cmd_packet(device, 12, (char __far *)&atapicmd, before*512, nbsectors*512L, ATA_DATA_IN, MK_FP(segment,offset)); 566 else 567 status = ata_cmd_packet(device, 12, (char __far *)&atapicmd, before*512, nbsectors*512L, ATA_DATA_IN, MK_FP(segment,offset)); 560 status = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, before*512, nbsectors*512L, ATA_DATA_IN, MK_FP(segment,offset)); 568 561 569 562 bios_dsk->drqp.skip_b = 0; … … 766 759 bios_dsk->drqp.sect_sz = 2048; 767 760 768 if (VBOX_IS_AHCI_DEVICE(device)) 769 status = ahci_cmd_packet(device, 12, (char __far *)&atapicmd, 0, count*2048L, ATA_DATA_IN, MK_FP(segment,offset)); 770 else if (VBOX_IS_SCSI_DEVICE(device)) 771 status = scsi_cmd_packet(device, 12, (char __far *)&atapicmd, 0, count*2048L, ATA_DATA_IN, MK_FP(segment,offset)); 772 else 773 status = ata_cmd_packet(device, 12, (char __far *)&atapicmd, 0, count*2048L, ATA_DATA_IN, MK_FP(segment,offset)); 761 status = pktacc[bios_dsk->devices[device].type](device, 12, (char __far *)&atapicmd, 0, count*2048L, ATA_DATA_IN, MK_FP(segment,offset)); 774 762 775 763 count = (uint16_t)(bios_dsk->drqp.trsfbytes >> 11);
Note:
See TracChangeset
for help on using the changeset viewer.