VirtualBox

Changeset 985 in vbox for trunk/src/VBox/Devices/PC/BIOS


Ignore:
Timestamp:
Feb 19, 2007 3:27:20 PM (18 years ago)
Author:
vboxsync
Message:

Fixed Vista CD-ROM detection problems.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/PC/BIOS/rombios.c

    r155 r985  
    23302330    }
    23312331
     2332#ifdef VBOX
     2333    // Enable interrupts
     2334    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2335#endif /* VBOX */
     2336
    23322337    type=read_byte(ebda_seg,&EbdaData->ata.devices[device].type);
    23332338
     
    26642669#ifdef VBOX
    26652670  status = inb(iobase1 + ATA_CB_STAT);
    2666   if (status & ATA_CB_STAT_BSY) return 1;
     2671  if (status & ATA_CB_STAT_BSY)
     2672  {
     2673    // Enable interrupts
     2674    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2675    return 1;
     2676  }
    26672677#endif /* VBOX */
    26682678
     
    27162726  if (status & ATA_CB_STAT_ERR) {
    27172727    BX_DEBUG_ATA("ata_cmd_data_in : read error\n");
     2728#ifdef VBOX
     2729    // Enable interrupts
     2730    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2731#endif /* VBOX */
    27182732    return 2;
    27192733    } else if ( !(status & ATA_CB_STAT_DRQ) ) {
    27202734    BX_DEBUG_ATA("ata_cmd_data_in : DRQ not set (status %02x)\n", (unsigned) status);
     2735#ifdef VBOX
     2736    // Enable interrupts
     2737    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2738#endif /* VBOX */
    27212739    return 3;
    27222740  }
     
    27842802          != ATA_CB_STAT_RDY ) {
    27852803        BX_DEBUG_ATA("ata_cmd_data_in : no sectors left (status %02x)\n", (unsigned) status);
     2804#ifdef VBOX
     2805        // Enable interrupts
     2806        outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2807#endif /* VBOX */
    27862808        return 4;
    27872809        }
     
    27922814          != (ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ) ) {
    27932815        BX_DEBUG_ATA("ata_cmd_data_in : more sectors left (status %02x)\n", (unsigned) status);
     2816#ifdef VBOX
     2817        // Enable interrupts
     2818        outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2819#endif /* VBOX */
    27942820        return 5;
    27952821      }
     
    28352861#ifdef VBOX
    28362862  status = inb(iobase1 + ATA_CB_STAT);
    2837   if (status & ATA_CB_STAT_BSY) return 1;
     2863  if (status & ATA_CB_STAT_BSY)
     2864  {
     2865    // Enable interrupts
     2866    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2867    return 1;
     2868  }
    28382869#endif /* VBOX */
    28392870
     
    28872918  if (status & ATA_CB_STAT_ERR) {
    28882919    BX_DEBUG_ATA("ata_cmd_data_out : read error\n");
     2920#ifdef VBOX
     2921    // Enable interrupts
     2922    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2923#endif /* VBOX */
    28892924    return 2;
    28902925    } else if ( !(status & ATA_CB_STAT_DRQ) ) {
    28912926    BX_DEBUG_ATA("ata_cmd_data_out : DRQ not set (status %02x)\n", (unsigned) status);
     2927#ifdef VBOX
     2928    // Enable interrupts
     2929    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     2930#endif /* VBOX */
    28922931    return 3;
    28932932    }
     
    29572996          != ATA_CB_STAT_RDY ) {
    29582997        BX_DEBUG_ATA("ata_cmd_data_out : no sectors left (status %02x)\n", (unsigned) status);
     2998#ifdef VBOX
     2999        // Enable interrupts
     3000        outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     3001#endif /* VBOX */
    29593002        return 6;
    29603003        }
     
    29653008          != (ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ) ) {
    29663009        BX_DEBUG_ATA("ata_cmd_data_out : more sectors left (status %02x)\n", (unsigned) status);
     3010#ifdef VBOX
     3011        // Enable interrupts
     3012        outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     3013#endif /* VBOX */
    29673014        return 7;
    29683015      }
     
    30453092  if (status & ATA_CB_STAT_ERR) {
    30463093    BX_DEBUG_ATA("ata_cmd_packet : error, status is %02x\n",status);
     3094#ifdef VBOX
     3095    // Enable interrupts
     3096    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     3097#endif /* VBOX */
    30473098    return 3;
    30483099    } else if ( !(status & ATA_CB_STAT_DRQ) ) {
    30493100    BX_DEBUG_ATA("ata_cmd_packet : DRQ not set (status %02x)\n", (unsigned) status);
     3101#ifdef VBOX
     3102    // Enable interrupts
     3103    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     3104#endif /* VBOX */
    30503105    return 4;
    30513106    }
     
    30963151      if (status & ATA_CB_STAT_ERR) {
    30973152        BX_DEBUG_ATA("ata_cmd_packet : error (status %02x)\n",status);
     3153#ifdef VBOX
     3154        // Enable interrupts
     3155        outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     3156#endif /* VBOX */
    30983157        return 3;
    30993158      }
     
    31033162            != (ATA_CB_STAT_RDY | ATA_CB_STAT_DRQ) ) {
    31043163        BX_DEBUG_ATA("ata_cmd_packet : not ready (status %02x)\n", status);
     3164#ifdef VBOX
     3165        // Enable interrupts
     3166        outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     3167#endif /* VBOX */
    31053168        return 4;
    31063169        }
     
    32473310         != ATA_CB_STAT_RDY ) {
    32483311    BX_DEBUG_ATA("ata_cmd_packet : not ready (status %02x)\n", (unsigned) status);
     3312#ifdef VBOX
     3313    // Enable interrupts
     3314    outb(iobase2+ATA_CB_DC, ATA_CB_DC_HD15);
     3315#endif /* VBOX */
    32493316    return 4;
    32503317    }
     
    43264393                extended_memory_size *= 1024;
    43274394                extended_memory_size += (16L * 1024 * 1024);
    4328                
     4395
    43294396                if(extended_memory_size <= (16L * 1024 * 1024)) {
    43304397                    extended_memory_size = inb_cmos(0x31);
     
    43874454                        break;
    43884455                    case 4:
    4389                         set_e820_range(ES, regs.u.r16.di, 
    4390                                        extended_memory_size - ACPI_DATA_SIZE, 
     4456                        set_e820_range(ES, regs.u.r16.di,
     4457                                       extended_memory_size - ACPI_DATA_SIZE,
    43914458                                       extended_memory_size, 3); // ACPI RAM
    43924459                        regs.u.r32.ebx = 5;
     
    993610003  mov edi, #0x00040000
    993710004  mov ecx, #0x10000 / 4
    9938   rep 
     10005  rep
    993910006    movsd
    994010007
     
    999110058rombios32_gdt_48:
    999210059  dw 0x30
    9993   dw rombios32_gdt                 
     10060  dw rombios32_gdt
    999410061  dw 0x000f
    999510062
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette