UbixOS
2.0
setpageattributes.c
Go to the documentation of this file.
1
/*-
2
* Copyright (c) 2002-2018 The UbixOS Project.
3
* All rights reserved.
4
*
5
* This was developed by Christopher W. Olsen for the UbixOS Project.
6
*
7
* Redistribution and use in source and binary forms, with or without modification, are permitted
8
* provided that the following conditions are met:
9
*
10
* 1) Redistributions of source code must retain the above copyright notice, this list of
11
* conditions, the following disclaimer and the list of authors.
12
* 2) Redistributions in binary form must reproduce the above copyright notice, this list of
13
* conditions, the following disclaimer and the list of authors in the documentation and/or
14
* other materials provided with the distribution.
15
* 3) Neither the name of the UbixOS Project nor the names of its contributors may be used to
16
* endorse or promote products derived from this software without specific prior written
17
* permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
20
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
21
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
22
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
24
* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
26
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
*/
28
29
#include <
vmm/vmm.h
>
30
#include <
ubixos/kpanic.h
>
31
32
/************************************************************************
33
34
Function: void vmm_setPageAttributes(uInt32 pageAddr,int attributes;
35
Description: This Function Will Set The Page Attributes Such As
36
A Read Only Page, Stack Page, COW Page, ETC.
37
Notes:
38
39
************************************************************************/
40
int
vmm_setPageAttributes
(
uint32_t
memAddr,
uint16_t
attributes) {
41
uint16_t
directoryIndex = 0x0, tableIndex = 0x0;
42
uint32_t
*pageTable = 0x0;
43
44
/* Calculate The Page Directory Index */
45
directoryIndex = (memAddr >> 22);
46
47
/* Calculate The Page Table Index */
48
tableIndex = ((memAddr >> 12) & 0x3FF);
49
50
/* Set Table Pointer */
51
if
((pageTable = (
uint32_t
*) (
PT_BASE_ADDR
+ (0x1000 * directoryIndex))) == 0x0)
52
kpanic
(
"Error: pageTable == NULL, File: %s, Line: %i\n"
, __FILE__, __LINE__);
53
54
/* Set Attribute If Page Is Mapped */
55
if
(pageTable[tableIndex] != 0x0)
56
pageTable[tableIndex] = ((pageTable[tableIndex] & 0xFFFFF000) | attributes);
57
58
/* Reload The Page Table; */
59
asm
volatile
(
60
"push %eax \n"
61
"movl %cr3,%eax\n"
62
"movl %eax,%cr3\n"
63
"pop %eax \n"
64
);
65
/* Return */
66
return
(0x0);
67
}
vmm.h
kpanic
void kpanic(const char *fmt,...)
print panic message and halt system
Definition:
kpanic.c:41
uint16_t
__uint16_t uint16_t
Definition:
types.h:45
kpanic.h
uint32_t
__uint32_t uint32_t
Definition:
types.h:46
vmm_setPageAttributes
int vmm_setPageAttributes(uint32_t memAddr, uint16_t attributes)
Definition:
setpageattributes.c:39
PT_BASE_ADDR
#define PT_BASE_ADDR
Definition:
paging.h:46
vmm
setpageattributes.c
Generated by
1.8.16