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; }; _______________________________________________ svn-src-head@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"