|
|
1.1 root 1: /******************************************************************************
2: * Copyright (c) 2004, 2008 IBM Corporation
3: * All rights reserved.
4: * This program and the accompanying materials
5: * are made available under the terms of the BSD License
6: * which accompanies this distribution, and is available at
7: * http://www.opensource.org/licenses/bsd-license.php
8: *
9: * Contributors:
10: * IBM Corporation - initial implementation
11: *****************************************************************************/
12:
13: #ifndef __PPC970_H
14: #define __PPC970_H
15:
16: /* SPRs numbers */
17:
18: #define CTRL_RD 136
19: #define CTRL_WR 152
20: #define PVR 287
21: #define HSPRG0 304
22: #define HSPRG1 305
23: #define HIOR 311
24: #define HID0 1008
25: #define HID1 1009
26: #define HID4 1012
27: #define HID6 1017
28: #define PIR 1023
29:
30: #define SETCI(r) sync; \
31: mfspr r, HID4; \
32: sync; \
33: rldicl r, r, 32,0; \
34: ori r, r, 0x0100; \
35: rldicl r, r, 32,0; \
36: sync; \
37: slbia; \
38: mtspr HID4, r; \
39: isync; \
40: eieio;
41:
42: #define CLRCI(r) sync; \
43: mfspr r, HID4; \
44: sync; \
45: rldicl r, r, 32, 0; \
46: ori r, r, 0x0100; \
47: xori r, r, 0x0100; \
48: rldicl r, r, 32, 0; \
49: sync; \
50: slbia; \
51: mtspr HID4, r; \
52: isync; \
53: eieio;
54:
55: /* This macro uses r0 */
56: #define FLUSH_CACHE(r, n) add n, n, r; \
57: addi n, n, 127; \
58: rlwinm r, r, 0,0,24; \
59: rlwinm n, n, 0,0,24; \
60: sub n, n, r; \
61: srwi n, n, 7; \
62: mtctr n; \
63: 0: dcbst 0, r; \
64: sync; \
65: icbi 0, r; \
66: sync; \
67: isync; \
68: addi r, r, 128; \
69: bdnz 0b;
70:
71: #ifndef __ASSEMBLER__
72: #define STRINGIFY(x...) #x
73: #define EXPAND(x) STRINGIFY(x)
74:
75: static inline void
1.1.1.2 ! root 76: set_ci(void)
1.1 root 77: {
78: unsigned long tmp;
79: asm volatile(EXPAND(SETCI(%0)) : "=r"(tmp) :: "memory", "cc");
80: }
81:
82: static inline void
1.1.1.2 ! root 83: clr_ci(void)
1.1 root 84: {
85: unsigned long tmp;
86: asm volatile(EXPAND(CLRCI(%0)) : "=r"(tmp) :: "memory", "cc");
87: }
88:
89: static inline void
1.1.1.2 ! root 90: eieio(void)
1.1 root 91: {
92: asm volatile ("eieio":::"memory");
93: }
94:
95: static inline void
96: flush_cache(void* r, long n)
97: {
98: asm volatile(EXPAND(FLUSH_CACHE(%0, %1)) : "+r"(r), "+r"(n) :: "memory", "cc", "r0", "ctr");
99: }
100:
101: #endif /* __ASSEMBLER__ */
102:
103: #endif
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.