Added a second set of physical address byte read and write functions in mem.c that are now used by dma.c so that DMA reads and writes do not go through the CPU's paging mechanism anymore - fixes Adaptec and BusLogic SCSI drivers in NT 3.1;
Applied some more of greatpsycho's CPU patches; Reworked the PS/2 Model 80 split memory block handling and removed the top 256k remap from it (that's what the split memory block is for) - fixes OS/2 2.x on that machine.
This commit is contained in:
@@ -537,13 +537,13 @@ void ps2_dma_init(void)
|
||||
|
||||
uint8_t _dma_read(uint32_t addr)
|
||||
{
|
||||
uint8_t temp = mem_readb_phys(addr);
|
||||
uint8_t temp = mem_readb_phys_dma(addr);
|
||||
return temp;
|
||||
}
|
||||
|
||||
void _dma_write(uint32_t addr, uint8_t val)
|
||||
{
|
||||
mem_writeb_phys(addr, val);
|
||||
mem_writeb_phys_dma(addr, val);
|
||||
mem_invalidate_range(addr, addr);
|
||||
}
|
||||
|
||||
@@ -762,7 +762,7 @@ void DMAPageRead(uint32_t PhysAddress, char *DataRead, uint32_t TotalSize)
|
||||
// memcpy(DataRead, &ram[PhysAddress], TotalSize);
|
||||
|
||||
for (i = 0; i < TotalSize; i++)
|
||||
DataRead[i] = mem_readb_phys(PhysAddress + i);
|
||||
DataRead[i] = mem_readb_phys_dma(PhysAddress + i);
|
||||
}
|
||||
|
||||
void DMAPageWrite(uint32_t PhysAddress, const char *DataWrite, uint32_t TotalSize)
|
||||
@@ -773,7 +773,7 @@ void DMAPageWrite(uint32_t PhysAddress, const char *DataWrite, uint32_t TotalSiz
|
||||
// memcpy(&ram[PhysAddress], DataWrite, TotalSize);
|
||||
|
||||
for (i = 0; i < TotalSize; i++)
|
||||
mem_writeb_phys(PhysAddress + i, DataWrite[i]);
|
||||
mem_writeb_phys_dma(PhysAddress + i, DataWrite[i]);
|
||||
|
||||
mem_invalidate_range(PhysAddress, PhysAddress + TotalSize - 1);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user