PERFORCE change 126182 for review

Oleksandr Tymoshenko gonzo at FreeBSD.org
Sat Sep 8 09:06:17 PDT 2007


http://perforce.freebsd.org/chv.cgi?CH=126182

Change 126182 by gonzo at gonzo_jeeves on 2007/09/08 16:06:11

	o Fix resource handling - map physical address to KSEG1 during 
	    activation.

Affected files ...

.. //depot/projects/mips2/src/sys/mips/mips32/idt/idtpci.c#3 edit

Differences ...

==== //depot/projects/mips2/src/sys/mips/mips32/idt/idtpci.c#3 (text+ko) ====

@@ -113,7 +113,6 @@
 
 struct idtpci_softc {
 	device_t		sc_dev;
-	bus_space_tag_t		sc_st;
 
 	int			sc_busno;
 	struct rman		sc_mem_rman;
@@ -217,18 +216,17 @@
 	sc->sc_io_rman.rm_descr = "IDTPCI I/O Ports";
 	if (rman_init(&sc->sc_io_rman) != 0 ||
 	  rman_manage_region(&sc->sc_io_rman, 
-	      MIPS_PHYS_TO_KSEG1(IDT_PCIMEM3_BASE), 
-	      MIPS_PHYS_TO_KSEG1(IDT_PCIMEM3_BASE + IDT_PCIMEM3_SIZE - 1)) != 0) {
+	      IDT_PCIMEM3_BASE, IDT_PCIMEM3_BASE + IDT_PCIMEM3_SIZE - 1) != 0) {
 		panic("idtpci_attach: failed to set up I/O rman");
 	}
 
 	/* Use KSEG1 to access PCI memory for it is uncached */
-	sc->sc_mem = MIPS_PHYS_TO_KSEG1(IDT_PCIMEM1_BASE);
+	sc->sc_mem = 0;
 	sc->sc_mem_rman.rm_type = RMAN_ARRAY;
 	sc->sc_mem_rman.rm_descr = "IDTPCI PCI Memory";
 	if (rman_init(&sc->sc_mem_rman) != 0 ||
 	    rman_manage_region(&sc->sc_mem_rman, 
-	    sc->sc_mem, sc->sc_mem + IDT_PCIMEM1_SIZE) != 0) {
+	    IDT_PCIMEM1_BASE, IDT_PCIMEM1_BASE + IDT_PCIMEM1_SIZE) != 0) {
 		panic("idtpci_attach: failed to set up memory rman");
 	}
 
@@ -440,6 +438,7 @@
 	struct resource *rv = NULL;
 	struct rman *rm;
 	bus_space_handle_t bh = 0;
+	void *vaddr;
 
 	switch (type) {
 	case SYS_RES_IRQ:
@@ -447,11 +446,9 @@
 		break;
 	case SYS_RES_MEMORY:
 		rm = &sc->sc_mem_rman;
-		bh = sc->sc_mem;
 		break;
 	case SYS_RES_IOPORT:
 		rm = &sc->sc_io_rman;
-		bh = sc->sc_io;
 		break;
 	default:
 		return (NULL);
@@ -460,19 +457,23 @@
 	rv = rman_reserve_resource(rm, start, end, count, flags, child);
 	if (rv == NULL)
 		return (NULL);
+
+	if ((type == SYS_RES_MEMORY) || (type == SYS_RES_IOPORT)) {
+		vaddr = 
+		    (void *)MIPS_PHYS_TO_KSEG1((intptr_t)rman_get_start(rv));
+		rman_set_virtual(rv, vaddr);
+		rman_set_bushandle(rv, (bus_space_handle_t)vaddr);
+	}
+
 	rman_set_rid(rv, *rid);
-	if (type != SYS_RES_IRQ) {
-		bh += (rman_get_start(rv));
+
+	if (flags & RF_ACTIVE) {
+		if (bus_activate_resource(child, type, *rid, rv)) {
+			rman_release_resource(rv);
+			return (NULL);
+		}
+	} 
 
-		rman_set_bustag(rv, sc->sc_st);
-		rman_set_bushandle(rv, bh);
-		if (flags & RF_ACTIVE) {
-			if (bus_activate_resource(child, type, *rid, rv)) {
-				rman_release_resource(rv);
-				return (NULL);
-			}
-		} 
-	}
 	return (rv);
 }
 
@@ -480,16 +481,10 @@
 idtpci_activate_resource(device_t bus, device_t child, int type, int rid,
     struct resource *r)
 {
-	bus_space_handle_t p;
-	int error;
-	
-	if ((type == SYS_RES_MEMORY) || (type == SYS_RES_IOPORT)) {
-		error = bus_space_map(rman_get_bustag(r),
-		    rman_get_bushandle(r), rman_get_size(r), 0, &p);
-		if (error) 
-			return (error);
-		rman_set_bushandle(r, p);
+	if (type == SYS_RES_IRQ) {
+		/* TODO:enable interrupt here? */
 	}
+
 	return (rman_activate_resource(r));
 }
 


More information about the p4-projects mailing list