svn commit: r237692 - head/sys/dev/pccard
Warner Losh
imp at FreeBSD.org
Thu Jun 28 07:26:45 UTC 2012
Author: imp
Date: Thu Jun 28 07:26:44 2012
New Revision: 237692
URL: http://svn.freebsd.org/changeset/base/237692
Log:
Simplify resource activation a bit.
Modified:
head/sys/dev/pccard/pccard.c
head/sys/dev/pccard/pccardvarp.h
Modified: head/sys/dev/pccard/pccard.c
==============================================================================
--- head/sys/dev/pccard/pccard.c Thu Jun 28 07:08:48 2012 (r237691)
+++ head/sys/dev/pccard/pccard.c Thu Jun 28 07:26:44 2012 (r237692)
@@ -473,6 +473,8 @@ pccard_function_init(struct pccard_funct
struct resource_list *rl = &devi->resources;
struct resource_list_entry *rle;
struct resource *r = 0;
+ struct pccard_ce_iospace *ios;
+ struct pccard_ce_memspace *mems;
device_t bus;
u_long start, end, len;
int i, rid, spaces;
@@ -501,44 +503,50 @@ pccard_function_init(struct pccard_funct
continue;
spaces = 0;
for (i = 0; i < cfe->num_iospace; i++) {
- start = cfe->iospace[i].start;
+ ios = cfe->iospace + i;
+ start = ios->start;
if (start)
- end = start + cfe->iospace[i].length - 1;
+ end = start + ios->length - 1;
else
end = ~0UL;
DEVPRINTF((bus, "I/O rid %d start %#lx end %#lx\n",
i, start, end));
rid = i;
- len = cfe->iospace[i].length;
+ len = ios->length;
r = bus_alloc_resource(bus, SYS_RES_IOPORT, &rid,
start, end, len, rman_make_alignment_flags(len));
- if (r == NULL)
+ if (r == NULL) {
+ DEVPRINTF((bus, "I/O rid %d failed\n", i));
goto not_this_one;
+ }
rle = resource_list_add(rl, SYS_RES_IOPORT,
- rid, rman_get_start(r), rman_get_end(r),
- cfe->iospace[i].length);
+ rid, rman_get_start(r), rman_get_end(r), len);
if (rle == NULL)
panic("Cannot add resource rid %d IOPORT", rid);
rle->res = r;
spaces++;
}
for (i = 0; i < cfe->num_memspace; i++) {
- start = cfe->memspace[i].hostaddr;
+ mems = cfe->memspace + i;
+ start = mems->cardaddr + mems->hostaddr;
if (start)
- end = start + cfe->memspace[i].length - 1;
+ end = start + mems->length - 1;
else
end = ~0UL;
- DEVPRINTF((bus, "Memory rid %d start %#lx end %#lx\n",
- i, start, end));
+ DEVPRINTF((bus, "Memory rid %d start %#lx end %#lx\ncardaddr %#lx hostaddr %#lx length %#lx\n",
+ i, start, end, mems->cardaddr, mems->hostaddr,
+ mems->length));
rid = i;
- len = cfe->memspace[i].length;
+ len = mems->length;
r = bus_alloc_resource(bus, SYS_RES_MEMORY, &rid,
start, end, len, rman_make_alignment_flags(len));
- if (r == NULL)
- goto not_this_one;
+ if (r == NULL) {
+ DEVPRINTF((bus, "Memory rid %d failed\n", i));
+// goto not_this_one;
+ continue;
+ }
rle = resource_list_add(rl, SYS_RES_MEMORY,
- rid, rman_get_start(r), rman_get_end(r),
- cfe->memspace[i].length);
+ rid, rman_get_start(r), rman_get_end(r), len);
if (rle == NULL)
panic("Cannot add resource rid %d MEM", rid);
rle->res = r;
@@ -552,8 +560,10 @@ pccard_function_init(struct pccard_funct
rid = 0;
r = bus_alloc_resource_any(bus, SYS_RES_IRQ, &rid,
RF_SHAREABLE);
- if (r == NULL)
+ if (r == NULL) {
+ DEVPRINTF((bus, "IRQ rid %d failed\n", rid));
goto not_this_one;
+ }
rle = resource_list_add(rl, SYS_RES_IRQ, rid,
rman_get_start(r), rman_get_end(r), 1);
if (rle == NULL)
Modified: head/sys/dev/pccard/pccardvarp.h
==============================================================================
--- head/sys/dev/pccard/pccardvarp.h Thu Jun 28 07:08:48 2012 (r237691)
+++ head/sys/dev/pccard/pccardvarp.h Thu Jun 28 07:26:44 2012 (r237692)
@@ -47,29 +47,32 @@
#define PCCARD_CFE_READONLY 0x0400
#define PCCARD_CFE_AUDIO 0x0800
+struct pccard_ce_iospace {
+ u_long length;
+ u_long start;
+};
+
+struct pccard_ce_memspace {
+ u_long length;
+ u_long cardaddr;
+ u_long hostaddr;
+};
+
struct pccard_config_entry {
int number;
uint32_t flags;
int iftype;
int num_iospace;
-
/*
* The card will only decode this mask in any case, so we can
* do dynamic allocation with this in mind, in case the suggestions
* below are no good.
*/
u_long iomask;
- struct {
- u_long length;
- u_long start;
- } iospace[4]; /* XXX this could be as high as 16 */
+ struct pccard_ce_iospace iospace[4]; /* XXX up to 16 */
uint16_t irqmask;
int num_memspace;
- struct {
- u_long length;
- u_long cardaddr;
- u_long hostaddr;
- } memspace[2]; /* XXX this could be as high as 8 */
+ struct pccard_ce_memspace memspace[2]; /* XXX up to 8 */
int maxtwins;
STAILQ_ENTRY(pccard_config_entry) cfe_list;
};
More information about the svn-src-all
mailing list