- fixed regression caused by SF patch #2812936
* buffer size must match the IDE specs to transfer max. 255 sectors * resetting buffer pointers during IDE command is invalid
This commit is contained in:
parent
d5b93041e4
commit
e34262bc7d
@ -1,5 +1,5 @@
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// $Id: pci_ide.cc,v 1.43 2009-07-03 20:36:42 vruppert Exp $
|
||||
// $Id: pci_ide.cc,v 1.44 2009-08-16 19:59:03 vruppert Exp $
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2002 MandrakeSoft S.A.
|
||||
@ -95,8 +95,8 @@ void bx_pci_ide_c::init(void)
|
||||
}
|
||||
}
|
||||
|
||||
BX_PIDE_THIS s.bmdma[0].buffer = new Bit8u[0x10000];
|
||||
BX_PIDE_THIS s.bmdma[1].buffer = new Bit8u[0x10000];
|
||||
BX_PIDE_THIS s.bmdma[0].buffer = new Bit8u[0x20000];
|
||||
BX_PIDE_THIS s.bmdma[1].buffer = new Bit8u[0x20000];
|
||||
|
||||
for (i=0; i<256; i++)
|
||||
BX_PIDE_THIS s.pci_conf[i] = 0x0;
|
||||
@ -147,8 +147,8 @@ void bx_pci_ide_c::register_state(void)
|
||||
|
||||
register_pci_state(list, BX_PIDE_THIS s.pci_conf);
|
||||
|
||||
new bx_shadow_data_c(list, "buffer0", BX_PIDE_THIS s.bmdma[0].buffer, 0x10000);
|
||||
new bx_shadow_data_c(list, "buffer1", BX_PIDE_THIS s.bmdma[1].buffer, 0x10000);
|
||||
new bx_shadow_data_c(list, "buffer0", BX_PIDE_THIS s.bmdma[0].buffer, 0x20000);
|
||||
new bx_shadow_data_c(list, "buffer1", BX_PIDE_THIS s.bmdma[1].buffer, 0x20000);
|
||||
|
||||
for (unsigned i=0; i<2; i++) {
|
||||
sprintf(name, "%d", i);
|
||||
@ -310,10 +310,6 @@ void bx_pci_ide_c::timer()
|
||||
BX_PIDE_THIS s.bmdma[channel].prd_current += 8;
|
||||
DEV_MEM_READ_PHYSICAL(BX_PIDE_THIS s.bmdma[channel].prd_current, 4, (Bit8u *)&prd.addr);
|
||||
DEV_MEM_READ_PHYSICAL(BX_PIDE_THIS s.bmdma[channel].prd_current+4, 4, (Bit8u *)&prd.size);
|
||||
|
||||
BX_PIDE_THIS s.bmdma[channel].buffer_idx = BX_PIDE_THIS s.bmdma[channel].buffer;
|
||||
BX_PIDE_THIS s.bmdma[channel].buffer_top = BX_PIDE_THIS s.bmdma[channel].buffer;
|
||||
|
||||
size = prd.size & 0xfffe;
|
||||
if (size == 0) {
|
||||
size = 0x10000;
|
||||
|
Loading…
x
Reference in New Issue
Block a user