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