@@ -68,38 +68,6 @@ static uint32_t get_first_frame(void)
68
68
return -1 ;
69
69
}
70
70
71
- static void alloc_frame (page_t * page , bool_t kernel , bool_t writable )
72
- {
73
- if (page -> frame != 0 )
74
- {
75
- return ; // frame already allocated
76
- }
77
-
78
- uint32_t index = get_first_frame ();
79
- if (index == (uint32_t )-1 )
80
- {
81
- PANIC ("out of frames" );
82
- }
83
-
84
- set_frame_state (index * PAGE_SIZE , true);
85
- page -> present = true;
86
- page -> rw = writable ? true : false;
87
- page -> user = kernel ? false : true;
88
- page -> frame = index ;
89
- }
90
-
91
- UNUSED_FUNC static void free_frame (page_t * page )
92
- {
93
- uint32_t frame ;
94
- if (!(frame = page -> frame ))
95
- {
96
- return ; // no allocated frame
97
- }
98
-
99
- set_frame_state (frame , false);
100
- page -> frame = NULL ;
101
- }
102
-
103
71
static void switch_directory (page_directory_t * new )
104
72
{
105
73
current_directory = new ;
@@ -110,7 +78,7 @@ static void switch_directory(page_directory_t *new)
110
78
asm volatile ("mov %0, %%cr0" :: "r" (cr0 ));
111
79
}
112
80
113
- static page_t * get_page (page_directory_t * dir , uint32_t address , bool_t create )
81
+ page_t * paging_get_page (page_directory_t * dir , uint32_t address , bool_t create )
114
82
{
115
83
// Turn address into an index
116
84
uint32_t index = address / PAGE_SIZE ;
@@ -138,6 +106,38 @@ static page_t *get_page(page_directory_t *dir, uint32_t address, bool_t create)
138
106
}
139
107
}
140
108
109
+ void paging_alloc_frame (page_t * page , bool_t kernel , bool_t writable )
110
+ {
111
+ if (page -> frame != 0 )
112
+ {
113
+ return ; // frame already allocated
114
+ }
115
+
116
+ uint32_t index = get_first_frame ();
117
+ if (index == (uint32_t )-1 )
118
+ {
119
+ PANIC ("out of frames" );
120
+ }
121
+
122
+ set_frame_state (index * PAGE_SIZE , true);
123
+ page -> present = true;
124
+ page -> rw = writable ? true : false;
125
+ page -> user = kernel ? false : true;
126
+ page -> frame = index ;
127
+ }
128
+
129
+ UNUSED_FUNC void paging_free_frame (page_t * page )
130
+ {
131
+ uint32_t frame ;
132
+ if (!(frame = page -> frame ))
133
+ {
134
+ return ; // no allocated frame
135
+ }
136
+
137
+ set_frame_state (frame , false);
138
+ page -> frame = NULL ;
139
+ }
140
+
141
141
static void handle_fault (registers_t registers )
142
142
{
143
143
// Faulting address is stored in the CR2 register
@@ -183,8 +183,8 @@ void paging_init(void)
183
183
// as if paging wasn't enabled.
184
184
for (uint32_t i = 0 ; i < placement_address ; i += PAGE_SIZE )
185
185
{
186
- page_t * page = get_page (kernel_directory , i , true);
187
- alloc_frame (page , false, false);
186
+ page_t * page = paging_get_page (kernel_directory , i , true);
187
+ paging_alloc_frame (page , false, false);
188
188
}
189
189
190
190
// Register page fault handler
0 commit comments