diff options
Diffstat (limited to 'arch/arm/include/asm/proc-armv/domain.h')
| -rw-r--r-- | arch/arm/include/asm/proc-armv/domain.h | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/arch/arm/include/asm/proc-armv/domain.h b/arch/arm/include/asm/proc-armv/domain.h new file mode 100644 index 000000000..aadc83187 --- /dev/null +++ b/arch/arm/include/asm/proc-armv/domain.h @@ -0,0 +1,50 @@ +/* + *  linux/include/asm-arm/proc-armv/domain.h + * + *  Copyright (C) 1999 Russell King. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef __ASM_PROC_DOMAIN_H +#define __ASM_PROC_DOMAIN_H + +/* + * Domain numbers + * + *  DOMAIN_IO     - domain 2 includes all IO only + *  DOMAIN_KERNEL - domain 1 includes all kernel memory only + *  DOMAIN_USER   - domain 0 includes all user memory only + */ +#define DOMAIN_USER	0 +#define DOMAIN_KERNEL	1 +#define DOMAIN_TABLE	1 +#define DOMAIN_IO	2 + +/* + * Domain types + */ +#define DOMAIN_NOACCESS	0 +#define DOMAIN_CLIENT	1 +#define DOMAIN_MANAGER	3 + +#define domain_val(dom,type)	((type) << 2*(dom)) + +#define set_domain(x)					\ +	do {						\ +	__asm__ __volatile__(				\ +	"mcr	p15, 0, %0, c3, c0	@ set domain"	\ +	  : : "r" (x));					\ +	} while (0) + +#define modify_domain(dom,type)				\ +	do {						\ +	unsigned int domain = current->thread.domain;	\ +	domain &= ~domain_val(dom, DOMAIN_MANAGER);	\ +	domain |= domain_val(dom, type);		\ +	current->thread.domain = domain;		\ +	set_domain(current->thread.domain);		\ +	} while (0) + +#endif |