mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Add implementations of BUS_ADJUST_RESOURCE() to the PCI bus driver,
generic PCI-PCI bridge driver, x86 nexus driver, and x86 Host to PCI bridge drivers.
This commit is contained in:
parent
0ba4511a8a
commit
d2c9344ff9
7 changed files with 43 additions and 21 deletions
|
|
@ -348,6 +348,7 @@ static device_method_t legacy_pcib_methods[] = {
|
|||
DEVMETHOD(bus_read_ivar, legacy_pcib_read_ivar),
|
||||
DEVMETHOD(bus_write_ivar, legacy_pcib_write_ivar),
|
||||
DEVMETHOD(bus_alloc_resource, legacy_pcib_alloc_resource),
|
||||
DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource),
|
||||
DEVMETHOD(bus_release_resource, bus_generic_release_resource),
|
||||
DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
|
||||
DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
|
||||
|
|
|
|||
|
|
@ -100,6 +100,7 @@ static device_method_t acpi_pcib_acpi_methods[] = {
|
|||
DEVMETHOD(bus_read_ivar, acpi_pcib_read_ivar),
|
||||
DEVMETHOD(bus_write_ivar, acpi_pcib_write_ivar),
|
||||
DEVMETHOD(bus_alloc_resource, acpi_pcib_acpi_alloc_resource),
|
||||
DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource),
|
||||
DEVMETHOD(bus_release_resource, bus_generic_release_resource),
|
||||
DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
|
||||
DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
|
||||
|
|
|
|||
|
|
@ -142,6 +142,7 @@ static device_method_t pci_methods[] = {
|
|||
DEVMETHOD(bus_get_resource, bus_generic_rl_get_resource),
|
||||
DEVMETHOD(bus_delete_resource, pci_delete_resource),
|
||||
DEVMETHOD(bus_alloc_resource, pci_alloc_resource),
|
||||
DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource),
|
||||
DEVMETHOD(bus_release_resource, bus_generic_rl_release_resource),
|
||||
DEVMETHOD(bus_activate_resource, pci_activate_resource),
|
||||
DEVMETHOD(bus_deactivate_resource, pci_deactivate_resource),
|
||||
|
|
|
|||
|
|
@ -73,6 +73,7 @@ static device_method_t pcib_methods[] = {
|
|||
DEVMETHOD(bus_read_ivar, pcib_read_ivar),
|
||||
DEVMETHOD(bus_write_ivar, pcib_write_ivar),
|
||||
DEVMETHOD(bus_alloc_resource, pcib_alloc_resource),
|
||||
DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource),
|
||||
DEVMETHOD(bus_release_resource, bus_generic_release_resource),
|
||||
DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
|
||||
DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
|
||||
|
|
|
|||
|
|
@ -565,6 +565,7 @@ static device_method_t legacy_pcib_methods[] = {
|
|||
DEVMETHOD(bus_read_ivar, legacy_pcib_read_ivar),
|
||||
DEVMETHOD(bus_write_ivar, legacy_pcib_write_ivar),
|
||||
DEVMETHOD(bus_alloc_resource, legacy_pcib_alloc_resource),
|
||||
DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource),
|
||||
DEVMETHOD(bus_release_resource, bus_generic_release_resource),
|
||||
DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
|
||||
DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
|
||||
|
|
|
|||
|
|
@ -116,6 +116,7 @@ static device_method_t mptable_hostb_methods[] = {
|
|||
DEVMETHOD(bus_read_ivar, legacy_pcib_read_ivar),
|
||||
DEVMETHOD(bus_write_ivar, legacy_pcib_write_ivar),
|
||||
DEVMETHOD(bus_alloc_resource, legacy_pcib_alloc_resource),
|
||||
DEVMETHOD(bus_adjust_resource, bus_generic_adjust_resource),
|
||||
DEVMETHOD(bus_release_resource, bus_generic_release_resource),
|
||||
DEVMETHOD(bus_activate_resource, bus_generic_activate_resource),
|
||||
DEVMETHOD(bus_deactivate_resource, bus_generic_deactivate_resource),
|
||||
|
|
|
|||
|
|
@ -100,6 +100,8 @@ static device_t nexus_add_child(device_t bus, u_int order, const char *name,
|
|||
int unit);
|
||||
static struct resource *nexus_alloc_resource(device_t, device_t, int, int *,
|
||||
u_long, u_long, u_long, u_int);
|
||||
static int nexus_adjust_resource(device_t, device_t, int, struct resource *,
|
||||
u_long, u_long);
|
||||
#ifdef SMP
|
||||
static int nexus_bind_intr(device_t, device_t, struct resource *, int);
|
||||
#endif
|
||||
|
|
@ -144,6 +146,7 @@ static device_method_t nexus_methods[] = {
|
|||
DEVMETHOD(bus_print_child, nexus_print_child),
|
||||
DEVMETHOD(bus_add_child, nexus_add_child),
|
||||
DEVMETHOD(bus_alloc_resource, nexus_alloc_resource),
|
||||
DEVMETHOD(bus_adjust_resource, nexus_adjust_resource),
|
||||
DEVMETHOD(bus_release_resource, nexus_release_resource),
|
||||
DEVMETHOD(bus_activate_resource, nexus_activate_resource),
|
||||
DEVMETHOD(bus_deactivate_resource, nexus_deactivate_resource),
|
||||
|
|
@ -332,6 +335,23 @@ nexus_add_child(device_t bus, u_int order, const char *name, int unit)
|
|||
return(child);
|
||||
}
|
||||
|
||||
static struct rman *
|
||||
nexus_rman(int type)
|
||||
{
|
||||
switch (type) {
|
||||
case SYS_RES_IRQ:
|
||||
return (&irq_rman);
|
||||
case SYS_RES_DRQ:
|
||||
return (&drq_rman);
|
||||
case SYS_RES_IOPORT:
|
||||
return (&port_rman);
|
||||
case SYS_RES_MEMORY:
|
||||
return (&mem_rman);
|
||||
default:
|
||||
return (NULL);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Allocate a resource on behalf of child. NB: child is usually going to be a
|
||||
* child of one of our descendants, not a direct child of nexus0.
|
||||
|
|
@ -364,27 +384,9 @@ nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
|
|||
}
|
||||
|
||||
flags &= ~RF_ACTIVE;
|
||||
|
||||
switch (type) {
|
||||
case SYS_RES_IRQ:
|
||||
rm = &irq_rman;
|
||||
break;
|
||||
|
||||
case SYS_RES_DRQ:
|
||||
rm = &drq_rman;
|
||||
break;
|
||||
|
||||
case SYS_RES_IOPORT:
|
||||
rm = &port_rman;
|
||||
break;
|
||||
|
||||
case SYS_RES_MEMORY:
|
||||
rm = &mem_rman;
|
||||
break;
|
||||
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
rm = nexus_rman(type);
|
||||
if (rm == NULL)
|
||||
return (NULL);
|
||||
|
||||
rv = rman_reserve_resource(rm, start, end, count, flags, child);
|
||||
if (rv == 0)
|
||||
|
|
@ -401,6 +403,20 @@ nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
|
|||
return rv;
|
||||
}
|
||||
|
||||
static int
|
||||
nexus_adjust_resource(device_t bus, device_t child, int type,
|
||||
struct resource *r, u_long start, u_long end)
|
||||
{
|
||||
struct rman *rm;
|
||||
|
||||
rm = nexus_rman(type);
|
||||
if (rm == NULL)
|
||||
return (ENXIO);
|
||||
if (!rman_is_region_manager(r, rm))
|
||||
return (EINVAL);
|
||||
return (rman_adjust_resource(r, start, end));
|
||||
}
|
||||
|
||||
static int
|
||||
nexus_activate_resource(device_t bus, device_t child, int type, int rid,
|
||||
struct resource *r)
|
||||
|
|
|
|||
Loading…
Reference in a new issue