/kernel/trunk/generic/include/mm/tlb_cmd.h |
---|
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 |
/kernel/trunk/generic/src/console/kconsole.c |
---|
40,6 → 40,8 |
#include <debug.h> |
#include <symtab.h> |
#include <mm/tlb_cmd.h> |
#define MAX_CMDLINE 256 |
/** Simple kernel console. |
269,6 → 271,11 |
link_initialize(&halt_info.link); |
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); |
} |
/kernel/trunk/generic/src/mm/tlb.c |
---|
35,6 → 35,7 |
#include <arch/interrupt.h> |
#include <config.h> |
#include <arch.h> |
#include <panic.h> |
#ifdef CONFIG_SMP |
static spinlock_t tlblock; |
/kernel/trunk/generic/src/mm/tlb_cmd.c |
---|
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; |
} |
/kernel/trunk/Makefile |
---|
114,6 → 114,7 |
generic/src/mm/frame.c \ |
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 \ |
generic/src/lib/list.c \ |
/kernel/trunk/arch/mips32/include/mm/tlb.h |
---|
32,7 → 32,7 |
#include <arch/exception.h> |
#include <typedefs.h> |
#define TLB_SIZE 48 |
#define TLB_ENTRY_COUNT 48 |
#define TLB_WIRED 1 |
#define TLB_KSTACK_WIRED_INDEX 0 |
/kernel/trunk/arch/mips32/src/mm/tlb.c |
---|
65,7 → 65,7 |
/* |
* Invalidate all entries. |
*/ |
for (i = 0; i < TLB_SIZE; i++) { |
for (i = 0; i < TLB_ENTRY_COUNT; i++) { |
cp0_index_write(i); |
tlbwi(); |
} |
322,7 → 322,7 |
ipl = interrupts_disable(); |
for (i = 0; i < TLB_SIZE; i++) { |
for (i = 0; i < TLB_ENTRY_COUNT; i++) { |
cp0_index_write(i); |
tlbr(); |
399,6 → 399,26 |
hi->asid = asid; |
} |
/** 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); |
} |
} |