Subversion Repositories HelenOS

Rev

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

Rev 2141 Rev 2144
Line 59... Line 59...
59
}
59
}
60
 
60
 
61
int as_constructor_arch(as_t *as, int flags)
61
int as_constructor_arch(as_t *as, int flags)
62
{
62
{
63
#ifdef CONFIG_TSB
63
#ifdef CONFIG_TSB
-
 
64
    /*
-
 
65
     * The order must be calculated with respect to the emulated
-
 
66
     * 16K page size.
-
 
67
     */
64
    int order = fnzb32(((ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
68
    int order = fnzb32(((ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
65
        sizeof(tsb_entry_t)) >> MMU_FRAME_WIDTH);
69
        sizeof(tsb_entry_t)) >> FRAME_WIDTH);
66
    uintptr_t tsb = (uintptr_t) frame_alloc(order, flags | FRAME_KA);
70
    uintptr_t tsb = (uintptr_t) frame_alloc(order, flags | FRAME_KA);
67
 
71
 
68
    if (!tsb)
72
    if (!tsb)
69
        return -1;
73
        return -1;
70
 
74
 
71
    as->arch.itsb = (tsb_entry_t *) tsb;
75
    as->arch.itsb = (tsb_entry_t *) tsb;
72
    as->arch.dtsb = (tsb_entry_t *) (tsb + ITSB_ENTRY_COUNT *
76
    as->arch.dtsb = (tsb_entry_t *) (tsb + ITSB_ENTRY_COUNT *
73
        sizeof(tsb_entry_t));
77
        sizeof(tsb_entry_t));
74
    memsetb((uintptr_t) as->arch.itsb,
78
    memsetb((uintptr_t) as->arch.itsb,
75
        (ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) * sizeof(tsb_entry_t), 0);
79
        (ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) * sizeof(tsb_entry_t), 0);
76
#endif
80
#endif
77
    return 0;
81
    return 0;
78
}
82
}
79
 
83
 
80
int as_destructor_arch(as_t *as)
84
int as_destructor_arch(as_t *as)
81
{
85
{
82
#ifdef CONFIG_TSB
86
#ifdef CONFIG_TSB
-
 
87
    /*
-
 
88
     * The count must be calculated with respect to the emualted 16K page
-
 
89
     * size.
-
 
90
     */
83
    count_t cnt = ((ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
91
    count_t cnt = ((ITSB_ENTRY_COUNT + DTSB_ENTRY_COUNT) *
84
        sizeof(tsb_entry_t)) >> MMU_FRAME_WIDTH;
92
        sizeof(tsb_entry_t)) >> FRAME_WIDTH;
85
    frame_free(KA2PA((uintptr_t) as->arch.itsb));
93
    frame_free(KA2PA((uintptr_t) as->arch.itsb));
86
    return cnt;
94
    return cnt;
87
#else
95
#else
88
    return 0;
96
    return 0;
89
#endif
97
#endif