svn commit: r204390 - user/jmallett/octeon/sys/mips/cavium

Juli Mallett jmallett at FreeBSD.org
Sat Feb 27 03:35:35 UTC 2010


Author: jmallett
Date: Sat Feb 27 03:35:34 2010
New Revision: 204390
URL: http://svn.freebsd.org/changeset/base/204390

Log:
  Fix casts for n32 and add a comment as to why this code can't really work as
  intended with a true o32 kernel.

Modified:
  user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h

Modified: user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h
==============================================================================
--- user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h	Sat Feb 27 03:33:31 2010	(r204389)
+++ user/jmallett/octeon/sys/mips/cavium/octeon_pcmap_regs.h	Sat Feb 27 03:35:34 2010	(r204390)
@@ -94,19 +94,19 @@ extern struct pcpu *cpuid_to_pcpu[];
 
 static inline void oct_write64 (uint64_t csr_addr, uint64_t val64)
 {
-    uint64_t *ptr = (uint64_t *) csr_addr;
+    uint64_t *ptr = (uint64_t *)(intptr_t)csr_addr;
     *ptr = val64;
 }
 
 static inline void oct_write64_int64 (uint64_t csr_addr, int64_t val64i)
 {
-    int64_t *ptr = (int64_t *) csr_addr;
+    int64_t *ptr = (int64_t *)(intptr_t)csr_addr;
     *ptr = val64i;
 }
 
 static inline void oct_write8_x8 (uint64_t csr_addr, uint8_t val8)
 {
-    uint64_t *ptr = (uint64_t *) csr_addr;
+    uint64_t *ptr = (uint64_t *)(intptr_t)csr_addr;
     *ptr = (uint64_t) val8;
 }
 
@@ -127,32 +127,32 @@ static inline void oct_write32 (uint64_t
 
 static inline uint8_t oct_read8 (uint64_t csr_addr)
 {
-    uint8_t *ptr = (uint8_t *) csr_addr;
+    uint8_t *ptr = (uint8_t *)(intptr_t)csr_addr;
     return (*ptr);
 }
 
 static inline uint8_t oct_read16 (uint64_t csr_addr)
 {
-    uint16_t *ptr = (uint16_t *) csr_addr;
+    uint16_t *ptr = (uint16_t *)(intptr_t)csr_addr;
     return (*ptr);
 }
 
 
 static inline uint32_t oct_read32 (uint64_t csr_addr)
 {
-    uint32_t *ptr = (uint32_t *) csr_addr;
+    uint32_t *ptr = (uint32_t *)(intptr_t)csr_addr;
     return (*ptr);
 }
 
 static inline uint64_t oct_read64 (uint64_t csr_addr)
 {
-    uint64_t *ptr = (uint64_t *) csr_addr;
+    uint64_t *ptr = (uint64_t *)(intptr_t)csr_addr;
     return (*ptr);
 }
 
 static inline int32_t oct_readint32 (uint64_t csr_addr)
 {
-    int32_t *ptr = (int32_t *) csr_addr;
+    int32_t *ptr = (int32_t *)(intptr_t)csr_addr;
     return (*ptr);
 }
 
@@ -161,6 +161,14 @@ static inline int32_t oct_readint32 (uin
 #else
 
 
+/*
+ * XXX
+ * These cannot possibly work unless the exception handlers in an o32 kernel
+ * are careful to not trash the upper 32 bits of saved/restored registers, or
+ * actually save and restore them as 64-bit quantities, which seems possible
+ * but is quite ugly.
+ */
+
 /*  ABI o32 */
 
 


More information about the svn-src-user mailing list