Kernel: Fix AHCI device physical address writing on i386 target
This commit is contained in:
parent
b5aae34d86
commit
3e4d410646
|
@ -70,11 +70,11 @@ namespace Kernel
|
||||||
|
|
||||||
stop_cmd(m_port);
|
stop_cmd(m_port);
|
||||||
|
|
||||||
paddr_t fis_paddr = m_dma_region->paddr();
|
uint64_t fis_paddr = m_dma_region->paddr();
|
||||||
m_port->fb = fis_paddr & 0xFFFFFFFF;
|
m_port->fb = fis_paddr & 0xFFFFFFFF;
|
||||||
m_port->fbu = fis_paddr >> 32;
|
m_port->fbu = fis_paddr >> 32;
|
||||||
|
|
||||||
paddr_t command_list_paddr = fis_paddr + sizeof(ReceivedFIS);
|
uint64_t command_list_paddr = fis_paddr + sizeof(ReceivedFIS);
|
||||||
m_port->clb = command_list_paddr & 0xFFFFFFFF;
|
m_port->clb = command_list_paddr & 0xFFFFFFFF;
|
||||||
m_port->clbu = command_list_paddr >> 32;
|
m_port->clbu = command_list_paddr >> 32;
|
||||||
|
|
||||||
|
@ -236,8 +236,9 @@ namespace Kernel
|
||||||
|
|
||||||
volatile auto& command_table = *reinterpret_cast<HBACommandTable*>(m_dma_region->paddr_to_vaddr(command_header.ctba));
|
volatile auto& command_table = *reinterpret_cast<HBACommandTable*>(m_dma_region->paddr_to_vaddr(command_header.ctba));
|
||||||
memset(const_cast<HBACommandTable*>(&command_table), 0x00, sizeof(HBACommandTable));
|
memset(const_cast<HBACommandTable*>(&command_table), 0x00, sizeof(HBACommandTable));
|
||||||
command_table.prdt_entry[0].dba = m_data_dma_region->paddr() & 0xFFFFFFFF;
|
uint64_t data_dma_paddr64 = m_data_dma_region->paddr();
|
||||||
command_table.prdt_entry[0].dbau = m_data_dma_region->paddr() >> 32;
|
command_table.prdt_entry[0].dba = data_dma_paddr64 & 0xFFFFFFFF;
|
||||||
|
command_table.prdt_entry[0].dbau = data_dma_paddr64 >> 32;
|
||||||
command_table.prdt_entry[0].dbc = sector_count * sector_size() - 1;
|
command_table.prdt_entry[0].dbc = sector_count * sector_size() - 1;
|
||||||
command_table.prdt_entry[0].i = 1;
|
command_table.prdt_entry[0].i = 1;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue