]> git.proxmox.com Git - mirror_edk2.git/blob - MdePkg/Library/BaseLib/Ipf/ReadApplicationRegister.c
818e6ac40408de41cf7c782e62c416e746f70d0e
[mirror_edk2.git] / MdePkg / Library / BaseLib / Ipf / ReadApplicationRegister.c
1 /** @file
2 Implementation of Application Register reading functions on Itanium platform.
3
4 Copyright (c) 2008, Intel Corporation<BR>
5 All rights reserved. This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #include "BaseLibInternals.h"
16
17
18 //
19 // Loop up table for Index and corresponding application register access routines.
20 //
21 GLOBAL_REMOVE_IF_UNREFERENCED REGISTER_ENTRY mApplicationRegisterAccessEntries[] = {
22 {IPF_APPLICATION_REGISTER_K0, AsmReadApplicationRegisterK0},
23 {IPF_APPLICATION_REGISTER_K1, AsmReadApplicationRegisterK1},
24 {IPF_APPLICATION_REGISTER_K2, AsmReadApplicationRegisterK2},
25 {IPF_APPLICATION_REGISTER_K3, AsmReadApplicationRegisterK3},
26 {IPF_APPLICATION_REGISTER_K4, AsmReadApplicationRegisterK4},
27 {IPF_APPLICATION_REGISTER_K5, AsmReadApplicationRegisterK5},
28 {IPF_APPLICATION_REGISTER_K6, AsmReadApplicationRegisterK6},
29 {IPF_APPLICATION_REGISTER_K7, AsmReadApplicationRegisterK7},
30 {IPF_APPLICATION_REGISTER_RSC, AsmReadApplicationRegisterRsc},
31 {IPF_APPLICATION_REGISTER_BSP, AsmReadApplicationRegisterBsp},
32 {IPF_APPLICATION_REGISTER_BSPSTORE, AsmReadApplicationRegisterBspstore},
33 {IPF_APPLICATION_REGISTER_RNAT, AsmReadApplicationRegisterRnat},
34 {IPF_APPLICATION_REGISTER_FCR, AsmReadApplicationRegisterFcr},
35 {IPF_APPLICATION_REGISTER_EFLAG, AsmReadApplicationRegisterEflag},
36 {IPF_APPLICATION_REGISTER_CSD, AsmReadApplicationRegisterCsd},
37 {IPF_APPLICATION_REGISTER_SSD, AsmReadApplicationRegisterSsd},
38 {IPF_APPLICATION_REGISTER_CFLG, AsmReadApplicationRegisterCflg},
39 {IPF_APPLICATION_REGISTER_FSR, AsmReadApplicationRegisterFsr},
40 {IPF_APPLICATION_REGISTER_FIR, AsmReadApplicationRegisterFir},
41 {IPF_APPLICATION_REGISTER_FDR, AsmReadApplicationRegisterFdr},
42 {IPF_APPLICATION_REGISTER_CCV, AsmReadApplicationRegisterCcv},
43 {IPF_APPLICATION_REGISTER_UNAT, AsmReadApplicationRegisterUnat},
44 {IPF_APPLICATION_REGISTER_FPSR, AsmReadApplicationRegisterFpsr},
45 {IPF_APPLICATION_REGISTER_ITC, AsmReadApplicationRegisterItc},
46 {IPF_APPLICATION_REGISTER_PFS, AsmReadApplicationRegisterPfs},
47 {IPF_APPLICATION_REGISTER_LC, AsmReadApplicationRegisterLc},
48 {IPF_APPLICATION_REGISTER_EC, AsmReadApplicationRegisterEc}
49 };
50
51
52 /**
53 Reads a 64-bit application register.
54
55 Reads and returns the application register specified by Index. The valid Index valued are defined
56 above in "Related Definitions".
57 If Index is invalid then 0xFFFFFFFFFFFFFFFF is returned. This function is only available on IPF.
58
59 @param Index The index of the application register to read.
60
61 @return The application register specified by Index.
62
63 **/
64 UINT64
65 EFIAPI
66 AsmReadApplicationRegister (
67 IN UINT64 Index
68 )
69 {
70 UINTN Item;
71
72 for (Item = 0; Item < sizeof (mApplicationRegisterAccessEntries) / sizeof (mApplicationRegisterAccessEntries[0]); Item++) {
73 if (mApplicationRegisterAccessEntries[Item].Index == Index) {
74 return mApplicationRegisterAccessEntries[Item].Function ();
75 }
76 }
77
78 return 0xFFFFFFFFFFFFFFFF;
79 }