aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>2007-12-17 01:35:20 +0000
committerths <ths@c046a42c-6fe2-441c-8c8c-71466251a162>2007-12-17 01:35:20 +0000
commit96b8f136f52ea2dc5948fe24f0bf4483251ac280 (patch)
tree10d16286a88c1e1dee56261a491cb9b89703460b /hw
parentbee8d6842d1421ce3456779492561a92530e9c5a (diff)
downloadqemu-96b8f136f52ea2dc5948fe24f0bf4483251ac280.zip
qemu-96b8f136f52ea2dc5948fe24f0bf4483251ac280.tar.gz
qemu-96b8f136f52ea2dc5948fe24f0bf4483251ac280.tar.bz2
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')
-rw-r--r--hw/fdc.c2
-rw-r--r--hw/ide.c27
-rw-r--r--hw/scsi-disk.c2
3 files changed, 18 insertions, 13 deletions
diff --git a/hw/fdc.c b/hw/fdc.c
index 868ae07..e5f46d0 100644
--- a/hw/fdc.c
+++ b/hw/fdc.c
@@ -234,7 +234,7 @@ static const fd_format_t fd_formats[] = {
static void fd_revalidate (fdrive_t *drv)
{
const fd_format_t *parse;
- int64_t nb_sectors, size;
+ uint64_t nb_sectors, size;
int i, first_match, match;
int nb_heads, max_track, last_sect, ro;
diff --git a/hw/ide.c b/hw/ide.c
index 18431e7..bc82bb2 100644
--- a/hw/ide.c
+++ b/hw/ide.c
@@ -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;
diff --git a/hw/scsi-disk.c b/hw/scsi-disk.c
index d281b8c..220b199 100644
--- a/hw/scsi-disk.c
+++ b/hw/scsi-disk.c
@@ -284,7 +284,7 @@ static int32_t scsi_send_command(SCSIDevice *d, uint32_t tag,
uint8_t *buf, int lun)
{
SCSIDeviceState *s = d->state;
- int64_t nb_sectors;
+ uint64_t nb_sectors;
uint32_t lba;
uint32_t len;
int cmdlen;