Index: Makefile
===================================================================
--- Makefile	(revision f5acb62dfec5e376412ee3624e4d5456302569dd)
+++ Makefile	(revision 02055415de88e14263875749327fac1df82289b1)
@@ -115,4 +115,5 @@
 	generic/src/mm/page.c \
 	generic/src/mm/tlb.c \
+	generic/src/mm/tlb_cmd.c \
 	generic/src/mm/vm.c \
 	generic/src/lib/func.c \
Index: arch/mips32/include/mm/tlb.h
===================================================================
--- arch/mips32/include/mm/tlb.h	(revision f5acb62dfec5e376412ee3624e4d5456302569dd)
+++ arch/mips32/include/mm/tlb.h	(revision 02055415de88e14263875749327fac1df82289b1)
@@ -33,5 +33,5 @@
 #include <typedefs.h>
 
-#define TLB_SIZE	48
+#define TLB_ENTRY_COUNT		48
 
 #define TLB_WIRED		1
Index: arch/mips32/src/mm/tlb.c
===================================================================
--- arch/mips32/src/mm/tlb.c	(revision f5acb62dfec5e376412ee3624e4d5456302569dd)
+++ arch/mips32/src/mm/tlb.c	(revision 02055415de88e14263875749327fac1df82289b1)
@@ -66,5 +66,5 @@
 	 * Invalidate all entries.
 	 */
-	for (i = 0; i < TLB_SIZE; i++) {
+	for (i = 0; i < TLB_ENTRY_COUNT; i++) {
 		cp0_index_write(i);
 		tlbwi();
@@ -323,5 +323,5 @@
 	ipl = interrupts_disable();
 	
-	for (i = 0; i < TLB_SIZE; i++) {
+	for (i = 0; i < TLB_ENTRY_COUNT; i++) {
 		cp0_index_write(i);
 		tlbr();
@@ -400,5 +400,25 @@
 }
 
+/** Print contents of TLB. */
 void tlb_print(void)
 {
-}
+	entry_lo_t lo0, lo1;
+	entry_hi_t hi;
+	int i;
+
+	printf("TLB:\n");
+	for (i = 0; i < TLB_ENTRY_COUNT; i++) {
+		cp0_index_write(i);
+
+		tlbr();
+		
+		hi.value = cp0_entry_hi_read();
+		lo0.value = cp0_entry_lo0_read();
+		lo1.value = cp0_entry_lo1_read();
+		
+		printf("%d: asid=%d, vpn2=%d\tg[0]=%d, v[0]=%d, d[0]=%d, c[0]=%B, pfn[0]=%d\n"
+		       "\t\t\tg[1]=%d, v[1]=%d, d[1]=%d, c[1]=%B, pfn[1]=%d\n",
+		       i, hi.asid, hi.vpn2, lo0.g, lo0.v, lo0.d, lo0.c, lo0.pfn,
+		       lo1.g, lo1.v, lo1.d, lo1.c, lo1.pfn);
+	}
+}
Index: generic/include/mm/tlb_cmd.h
===================================================================
--- generic/include/mm/tlb_cmd.h	(revision 02055415de88e14263875749327fac1df82289b1)
+++ generic/include/mm/tlb_cmd.h	(revision 02055415de88e14263875749327fac1df82289b1)
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __TLB_CMD_H__
+#define __TLB_CMD_H__
+
+#include <console/kconsole.h>
+
+extern cmd_info_t desc_ptlb;
+
+#endif
Index: generic/src/console/kconsole.c
===================================================================
--- generic/src/console/kconsole.c	(revision f5acb62dfec5e376412ee3624e4d5456302569dd)
+++ generic/src/console/kconsole.c	(revision 02055415de88e14263875749327fac1df82289b1)
@@ -40,4 +40,6 @@
 #include <debug.h>
 #include <symtab.h>
+
+#include <mm/tlb_cmd.h>
 
 #define MAX_CMDLINE	256
@@ -270,4 +272,9 @@
 	if (!cmd_register(&halt_info))
 		panic("could not register command %s\n", halt_info.name);
+
+	spinlock_initialize(&desc_ptlb.lock, "kconsole_ptlb");
+	link_initialize(&desc_ptlb.link);
+	if (!cmd_register(&desc_ptlb))
+		panic("could not register command %s\n", desc_ptlb.name);
 }
 
Index: generic/src/mm/tlb.c
===================================================================
--- generic/src/mm/tlb.c	(revision f5acb62dfec5e376412ee3624e4d5456302569dd)
+++ generic/src/mm/tlb.c	(revision 02055415de88e14263875749327fac1df82289b1)
@@ -36,4 +36,5 @@
 #include <config.h>
 #include <arch.h>
+#include <panic.h>
 
 #ifdef CONFIG_SMP
Index: generic/src/mm/tlb_cmd.c
===================================================================
--- generic/src/mm/tlb_cmd.c	(revision 02055415de88e14263875749327fac1df82289b1)
+++ generic/src/mm/tlb_cmd.c	(revision 02055415de88e14263875749327fac1df82289b1)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2005 Jakub Jermar
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <console/kconsole.h>
+#include <mm/tlb.h>
+#include <arch/mm/tlb.h>
+
+static int cmd_ptlb(cmd_arg_t *argv);
+
+cmd_info_t desc_ptlb = {
+	.name = "ptlb",
+	.description = "Print TLB contents.",
+	.help = NULL,
+	.func = cmd_ptlb,
+	.argc = 0,
+	.argv = NULL
+};
+
+/** Command for printing TLB contents.
+ *
+ * @param argv Not used.
+ *
+ * @return Always returns 1.
+ */
+int cmd_ptlb(cmd_arg_t *argv)
+{
+	tlb_print();
+	return 1;
+}
