Module Name:    src
Committed By:   matt
Date:           Thu Feb 25 05:45:12 UTC 2010

Modified Files:
        src/sys/arch/mips/include [matt-nb5-mips64]: locore.h
        src/sys/arch/mips/mips [matt-nb5-mips64]: locore.S locore_mips3.S
            mipsX_subr.S mips_machdep.c

Log Message:
Add mipsXX_tlb_record_asids - records what ASIDs have valid TLB entries in
the TLB.
Move some mips3 specific routines from locore.S to locore_mips3.S


To generate a diff of this commit:
cvs rdiff -u -r1.78.36.1.2.14 -r1.78.36.1.2.15 \
    src/sys/arch/mips/include/locore.h
cvs rdiff -u -r1.167.38.15 -r1.167.38.16 src/sys/arch/mips/mips/locore.S
cvs rdiff -u -r1.93.38.6 -r1.93.38.7 src/sys/arch/mips/mips/locore_mips3.S
cvs rdiff -u -r1.26.36.1.2.25 -r1.26.36.1.2.26 \
    src/sys/arch/mips/mips/mipsX_subr.S
cvs rdiff -u -r1.205.4.1.2.1.2.35 -r1.205.4.1.2.1.2.36 \
    src/sys/arch/mips/mips/mips_machdep.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/arch/mips/include/locore.h
diff -u src/sys/arch/mips/include/locore.h:1.78.36.1.2.14 src/sys/arch/mips/include/locore.h:1.78.36.1.2.15
--- src/sys/arch/mips/include/locore.h:1.78.36.1.2.14	Tue Feb 23 20:33:47 2010
+++ src/sys/arch/mips/include/locore.h	Thu Feb 25 05:45:12 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.h,v 1.78.36.1.2.14 2010/02/23 20:33:47 matt Exp $ */
+/* $NetBSD: locore.h,v 1.78.36.1.2.15 2010/02/25 05:45:12 matt Exp $ */
 
 /*
  * This file should not be included by MI code!!!
@@ -51,6 +51,7 @@
 void	mips1_tlb_invalidate_globals(void);
 void	mips1_tlb_invalidate_asids(uint32_t, uint32_t);
 void	mips1_tlb_invalidate_addr(vaddr_t);
+u_int	mips1_tlb_record_asids(u_long *, uint32_t);
 int	mips1_tlb_update(vaddr_t, uint32_t);
 void	mips1_tlb_read_indexed(size_t, struct tlbmask *);
 void	mips1_wbflush(void);
@@ -67,6 +68,7 @@
 void	mips3_tlb_invalidate_globals(void);
 void	mips3_tlb_invalidate_asids(uint32_t, uint32_t);
 void	mips3_tlb_invalidate_addr(vaddr_t);
+u_int	mips3_tlb_record_asids(u_long *, uint32_t);
 int	mips3_tlb_update(vaddr_t, uint32_t);
 void	mips3_tlb_read_indexed(size_t, struct tlbmask *);
 void	mips3_tlb_write_indexed_VPS(size_t, struct tlbmask *);
@@ -82,6 +84,7 @@
 void	mips5900_tlb_invalidate_globals(void);
 void	mips5900_tlb_invalidate_asids(uint32_t, uint32_t);
 void	mips5900_tlb_invalidate_addr(vaddr_t);
+u_int	mips5900_tlb_record_asids(u_long *, uint32_t);
 int	mips5900_tlb_update(vaddr_t, uint32_t);
 void	mips5900_tlb_read_indexed(size_t, struct tlbmask *);
 void	mips5900_tlb_write_indexed_VPS(size_t, struct tlbmask *);
@@ -99,6 +102,7 @@
 void	mips32_tlb_invalidate_globals(void);
 void	mips32_tlb_invalidate_asids(uint32_t, uint32_t);
 void	mips32_tlb_invalidate_addr(vaddr_t);
+u_int	mips32_tlb_record_asids(u_long *, uint32_t);
 int	mips32_tlb_update(vaddr_t, uint32_t);
 void	mips32_tlb_read_indexed(size_t, struct tlbmask *);
 void	mips32_tlb_write_indexed_VPS(size_t, struct tlbmask *);
@@ -114,6 +118,7 @@
 void	mips64_tlb_invalidate_globals(void);
 void	mips64_tlb_invalidate_asids(uint32_t, uint32_t);
 void	mips64_tlb_invalidate_addr(vaddr_t);
+u_int	mips64_tlb_record_asids(u_long *, uint32_t);
 int	mips64_tlb_update(vaddr_t, uint32_t);
 void	mips64_tlb_read_indexed(size_t, struct tlbmask *);
 void	mips64_tlb_write_indexed_VPS(size_t, struct tlbmask *);
@@ -295,6 +300,7 @@
 	void (*ljv_tlb_invalidate_addr)(vaddr_t);
 	void (*ljv_tlb_invalidate_globals)(void);
 	void (*ljv_tlb_invalidate_all)(void);
+	u_int (*ljv_tlb_record_asids)(u_long *, uint32_t);
 	int  (*ljv_tlb_update)(vaddr_t, uint32_t);
 	void (*ljv_tlb_read_indexed)(size_t, struct tlbmask *);
 	void (*ljv_wbflush)(void);
@@ -334,6 +340,7 @@
 #define tlb_invalidate_addr	mips1_tlb_invalidate_addr
 #define tlb_invalidate_globals	mips1_tlb_invalidate_globals
 #define tlb_invalidate_all	mips1_tlb_invalidate_all
+#define tlb_record_asids	mips1_tlb_record_asids
 #define tlb_update		mips1_tlb_update
 #define tlb_read_indexed	mips1_tlb_read_indexed
 #define wbflush			mips1_wbflush
@@ -345,6 +352,7 @@
 #define tlb_invalidate_addr	mips3_tlb_invalidate_addr
 #define tlb_invalidate_globals	mips3_tlb_invalidate_globals
 #define tlb_invalidate_all	mips3_tlb_invalidate_all
+#define tlb_record_asids	mips3_tlb_record_asids
 #define tlb_update		mips3_tlb_update
 #define tlb_read_indexed	mips3_tlb_read_indexed
 #define tlb_write_indexed_VPS	mips3_tlb_write_indexed_VPS
@@ -357,6 +365,7 @@
 #define tlb_invalidate_addr	mips32_tlb_invalidate_addr
 #define tlb_invalidate_globals	mips32_tlb_invalidate_globals
 #define tlb_invalidate_all	mips32_tlb_invalidate_all
+#define tlb_record_asids	mips32_tlb_record_asids
 #define tlb_update		mips32_tlb_update
 #define tlb_read_indexed	mips32_tlb_read_indexed
 #define tlb_write_indexed_VPS	mips32_tlb_write_indexed_VPS
@@ -370,6 +379,7 @@
 #define tlb_invalidate_addr	mips64_tlb_invalidate_addr
 #define tlb_invalidate_globals	mips64_tlb_invalidate_globals
 #define tlb_invalidate_all	mips64_tlb_invalidate_all
+#define tlb_record_asids	mips64_tlb_record_asids
 #define tlb_update		mips64_tlb_update
 #define tlb_read_indexed	mips64_tlb_read_indexed
 #define tlb_write_indexed_VPS	mips64_tlb_write_indexed_VPS
@@ -382,6 +392,7 @@
 #define tlb_invalidate_addr	mips5900_tlb_invalidate_addr
 #define tlb_invalidate_globals	mips5900_tlb_invalidate_globals
 #define tlb_invalidate_all	mips5900_tlb_invalidate_all
+#define tlb_record_asids	mips5900_tlb_record_asids
 #define tlb_update		mips5900_tlb_update
 #define tlb_read_indexed	mips5900_tlb_read_indexed
 #define tlb_write_indexed_VPS	mips5900_tlb_write_indexed_VPS
@@ -394,6 +405,7 @@
 #define tlb_invalidate_addr	(*mips_locore_jumpvec.ljv_tlb_invalidate_addr)
 #define tlb_invalidate_globals	(*mips_locore_jumpvec.ljv_tlb_invalidate_globals)
 #define tlb_invalidate_all	(*mips_locore_jumpvec.ljv_tlb_invalidate_all)
+#define tlb_record_asids	(*mips_locore_jumpvec.ljv_tlb_record_asids)
 #define tlb_update		(*mips_locore_jumpvec.ljv_tlb_update)
 #define tlb_read_indexed	(*mips_locore_jumpvec.ljv_tlb_read_indexed)
 #define wbflush			(*mips_locore_jumpvec.ljv_wbflush)

Index: src/sys/arch/mips/mips/locore.S
diff -u src/sys/arch/mips/mips/locore.S:1.167.38.15 src/sys/arch/mips/mips/locore.S:1.167.38.16
--- src/sys/arch/mips/mips/locore.S:1.167.38.15	Tue Feb 23 20:33:48 2010
+++ src/sys/arch/mips/mips/locore.S	Thu Feb 25 05:45:12 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore.S,v 1.167.38.15 2010/02/23 20:33:48 matt Exp $	*/
+/*	$NetBSD: locore.S,v 1.167.38.16 2010/02/25 05:45:12 matt Exp $	*/
 
 /*
  * Copyright (c) 1992, 1993
@@ -551,99 +551,6 @@
 	nop
 END(mips_cp0_status_write)
 
-#ifdef MIPS3_PLUS
-	.set	push
-	.set	mips3
-/*
- * uint64_t mips_cp0_tlb_entry_hi_probe(void);
- *
- * Write 1s to the VPN field of Entry_Hi0 to see how many VA bits
- * are implemented.  Assumes that interrupts are disabled.
- */
-LEAF(mips_cp0_tlb_entry_hi_probe)
-	dmfc0	t0, MIPS_COP_0_TLB_HI
-	li	v0, -4096	/* all 1s except low 12 bits */
-	dsll	v0, v0, 2	/* except the top 2 */
-	dsrl	v0, v0, 2
-	dmtc0	v0, MIPS_COP_0_TLB_HI
-	COP0_SYNC
-	nop
-	nop
-	dmfc0	v0, MIPS_COP_0_TLB_HI
-	dmtc0	t0, MIPS_COP_0_TLB_HI
-	COP0_SYNC
-	nop
-#ifdef __mips_o32
-	nop
-#if BYTE_ORDER == BIG_ENDIAN
-	srl	v1, v0, 0
-	dsra	v0, v0, 32
-#endif
-#if BYTE_ORDER == LITTLE_ENDIAN
-	dsra	v1, v0, 32
-	srl	v0, v0, 0
-#endif
-#endif /* __mips_o32 */
-	j	ra
-	 nop
-END(mips_cp0_tlb_entry_hi_probe)
-
-/*
- * uint64_t mips_cp0_tlb_entry_lo_probe(void);
- *
- * Write 1s to the PFN field of Entry_Lo0 to see how many
- * PA bits are implemented.  Assumes that interrupts are disabled.
- */
-LEAF(mips_cp0_tlb_entry_lo_probe)
-	dmfc0	t0, MIPS_COP_0_TLB_LO0
-	li	v0, -64		/* all 1s except low 6 bits */
-	dmtc0	v0, MIPS_COP_0_TLB_LO0
-	COP0_SYNC
-	nop
-	nop
-	dmfc0	v0, MIPS_COP_0_TLB_LO0
-	dmtc0	t0, MIPS_COP_0_TLB_LO0
-	COP0_SYNC
-	nop
-#ifdef __mips_o32
-	nop
-#if BYTE_ORDER == BIG_ENDIAN
-	srl	v1, v0, 0
-	dsra	v0, v0, 32
-#endif
-#if BYTE_ORDER == LITTLE_ENDIAN
-	dsra	v1, v0, 32
-	srl	v0, v0, 0
-#endif
-#endif /* __mips_o32 */
-	j	ra
-	 nop
-END(mips_cp0_tlb_entry_lo_probe)
-	.set	pop
-
-/*
- * uint32_t mips_cp0_tlb_page_mask_probe(void);
- *
- * Write 1s to the RPN field of Entry_Lo0 to see how many PA bits are implemented.
- * Assumes that interrupts are disabled.
- */
-LEAF(mips_cp0_tlb_page_mask_probe)
-	mfc0	t0, MIPS_COP_0_TLB_PG_MASK
-	lui	v0, 0xffff
-	srl	v0, v0, 3
-	mtc0	v0, MIPS_COP_0_TLB_PG_MASK
-	COP0_SYNC
-	nop
-	nop
-	mfc0	v0, MIPS_COP_0_TLB_PG_MASK
-	mtc0	t0, MIPS_COP_0_TLB_PG_MASK
-	COP0_SYNC
-	nop
-	j	ra
-	 nop
-END(mips_cp0_tlb_page_mask_probe)
-#endif /* MIPS3_PLUS */
-
 #if !defined(NOFPU) || defined(FPEMUL)
 /*----------------------------------------------------------------------------
  *

Index: src/sys/arch/mips/mips/locore_mips3.S
diff -u src/sys/arch/mips/mips/locore_mips3.S:1.93.38.6 src/sys/arch/mips/mips/locore_mips3.S:1.93.38.7
--- src/sys/arch/mips/mips/locore_mips3.S:1.93.38.6	Mon Feb 22 20:13:22 2010
+++ src/sys/arch/mips/mips/locore_mips3.S	Thu Feb 25 05:45:12 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: locore_mips3.S,v 1.93.38.6 2010/02/22 20:13:22 matt Exp $	*/
+/*	$NetBSD: locore_mips3.S,v 1.93.38.7 2010/02/25 05:45:12 matt Exp $	*/
 
 /*
  * Copyright (c) 1997 Jonathan Stone (hereinafter referred to as the author)
@@ -484,3 +484,91 @@
 	li	v0, -1
 END(baderr64)
 #endif
+
+/*
+ * uint64_t mips3_cp0_tlb_entry_hi_probe(void);
+ *
+ * Write 1s to the VPN and ASID fields of Entry_Hi0 to see how many VA bits
+ * and ASID bits are implemented.  Assumes that interrupts are disabled.
+ */
+LEAF(mips3_cp0_tlb_entry_hi_probe)
+	dmfc0	t0, MIPS_COP_0_TLB_HI
+	li	v0, -1		/* all 1s */
+	dsll	v0, v0, 2	/* except the top 2 */
+	dsrl	v0, v0, 2
+	dmtc0	v0, MIPS_COP_0_TLB_HI
+	COP0_SYNC
+	nop
+	nop
+	dmfc0	v0, MIPS_COP_0_TLB_HI
+	dmtc0	t0, MIPS_COP_0_TLB_HI
+	COP0_SYNC
+	nop
+#ifdef __mips_o32
+	nop
+#if BYTE_ORDER == BIG_ENDIAN
+	srl	v1, v0, 0
+	dsra	v0, v0, 32
+#endif
+#if BYTE_ORDER == LITTLE_ENDIAN
+	dsra	v1, v0, 32
+	srl	v0, v0, 0
+#endif
+#endif /* __mips_o32 */
+	j	ra
+	 nop
+END(mips3_cp0_tlb_entry_hi_probe)
+
+/*
+ * uint64_t mips3_cp0_tlb_entry_lo_probe(void);
+ *
+ * Write 1s to the PFN field of Entry_Lo0 to see how many
+ * PA bits are implemented.  Assumes that interrupts are disabled.
+ */
+LEAF(mips3_cp0_tlb_entry_lo_probe)
+	dmfc0	t0, MIPS_COP_0_TLB_LO0
+	li	v0, -64		/* all 1s except low 6 bits */
+	dmtc0	v0, MIPS_COP_0_TLB_LO0
+	COP0_SYNC
+	nop
+	nop
+	dmfc0	v0, MIPS_COP_0_TLB_LO0
+	dmtc0	t0, MIPS_COP_0_TLB_LO0
+	COP0_SYNC
+	nop
+#ifdef __mips_o32
+	nop
+#if BYTE_ORDER == BIG_ENDIAN
+	srl	v1, v0, 0
+	dsra	v0, v0, 32
+#endif
+#if BYTE_ORDER == LITTLE_ENDIAN
+	dsra	v1, v0, 32
+	srl	v0, v0, 0
+#endif
+#endif /* __mips_o32 */
+	j	ra
+	 nop
+END(mips3_cp0_tlb_entry_lo_probe)
+
+/*
+ * uint32_t mips3_cp0_tlb_page_mask_probe(void);
+ *
+ * Write 1s to the RPN field of Entry_Lo0 to see how many PA bits are implemented.
+ * Assumes that interrupts are disabled.
+ */
+LEAF(mips3_cp0_tlb_page_mask_probe)
+	mfc0	t0, MIPS_COP_0_TLB_PG_MASK
+	lui	v0, 0xffff
+	srl	v0, v0, 3
+	mtc0	v0, MIPS_COP_0_TLB_PG_MASK
+	COP0_SYNC
+	nop
+	nop
+	mfc0	v0, MIPS_COP_0_TLB_PG_MASK
+	mtc0	t0, MIPS_COP_0_TLB_PG_MASK
+	COP0_SYNC
+	nop
+	j	ra
+	 nop
+END(mips3_cp0_tlb_page_mask_probe)

Index: src/sys/arch/mips/mips/mipsX_subr.S
diff -u src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.25 src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.26
--- src/sys/arch/mips/mips/mipsX_subr.S:1.26.36.1.2.25	Tue Feb 23 20:33:48 2010
+++ src/sys/arch/mips/mips/mipsX_subr.S	Thu Feb 25 05:45:12 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mipsX_subr.S,v 1.26.36.1.2.25 2010/02/23 20:33:48 matt Exp $	*/
+/*	$NetBSD: mipsX_subr.S,v 1.26.36.1.2.26 2010/02/25 05:45:12 matt Exp $	*/
 
 /*
  * Copyright 2002 Wasabi Systems, Inc.
@@ -181,6 +181,12 @@
 #define	USE_64BIT_CP0_FUNCTIONS
 #endif
 
+#ifdef _LP64
+#define	_SLLV		dsllv
+#else
+#define	_SLLV		sllv
+#endif
+
 #if defined(USE_64BIT_CP0_FUNCTIONS)
 #define	_SLL		dsll
 #define	_SRL		dsrl
@@ -2304,6 +2310,7 @@
 	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
 	COP0_SYNC
 
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# Save the current PID.
 	mfc0	t1, MIPS_COP_0_TLB_WIRED
 	li	v0, MIPS_KSEG0_START		# invalid address
 	INT_L	t2, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
@@ -2355,6 +2362,8 @@
 	bne	t1, t2, 1b
 	 nop
 
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# restore PID.
+	COP0_SYNC
 	mtc0	t3, MIPS_COP_0_TLB_PG_MASK	# restore pgMask
 	COP0_SYNC
 	/* XXX simonb: lose these nops for mips32/64? */
@@ -2366,6 +2375,89 @@
 END(MIPSX(tlb_invalidate_asids))
 
 /*
+ * u_int mipsN_tlb_record_asids(u_long *bitmap, uint32_t asid_mask);
+ *
+ * Record all the ASIDs in use in the TLB and return the number of different
+ * ASIDs present.
+ */
+LEAF_NOPROFILE(MIPSX(tlb_record_asids))
+
+	_MFC0	a3, MIPS_COP_0_TLB_HI		# Save the current PID.
+	mfc0	ta0, MIPS_COP_0_TLB_WIRED
+	INT_L	ta1, _C_LABEL(mips_options) + MO_NUM_TLB_ENTRIES
+	move	ta2, zero
+	li	ta3, 1
+	move	v0, zero
+
+	mfc0	v1, MIPS_COP_0_STATUS		# save status register
+#ifdef _LP64
+	and	t0, v1, MIPS_SR_INT_IE
+	xor	t0, v1
+	mtc0	t0, MIPS_COP_0_STATUS		# disable interrupts
+#else
+	mtc0	zero, MIPS_COP_0_STATUS		# disable interrupts
+#endif
+	COP0_SYNC
+
+	# do {} while (ta0 < ta1)
+1:
+	mtc0	ta0, MIPS_COP_0_TLB_INDEX	# set index
+	COP0_SYNC
+	nop
+	nop
+	/* XXX simonb: lose this nop for mips32/64? */
+	nop
+	tlbr					# obtain an entry
+	COP0_SYNC
+	/* XXX simonb: lose these nops for mips32/64? */
+	nop
+	nop
+	nop
+	_MFC0	t0, MIPS_COP_0_TLB_LO1
+	and	t0, MIPS3_PG_G			# check to see it has G bit
+	bnez	t0, 4f				# yep, skip this one.
+	 nop
+	_MFC0	t0, MIPS_COP_0_TLB_HI		# get VA and ASID
+	and	t0, a1				# focus on ASID
+
+	srl	a2, t0, 3 + LONG_SCALESHIFT	# drop low 5 or 6 bits
+	sll	a2, LONG_SCALESHIFT		# make an index for the bitmap
+	_SLLV	t0, ta3, t0			# t0 is mask (ta3 == 1)
+
+	PTR_ADDU a2, a0				# index into the bitmap 
+	beq	a2, ta2, 3f			# is the desired cell loaded?
+	 nop					#    yes, don't reload it
+	beqz	ta2, 2f				# have we ever loaded it?
+	 nop					#   nope, so don't save it.
+
+	LONG_S	t2, 0(ta2)			# save the updated value.
+2:
+	move	ta2, a2				# remember the new cell's addr
+	LONG_L	t2, 0(ta2)			# and load it
+3:
+	and	t1, t2, t0			# t1 = t2 & t0
+	sltu	t1, t1, ta3			# t1 = t1 < 1 (aka t1 == 0)
+	addu	v0, t1				# v0 += t1
+	or	t2, t0				# or in the new ASID bits
+4:
+	addu	ta0, 1				# increment TLB entry #
+	bne	ta0, ta1, 1b			# keep lookup if not limit
+	 nop
+
+	beqz	ta2, 5f				# do we have a cell to write?
+	 nop					#   nope.  nothing
+
+	LONG_S	t2, 0(ta2)			# save the updated value.
+5:
+	_MTC0	a3, MIPS_COP_0_TLB_HI		# restore ASID
+	COP0_SYNC
+
+	mtc0	v1, MIPS_COP_0_STATUS		# restore status register
+	j	ra
+	 COP0_SYNC				# XXXX - not executed!!
+END(MIPSX(tlb_record_asids))
+
+/*
  * void mipsN_tlb_invalidate_globals(void);
  *
  * Invalidate the non-wired TLB entries belonging to kernel space while

Index: src/sys/arch/mips/mips/mips_machdep.c
diff -u src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.35 src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.36
--- src/sys/arch/mips/mips/mips_machdep.c:1.205.4.1.2.1.2.35	Tue Feb 23 20:33:48 2010
+++ src/sys/arch/mips/mips/mips_machdep.c	Thu Feb 25 05:45:12 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.35 2010/02/23 20:33:48 matt Exp $	*/
+/*	$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.36 2010/02/25 05:45:12 matt Exp $	*/
 
 /*
  * Copyright 2002 Wasabi Systems, Inc.
@@ -112,7 +112,7 @@
 
 #include <sys/cdefs.h>			/* RCS ID & Copyright macro defns */
 
-__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.35 2010/02/23 20:33:48 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mips_machdep.c,v 1.205.4.1.2.1.2.36 2010/02/25 05:45:12 matt Exp $");
 
 #include "opt_cputype.h"
 #include "opt_compat_netbsd32.h"
@@ -173,9 +173,9 @@
 int	cpu_dump(void);
 
 #if defined(MIPS3_PLUS)
-uint32_t mips_cp0_tlb_page_mask_probe(void);
-uint64_t mips_cp0_tlb_entry_hi_probe(void);
-uint64_t mips_cp0_tlb_entry_lo_probe(void);
+uint32_t mips3_cp0_tlb_page_mask_probe(void);
+uint64_t mips3_cp0_tlb_entry_hi_probe(void);
+uint64_t mips3_cp0_tlb_entry_lo_probe(void);
 
 static void mips3_tlb_probe(void);
 #endif
@@ -530,6 +530,7 @@
 	.ljv_tlb_invalidate_all		= mips1_tlb_invalidate_all,
 	.ljv_tlb_invalidate_asids	= mips1_tlb_invalidate_asids,
 	.ljv_tlb_invalidate_globals	= mips1_tlb_invalidate_globals,
+	.ljv_tlb_record_asids		= mips1_tlb_record_asids,
 	.ljv_tlb_update			= mips1_tlb_update,
 	.ljv_tlb_read_indexed		= mips1_tlb_read_indexed,
 	.ljv_wbflush			= mips1_wbflush,
@@ -578,6 +579,7 @@
 	.ljv_tlb_invalidate_all		= mips3_tlb_invalidate_all,
 	.ljv_tlb_invalidate_asids	= mips3_tlb_invalidate_asids,
 	.ljv_tlb_invalidate_globals	= mips3_tlb_invalidate_globals,
+	.ljv_tlb_record_asids		= mips3_tlb_record_asids,
 	.ljv_tlb_update			= mips3_tlb_update,
 	.ljv_tlb_read_indexed		= mips3_tlb_read_indexed,
 	.ljv_wbflush			= mips3_wbflush,
@@ -640,6 +642,7 @@
 	.ljv_tlb_invalidate_all		= mips5900_tlb_invalidate_all,
 	.ljv_tlb_invalidate_asids	= mips5900_tlb_invalidate_asids,
 	.ljv_tlb_invalidate_globals	= mips5900_tlb_invalidate_globals,
+	.ljv_tlb_record_asids		= mips5900_tlb_record_asids,
 	.ljv_tlb_update			= mips5900_tlb_update,
 	.ljv_tlb_read_indexed		= mips5900_tlb_read_indexed,
 	.ljv_wbflush			= mips5900_wbflush,
@@ -690,6 +693,7 @@
 	.ljv_tlb_invalidate_all		= mips32_tlb_invalidate_all,
 	.ljv_tlb_invalidate_asids	= mips32_tlb_invalidate_asids,
 	.ljv_tlb_invalidate_globals	= mips32_tlb_invalidate_globals,
+	.ljv_tlb_record_asids		= mips32_tlb_record_asids,
 	.ljv_tlb_update			= mips32_tlb_update,
 	.ljv_tlb_read_indexed		= mips32_tlb_read_indexed,
 	.ljv_wbflush			= mips32_wbflush,
@@ -753,6 +757,7 @@
 	.ljv_tlb_invalidate_all		= mips64_tlb_invalidate_all,
 	.ljv_tlb_invalidate_asids	= mips64_tlb_invalidate_asids,
 	.ljv_tlb_invalidate_globals	= mips64_tlb_invalidate_globals,
+	.ljv_tlb_record_asids		= mips64_tlb_record_asids,
 	.ljv_tlb_update			= mips64_tlb_update,
 	.ljv_tlb_read_indexed		= mips64_tlb_read_indexed,
 	.ljv_wbflush			= mips64_wbflush,
@@ -1045,12 +1050,12 @@
 mips3_tlb_probe(void)
 {
 	struct mips_options * const opts = &mips_options;
-	opts->mips3_tlb_pg_mask = mips_cp0_tlb_page_mask_probe();
+	opts->mips3_tlb_pg_mask = mips3_cp0_tlb_page_mask_probe();
 	if (CPUIS64BITS) {
-		opts->mips3_tlb_vpn_mask = mips_cp0_tlb_entry_hi_probe();
+		opts->mips3_tlb_vpn_mask = mips3_cp0_tlb_entry_hi_probe();
 		opts->mips3_tlb_vpn_mask <<= 2;
 		opts->mips3_tlb_vpn_mask >>= 2;
-		opts->mips3_tlb_pfn_mask = mips_cp0_tlb_entry_lo_probe();
+		opts->mips3_tlb_pfn_mask = mips3_cp0_tlb_entry_lo_probe();
 	}
 }
 #endif

Reply via email to