Subversion Repositories HelenOS-historic

Rev

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

Rev 534 Rev 540
Line 24... Line 24...
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
 
-
 
29
#include <arch/mm/page.h>
-
 
30
#include <arch/mm/frame.h>
-
 
31
#include <mm/frame.h>
-
 
32
#include <mm/page.h>
29
#include <arch/types.h>
33
#include <arch/types.h>
30
#include <config.h>
34
#include <config.h>
31
#include <func.h>
35
#include <func.h>
32
#include <mm/frame.h>
-
 
33
#include <mm/page.h>
-
 
34
#include <arch/mm/page.h>
-
 
35
#include <arch/interrupt.h>
36
#include <arch/interrupt.h>
36
#include <arch/asm.h>
37
#include <arch/asm.h>
37
#include <synch/spinlock.h>
38
#include <synch/spinlock.h>
38
#include <debug.h>
39
#include <debug.h>
39
#include <memstr.h>
40
#include <memstr.h>
Line 42... Line 43...
42
__address bootstrap_dba;
43
__address bootstrap_dba;
43
 
44
 
44
void page_arch_init(void)
45
void page_arch_init(void)
45
{
46
{
46
    __address dba;
47
    __address dba;
47
    __u32 i;
48
    __address cur;
48
 
49
 
49
    if (config.cpu_active == 1) {
50
    if (config.cpu_active == 1) {
50
        dba = frame_alloc(FRAME_KA | FRAME_PANIC, 0);
51
        dba = frame_alloc(FRAME_KA | FRAME_PANIC, 0);
51
        memsetb(dba, PAGE_SIZE, 0);
52
        memsetb(dba, PAGE_SIZE, 0);
52
 
53
 
53
        bootstrap_dba = dba;
54
        bootstrap_dba = dba;
54
       
55
       
55
        /*
56
        /*
56
         * PA2KA(identity) mapping for all frames.
57
         * PA2KA(identity) mapping for all frames until last_frame.
57
         */
58
         */
58
        for (i = 0; i < config.memory_size/PAGE_SIZE; i++)
59
        for (cur = 0; cur < last_frame; cur += FRAME_SIZE)
59
            page_mapping_insert(PA2KA(i * PAGE_SIZE), i * PAGE_SIZE, PAGE_CACHEABLE, KA2PA(dba));
60
            page_mapping_insert(PA2KA(cur), cur, PAGE_CACHEABLE, KA2PA(dba));
60
 
61
 
61
        trap_register(14, page_fault);
62
        trap_register(14, page_fault);
62
        write_cr3(KA2PA(dba));
63
        write_cr3(KA2PA(dba));
63
    }
64
    }
64
    else {
65
    else {