Clubcos  0.0.0
Clubcos - Clubc Operating System
 모두 데이타 구조 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 매크로 페이지들
control_register.h
이 파일의 문서화 페이지로 가기
1 // Copyright (c) 2014, 임경현 (dlarudgus20)
2 // All rights reserved.
3 //
4 // Redistribution and use in source and binary forms, with or without
5 // modification, are permitted provided that the following conditions are met:
6 //
7 // * Redistributions of source code must retain the above copyright notice, this
8 // list of conditions and the following disclaimer.
9 //
10 // * Redistributions in binary form must reproduce the above copyright notice,
11 // this list of conditions and the following disclaimer in the documentation
12 // and/or other materials provided with the distribution.
13 //
14 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15 // AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17 // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
18 // FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 // DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20 // SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
21 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
22 // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 
32 #ifndef CONTROL_REGISTER_H_
33 #define CONTROL_REGISTER_H_
34 
37 {
41  CR0_WRITE_BACK = 1 << 29,
42  CR0_DISABLE_CACHE = 1 << 30,
43  CR0_PAGING = 1 << 31,
44 };
45 
48 {
49  CR4_OSFXSR = 1 << 9,
50  CR4_OSXMMEXCPT = 1 << 10,
51 };
52 
53 // Special Functions
54 
59 static inline void ckAsmClearTS(void)
60 {
61  __asm__ __volatile__ ( "clts" );
62 }
63 
64 // Get/Set
65 
67 static inline uint32_t ckAsmGetCr0(void)
68 {
69  uint32_t ret;
70  __asm__ __volatile__ ( "mov %%cr0, %0" : "=r"(ret) );
71  return ret;
72 }
74 static inline void ckAsmSetCr0(uint32_t value)
75 {
76  __asm__ __volatile__ ( "mov %0, %%cr0" : : "r"(value) );
77 }
78 
80 static inline uint32_t ckAsmGetCr3(void)
81 {
82  uint32_t ret;
83  __asm__ __volatile__ ( "mov %%cr3, %0 " : "=r"(ret) );
84  return ret;
85 }
87 static inline void ckAsmSetCr3(uint32_t value)
88 {
89  // 페이징이 바뀌기 때문에 memory를 clobber함
90  __asm__ __volatile__ ( "mov %0, %%cr3" : : "r"(value) : "memory" );
91 }
92 
94 static inline uint32_t ckAsmGetCr4(void)
95 {
96  uint32_t ret;
97  __asm__ __volatile__ ( "mov %%cr4, %0 " : "=r"(ret) );
98  return ret;
99 }
101 static inline void ckAsmSetCr4(uint32_t value)
102 {
103  __asm__ __volatile__ ( "mov %0, %%cr4" : : "r"(value) );
104 }
105 
106 #endif /* CONTROL_REGISTER_H_ */
Definition: control_register.h:50
Definition: control_register.h:38
Definition: control_register.h:49
Definition: control_register.h:39
Definition: control_register.h:42
tagCr3Flags
cr4 레지스터의 플래그입니다.
Definition: control_register.h:47
tagCr0Flags
cr0 레지스터의 플래그입니다.
Definition: control_register.h:36
Definition: control_register.h:43
Definition: control_register.h:40
Definition: control_register.h:41