parent
b7ca04ddde
commit
e8854cd998
|
@ -374,9 +374,9 @@ extern "C" dde_addr_t dde_dma_get_physaddr(void *virt) {
|
||||||
** I/O port **
|
** I/O port **
|
||||||
**************/
|
**************/
|
||||||
|
|
||||||
static Genode::Io_port_connection *_io_port;
|
static Genode::Io_port_session_client *_io_port;
|
||||||
|
|
||||||
extern "C" void dde_request_io(dde_addr_t base, dde_size_t size)
|
extern "C" void dde_request_io(dde_uint8_t virt_bar_ioport)
|
||||||
{
|
{
|
||||||
using namespace Genode;
|
using namespace Genode;
|
||||||
|
|
||||||
|
@ -385,7 +385,10 @@ extern "C" void dde_request_io(dde_addr_t base, dde_size_t size)
|
||||||
sleep_forever();
|
sleep_forever();
|
||||||
}
|
}
|
||||||
|
|
||||||
_io_port = new (env()->heap()) Io_port_connection(base, size);
|
Pci::Device_client device(pci_drv()._cap);
|
||||||
|
Io_port_session_capability cap = device.io_port(virt_bar_ioport);
|
||||||
|
|
||||||
|
_io_port = new (env()->heap()) Io_port_session_client(cap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -95,7 +95,7 @@ void dde_pci_writel(int, dde_uint32_t);
|
||||||
** I/O port **
|
** I/O port **
|
||||||
**************/
|
**************/
|
||||||
|
|
||||||
void dde_request_io(dde_addr_t, dde_size_t);
|
void dde_request_io(dde_uint8_t);
|
||||||
|
|
||||||
dde_uint8_t dde_inb(dde_addr_t);
|
dde_uint8_t dde_inb(dde_addr_t);
|
||||||
dde_uint16_t dde_inw(dde_addr_t);
|
dde_uint16_t dde_inw(dde_addr_t);
|
||||||
|
|
|
@ -59,6 +59,7 @@ static void pci_read_bases(struct pci_device *pci_dev)
|
||||||
{
|
{
|
||||||
uint32_t bar;
|
uint32_t bar;
|
||||||
int reg;
|
int reg;
|
||||||
|
uint8_t virt_bar_ioport = 0;
|
||||||
|
|
||||||
for (reg = PCI_BASE_ADDRESS_0; reg <= PCI_BASE_ADDRESS_5; reg += 4) {
|
for (reg = PCI_BASE_ADDRESS_0; reg <= PCI_BASE_ADDRESS_5; reg += 4) {
|
||||||
pci_read_config_dword(pci_dev, reg, &bar);
|
pci_read_config_dword(pci_dev, reg, &bar);
|
||||||
|
@ -66,10 +67,9 @@ static void pci_read_bases(struct pci_device *pci_dev)
|
||||||
if (!pci_dev->ioaddr) {
|
if (!pci_dev->ioaddr) {
|
||||||
pci_dev->ioaddr = bar & PCI_BASE_ADDRESS_IO_MASK;
|
pci_dev->ioaddr = bar & PCI_BASE_ADDRESS_IO_MASK;
|
||||||
|
|
||||||
dde_addr_t base = bar & PCI_BASE_ADDRESS_IO_MASK;
|
dde_request_io(virt_bar_ioport);
|
||||||
dde_size_t size = pci_bar_size(pci_dev, reg);
|
|
||||||
dde_request_io(base, size);
|
|
||||||
}
|
}
|
||||||
|
virt_bar_ioport ++;
|
||||||
} else {
|
} else {
|
||||||
if (!pci_dev->membase)
|
if (!pci_dev->membase)
|
||||||
pci_dev->membase = bar & PCI_BASE_ADDRESS_MEM_MASK;
|
pci_dev->membase = bar & PCI_BASE_ADDRESS_MEM_MASK;
|
||||||
|
|
Loading…
Reference in New Issue