PADDR helpers for lower and upper 32 bits
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 29 Oct 2013 23:50:15 +0000 (16:50 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 16 Jan 2014 19:19:37 +0000 (11:19 -0800)
We usually need to tell devices 64 bit PADDRs in two separate 32 bit
chunks.  Also, I added some catches for the RTL driver.  Without this
check, we could have the NIC writing on the wrong pages (when the true
PADDR > 4 GB).

kern/include/pmap.h

index b9ec442..842865d 100644 (file)
@@ -40,6 +40,9 @@
        __m_pa; \
 })
 
+#define paddr_low32(p) ((uint32_t)(uintptr_t)PADDR(p))
+#define paddr_high32(p) ((uint32_t)((uint64_t)PADDR(p) >> 32))
+
 /* This macro takes a physical address and returns the corresponding kernel
  * virtual address.  It warns if you pass an invalid physical address. */
 #define KADDR(pa)                                              \