1 #include "u.h" 2 #include "../port/lib.h" 3 #include "mem.h" 4 #include "dat.h" 5 #include "fns.h" 6 #include "io.h" 7 8 #define MAXDCR 0x220 9 10 #define DCRF(n) ((((n)>>5)&0x1F)|(((n)&0x1F)<<5)) 11 #define MTDCR(s,n) ((31<<26)|((s)<<21)|(DCRF(n)<<11)|(451<<1)) 12 #define MFDCR(n,t) ((31<<26)|((t)<<21)|(DCRF(n)<<11)|(323<<1)) 13 #define RETURN 0x4e800020 14 ulong _getdcr[MAXDCR][2]; 15 ulong _putdcr[MAXDCR][2]; 16 17 void compiledcr(void)18compiledcr(void) 19 { 20 ulong *p; 21 int i; 22 23 for(i=0; i<MAXDCR; i++){ 24 p = _getdcr[i]; 25 p[0] = MFDCR(i, 3); 26 p[1] = RETURN; 27 p = _putdcr[i]; 28 p[0] = MTDCR(3, i); 29 p[1] = RETURN; 30 } 31 dcflush(_getdcr, sizeof(_getdcr)); 32 dcflush(_putdcr, sizeof(_putdcr)); 33 /* no need to flush icache since they won't be there */ 34 } 35