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