PERFORCE change 191632 for review
John Baldwin
jhb at FreeBSD.org
Sat Apr 16 21:33:39 UTC 2011
http://p4web.freebsd.org/@@191632?ac=10
Change 191632 by jhb at jhb_jhbbsd on 2011/04/16 21:33:25
Compile.
Affected files ...
.. //depot/projects/pci/sys/dev/acpica/acpi_pcib_acpi.c#7 edit
.. //depot/projects/pci/sys/dev/acpica/acpi_resource.c#5 edit
.. //depot/projects/pci/sys/dev/pci/pci_domain.c#3 edit
.. //depot/projects/pci/sys/dev/pci/pci_pci.c#13 edit
.. //depot/projects/pci/sys/dev/pci/pcib_private.h#10 edit
.. //depot/projects/pci/sys/x86/x86/nexus.c#6 edit
Differences ...
==== //depot/projects/pci/sys/dev/acpica/acpi_pcib_acpi.c#7 (text+ko) ====
@@ -200,7 +200,10 @@
max = res->Data.Address64.Maximum;
length = res->Data.Address64.AddressLength;
break;
- case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
+ default:
+ KASSERT(res->Type ==
+ ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64,
+ ("should never happen"));
min = res->Data.ExtAddress64.Minimum;
max = res->Data.ExtAddress64.Maximum;
length = res->Data.ExtAddress64.AddressLength;
==== //depot/projects/pci/sys/dev/acpica/acpi_resource.c#5 (text+ko) ====
@@ -141,9 +141,30 @@
struct acpi_resource_context {
struct acpi_parse_resource_set *set;
+ device_t dev;
void *context;
};
+#ifdef ACPI_DEBUG_OUTPUT
+static const char *
+acpi_address_range_name(UINT8 ResourceType)
+{
+ static char buf[16];
+
+ switch (ResourceType) {
+ case ACPI_MEMORY_RANGE:
+ return ("Memory");
+ case ACPI_IO_RANGE:
+ return ("IO");
+ case ACPI_BUS_NUMBER_RANGE:
+ return ("Bus Number");
+ default:
+ snprintf(buf, sizeof(buf), "type %u", ResourceType);
+ return (buf);
+ }
+}
+#endif
+
static ACPI_STATUS
acpi_parse_resource(ACPI_RESOURCE *res, void *context)
{
@@ -151,12 +172,10 @@
struct acpi_resource_context *arc;
UINT64 min, max, length, gran;
const char *name;
+ device_t dev;
-#define ADDRESS_RANGE_NAME(type) \
- ((type) == ACPI_MEMORY_RANGE ? "Memory" : (type) == ACPI_IO_RANGE ? "IO" : \
- "Bus Number")
-
arc = context;
+ dev = arc->dev;
set = arc->set;
switch (res->Type) {
@@ -263,7 +282,7 @@
case ACPI_RESOURCE_TYPE_ADDRESS32:
case ACPI_RESOURCE_TYPE_ADDRESS64:
case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
- switch (res->type) {
+ switch (res->Type) {
case ACPI_RESOURCE_TYPE_ADDRESS16:
gran = res->Data.Address16.Granularity;
min = res->Data.Address16.Minimum;
@@ -285,7 +304,9 @@
length = res->Data.Address64.AddressLength;
name = "Address64";
break;
- case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
+ default:
+ KASSERT(res->Type == ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64,
+ ("should never happen"));
gran = res->Data.ExtAddress64.Granularity;
min = res->Data.ExtAddress64.Minimum;
max = res->Data.ExtAddress64.Maximum;
@@ -293,12 +314,12 @@
name = "ExtAddress64";
break;
}
- if (len <= 0)
+ if (length <= 0)
break;
if (res->Data.Address.ProducerConsumer != ACPI_CONSUMER) {
ACPI_DEBUG_PRINT((ACPI_DB_RESOURCES,
"ignored %s %s producer\n", name,
- ADDRESS_RANGE_NAME(res->Data.Address.ResourceType)));
+ acpi_address_range_name(res->Data.Address.ResourceType)));
break;
}
if (res->Data.Address.ResourceType != ACPI_MEMORY_RANGE &&
@@ -374,16 +395,14 @@
acpi_parse_resources(device_t dev, ACPI_HANDLE handle,
struct acpi_parse_resource_set *set, void *arg)
{
- ACPI_BUFFER buf;
- ACPI_RESOURCE *res;
- char *curr, *last;
+ struct acpi_resource_context arc;
ACPI_STATUS status;
- struct acpi_resource_context arc;
ACPI_FUNCTION_TRACE((char *)(uintptr_t)__func__);
set->set_init(dev, arg, &arc.context);
arc.set = set;
+ arc.dev = dev;
status = AcpiWalkResources(handle, "_CRS", acpi_parse_resource, &arc);
if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
printf("can't fetch resources for %s - %s\n",
==== //depot/projects/pci/sys/dev/pci/pci_domain.c#3 (text+ko) ====
@@ -4,8 +4,13 @@
* Support utilities for Host to PCI bridge drivers.
*/
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/libkern.h>
+#include <sys/malloc.h>
#include <sys/rman.h>
#include <dev/pci/pcireg.h>
+#include <dev/pci/pcivar.h>
#include <dev/pci/pcib_private.h>
struct pci_domain {
@@ -37,12 +42,12 @@
snprintf(buf, sizeof(buf), "PCI domain %d", domain);
d = malloc(sizeof(*d) + strlen(buf) + 1, M_DEVBUF, M_WAITOK | M_ZERO);
d->pd_domain = domain;
- d->pd_rman.rm_start = 0;
- d->pd_rman.rm_end = PCI_BUSMAX;
- d->pd_rman.rm_type = RMAN_ARRAY;
- d->pd_rman.rm_descr = (char *)(d + 1);
- strcpy(d->pd_rman.rm_descr, buf);
- error = rman_init(&d->pd_rman);
+ d->pd_bus_rman.rm_start = 0;
+ d->pd_bus_rman.rm_end = PCI_BUSMAX;
+ d->pd_bus_rman.rm_type = RMAN_ARRAY;
+ strcpy((char *)(d + 1), buf);
+ d->pd_bus_rman.rm_descr = (char *)(d + 1);
+ error = rman_init(&d->pd_bus_rman);
if (error)
panic("Failed to initialize PCI domain %d rman", domain);
TAILQ_INSERT_TAIL(&domains, d, pd_link);
@@ -50,8 +55,8 @@
}
struct resource *
-pci_domain_alloc_bus(int domain, device_t dev, int *rid, u_long start, u_long end,
- u_long count, u_int flags)
+pci_domain_alloc_bus(int domain, device_t dev, int *rid, u_long start,
+ u_long end, u_long count, u_int flags)
{
struct pci_domain *d;
struct resource *res;
@@ -59,7 +64,8 @@
if (domain < 0 || domain > PCI_DOMAINMAX)
return (NULL);
d = pci_find_domain(domain);
- res = rman_reserve_resource(&d->pd_rman, start, end, count, flags, dev);
+ res = rman_reserve_resource(&d->pd_bus_rman, start, end, count, flags,
+ dev);
if (res == NULL)
return (NULL);
@@ -68,8 +74,8 @@
}
int
-pci_domain_adjust_bus(int domain, device_t dev, struct resource *r, u_long start,
- u_long end)
+pci_domain_adjust_bus(int domain, device_t dev, struct resource *r,
+ u_long start, u_long end)
{
#ifdef INVARIANTS
struct pci_domain *d;
@@ -79,7 +85,7 @@
return (EINVAL);
#ifdef INVARIANTS
d = pci_find_domain(domain);
- KASSERT(rman_is_region_manager(r, &d->pd_rman), "bad resource");
+ KASSERT(rman_is_region_manager(r, &d->pd_bus_rman), ("bad resource"));
#endif
return (rman_adjust_resource(r, start, end));
}
@@ -95,7 +101,7 @@
return (EINVAL);
#ifdef INVARIANTS
d = pci_find_domain(domain);
- KASSERT(rman_is_region_manager(r, &d->pd_rman), "bad resource");
+ KASSERT(rman_is_region_manager(r, &d->pd_bus_rman), ("bad resource"));
#endif
return (rman_release_resource(r));
}
@@ -178,7 +184,7 @@
* Release all allocated resources and remove them from the
* parent's resource list.
*/
- STAILQ_FOREACH(rle, rl, link) {
+ STAILQ_FOREACH(rle, &hr->hr_rl, link) {
if (rle->res != NULL) {
bus_release_resource(pcib, rle->type, rle->rid,
rle->res);
@@ -186,7 +192,8 @@
}
bus_delete_resource(pcib, rle->type, rle->rid);
}
- resource_list_delete(&hr->hr_rl);
+ resource_list_free(&hr->hr_rl);
+ return (0);
}
static struct rman *
@@ -239,20 +246,21 @@
return (error);
r = bus_alloc_resource_any(hr->hr_pcib, type, &rid, 0);
if (r == NULL) {
- device_printf(pcib, "Failed to allocate %d res %#lx-%#lx\n",
- type, start, end);
+ device_printf(hr->hr_pcib,
+ "Failed to allocate %d res %#lx-%#lx\n", type, start, end);
return (ENXIO);
}
KASSERT(rman_get_start(r) == start && rman_get_end(r) == end,
("resource mismatch"));
error = rman_manage_region(rm, start, end);
if (error) {
- device_printf(pcib, "Failed to add %d res %#lx-%#lx to rman\n",
- type, start, end);
+ device_printf(hr->hr_pcib,
+ "Failed to add %d res %#lx-%#lx to rman\n", type, start,
+ end);
bus_release_resource(hr->hr_pcib, type, rid, r);
return (error);
}
- rle = resource_list_add(&hr->hr_rl, type, start, end, count);
+ rle = resource_list_add(&hr->hr_rl, type, rid, start, end, count);
rle->res = r;
return (0);
}
@@ -264,7 +272,6 @@
{
struct resource *r;
struct rman *rm;
- int error;
rm = pcib_host_res_rman(hr, type);
if (rm == NULL)
@@ -280,7 +287,7 @@
}
if (bootverbose)
- device_printf(sc->dev,
+ device_printf(hr->hr_pcib,
"allocated type %d (%#lx-%#lx) for rid %x of %s\n", type,
rman_get_start(r), rman_get_end(r), *rid,
pcib_child_name(dev));
@@ -292,7 +299,7 @@
* activating sub-allocated resources.
*/
if (flags & RF_ACTIVE) {
- if (bus_activate_resource(child, type, *rid, r) != 0) {
+ if (bus_activate_resource(dev, type, *rid, r) != 0) {
rman_release_resource(r);
*rp = NULL;
return (0);
@@ -310,7 +317,8 @@
if (pcib_host_res_is_resource_managed(hr, type, r))
return (rman_adjust_resource(r, start, end));
- return (bus_generic_adjust_resource(bus, child, type, r, start, end));
+ return (bus_generic_adjust_resource(hr->hr_pcib, dev, type, r, start,
+ end));
}
int
@@ -321,12 +329,11 @@
if (pcib_host_res_is_resource_managed(hr, type, r)) {
if (rman_get_flags(r) & RF_ACTIVE) {
- error = bus_deactivate_resource(child, type, rid, r);
+ error = bus_deactivate_resource(dev, type, rid, r);
if (error)
return (error);
}
return (rman_release_resource(r));
}
- return (bus_generic_release_resource(dev, child, type, rid, r));
+ return (bus_generic_release_resource(hr->hr_pcib, dev, type, rid, r));
}
-
==== //depot/projects/pci/sys/dev/pci/pci_pci.c#13 (text+ko) ====
@@ -770,7 +770,7 @@
}
#ifdef NEW_PCIB
-static const char *
+const char *
pcib_child_name(device_t child)
{
static char buf[64];
==== //depot/projects/pci/sys/dev/pci/pcib_private.h#10 (text+ko) ====
@@ -105,6 +105,7 @@
typedef uint32_t pci_read_config_fn(int b, int s, int f, int reg, int width);
#ifdef NEW_PCIB
+const char *pcib_child_name(device_t child);
int pcib_host_res_init(device_t pcib,
struct pcib_host_resources *hr);
int pcib_host_res_free(device_t pcib,
==== //depot/projects/pci/sys/x86/x86/nexus.c#6 (text+ko) ====
@@ -70,7 +70,10 @@
#include <machine/resource.h>
#include <machine/pc/bios.h>
+#ifdef PCI_RES_BUS
+#include <dev/pci/pcivar.h>
#include <dev/pci/pcib_private.h>
+#endif
#ifdef DEV_APIC
#include "pcib_if.h"
More information about the p4-projects
mailing list