diff options
author | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-12-17 01:35:20 +0000 |
---|---|---|
committer | ths <ths@c046a42c-6fe2-441c-8c8c-71466251a162> | 2007-12-17 01:35:20 +0000 |
commit | 96b8f136f52ea2dc5948fe24f0bf4483251ac280 (patch) | |
tree | 10d16286a88c1e1dee56261a491cb9b89703460b /hw/ide.c | |
parent | bee8d6842d1421ce3456779492561a92530e9c5a (diff) |
Fix bdrv_get_geometry to return uint64_t, by Andre Przywara.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3825 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/ide.c')
-rw-r--r-- | hw/ide.c | 27 |
1 files changed, 16 insertions, 11 deletions
@@ -1465,12 +1465,12 @@ static void ide_atapi_cmd(IDEState *s) break; case GPCMD_SEEK: { - int lba; - int64_t total_sectors; + unsigned int lba; + uint64_t total_sectors; bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; - if (total_sectors <= 0) { + if (total_sectors == 0) { ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); break; @@ -1516,11 +1516,11 @@ static void ide_atapi_cmd(IDEState *s) case GPCMD_READ_TOC_PMA_ATIP: { int format, msf, start_track, len; - int64_t total_sectors; + uint64_t total_sectors; bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; - if (total_sectors <= 0) { + if (total_sectors == 0) { ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); break; @@ -1560,11 +1560,11 @@ static void ide_atapi_cmd(IDEState *s) break; case GPCMD_READ_CDVD_CAPACITY: { - int64_t total_sectors; + uint64_t total_sectors; bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; - if (total_sectors <= 0) { + if (total_sectors == 0) { ide_atapi_cmd_error(s, SENSE_NOT_READY, ASC_MEDIUM_NOT_PRESENT); break; @@ -1580,7 +1580,7 @@ static void ide_atapi_cmd(IDEState *s) int media = packet[1]; int layer = packet[6]; int format = packet[2]; - int64_t total_sectors; + uint64_t total_sectors; if (media != 0 || layer != 0) { @@ -1592,6 +1592,11 @@ static void ide_atapi_cmd(IDEState *s) case 0: bdrv_get_geometry(s->bs, &total_sectors); total_sectors >>= 2; + if (total_sectors == 0) { + ide_atapi_cmd_error(s, SENSE_NOT_READY, + ASC_MEDIUM_NOT_PRESENT); + break; + } memset(buf, 0, 2052); @@ -1636,7 +1641,7 @@ static void ide_atapi_cmd(IDEState *s) break; case GPCMD_GET_CONFIGURATION: { - int64_t total_sectors; + uint64_t total_sectors; /* only feature 0 is supported */ if (packet[2] != 0 || packet[3] != 0) { @@ -1721,7 +1726,7 @@ static void ide_cfata_metadata_write(IDEState *s) static void cdrom_change_cb(void *opaque) { IDEState *s = opaque; - int64_t nb_sectors; + uint64_t nb_sectors; /* XXX: send interrupt too */ bdrv_get_geometry(s->bs, &nb_sectors); @@ -2417,7 +2422,7 @@ static void ide_init2(IDEState *ide_state, IDEState *s; static int drive_serial = 1; int i, cylinders, heads, secs, translation, lba_detected = 0; - int64_t nb_sectors; + uint64_t nb_sectors; for(i = 0; i < 2; i++) { s = ide_state + i; |