]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseLib/Ipf/AccessMsrDb.s
Update the copyright notice format
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ipf / AccessMsrDb.s
1 /// @file
2 /// IPF specific Machine Specific Registers accessing functions.
3 /// This implementation uses raw data to prepresent the assembly instruction of
4 /// mov msr[]= and mov =msr[].
5 ///
6 /// Copyright (c) 2008, Intel Corporation
7 /// All rights reserved. This program and the accompanying materials
8 /// are licensed and made available under the terms and conditions of the BSD License
9 /// which accompanies this distribution. The full text of the license may be found at
10 /// http://opensource.org/licenses/bsd-license.php
11 ///
12 /// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 /// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14 ///
15 ///
16 ///
17
18
19 //---------------------------------------------------------------------------------
20 //++
21 // AsmReadMsr
22 //
23 // Reads the current value of a Machine Specific Register (MSR).
24 //
25 // Reads and returns the current value of the Machine Specific Register specified by Index. No
26 // parameter checking is performed on Index, and if the Index value is beyond the implemented MSR
27 // register range, a Reserved Register/Field fault may occur. The caller must either guarantee that
28 // Index is valid, or the caller must set up fault handlers to catch the faults. This function is
29 // only available on IPF.
30 //
31 // Arguments :
32 //
33 // On Entry : The 8-bit Machine Specific Register index to read.
34 //
35 // Return Value: The current value of the Machine Specific Register specified by Index.
36 //
37 //--
38 //----------------------------------------------------------------------------------
39 .text
40 .type AsmReadMsr, @function
41 .proc AsmReadMsr
42 .regstk 1, 0, 0, 0
43
44 AsmReadMsr::
45 //
46 // The follow 16 bytes stand for the bundle of
47 // mov r8=msr[in0];;
48 // since MSFT tool chain does not support mov =msr[] instruction
49 //
50 data1 0x0D
51 data1 0x40
52 data1 0x00
53 data1 0x40
54 data1 0x16
55 data1 0x04
56 data1 0x00
57 data1 0x00
58 data1 0x00
59 data1 0x02
60 data1 0x00
61 data1 0x00
62 data1 0x00
63 data1 0x00
64 data1 0x04
65 data1 0x00
66 br.ret.sptk b0;;
67 .endp AsmReadMsr
68
69 //---------------------------------------------------------------------------------
70 //++
71 // AsmWriteMsr
72 //
73 // Writes the current value of a Machine Specific Register (MSR).
74 //
75 // Writes Value to the Machine Specific Register specified by Index. Value is returned. No
76 // parameter checking is performed on Index, and if the Index value is beyond the implemented MSR
77 // register range, a Reserved Register/Field fault may occur. The caller must either guarantee that
78 // Index is valid, or the caller must set up fault handlers to catch the faults. This function is
79 // only available on IPF.
80 //
81 // Arguments :
82 //
83 // On Entry : The 8-bit Machine Specific Register index to write.
84 // The 64-bit value to write to the Machine Specific Register.
85 //
86 // Return Value: The 64-bit value to write to the Machine Specific Register.
87 //
88 //--
89 //----------------------------------------------------------------------------------
90 .text
91 .type AsmWriteMsr, @function
92 .proc AsmWriteMsr
93 .regstk 2, 0, 0, 0
94
95 AsmWriteMsr::
96 //
97 // The follow 16 bytes stand for the bundle of
98 // mov msr[in0] = in1
99 // mov r8 = in1;;
100 // since MSFT tool chain does not support mov msr[]= instruction
101 //
102 data1 0x0D
103 data1 0x00
104 data1 0x84
105 data1 0x40
106 data1 0x06
107 data1 0x04
108 data1 0x00
109 data1 0x00
110 data1 0x00
111 data1 0x02
112 data1 0x00
113 data1 0x00
114 data1 0x01
115 data1 0x08
116 data1 0x01
117 data1 0x84
118 srlz.d;;
119 br.ret.sptk b0;;
120 .endp AsmWriteMsr
121