Clubcos  0.0.0
Clubcos - Clubc Operating System
 모두 데이타 구조 파일들 함수 변수 타입정의 열거형 타입 열거형 멤버 매크로 페이지들
port_impl.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 
31 #ifndef PORT_IMPL_H_
32 #define PORT_IMPL_H_
33 
34 static inline uint8_t ckPortInByte(uint16_t port)
35 {
36  uint8_t ret;
37  __asm__ __volatile__ ( "in %1, %0" : "=a"(ret) : "d"(port) );
38  return ret;
39 }
40 
41 static inline void ckPortOutByte(uint16_t port, uint8_t data)
42 {
43  __asm__ __volatile__ ( "out %0, %1" : : "a"(data), "d"(port) );
44 }
45 
46 static inline void ckAsmGetTimeStamp(uint32_t *high, uint32_t *low)
47 {
48  uint32_t h, l;
49  __asm__ __volatile__ ( "rdtsc" : "=d"(h), "=a"(l) );
50  *high = h; *low = l;
51 }
52 
53 static inline uint32_t ckAsmGetEFlag(void)
54 {
55  uint32_t ret;
56  __asm__ __volatile__ ( "pushfl \n pop %0" : "=g"(ret) );
57  return ret;
58 }
59 
60 static inline void ckAsmSetEFlag(uint32_t eflag)
61 {
62  __asm__ __volatile__ ( "push %0 \n popfl" : : "g"(eflag) : "cc" );
63 }
64 
65 static inline void ckAsmCli(void)
66 {
67  __asm__ __volatile__ ( "cli" );
68 }
69 
70 static inline void ckAsmSti(void)
71 {
72  __asm__ __volatile__ ( "sti" );
73 }
74 
75 static inline void ckAsmHlt(void)
76 {
77  __asm__ __volatile__ ( "hlt" );
78 }
79 
80 #endif /* PORT_IMPL_H_ */
uint8_t data[512]
Definition: task.h:819