diff options
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; |