summaryrefslogtreecommitdiffstats
path: root/hw/ide.c
diff options
context:
space:
mode:
authorbellard2004-01-04 19:08:12 +0100
committerbellard2004-01-04 19:08:12 +0100
commit6b136f9e8f3934f50e07a01b537ade3b57f6b2ce (patch)
treed13d9daf2c4916aae37a537883631cc81a4f1bd1 /hw/ide.c
parent(temporary) only physical dump is possible in gdb (diff)
downloadqemu-6b136f9e8f3934f50e07a01b537ade3b57f6b2ce.tar.gz
qemu-6b136f9e8f3934f50e07a01b537ade3b57f6b2ce.tar.xz
qemu-6b136f9e8f3934f50e07a01b537ade3b57f6b2ce.zip
CD-ROM detection fix
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@520 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw/ide.c')
-rw-r--r--hw/ide.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/hw/ide.c b/hw/ide.c
index a0bf8aba8a..3771bb0a58 100644
--- a/hw/ide.c
+++ b/hw/ide.c
@@ -40,14 +40,14 @@
#include <sys/wait.h>
#include <netinet/in.h>
+#define NO_THUNK_TYPE_SIZE
+#include "thunk.h"
+
#include "cpu.h"
#include "exec-all.h"
#include "vl.h"
-#define NO_THUNK_TYPE_SIZE
-#include "thunk.h"
-
/* debug IDE devices */
//#define DEBUG_IDE
//#define DEBUG_IDE_ATAPI
@@ -1128,6 +1128,8 @@ static void ide_ioport_write(CPUX86State *env, uint32_t addr, uint32_t val)
break;
case WIN_READ:
case WIN_READ_ONCE:
+ if (!s->bs)
+ goto abort_cmd;
s->req_nb_sectors = 1;
ide_sector_read(s);
break;
@@ -1174,7 +1176,7 @@ static void ide_ioport_write(CPUX86State *env, uint32_t addr, uint32_t val)
if (!s->is_cdrom)
goto abort_cmd;
ide_set_signature(s);
- s->status = READY_STAT;
+ s->status = 0x00; /* NOTE: READY is _not_ set */
s->error = 0x01;
break;
case WIN_PACKETCMD:
@@ -1271,7 +1273,10 @@ static void ide_cmd_write(CPUX86State *env, uint32_t addr, uint32_t val)
/* high to low */
for(i = 0;i < 2; i++) {
s = &ide_if[i];
- s->status = READY_STAT;
+ if (s->is_cdrom)
+ s->status = 0x00; /* NOTE: READY is _not_ set */
+ else
+ s->status = READY_STAT;
ide_set_signature(s);
}
}