diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-01-04 18:08:12 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-01-04 18:08:12 +0000 |
commit | 6b136f9e8f3934f50e07a01b537ade3b57f6b2ce (patch) | |
tree | d13d9daf2c4916aae37a537883631cc81a4f1bd1 /hw | |
parent | 2ddbbd10de80b3d364d726fe6dda824a37cb42b0 (diff) |
CD-ROM detection fix
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@520 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'hw')
-rw-r--r-- | hw/ide.c | 15 |
1 files changed, 10 insertions, 5 deletions
@@ -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); } } |