Port-amd64 archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

bus_space/bus_dma and PAE



Hi,
I started looking at PCI passthough for Xen, and as part of this
at getting a XEN3PAE i386 kernel building (which is usefull if we ever want
to suppport native i386 PAE too). The attached patch allows to build
a XEN3PAE_XENU kernel with bus_space and bus_dma linked in.
What it does is change bus_addr_t to be paddr_t (so its size changes with
options PAE); and remplace a view bus_addr_t with vaddr_t where
the value is used as a virtual address (and so is not a physical bus
address, strictly speaking).

comment ?

-- 
Manuel Bouyer <bouyer%antioche.eu.org@localhost>
     NetBSD: 26 ans d'experience feront toujours la difference
--
Index: x86/include/bus.h
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/include/bus.h,v
retrieving revision 1.17
diff -u -p -u -r1.17 bus.h
--- x86/include/bus.h   6 Nov 2008 01:17:24 -0000       1.17
+++ x86/include/bus.h   24 Jan 2009 23:33:49 -0000
@@ -77,11 +77,11 @@
 /*
  * Bus address and size types
  */
-typedef u_long bus_addr_t;
-typedef u_long bus_size_t;
+typedef paddr_t bus_addr_t;
+typedef paddr_t bus_size_t;
 
 typedef        int bus_space_tag_t;
-typedef        u_long bus_space_handle_t;
+typedef        vaddr_t bus_space_handle_t;
 
 int    _x86_memio_map(bus_space_tag_t t, bus_addr_t addr,
            bus_size_t size, int flags, bus_space_handle_t *bshp);
Index: x86/include/isa_machdep.h
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/include/isa_machdep.h,v
retrieving revision 1.6
diff -u -p -u -r1.6 isa_machdep.h
--- x86/include/isa_machdep.h   27 Jun 2008 11:03:13 -0000      1.6
+++ x86/include/isa_machdep.h   24 Jan 2009 23:33:49 -0000
@@ -202,19 +202,19 @@ extern struct x86_bus_dma_tag isa_bus_dm
  * function definitions, invoked through the softc.
  */
 
-extern u_long atdevbase;           /* kernel virtual address of "hole" */
+extern vaddr_t atdevbase;         /* kernel virtual address of "hole" */
 
 /*
  * Given a kernel virtual address for some location
  * in the "hole" I/O space, return a physical address.
  */
-#define ISA_PHYSADDR(v) ((void *) ((u_long)(v) - atdevbase + IOM_BEGIN))
+#define ISA_PHYSADDR(v) ((bus_addr_t)(v) - atdevbase + IOM_BEGIN)
 
 /*
  * Given a physical address in the "hole",
  * return a kernel virtual address.
  */
-#define ISA_HOLE_VADDR(p)  ((void *) ((u_long)(p) - IOM_BEGIN + atdevbase))
+#define ISA_HOLE_VADDR(p)  ((void *) ((vaddr_t)(p) - IOM_BEGIN + atdevbase))
 
 
 /*
Index: x86/x86/bus_space.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/x86/bus_space.c,v
retrieving revision 1.20
diff -u -p -u -r1.20 bus_space.c
--- x86/x86/bus_space.c 21 Oct 2008 15:46:32 -0000      1.20
+++ x86/x86/bus_space.c 24 Jan 2009 23:33:49 -0000
@@ -199,8 +199,8 @@ bus_space_map(bus_space_tag_t t, bus_add
        if (error) {
                if (extent_free(ex, bpa, size, EX_NOWAIT |
                    (ioport_malloc_safe ? EX_MALLOCOK : 0))) {
-                       printf("x86_memio_map: pa 0x%lx, size 0x%lx\n",
-                           bpa, size);
+                       printf("x86_memio_map: pa 0x%" PRIx64 ", size 0x%"
+                           PRIx64 "\n", (uint64_t)bpa, (uint64_t)size);
                        printf("x86_memio_map: can't free region\n");
                }
        }
@@ -286,8 +286,8 @@ bus_space_alloc(bus_space_tag_t t, bus_a
        if (error) {
                if (extent_free(iomem_ex, bpa, size, EX_NOWAIT |
                    (ioport_malloc_safe ? EX_MALLOCOK : 0))) {
-                       printf("x86_memio_alloc: pa 0x%lx, size 0x%lx\n",
-                           bpa, size);
+                       printf("x86_memio_alloc: pa 0x%" PRIx64 ", size 0x%"
+                           PRIx64 "\n", (uint64_t)bpa, (uint64_t)size);
                        printf("x86_memio_alloc: can't free region\n");
                }
        }
@@ -463,8 +463,9 @@ bus_space_unmap(bus_space_tag_t t, bus_s
 ok:
        if (extent_free(ex, bpa, size,
            EX_NOWAIT | (ioport_malloc_safe ? EX_MALLOCOK : 0))) {
-               printf("x86_memio_unmap: %s 0x%lx, size 0x%lx\n",
-                   (t == X86_BUS_SPACE_IO) ? "port" : "pa", bpa, size);
+               printf("x86_memio_unmap: %s 0x%" PRIx64 ", size 0x%"
+                   PRIx64 "\n", (t == X86_BUS_SPACE_IO) ? "port" : "pa",
+                   (uint64_t)bpa, (uint64_t)size);
                printf("x86_memio_unmap: can't free region\n");
        }
 }
@@ -509,7 +510,7 @@ void
 bus_space_set_multi_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
                      uint8_t v, size_t c)
 {
-       bus_addr_t addr = h + o;
+       vaddr_t addr = h + o;
 
        if (t == X86_BUS_SPACE_IO)
                while (c--)
@@ -523,7 +524,7 @@ void
 bus_space_set_multi_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
                      uint16_t v, size_t c)
 {
-       bus_addr_t addr = h + o;
+       vaddr_t addr = h + o;
 
        BUS_SPACE_ADDRESS_SANITY(addr, uint16_t, "bus addr");
 
@@ -539,7 +540,7 @@ void
 bus_space_set_multi_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
                      uint32_t v, size_t c)
 {
-       bus_addr_t addr = h + o;
+       vaddr_t addr = h + o;
 
        BUS_SPACE_ADDRESS_SANITY(addr, uint32_t, "bus addr");
 
@@ -555,7 +556,7 @@ void
 bus_space_set_region_1(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
                      uint8_t v, size_t c)
 {
-       bus_addr_t addr = h + o;
+       vaddr_t addr = h + o;
 
        if (t == X86_BUS_SPACE_IO)
                for (; c != 0; c--, addr++)
@@ -569,7 +570,7 @@ void
 bus_space_set_region_2(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
                       uint16_t v, size_t c)
 {
-       bus_addr_t addr = h + o;
+       vaddr_t addr = h + o;
 
        BUS_SPACE_ADDRESS_SANITY(addr, uint16_t, "bus addr");
 
@@ -585,7 +586,7 @@ void
 bus_space_set_region_4(bus_space_tag_t t, bus_space_handle_t h, bus_size_t o,
                       uint32_t v, size_t c)
 {
-       bus_addr_t addr = h + o;
+       vaddr_t addr = h + o;
 
        BUS_SPACE_ADDRESS_SANITY(addr, uint32_t, "bus addr");
 
@@ -602,8 +603,8 @@ bus_space_copy_region_1(bus_space_tag_t 
                        bus_size_t o1, bus_space_handle_t h2,
                        bus_size_t o2, size_t c)
 {
-       bus_addr_t addr1 = h1 + o1;
-       bus_addr_t addr2 = h2 + o2;
+       vaddr_t addr1 = h1 + o1;
+       vaddr_t addr2 = h2 + o2;
 
        if (t == X86_BUS_SPACE_IO) {
                if (addr1 >= addr2) {
@@ -637,8 +638,8 @@ bus_space_copy_region_2(bus_space_tag_t 
                        bus_size_t o1, bus_space_handle_t h2,
                        bus_size_t o2, size_t c)
 {
-       bus_addr_t addr1 = h1 + o1;
-       bus_addr_t addr2 = h2 + o2;
+       vaddr_t addr1 = h1 + o1;
+       vaddr_t addr2 = h2 + o2;
 
        BUS_SPACE_ADDRESS_SANITY(addr1, uint16_t, "bus addr 1");
        BUS_SPACE_ADDRESS_SANITY(addr2, uint16_t, "bus addr 2");
@@ -675,8 +676,8 @@ bus_space_copy_region_4(bus_space_tag_t 
                        bus_size_t o1, bus_space_handle_t h2,
                        bus_size_t o2, size_t c)
 {
-       bus_addr_t addr1 = h1 + o1;
-       bus_addr_t addr2 = h2 + o2;
+       vaddr_t addr1 = h1 + o1;
+       vaddr_t addr2 = h2 + o2;
 
        BUS_SPACE_ADDRESS_SANITY(addr1, uint32_t, "bus addr 1");
        BUS_SPACE_ADDRESS_SANITY(addr2, uint32_t, "bus addr 2");


Home | Main Index | Thread Index | Old Index