xref: /OK3568_Linux_fs/u-boot/arch/arm/include/asm/proc-armv/domain.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  *  linux/include/asm-arm/proc-armv/domain.h
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  *  Copyright (C) 1999 Russell King.
5*4882a593Smuzhiyun  *
6*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify
7*4882a593Smuzhiyun  * it under the terms of the GNU General Public License version 2 as
8*4882a593Smuzhiyun  * published by the Free Software Foundation.
9*4882a593Smuzhiyun  */
10*4882a593Smuzhiyun #ifndef __ASM_PROC_DOMAIN_H
11*4882a593Smuzhiyun #define __ASM_PROC_DOMAIN_H
12*4882a593Smuzhiyun 
13*4882a593Smuzhiyun /*
14*4882a593Smuzhiyun  * Domain numbers
15*4882a593Smuzhiyun  *
16*4882a593Smuzhiyun  *  DOMAIN_IO     - domain 2 includes all IO only
17*4882a593Smuzhiyun  *  DOMAIN_KERNEL - domain 1 includes all kernel memory only
18*4882a593Smuzhiyun  *  DOMAIN_USER   - domain 0 includes all user memory only
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun #define DOMAIN_USER	0
21*4882a593Smuzhiyun #define DOMAIN_KERNEL	1
22*4882a593Smuzhiyun #define DOMAIN_TABLE	1
23*4882a593Smuzhiyun #define DOMAIN_IO	2
24*4882a593Smuzhiyun 
25*4882a593Smuzhiyun /*
26*4882a593Smuzhiyun  * Domain types
27*4882a593Smuzhiyun  */
28*4882a593Smuzhiyun #define DOMAIN_NOACCESS	0
29*4882a593Smuzhiyun #define DOMAIN_CLIENT	1
30*4882a593Smuzhiyun #define DOMAIN_MANAGER	3
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun #define domain_val(dom,type)	((type) << 2*(dom))
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun #define set_domain(x)					\
35*4882a593Smuzhiyun 	do {						\
36*4882a593Smuzhiyun 	__asm__ __volatile__(				\
37*4882a593Smuzhiyun 	"mcr	p15, 0, %0, c3, c0	@ set domain"	\
38*4882a593Smuzhiyun 	  : : "r" (x));					\
39*4882a593Smuzhiyun 	} while (0)
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun #define modify_domain(dom,type)				\
42*4882a593Smuzhiyun 	do {						\
43*4882a593Smuzhiyun 	unsigned int domain = current->thread.domain;	\
44*4882a593Smuzhiyun 	domain &= ~domain_val(dom, DOMAIN_MANAGER);	\
45*4882a593Smuzhiyun 	domain |= domain_val(dom, type);		\
46*4882a593Smuzhiyun 	current->thread.domain = domain;		\
47*4882a593Smuzhiyun 	set_domain(current->thread.domain);		\
48*4882a593Smuzhiyun 	} while (0)
49*4882a593Smuzhiyun 
50*4882a593Smuzhiyun #endif
51