VirtualBox

Changeset 48122 in vbox for trunk/src/VBox/Devices/PC


Ignore:
Timestamp:
Aug 28, 2013 11:52:38 AM (11 years ago)
Author:
vboxsync
Message:

BIOS: Fixed disk logging, stripped trailing spaces.

File:
1 edited

Legend:

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

    r44528 r48122  
    9494
    9595
    96 /* 
     96/*
    9797 * Build translated CHS geometry given a disk size in sectors. Based on
    9898 * Phoenix EDD 3.0. This is used as a fallback to generate sane logical
     
    104104    unsigned    heads = 255;
    105105    int         i;
    106    
     106
    107107    /* Start with ~4GB limit, go down to 504MB. */
    108108    for (i = 0; i < 4; ++i) {
     
    133133    bios_dsk = read_word(0x0040,0x000E) :> &EbdaData->bdisk;
    134134    write_byte(0x0040, 0x008e, 0);  // clear completion flag
    135    
     135
    136136    // basic check : device has to be defined
    137137    if ( (GET_ELDL() < 0x80) || (GET_ELDL() >= 0x80 + BX_MAX_STORAGE_DEVICES) ) {
     
    139139        goto int13_fail;
    140140    }
    141    
     141
    142142    // Get the ata channel
    143143    device = bios_dsk->hdidmap[GET_ELDL()-0x80];
    144    
     144
    145145    // basic check : device has to be valid
    146146    if (device >= BX_MAX_STORAGE_DEVICES) {
     
    178178        sector      = (GET_CL() & 0x3f);
    179179        head        = GET_DH();
    180        
    181         /* Segment and offset are in ES:BX. */       
     180
     181        /* Segment and offset are in ES:BX. */
    182182        if ( (count > 128) || (count == 0) ) {
    183183            BX_INFO("%s: function %02x, count out of range!\n", __func__, GET_AH());
     
    195195            goto int13_fail;
    196196        }
    197        
     197
    198198        // FIXME verify
    199199        if ( GET_AH() == 0x04 )
     
    206206            sector = 0; // this forces the command to be lba
    207207        }
     208
     209        BX_DEBUG_INT13_HD("%s: %d sectors from lba %lu @ %04x:%04x\n", __func__,
     210                          count, lba, ES, BX);
    208211
    209212        /* Clear the count of transferred sectors/bytes. */
     
    225228        // Set nb of sector transferred
    226229        SET_AL(bios_dsk->drqp.trsfsectors);
    227        
     230
    228231        if (status != 0) {
    229232            BX_INFO("%s: function %02x, error %02x !\n", __func__, GET_AH(), status);
     
    231234            goto int13_fail_noah;
    232235        }
    233        
     236
    234237        goto int13_success;
    235238        break;
     
    256259        SET_DH(nlh - 1);
    257260        SET_DL(count); /* FIXME returns 0, 1, or n hard drives */
    258        
     261
    259262        // FIXME should set ES & DI
    260263        // @todo: Actually, the above comment is nonsense.
    261        
     264
    262265        goto int13_success;
    263266        break;
     
    287290        CX = lba >> 16;
    288291        DX = lba & 0xffff;
    289        
     292
    290293        SET_AH(3);  // hard disk accessible
    291294        goto int13_success_noah;
     
    341344    bios_dsk = read_word(0x0040,0x000E) :> &EbdaData->bdisk;
    342345
    343     BX_DEBUG_INT13_HD("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x\n", __func__, AX, BX, CX, DX, ES);
    344    
     346    BX_DEBUG_INT13_HD("%s: AX=%04x BX=%04x CX=%04x DX=%04x ES=%04x DS=%04x SI=%04x\n",
     347                      __func__, AX, BX, CX, DX, ES, DS, SI);
     348
    345349    write_byte(0x0040, 0x008e, 0);  // clear completion flag
    346    
     350
    347351    // basic check : device has to be defined
    348352    if ( (GET_ELDL() < 0x80) || (GET_ELDL() >= 0x80 + BX_MAX_STORAGE_DEVICES) ) {
     
    350354        goto int13x_fail;
    351355    }
    352    
     356
    353357    // Get the ata channel
    354358    device = bios_dsk->hdidmap[GET_ELDL()-0x80];
    355    
     359
    356360    // basic check : device has to be valid
    357361    if (device >= BX_MAX_STORAGE_DEVICES) {
     
    380384        offset  = i13_ext->offset;
    381385
    382         BX_DEBUG_INT13_HD("%s: %d sectors from lba %u @ %04x:%04x\n", __func__,
     386        BX_DEBUG_INT13_HD("%s: %d sectors from lba %lu @ %04x:%04x\n", __func__,
    383387                          count, i13_ext->lba1, segment, offset);
    384388
     
    389393            goto int13x_fail;
    390394        }
    391        
     395
    392396        // Get 32 bits lba and check
    393397        lba = i13_ext->lba1;
     
    414418        bios_dsk->drqp.sector  = 0;     /* Indicate LBA. */
    415419        bios_dsk->drqp.dev_id  = device;
    416        
     420
    417421        /* Execute the read or write command. */
    418422        status = dskacc[type].a[GET_AH() - 0x42](bios_dsk);
    419423        count  = bios_dsk->drqp.trsfsectors;
    420424        i13_ext->count = count;
    421        
     425
    422426        if (status != 0) {
    423427            BX_INFO("%s: function %02x, error %02x !\n", __func__, GET_AH(), status);
     
    425429            goto int13x_fail_noah;
    426430        }
    427        
     431
    428432        goto int13x_success;
    429433        break;
     
    446450        if (size < 0x1a)
    447451            goto int13x_fail;
    448        
     452
    449453        /* Fill in EDD 1.x table. */
    450454        if (size >= 0x1a) {
     
    471475            uint8_t     channel, irq, mode, checksum, i, translation;
    472476            uint16_t    iobase1, iobase2, options;
    473            
     477
    474478            dpt->size = 0x1e;
    475479            dpt->dpte_segment = ebda_seg;
    476480            dpt->dpte_offset  = (uint16_t)&EbdaData->bdisk.dpte;
    477            
     481
    478482            // Fill in dpte
    479483            channel = device / 2;
     
    483487            mode    = bios_dsk->devices[device].mode;
    484488            translation = bios_dsk->devices[device].translation;
    485            
     489
    486490            options  = (translation == GEO_TRANSLATION_NONE ? 0 : 1 << 3);  // chs translation
    487491            options |= (1 << 4);    // lba translation
     
    489493            options |= (translation == GEO_TRANSLATION_LBA ? 1 : 0 << 9);
    490494            options |= (translation == GEO_TRANSLATION_RECHS ? 3 : 0 << 9);
    491            
     495
    492496            bios_dsk->dpte.iobase1  = iobase1;
    493497            bios_dsk->dpte.iobase2  = iobase2;
     
    501505            bios_dsk->dpte.reserved = 0;
    502506            bios_dsk->dpte.revision = 0x11;
    503            
     507
    504508            checksum = 0;
    505509            for (i = 0; i < 15; ++i)
     
    517521            iface   = bios_dsk->channels[channel].iface;
    518522            iobase1 = bios_dsk->channels[channel].iobase1;
    519            
     523
    520524            dpt->size       = 0x42;
    521525            dpt->key        = 0xbedd;
     
    523527            dpt->reserved1  = 0;
    524528            dpt->reserved2  = 0;
    525            
     529
    526530            if (iface == ATA_IFACE_ISA) {
    527531                dpt->host_bus[0] = 'I';
     
    541545            dpt->iface_type[6] = ' ';
    542546            dpt->iface_type[7] = ' ';
    543            
     547
    544548            if (iface == ATA_IFACE_ISA) {
    545549                ((uint16_t __far *)dpt->iface_path)[0] = iobase1;
     
    553557            ((uint16_t __far *)dpt->device_path)[1] = 0;
    554558            ((uint32_t __far *)dpt->device_path)[1] = 0;
    555            
     559
    556560            checksum = 0;
    557561            for (i = 30; i < 64; i++)
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