FreeNOS
ARMControl.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2015 Niek Linnenbank
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "ARMCore.h"
19#include "ARMControl.h"
20
24
28
30{
31 switch (reg)
32 {
33 case MainID: return mrc(p15, 0, 0, c0, c0);
34 case CoreID: return mrc(p15, 0, 5, c0, c0);
35 case SystemControl: return mrc(p15, 0, 0, c1, c0);
36 case AuxControl: return mrc(p15, 0, 1, c1, c0);
37 case TranslationTable0: return mrc(p15, 0, 0, c2, c0);
38 case TranslationTable1: return mrc(p15, 0, 1, c2, c0);
39 case TranslationTableCtrl: return mrc(p15, 0, 2, c2, c0);
40 case DomainControl: return mrc(p15, 0, 0, c3, c0);
41 case UserProcID: return mrc(p15, 0, 4, c13, c0);
42 case InstructionFaultAddress: return mrc(p15, 0, 2, c6, c0);
43 case InstructionFaultStatus: return mrc(p15, 0, 1, c5, c0);
44 case DataFaultAddress: return mrc(p15, 0, 0, c6, c0);
45 case DataFaultStatus: return mrc(p15, 0, 0, c5, c0);
46 case SystemFrequency: return mrc(p15, 0, 0, c14, c0);
47 default: break;
48 }
49 return 0;
50}
51
53{
54 switch (reg)
55 {
56 case SystemControl: mcr(p15, 0, 0, c1, c0, value); break;
57 case AuxControl: mcr(p15, 0, 1, c1, c0, value); break;
58 case TranslationTable0: mcr(p15, 0, 0, c2, c0, value); break;
59 case TranslationTable1: mcr(p15, 0, 1, c2, c0, value); break;
60 case TranslationTableCtrl: mcr(p15, 0, 2, c2, c0, value); break;
61 case DomainControl: mcr(p15, 0, 0, c3, c0, value); break;
62 case CacheClear: mcr(p15, 0, 0, c7, c7, value); break;
63 case DataCacheClean: mcr(p15, 0, 0, c7, c14, value); break;
65 case InstructionCacheClear: mcr(p15, 0, 0, c7, c5, value); break;
66 case InstructionTLBClear: mcr(p15, 0, 0, c8, c5, value); break;
67 case DataTLBClear: mcr(p15, 0, 0, c8, c6, value); break;
68 case UnifiedTLBClear: mcr(p15, 0, 0, c8, c7, value); break;
69 case UserProcID: mcr(p15, 0, 4, c13, c0, value); break;
70 default: break;
71 }
72}
73
75{
76 u32 val = read(reg);
77 val |= flags;
78 write(reg, val);
79}
80
82{
83 u32 val = read(reg);
84 val &= ~(flags);
85 write(reg, val);
86}
87
92
97
102
u32 flags
Definition IntelACPI.h:3
void set(SystemControlFlags flags)
Set system control flags in CP15.
void write(Register reg, u32 value)
Write register to the CP15.
DomainControlFlags
Domain Control flags.
Definition ARMControl.h:112
ARMControl()
Constructor.
u32 read(Register reg) const
Read a register from the CP15.
AuxControlFlags
Aux Control flags.
Definition ARMControl.h:103
Register
System Control Registers.
Definition ARMControl.h:55
@ InstructionFaultAddress
Definition ARMControl.h:72
@ FlushPrefetchBuffer
Definition ARMControl.h:66
@ DataFaultAddress
Definition ARMControl.h:74
@ InstructionFaultStatus
Definition ARMControl.h:73
@ TranslationTable0
Definition ARMControl.h:61
@ DataFaultStatus
Definition ARMControl.h:75
@ TranslationTable1
Definition ARMControl.h:62
@ UnifiedTLBClear
Definition ARMControl.h:70
@ TranslationTableCtrl
Definition ARMControl.h:63
@ SystemFrequency
Definition ARMControl.h:76
@ InstructionCacheClear
Definition ARMControl.h:67
@ InstructionTLBClear
Definition ARMControl.h:68
virtual ~ARMControl()
Destructor.
void unset(SystemControlFlags flags)
Unset system control flags in CP15.
SystemControlFlags
System Control flags.
Definition ARMControl.h:83
void flushPrefetchBuffer()
Flush Prefetch Buffer.
Definition ARMCore.h:230
#define mrc(coproc, opcode1, opcode2, reg, subReg)
Move to ARM from CoProcessor (MRC).
Definition ARMCore.h:51
#define mcr(coproc, opcode1, opcode2, reg, subReg, value)
Move to CoProcessor from ARM (MCR).
Definition ARMCore.h:63
unsigned int u32
Unsigned 32-bit number.
Definition Types.h:53