]> git.sur5r.net Git - u-boot/blob - arch/x86/include/asm/control_regs.h
SPDX: Convert all of our single license tags to Linux Kernel style
[u-boot] / arch / x86 / include / asm / control_regs.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Copyright (c) 2012 The Chromium OS Authors.
4  *
5  * (C) Copyright 2008-2011
6  * Graeme Russ, <graeme.russ@gmail.com>
7  *
8  * (C) Copyright 2002
9  * Daniel Engström, Omicron Ceti AB, <daniel@omicron.se>
10  *
11  * Portions of this file are derived from the Linux kernel source
12  *  Copyright (C) 1991, 1992  Linus Torvalds
13  */
14
15 #ifndef __X86_CONTROL_REGS_H
16 #define __X86_CONTROL_REGS_H
17
18 /*
19  * The memory clobber prevents the GCC from reordering the read/write order
20  * of CR0
21 */
22 static inline unsigned long read_cr0(void)
23 {
24         unsigned long val;
25
26         asm volatile ("movl %%cr0, %0" : "=r" (val) : : "memory");
27         return val;
28 }
29
30 static inline void write_cr0(unsigned long val)
31 {
32         asm volatile ("movl %0, %%cr0" : : "r" (val) : "memory");
33 }
34
35 static inline unsigned long read_cr2(void)
36 {
37         unsigned long val;
38
39         asm volatile("mov %%cr2,%0\n\t" : "=r" (val) : : "memory");
40         return val;
41 }
42
43 static inline unsigned long read_cr3(void)
44 {
45         unsigned long val;
46
47         asm volatile("mov %%cr3,%0\n\t" : "=r" (val) : : "memory");
48         return val;
49 }
50
51 static inline unsigned long read_cr4(void)
52 {
53         unsigned long val;
54
55         asm volatile("mov %%cr4,%0\n\t" : "=r" (val) : : "memory");
56         return val;
57 }
58
59 static inline unsigned long get_debugreg(int regno)
60 {
61         unsigned long val = 0;  /* Damn you, gcc! */
62
63         switch (regno) {
64         case 0:
65                 asm("mov %%db0, %0" : "=r" (val));
66                 break;
67         case 1:
68                 asm("mov %%db1, %0" : "=r" (val));
69                 break;
70         case 2:
71                 asm("mov %%db2, %0" : "=r" (val));
72                 break;
73         case 3:
74                 asm("mov %%db3, %0" : "=r" (val));
75                 break;
76         case 6:
77                 asm("mov %%db6, %0" : "=r" (val));
78                 break;
79         case 7:
80                 asm("mov %%db7, %0" : "=r" (val));
81                 break;
82         default:
83                 val = 0;
84         }
85         return val;
86 }
87
88 #endif