X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fdevices%2Fata.h;h=423679e6c5996b41cf2cde8281bf8efc9f2f476c;hb=22dbf90548cb2ea56a9057a706e3da411dc1b57b;hp=4cf6cd27f7c1c475db3bbcc505ad1e4d33b812e4;hpb=123a1ba27ea09c8fa77a1b36ce625b43d7c48b14;p=palacios.git diff --git a/palacios/src/devices/ata.h b/palacios/src/devices/ata.h index 4cf6cd2..423679e 100644 --- a/palacios/src/devices/ata.h +++ b/palacios/src/devices/ata.h @@ -64,10 +64,10 @@ static void ata_identify_device(struct ide_drive * drive) { drive_id->lba_enable = 1; // Drive Capacity (28 bit LBA) - drive_id->lba_capacity = drive->ops->get_capacity(drive->private_data); + drive_id->lba_capacity = drive->ops->get_capacity(drive->private_data) / HD_SECTOR_SIZE; // Drive Capacity (48 bit LBA) - drive_id->lba_capacity_2 = drive->ops->get_capacity(drive->private_data); + drive_id->lba_capacity_2 = drive->ops->get_capacity(drive->private_data) / HD_SECTOR_SIZE; // lower byte is the maximum multiple sector size... @@ -106,7 +106,7 @@ static void ata_identify_device(struct ide_drive * drive) { } -static int ata_read(struct vm_device * dev, struct ide_channel * channel, uint8_t * dst, uint_t sect_cnt) { +static int ata_read(struct ide_internal * ide, struct ide_channel * channel, uint8_t * dst, uint_t sect_cnt) { struct ide_drive * drive = get_selected_drive(channel); if (drive->hd_state.accessed == 0) { @@ -124,10 +124,13 @@ static int ata_read(struct vm_device * dev, struct ide_channel * channel, uint8_ } return 0; + + + } -static int ata_write(struct vm_device * dev, struct ide_channel * channel, uint8_t * src, uint_t sect_cnt) { +static int ata_write(struct ide_internal * ide, struct ide_channel * channel, uint8_t * src, uint_t sect_cnt) { struct ide_drive * drive = get_selected_drive(channel); PrintDebug("Writing Drive LBA=%d (count=%d)\n", (uint32_t)(drive->current_lba), sect_cnt); @@ -144,7 +147,7 @@ static int ata_write(struct vm_device * dev, struct ide_channel * channel, uint8 -static int ata_get_lba(struct vm_device * dev, struct ide_channel * channel, uint64_t * lba) { +static int ata_get_lba(struct ide_internal * ide, struct ide_channel * channel, uint64_t * lba) { struct ide_drive * drive = get_selected_drive(channel); // The if the sector count == 0 then read 256 sectors (cast up to handle that value) uint32_t sect_cnt = (drive->sector_count == 0) ? 256 : drive->sector_count; @@ -168,7 +171,7 @@ static int ata_get_lba(struct vm_device * dev, struct ide_channel * channel, uin if ((lba_addr.addr + sect_cnt) > - drive->ops->get_capacity(drive->private_data)) { + drive->ops->get_capacity(drive->private_data) / HD_SECTOR_SIZE) { PrintError("IDE: request size exceeds disk capacity (lba=%d) (sect_cnt=%d) (ReadEnd=%d) (capacity=%p)\n", lba_addr.addr, sect_cnt, lba_addr.addr + (sect_cnt * HD_SECTOR_SIZE), @@ -182,18 +185,18 @@ static int ata_get_lba(struct vm_device * dev, struct ide_channel * channel, uin // 28 bit LBA -static int ata_read_sectors(struct vm_device * dev, struct ide_channel * channel) { +static int ata_read_sectors(struct ide_internal * ide, struct ide_channel * channel) { struct ide_drive * drive = get_selected_drive(channel); // The if the sector count == 0 then read 256 sectors (cast up to handle that value) uint32_t sect_cnt = (drive->sector_count == 0) ? 256 : drive->sector_count; - if (ata_get_lba(dev, channel, &(drive->current_lba)) == -1) { - ide_abort_command(dev, channel); + if (ata_get_lba(ide, channel, &(drive->current_lba)) == -1) { + ide_abort_command(ide, channel); return 0; } - if (ata_read(dev, channel, drive->data_buf, 1) == -1) { + if (ata_read(ide, channel, drive->data_buf, 1) == -1) { PrintError("Could not read disk sector\n"); return -1; } @@ -212,7 +215,7 @@ static int ata_read_sectors(struct vm_device * dev, struct ide_channel * channel drive->irq_flags.rel = 0; - ide_raise_irq(dev, channel); + ide_raise_irq(ide, channel); PrintDebug("Returning from read sectors\n"); @@ -221,7 +224,7 @@ static int ata_read_sectors(struct vm_device * dev, struct ide_channel * channel // 48 bit LBA -static int ata_read_sectors_ext(struct vm_device * dev, struct ide_channel * channel) { +static int ata_read_sectors_ext(struct ide_internal * ide, struct ide_channel * channel) { //struct ide_drive * drive = get_selected_drive(channel); // The if the sector count == 0 then read 256 sectors (cast up to handle that value) //uint32_t sector_count = (drive->sector_count == 0) ? 256 : drive->sector_count;