Subversion Repositories HelenOS

Rev

Rev 1787 | Rev 2028 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1787 Rev 2021
Line 23... Line 23...
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
23
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
27
 */
-
 
28
 
28
#include <print.h>
29
#include <print.h>
29
#include <test.h>
30
#include <test.h>
30
#include <mm/page.h>
31
#include <mm/page.h>
31
#include <mm/frame.h>
32
#include <mm/frame.h>
32
#include <mm/as.h>
33
#include <mm/as.h>
33
#include <arch/mm/page.h>
34
#include <arch/mm/page.h>
34
#include <arch/mm/tlb.h>
35
#include <arch/mm/tlb.h>
35
#include <arch/types.h>
36
#include <arch/types.h>
36
#include <debug.h>
37
#include <debug.h>
37
 
38
 
-
 
39
#ifdef ia64
38
 
40
 
39
extern void tlb_invalidate_all(void);
41
extern void tlb_invalidate_all(void);
40
extern void tlb_invalidate_pages(asid_t asid, uintptr_t va, count_t cnt);
42
extern void tlb_invalidate_pages(asid_t asid, uintptr_t va, count_t cnt);
-
 
43
 
41
void test(void)
44
void test(void)
42
{
45
{
43
    tlb_entry_t entryi;
46
    tlb_entry_t entryi;
44
    tlb_entry_t entryd;
47
    tlb_entry_t entryd;
45
 
48
 
46
    int i;
49
    int i;
47
                                                                                                                                                                                   
50
                                                                                                                                                                                   
48
  entryd.word[0] = 0;
51
    entryd.word[0] = 0;
49
  entryd.word[1] = 0;
52
    entryd.word[1] = 0;
50
                                               
-
 
51
  entryd.p = true;                 /* present */
-
 
52
  entryd.ma = MA_WRITEBACK;
-
 
53
  entryd.a = true;                 /* already accessed */
-
 
54
  entryd.d = true;                 /* already dirty */
-
 
55
  entryd.pl = PL_KERNEL;
-
 
56
  entryd.ar = AR_READ | AR_WRITE;
-
 
57
  entryd.ppn = 0;
-
 
58
  entryd.ps = PAGE_WIDTH;
-
 
59
 
-
 
60
 
-
 
61
  entryi.word[0] = 0;
-
 
62
  entryi.word[1] = 0;
-
 
63
                                               
53
                                               
64
  entryi.p = true;                 /* present */
54
    entryd.p = true;                 /* present */
65
  entryi.ma = MA_WRITEBACK;
55
    entryd.ma = MA_WRITEBACK;
66
  entryi.a = true;                 /* already accessed */
56
    entryd.a = true;                 /* already accessed */
67
  entryi.d = true;                 /* already dirty */
57
    entryd.d = true;                 /* already dirty */
68
  entryi.pl = PL_KERNEL;
58
    entryd.pl = PL_KERNEL;
69
  entryi.ar = AR_READ | AR_EXECUTE;
59
    entryd.ar = AR_READ | AR_WRITE;
70
  entryi.ppn = 0;
60
    entryd.ppn = 0;
71
  entryi.ps = PAGE_WIDTH;
61
    entryd.ps = PAGE_WIDTH;
72
 
-
 
73
   
62
   
74
    for(i=0;i<100;i++)
63
    entryi.word[0] = 0;
-
 
64
    entryi.word[1] = 0;
-
 
65
   
-
 
66
    entryi.p = true;                 /* present */
-
 
67
    entryi.ma = MA_WRITEBACK;
-
 
68
    entryi.a = true;                 /* already accessed */
-
 
69
    entryi.d = true;                 /* already dirty */
-
 
70
    entryi.pl = PL_KERNEL;
-
 
71
    entryi.ar = AR_READ | AR_EXECUTE;
-
 
72
    entryi.ppn = 0;
-
 
73
    entryi.ps = PAGE_WIDTH;
75
    {
74
   
-
 
75
    for (i = 0; i < 100; i++) {
76
        itc_mapping_insert(0+i*(1<<PAGE_WIDTH),8,entryi);
76
        itc_mapping_insert(0 + i * (1 << PAGE_WIDTH), 8, entryi);
77
        dtc_mapping_insert(0+i*(1<<PAGE_WIDTH),9,entryd);
77
        dtc_mapping_insert(0 + i * (1 << PAGE_WIDTH), 9, entryd);
78
    }  
78
    }
79
   
79
   
80
 
-
 
81
    tlb_invalidate_pages(8,0x0c000,14);
80
    tlb_invalidate_pages(8,0x0c000,14);
82
   
81
   
83
    /*tlb_invalidate_all();*/
82
    /*tlb_invalidate_all();*/
84
   
-
 
85
}
83
}
-
 
84
 
-
 
85
#else
-
 
86
 
-
 
87
void test_purge1(void)
-
 
88
{
-
 
89
    printf("This test is availaible only on IA64 platform.\n");
-
 
90
}
-
 
91
 
-
 
92
#endif