- panic at 'Read sub-channel with SubQ' replaced by a BX_ERROR. The harddisk
controller returns an error code until we are able to implement this feature. - init_send_atapi_command(): don't panic if alloc_length is 0, use byte_count to set alloc_length instead - fixed a BX_PANIC message in the io write handler for port 0x1f0
This commit is contained in:
parent
1956be72db
commit
2b2369a049
@ -1,5 +1,5 @@
|
|||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
// $Id: harddrv.cc,v 1.63 2002-07-27 18:42:31 vruppert Exp $
|
// $Id: harddrv.cc,v 1.64 2002-07-30 09:54:26 vruppert Exp $
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
//
|
//
|
||||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||||
@ -128,7 +128,7 @@ bx_hard_drive_c::~bx_hard_drive_c(void)
|
|||||||
bx_hard_drive_c::init(bx_devices_c *d, bx_cmos_c *cmos)
|
bx_hard_drive_c::init(bx_devices_c *d, bx_cmos_c *cmos)
|
||||||
{
|
{
|
||||||
BX_HD_THIS devices = d;
|
BX_HD_THIS devices = d;
|
||||||
BX_DEBUG(("Init $Id: harddrv.cc,v 1.63 2002-07-27 18:42:31 vruppert Exp $"));
|
BX_DEBUG(("Init $Id: harddrv.cc,v 1.64 2002-07-30 09:54:26 vruppert Exp $"));
|
||||||
|
|
||||||
/* HARD DRIVE 0 */
|
/* HARD DRIVE 0 */
|
||||||
|
|
||||||
@ -868,7 +868,7 @@ BX_DEBUG(("IO write to %04x = %02x", (unsigned) address, (unsigned) value));
|
|||||||
switch (address) {
|
switch (address) {
|
||||||
case 0x1f0:
|
case 0x1f0:
|
||||||
if (io_len == 1) {
|
if (io_len == 1) {
|
||||||
BX_PANIC(("byte IO read from %04x", (unsigned) address));
|
BX_PANIC(("byte IO write to 0x1f0"));
|
||||||
}
|
}
|
||||||
switch (BX_SELECTED_CONTROLLER.current_command) {
|
switch (BX_SELECTED_CONTROLLER.current_command) {
|
||||||
case 0x30: // WRITE SECTORS
|
case 0x30: // WRITE SECTORS
|
||||||
@ -1393,7 +1393,10 @@ BX_DEBUG(("IO write to %04x = %02x", (unsigned) address, (unsigned) value));
|
|||||||
int ret_len = 4; // header size
|
int ret_len = 4; // header size
|
||||||
|
|
||||||
if (sub_q) { // !sub_q == header only
|
if (sub_q) { // !sub_q == header only
|
||||||
BX_PANIC(("Read sub-channel with SubQ not implemented"));
|
BX_ERROR(("Read sub-channel with SubQ not implemented"));
|
||||||
|
atapi_cmd_error(SENSE_ILLEGAL_REQUEST,
|
||||||
|
ASC_INV_FIELD_IN_CMD_PACKET);
|
||||||
|
raise_interrupt();
|
||||||
}
|
}
|
||||||
|
|
||||||
init_send_atapi_command(atapi_command, ret_len, alloc_length);
|
init_send_atapi_command(atapi_command, ret_len, alloc_length);
|
||||||
@ -2577,8 +2580,10 @@ bx_hard_drive_c::init_send_atapi_command(Bit8u command, int req_length, int allo
|
|||||||
&& !(alloc_length <= BX_SELECTED_CONTROLLER.byte_count)) {
|
&& !(alloc_length <= BX_SELECTED_CONTROLLER.byte_count)) {
|
||||||
BX_ERROR(("Odd byte count to ATAPI command 0x%02x", command));
|
BX_ERROR(("Odd byte count to ATAPI command 0x%02x", command));
|
||||||
}
|
}
|
||||||
if (alloc_length <= 0)
|
if (alloc_length < 0)
|
||||||
BX_PANIC(("Allocation length <= 0"));
|
BX_PANIC(("Allocation length < 0"));
|
||||||
|
if (alloc_length == 0)
|
||||||
|
alloc_length = BX_SELECTED_CONTROLLER.byte_count;
|
||||||
|
|
||||||
BX_SELECTED_CONTROLLER.interrupt_reason.i_o = 1;
|
BX_SELECTED_CONTROLLER.interrupt_reason.i_o = 1;
|
||||||
BX_SELECTED_CONTROLLER.interrupt_reason.c_d = 0;
|
BX_SELECTED_CONTROLLER.interrupt_reason.c_d = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user