diff options
author | Paul Mackerras <paulus@samba.org> | 2006-12-11 16:31:42 +1100 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-12-11 16:31:42 +1100 |
commit | 973c1fabc70deb10f12a0eaab2f50c2263784257 (patch) | |
tree | 5b0ef183757049d241d0709f0cea9e370627b687 /include/asm-powerpc/dcr-native.h | |
parent | 4383162c8f2fa75d916c4901b0d1ebcac7aeaf74 (diff) | |
parent | d10f73480b991da2aa1c000ed38eda3e4a987292 (diff) | |
download | linux-3.10-973c1fabc70deb10f12a0eaab2f50c2263784257.tar.gz linux-3.10-973c1fabc70deb10f12a0eaab2f50c2263784257.tar.bz2 linux-3.10-973c1fabc70deb10f12a0eaab2f50c2263784257.zip |
Merge branch 'for_paulus' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc
Diffstat (limited to 'include/asm-powerpc/dcr-native.h')
-rw-r--r-- | include/asm-powerpc/dcr-native.h | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/include/asm-powerpc/dcr-native.h b/include/asm-powerpc/dcr-native.h index fd4a5f5e33d..d7a1bc1551c 100644 --- a/include/asm-powerpc/dcr-native.h +++ b/include/asm-powerpc/dcr-native.h @@ -20,8 +20,7 @@ #ifndef _ASM_POWERPC_DCR_NATIVE_H #define _ASM_POWERPC_DCR_NATIVE_H #ifdef __KERNEL__ - -#include <asm/reg.h> +#ifndef __ASSEMBLY__ typedef struct {} dcr_host_t; @@ -32,7 +31,41 @@ typedef struct {} dcr_host_t; #define dcr_read(host, dcr_n) mfdcr(dcr_n) #define dcr_write(host, dcr_n, value) mtdcr(dcr_n, value) +/* Device Control Registers */ +void __mtdcr(int reg, unsigned int val); +unsigned int __mfdcr(int reg); +#define mfdcr(rn) \ + ({unsigned int rval; \ + if (__builtin_constant_p(rn)) \ + asm volatile("mfdcr %0," __stringify(rn) \ + : "=r" (rval)); \ + else \ + rval = __mfdcr(rn); \ + rval;}) + +#define mtdcr(rn, v) \ +do { \ + if (__builtin_constant_p(rn)) \ + asm volatile("mtdcr " __stringify(rn) ",%0" \ + : : "r" (v)); \ + else \ + __mtdcr(rn, v); \ +} while (0) + +/* R/W of indirect DCRs make use of standard naming conventions for DCRs */ +#define mfdcri(base, reg) \ +({ \ + mtdcr(base ## _CFGADDR, base ## _ ## reg); \ + mfdcr(base ## _CFGDATA); \ +}) + +#define mtdcri(base, reg, data) \ +do { \ + mtdcr(base ## _CFGADDR, base ## _ ## reg); \ + mtdcr(base ## _CFGDATA, data); \ +} while (0) +#endif /* __ASSEMBLY__ */ #endif /* __KERNEL__ */ #endif /* _ASM_POWERPC_DCR_NATIVE_H */ |