PERFORCE change 191022 for review
John Baldwin
jhb at FreeBSD.org
Mon Apr 4 13:27:23 UTC 2011
http://p4web.freebsd.org/@@191022?ac=10
Change 191022 by jhb at jhb_jhbbsd on 2011/04/04 13:26:40
Cleanups, fully handle the 'valid' member of pcib_window.
Affected files ...
.. //depot/projects/pci/sys/dev/pci/pci_pci.c#5 edit
Differences ...
==== //depot/projects/pci/sys/dev/pci/pci_pci.c#5 (text+ko) ====
@@ -139,12 +139,12 @@
pcib_is_window_open(struct pcib_window *pw)
{
- return (pw->base > 0 && pw->base < pw->limit);
+ return (pw->valid && pw->base < pw->limit);
}
static void
-pcib_alloc_window(struct pcib_softc *sc, struct pcib_window *w, int type, int reg,
- int flags, const char *name, pci_addr_t max_address)
+pcib_alloc_window(struct pcib_softc *sc, struct pcib_window *w, int type,
+ int reg, int flags, const char *name, pci_addr_t max_address)
{
int error, rid;
@@ -154,32 +154,33 @@
w->rman.rm_end = max_address;
w->rman.rm_type = RMAN_ARRAY;
w->rman.rm_descr = malloc(64, M_DEVBUF, M_WAITOK);
- snprintf(w->rman.rm_descr, 64, "%s %s window", device_get_nameunit(sc->dev), name);
+ snprintf(w->rman.rm_descr, 64, "%s %s window",
+ device_get_nameunit(sc->dev), name);
error = rman_init(&w->rman);
if (error)
- panic("Failed to initialize %s %s rman", device_get_nameunit(sc->dev),
- name);
+ panic("Failed to initialize %s %s rman",
+ device_get_nameunit(sc->dev), name);
if (!pcib_is_window_open(w))
return;
if (w->base > max_address || w->limit > max_address) {
- device_printf(sc->dev, "initial %s window has too many bits, ignoring\n",
- name);
- w->base = 0;
+ device_printf(sc->dev,
+ "initial %s window has too many bits, ignoring\n", name);
return;
}
rid = reg;
- w->res = bus_alloc_resource(sc->dev, type, &rid, w->base, w->limit, w->limit -
- w->base + 1, flags);
+ w->res = bus_alloc_resource(sc->dev, type, &rid, w->base, w->limit,
+ w->limit - w->base + 1, flags);
if (w->res == NULL) {
- device_printf(sc->dev, "failed to allocate initial %s window: %jx - %jx\n",
+ device_printf(sc->dev,
+ "failed to allocate initial %s window: %jx - %jx\n",
name, (uintmax_t)w->base, (uintmax_t)w->limit);
- w->base = 0;
return;
}
- error = rman_manage_region(&w->rman, rman_get_start(w->res), rman_get_end(w->res));
+ error = rman_manage_region(&w->rman, rman_get_start(w->res),
+ rman_get_end(w->res));
if (error)
panic("Failed to initialize rman with resource");
}
@@ -200,7 +201,10 @@
/* Determine if the I/O port window is implemented. */
val = pci_read_config(dev, PCIR_IOBASEL_1, 1);
if (val == 0) {
- /* If 'val' is zero, then only 16-bits of I/O space are supported. */
+ /*
+ * If 'val' is zero, then only 16-bits of I/O space
+ * are supported.
+ */
pci_write_config(dev, PCIR_IOBASEL_1, 0xff, 1);
if (pci_read_config(dev, PCIR_IOBASEL_1, 1) != 0) {
sc->io.valid = 1;
@@ -224,21 +228,26 @@
pci_read_config(dev, PCIR_IOLIMITL_1, 1));
max = 0xffff;
}
- pcib_alloc_window(sc, &sc->io, SYS_RES_IOPORT, PCIR_IOBASEL_1, 0,
- "I/O port", max);
+ pcib_alloc_window(sc, &sc->io, SYS_RES_IOPORT, PCIR_IOBASEL_1,
+ 0, "I/O port", max);
}
/* Read the existing memory window. */
sc->mem.valid = 1;
- sc->mem.base = PCI_PPBMEMBASE(0, pci_read_config(dev, PCIR_MEMBASE_1, 2));
- sc->mem.limit = PCI_PPBMEMLIMIT(0, pci_read_config(dev, PCIR_MEMLIMIT_1, 2));
- pcib_alloc_window(sc, &sc->mem, SYS_RES_MEMORY, PCIR_MEMBASE_1, 0, "memory",
- 0xffffffff);
+ sc->mem.base = PCI_PPBMEMBASE(0,
+ pci_read_config(dev, PCIR_MEMBASE_1, 2));
+ sc->mem.limit = PCI_PPBMEMLIMIT(0,
+ pci_read_config(dev, PCIR_MEMLIMIT_1, 2));
+ pcib_alloc_window(sc, &sc->mem, SYS_RES_MEMORY, PCIR_MEMBASE_1, 0,
+ "memory", 0xffffffff);
/* Determine if the prefetchable memory window is implemented. */
val = pci_read_config(dev, PCIR_PMBASEL_1, 2);
if (val == 0) {
- /* If 'val' is zero, then only 32-bits of memory space are supported. */
+ /*
+ * If 'val' is zero, then only 32-bits of memory space
+ * are supported.
+ */
pci_write_config(dev, PCIR_PMBASEL_1, 0xffff, 2);
if (pci_read_config(dev, PCIR_PMBASEL_1, 2) != 0) {
sc->pmem.valid = 1;
@@ -274,11 +283,13 @@
uint32_t val;
dev = sc->dev;
- if (mask & WIN_IO) {
+ if (sc->io.valid && mask & WIN_IO) {
val = pci_read_config(dev, PCIR_IOBASEL_1, 1);
if ((val & PCIM_BRIO_MASK) == PCIM_BRIO_32) {
- pci_write_config(dev, PCIR_IOBASEH_1, sc->io.base >> 16, 2);
- pci_write_config(dev, PCIR_IOLIMITH_1, sc->io.limit >> 16, 2);
+ pci_write_config(dev, PCIR_IOBASEH_1,
+ sc->io.base >> 16, 2);
+ pci_write_config(dev, PCIR_IOLIMITH_1,
+ sc->io.limit >> 16, 2);
}
pci_write_config(dev, PCIR_IOBASEL_1, sc->io.base >> 8, 1);
pci_write_config(dev, PCIR_IOLIMITL_1, sc->io.limit >> 8, 1);
@@ -289,11 +300,13 @@
pci_write_config(dev, PCIR_MEMLIMIT_1, sc->mem.limit >> 16, 2);
}
- if (mask & WIN_PMEM) {
+ if (sc->pmem.valid && mask & WIN_PMEM) {
val = pci_read_config(dev, PCIR_PMBASEL_1, 2);
if ((val & PCIM_BRPM_MASK) == PCIM_BRPM_64) {
- pci_write_config(dev, PCIR_PMBASEH_1, sc->pmem.base >> 32, 4);
- pci_write_config(dev, PCIR_PMLIMITH_1, sc->pmem.limit >> 32, 4);
+ pci_write_config(dev, PCIR_PMBASEH_1,
+ sc->pmem.base >> 32, 4);
+ pci_write_config(dev, PCIR_PMLIMITH_1,
+ sc->pmem.limit >> 32, 4);
}
pci_write_config(dev, PCIR_PMBASEL_1, sc->pmem.base >> 16, 2);
pci_write_config(dev, PCIR_PMLIMITL_1, sc->pmem.limit >> 16, 2);
@@ -607,7 +620,7 @@
device_printf(dev, " secondary bus %d\n", sc->secbus);
device_printf(dev, " subordinate bus %d\n", sc->subbus);
#ifdef NEW_PCIB
- if (pcib_is_window_open(&sc->io)
+ if (pcib_is_window_open(&sc->io))
device_printf(dev, " I/O decode 0x%jx-0x%jx\n",
(uintmax_t)sc->io.base, (uintmax_t)sc->io.limit);
if (pcib_is_window_open(&sc->mem))
@@ -618,7 +631,8 @@
(uintmax_t)sc->pmem.base, (uintmax_t)sc->pmem.limit);
#else
if (pcib_is_io_open(sc))
- device_printf(dev, " I/O decode 0x%x-0x%x\n", sc->iobase, sc->iolimit);
+ device_printf(dev, " I/O decode 0x%x-0x%x\n",
+ sc->iobase, sc->iolimit);
if (pcib_is_nonprefetch_open(sc))
device_printf(dev, " memory decode 0x%jx-0x%jx\n",
(uintmax_t)sc->membase, (uintmax_t)sc->memlimit);
@@ -729,19 +743,21 @@
#ifdef NEW_PCIB
/*
- * Attempt to allocate a resource from the existing resources assigned to a window.
+ * Attempt to allocate a resource from the existing resources assigned
+ * to a window.
*/
static struct resource *
-pcib_suballoc_resource(struct pcib_softc *sc, struct pcib_window *w, device_t child,
- int type, int *rid, u_long start, u_long end, u_long count, u_int flags)
+pcib_suballoc_resource(struct pcib_softc *sc, struct pcib_window *w,
+ device_t child, int type, int *rid, u_long start, u_long end, u_long count,
+ u_int flags)
{
struct resource *res;
if (!pcib_is_window_open(w))
return (NULL);
- res = rman_reserve_resource(&w->rm, start, end, count, flags & ~RF_ACTIVE,
- child);
+ res = rman_reserve_resource(&w->rm, start, end, count,
+ flags & ~RF_ACTIVE, child);
if (res == NULL)
return (NULL);
More information about the p4-projects
mailing list