Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Jun 2012 07:26:44 +0000 (UTC)
From:      Warner Losh <imp@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r237692 - head/sys/dev/pccard
Message-ID:  <201206280726.q5S7QihI059569@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 };



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206280726.q5S7QihI059569>