patch-2.1.16 linux/include/asm-sparc/viking.h
Next file: linux/include/asm-sparc64/a.out.h
Previous file: linux/include/asm-sparc/uaccess.h
Back to the patch index
Back to the overall index
- Lines: 60
- Date:
Fri Dec 13 11:37:40 1996
- Orig file:
v2.1.15/linux/include/asm-sparc/viking.h
- Orig date:
Tue Nov 12 15:56:13 1996
diff -u --recursive --new-file v2.1.15/linux/include/asm-sparc/viking.h linux/include/asm-sparc/viking.h
@@ -1,4 +1,4 @@
-/* $Id: viking.h,v 1.16 1996/08/29 09:49:10 davem Exp $
+/* $Id: viking.h,v 1.17 1996/11/24 17:11:51 ecd Exp $
* viking.h: Defines specific to the GNU/Viking MBUS module.
* This is SRMMU stuff.
*
@@ -9,6 +9,7 @@
#include <asm/asi.h>
#include <asm/mxcc.h>
+#include <asm/pgtsrmmu.h>
/* Bits in the SRMMU control register for GNU/Viking modules.
*
@@ -193,6 +194,45 @@
"i" (ASI_M_MXCC) : "g2");
*mregp = mreg;
*mxcc_cregp = mxcc_creg;
+}
+
+extern __inline__ unsigned long viking_hwprobe(unsigned long vaddr)
+{
+ unsigned long val;
+
+ vaddr &= PAGE_MASK;
+ /* Probe all MMU entries. */
+ __asm__ __volatile__("lda [%1] %2, %0\n\t" :
+ "=r" (val) :
+ "r" (vaddr | 0x400), "i" (ASI_M_FLUSH_PROBE));
+ if (!val)
+ return 0;
+
+ /* Probe region. */
+ __asm__ __volatile__("lda [%1] %2, %0\n\t" :
+ "=r" (val) :
+ "r" (vaddr | 0x200), "i" (ASI_M_FLUSH_PROBE));
+ if ((val & SRMMU_ET_MASK) == SRMMU_ET_PTE) {
+ vaddr &= ~SRMMU_PGDIR_MASK;
+ vaddr >>= PAGE_SHIFT;
+ return val | (vaddr << 8);
+ }
+
+ /* Probe segment. */
+ __asm__ __volatile__("lda [%1] %2, %0\n\t" :
+ "=r" (val) :
+ "r" (vaddr | 0x100), "i" (ASI_M_FLUSH_PROBE));
+ if ((val & SRMMU_ET_MASK) == SRMMU_ET_PTE) {
+ vaddr &= ~SRMMU_PMD_MASK;
+ vaddr >>= PAGE_SHIFT;
+ return val | (vaddr << 8);
+ }
+
+ /* Probe page. */
+ __asm__ __volatile__("lda [%1] %2, %0\n\t" :
+ "=r" (val) :
+ "r" (vaddr), "i" (ASI_M_FLUSH_PROBE));
+ return val;
}
#endif /* !(_SPARC_VIKING_H) */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov