freebsd_network: Handle 64 bit memory BARs.
This adds the upper 32 bits for address and size. Change-Id: I2f776c7b8b72ecefca9f3b93d9c42912666a41e2 Reviewed-on: https://review.haiku-os.org/c/haiku/+/3026 Reviewed-by: waddlesplash <waddlesplash@gmail.com>
This commit is contained in:
parent
8827bb6d89
commit
b0a3a5c9bc
@ -113,8 +113,8 @@ static int
|
|||||||
bus_alloc_mem_resource(device_t dev, struct resource *res, pci_info *info,
|
bus_alloc_mem_resource(device_t dev, struct resource *res, pci_info *info,
|
||||||
int bar_index)
|
int bar_index)
|
||||||
{
|
{
|
||||||
uint32 addr = info->u.h0.base_registers[bar_index];
|
phys_addr_t addr = info->u.h0.base_registers[bar_index];
|
||||||
uint32 size = info->u.h0.base_register_sizes[bar_index];
|
uint64 size = info->u.h0.base_register_sizes[bar_index];
|
||||||
uchar flags = info->u.h0.base_register_flags[bar_index];
|
uchar flags = info->u.h0.base_register_flags[bar_index];
|
||||||
|
|
||||||
// reject empty regions
|
// reject empty regions
|
||||||
@ -127,6 +127,11 @@ bus_alloc_mem_resource(device_t dev, struct resource *res, pci_info *info,
|
|||||||
|
|
||||||
// TODO: check flags & PCI_address_prefetchable ?
|
// TODO: check flags & PCI_address_prefetchable ?
|
||||||
|
|
||||||
|
if ((flags & PCI_address_type) == PCI_address_type_64) {
|
||||||
|
addr |= (uint64)info->u.h0.base_registers[bar_index + 1] << 32;
|
||||||
|
size |= (uint64)info->u.h0.base_register_sizes[bar_index + 1] << 32;
|
||||||
|
}
|
||||||
|
|
||||||
// enable this I/O resource
|
// enable this I/O resource
|
||||||
if (pci_enable_io(dev, SYS_RES_MEMORY) != 0)
|
if (pci_enable_io(dev, SYS_RES_MEMORY) != 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
Reference in New Issue
Block a user