Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
arm
plat-iop
cp6.c
Go to the documentation of this file.
1
/*
2
* IOP Coprocessor-6 access handler
3
* Copyright (c) 2006, Intel Corporation.
4
*
5
* This program is free software; you can redistribute it and/or modify it
6
* under the terms and conditions of the GNU General Public License,
7
* version 2, as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12
* more details.
13
*
14
* You should have received a copy of the GNU General Public License along with
15
* this program; if not, write to the Free Software Foundation, Inc., 59 Temple
16
* Place - Suite 330, Boston, MA 02111-1307 USA.
17
*
18
*/
19
#include <
linux/init.h
>
20
#include <asm/traps.h>
21
#include <asm/ptrace.h>
22
23
static
int
cp6_trap(
struct
pt_regs
*
regs
,
unsigned
int
instr
)
24
{
25
u32
temp
;
26
27
/* enable cp6 access */
28
asm
volatile
(
29
"mrc p15, 0, %0, c15, c1, 0\n\t"
30
"orr %0, %0, #(1 << 6)\n\t"
31
"mcr p15, 0, %0, c15, c1, 0\n\t"
32
:
"=r"
(
temp
));
33
34
return
0;
35
}
36
37
/* permit kernel space cp6 access
38
* deny user space cp6 access
39
*/
40
static
struct
undef_hook
cp6_hook = {
41
.instr_mask = 0x0f000ff0,
42
.instr_val = 0x0e000610,
43
.cpsr_mask =
MODE_MASK
,
44
.cpsr_val =
SVC_MODE
,
45
.fn = cp6_trap,
46
};
47
48
void
__init
iop_init_cp6_handler
(
void
)
49
{
50
register_undef_hook
(&cp6_hook);
51
}
Generated on Thu Jan 10 2013 13:03:08 for Linux Kernel by
1.8.2