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"

Reply via email to