Module Name:    src
Committed By:   matt
Date:           Fri Dec 23 06:48:21 UTC 2011

Modified Files:
        src/sys/arch/mips/mips [matt-nb5-mips64]:
            bus_space_alignstride_chipdep.c

Log Message:
Add a fourth window


To generate a diff of this commit:
cvs rdiff -u -r1.10.18.13 -r1.10.18.14 \
    src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c
diff -u src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.10.18.13 src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.10.18.14
--- src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c:1.10.18.13	Wed May 25 23:58:47 2011
+++ src/sys/arch/mips/mips/bus_space_alignstride_chipdep.c	Fri Dec 23 06:48:20 2011
@@ -556,6 +556,8 @@ __BS(init)(bus_space_tag_t t, void *v)
 	    (void *)CHIP_EX_STORE(v), CHIP_EX_STORE_SIZE(v), EX_NOWAIT);
 	extent_alloc_region(ex, 0, ~0UL, EX_NOWAIT);
 
+	bool opened = false;
+
 #ifdef CHIP_W1_BUS_START
 	/*
 	 * The window may be disabled.  We notice this by seeing
@@ -563,50 +565,94 @@ __BS(init)(bus_space_tag_t t, void *v)
 	 */
 	if (CHIP_W1_BUS_START(v) == (bus_addr_t) -1) {
 #ifdef EXTENT_DEBUG
-		printf("%s: this space is disabled\n", __S(__BS(init)));
+		printf("%s: window 1 is disabled\n", __S(__BS(init)));
 #endif
-		return;
+	} else {
+#ifdef EXTENT_DEBUG
+		printf("%s: window %d: freeing from %#lx to %#lx\n",
+		    __func_, 1,
+		    (u_long)CHIP_W1_BUS_START(v), (u_long)CHIP_W1_BUS_END(v));
+#endif
+		opened = true;
+		extent_free(ex, CHIP_W1_BUS_START(v),
+		    CHIP_W1_BUS_END(v) - CHIP_W1_BUS_START(v) + 1, EX_NOWAIT);
 	}
-
+#endif /* CHIP_W1_BUS_START */
+#ifdef CHIP_W2_BUS_START
+	if (CHIP_W2_BUS_START(v) == (bus_addr_t) -1) {
 #ifdef EXTENT_DEBUG
-	printf("%s: freeing from %#"PRIxBUSADDR" to %#"PRIxBUSADDR"\n",
-	    __S(__BS(init)), (bus_addr_t)CHIP_W1_BUS_START(v),
-	    (bus_addr_t)CHIP_W1_BUS_END(v));
+		printf("%s: window 2 is disabled\n", __func__);
 #endif
-	extent_free(ex, CHIP_W1_BUS_START(v),
-	    CHIP_W1_BUS_END(v) - CHIP_W1_BUS_START(v) + 1, EX_NOWAIT);
-#endif
-#ifdef CHIP_W2_BUS_START
-	if (CHIP_W2_BUS_START(v) != CHIP_W1_BUS_START(v)) {
+	} else if (CHIP_W2_BUS_START(v) != CHIP_W1_BUS_START(v)) {
 #ifdef EXTENT_DEBUG
-		printf("xxx: freeing from 0x%lx to 0x%lx\n",
+		printf("%s: window %d: freeing from %#lx to %#lx\n",
+		    __func__, 2,
 		    (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
 #endif
+		opened = true;
 		extent_free(ex, CHIP_W2_BUS_START(v),
 		    CHIP_W2_BUS_END(v) - CHIP_W2_BUS_START(v) + 1, EX_NOWAIT);
 	} else {
 #ifdef EXTENT_DEBUG
-		printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
+		printf("%s: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
+		    __func__,
 		    (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
 #endif
 	}
-#endif
+#endif /* CHIP_W2_BUS_START */
 #ifdef CHIP_W3_BUS_START
-	if (CHIP_W3_BUS_START(v) != CHIP_W1_BUS_START(v) &&
-	    CHIP_W3_BUS_START(v) != CHIP_W2_BUS_START(v)) {
+	if (CHIP_W3_BUS_START(v) == (bus_addr_t) -1) {
+#ifdef EXTENT_DEBUG
+		printf("%s: window 3 is disabled\n", __func__);
+#endif
+	} else if (CHIP_W3_BUS_START(v) != CHIP_W1_BUS_START(v)
+	    && CHIP_W3_BUS_START(v) != CHIP_W2_BUS_START(v)) {
 #ifdef EXTENT_DEBUG
-		printf("xxx: freeing from 0x%lx to 0x%lx\n",
+		printf("%s: window %d: freeing from %#lx to %#lx\n",
+		    __func__, 3,
 		    (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
 #endif
+		opened = true;
 		extent_free(ex, CHIP_W3_BUS_START(v),
 		    CHIP_W3_BUS_END(v) - CHIP_W3_BUS_START(v) + 1, EX_NOWAIT);
 	} else {
 #ifdef EXTENT_DEBUG
-		printf("xxx: window 2 (0x%lx to 0x%lx) overlaps window 1\n",
-		    (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+		printf("%s: window 3 (0x%lx to 0x%lx) overlaps window 1 or 2\n",
+		    __func__,
+		    (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
+#endif
+	}
+#endif /* CHIP_W3_BUS_START */
+#ifdef CHIP_W4_BUS_START
+	if (CHIP_W4_BUS_START(v) == (bus_addr_t) -1) {
+#ifdef EXTENT_DEBUG
+		printf("%s: window 4 is disabled\n", __func__);
+#endif
+	} else if (CHIP_W4_BUS_START(v) != CHIP_W1_BUS_START(v)
+	    && CHIP_W4_BUS_START(v) != CHIP_W2_BUS_START(v)
+	    && CHIP_W4_BUS_START(v) != CHIP_W3_BUS_START(v)) {
+#ifdef EXTENT_DEBUG
+		printf("%s: window %d: freeing from %#lx to %#lx\n",
+		    __func__, 5,
+		    (u_long)CHIP_W4_BUS_START(v), (u_long)CHIP_W4_BUS_END(v));
+#endif
+		opened = true;
+		extent_free(ex, CHIP_W3_BUS_START(v),
+		    CHIP_W4_BUS_END(v) - CHIP_W4_BUS_START(v) + 1, EX_NOWAIT);
+	} else {
+#ifdef EXTENT_DEBUG
+		printf("%s: window 4 (0x%lx to 0x%lx) overlaps window 1, 2, or 3\n",
+		    __func__,
+		    (u_long)CHIP_W4_BUS_START(v), (u_long)CHIP_W4_BUS_END(v));
 #endif
 	}
+#endif /* CHIP_W3_BUS_START */
+
+	if (!opened) {
+#ifdef EXTENT_DEBUG
+		printf("%s: this space is disabled\n", __func__);
 #endif
+	}
 
 #ifdef EXTENT_DEBUG
 	extent_print(ex);
@@ -631,33 +677,62 @@ __BS(translate)(void *v, bus_addr_t addr
 #endif
 
 #ifdef CHIP_W1_BUS_START
-	if (addr >= CHIP_W1_BUS_START(v) && end <= CHIP_W1_BUS_END(v))
+	if (CHIP_W1_BUS_START(v) != (bus_addr_t) -1
+	    && addr >= CHIP_W1_BUS_START(v) && end <= CHIP_W1_BUS_END(v))
 		return (__BS(get_window)(v, 0, mbst));
 #endif
 
 #ifdef CHIP_W2_BUS_START
-	if (addr >= CHIP_W2_BUS_START(v) && end <= CHIP_W2_BUS_END(v))
+	if (CHIP_W2_BUS_START(v) != (bus_addr_t) -1
+	    && addr >= CHIP_W2_BUS_START(v) && end <= CHIP_W2_BUS_END(v))
 		return (__BS(get_window)(v, 1, mbst));
 #endif
 
 #ifdef CHIP_W3_BUS_START
-	if (addr >= CHIP_W3_BUS_START(v) && end <= CHIP_W3_BUS_END(v))
+	if (CHIP_W3_BUS_START(v) != (bus_addr_t) -1
+	    && addr >= CHIP_W3_BUS_START(v) && end <= CHIP_W3_BUS_END(v))
 		return (__BS(get_window)(v, 2, mbst));
 #endif
 
+#ifdef CHIP_W4_BUS_START
+	if (CHIP_W4_BUS_START(v) != (bus_addr_t) -1
+	    && addr >= CHIP_W4_BUS_START(v) && end <= CHIP_W4_BUS_END(v))
+		return (__BS(get_window)(v, 3, mbst));
+#endif
+
 #ifdef EXTENT_DEBUG
 	printf("\n");
 #ifdef CHIP_W1_BUS_START
-	printf("%s: window[1]=0x%lx-0x%lx\n", __S(__BS(map)),
-	    (u_long)CHIP_W1_BUS_START(v), (u_long)CHIP_W1_BUS_END(v));
+	if (CHIP_W1_BUS_START(v) == (bus_addr_t) -1) {
+		printf("%s: window[1]=disabled\n", __S(__BS(map)));
+	} else {
+		printf("%s: window[1]=0x%lx-0x%lx\n", __S(__BS(map)),
+		    (u_long)CHIP_W1_BUS_START(v), (u_long)CHIP_W1_BUS_END(v));
+	}
 #endif
 #ifdef CHIP_W2_BUS_START
-	printf("%s: window[2]=0x%lx-0x%lx\n", __S(__BS(map)),
-	    (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+	if (CHIP_W2_BUS_START(v) == (bus_addr_t) -1) {
+		printf("%s: window[2]=disabled\n", __S(__BS(map)));
+	} else {
+		printf("%s: window[2]=0x%lx-0x%lx\n", __S(__BS(map)),
+		    (u_long)CHIP_W2_BUS_START(v), (u_long)CHIP_W2_BUS_END(v));
+	}
 #endif
 #ifdef CHIP_W3_BUS_START
-	printf("%s: window[3]=0x%lx-0x%lx\n", __S(__BS(map)),
-	    (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
+	if (CHIP_W3_BUS_START(v) == (bus_addr_t) -1) {
+		printf("%s: window[3]=disabled\n", __S(__BS(map)));
+	} else {
+		printf("%s: window[3]=0x%lx-0x%lx\n", __S(__BS(map)),
+		    (u_long)CHIP_W3_BUS_START(v), (u_long)CHIP_W3_BUS_END(v));
+	}
+#endif
+#ifdef CHIP_W4_BUS_START
+	if (CHIP_W4_BUS_START(v) == (bus_addr_t) -1) {
+		printf("%s: window[4]=disabled\n", __S(__BS(map)));
+	} else {
+		printf("%s: window[4]=0x%lx-0x%lx\n", __S(__BS(map)),
+		    (u_long)CHIP_W4_BUS_START(v), (u_long)CHIP_W4_BUS_END(v));
+	}
 #endif
 #endif /* EXTENT_DEBUG */
 	/* No translation. */
@@ -702,9 +777,19 @@ __BS(get_window)(void *v, int window, st
 		break;
 #endif
 
+#ifdef CHIP_W4_BUS_START
+	case 3:
+		mbst->mbst_bus_start = CHIP_W4_BUS_START(v);
+		mbst->mbst_bus_end = CHIP_W4_BUS_END(v);
+		mbst->mbst_sys_start = CHIP_W4_SYS_START(v);
+		mbst->mbst_sys_end = CHIP_W4_SYS_END(v);
+		mbst->mbst_align_stride = CHIP_ALIGN_STRIDE;
+		mbst->mbst_flags = 0;
+		break;
+#endif
+
 	default:
-		panic(__S(__BS(get_window)) ": invalid window %d",
-		    window);
+		panic("%s: invalid window %d", __func__, window);
 	}
 
 	return (0);

Reply via email to