|
|
1.1 root 1:
2: #
3: # *probe read & write events test (virtual)
4: #
5: # R12 = Which space is probing
6: # 0 - Probe in P0 space
7: # 1 - Probe in P2 space
8: # R0 = PC of Probe instruction that failed
9: # R5 = PSL after Probe
10: #
11:
12: .set LAST_VPGNO,0xfffff
13: .set TEST_P2PTE,LAST_VPGNO
14: .set P2ADDR,0x80000000
15: .set P0ADDR,0
16: .set KERNEL,0
17: .set USER,1
18: .set READ,1
19: .set WRITE,2
20:
21: .globl _probe_evt
22: _probe_evt:
23: .word 0x1fff
24:
25: # Set up P0PT, P2PT
26: #
27: # u0p0pt :
28: # virtual page 0 = Valid, UW, physical page of _iob0
29: # virtual page 1 = NO_ACCESS, physical page of _iob1
30: #
31: # u0p2pt :
32: # virtual page 0xffffe = Valid, UW, physical pages _iob4
33: # virtual page 0xfffff = NO_ACCESS, physical pages _iob5
34: #
35: #
36: movab _u0p2pt,r10 /* Virtual address of P2PT */
37: andl3 $0x3fffffff,$_iob4,r9 /* Physical address of _iob4 */
38: shrl $PGSHIFT,r9,r9 /* Physical page no of _iob4 */
39: orl3 $PG_V|PG_UW,r9,(r10) /* Valid, UW */
40: andl3 $0x3fffffff,$_iob5,r9 /* Physical page no. of _iob5 */
41: shrl $PGSHIFT,r9,r9 /* Physical page no of _iob5 */
42: orl3 $PG_NOACC,r9,4(r10) /* No access */
43: subl3 $((LAST_VPGNO-1) << 2),r10,r11
44: /* Address to initialize P2BR */
45:
46: clrl r2 /* Set up P0PT */
47: andl3 $0x3fffffff,$_iob0,r3 /* Physical address of _iob0 */
48: shrl $PGSHIFT,r3,r3 /* Physical page no of _iob0 */
49: orl3 $PG_V|PG_UW,r3,_u0p0pt[r2]
50: incl r2
51: andl3 $0x3fffffff,$_iob1,r3 /* Physical address of _iob1 */
52: shrl $PGSHIFT,r3,r3 /* Physical page no of _iob1 */
53: orl3 $PG_NOACC,r3,_u0p0pt[r2]
54:
55: andl3 $_pcb0,$0x3fffffff,r1
56: mtpr r1,$PCBB
57: mtpr $((LAST_VPGNO<<PGSHIFT)|0x400|P2ADDR),$KSP
58: mtpr $0,$TBIA
59:
60: mtpr $_u0p0pt,$P0BR
61: mtpr $4,$P0LR /* Four PTEs in P0BR */
62: mtpr r11,$P2BR
63: mtpr $0xffffd,$P2LR /* Two PTEs in P2BR */
64: calls $4,probe_tst /* Do test ... */
65: ret /* Done ... */
66:
67:
68: #
69: # Routine to do PROBE test
70: #
71: probe_tst:
72: .word 0x1ff
73:
74: movl $1,r12 /* r12 = 1 ; PROBE in P2 space */
75: /* r12 = 0 ; PROBE in P0 space */
76: movl $(LAST_VPGNO << PGSHIFT)|P2ADDR,r2
77: /* R2 : base address of NO_ACCESS page */
78: movl $((LAST_VPGNO-1) << PGSHIFT)|P2ADDR,r4
79: /* R4 : base address of accessible page */
80: tstart:
81: # PROBE read in User mode
82: #
83: movl $USER,r1 /* R1 : Mode used in PROBE */
84: movl $NBPG-4,r3 /* R3 : PROBE less than 1 page */
85: movl $NBPG+0xf0,r6 /* R6 : PROBE more than 1 page */
86: movl $READ,r7 /* R7 : type of access */
87:
88: movab _prb1,r0 /* R0 : PC of probe instruction */
89: movl r2,Cache
90: bicpsw $Z
91: _prb1:
92: prober r1,*Cache,r3 /* Z flag should be 1 : not accessible */
93: beql 1f
94: error0: movpsl r5 /* R5 : PSL after PROBE */
95: jmp *badrtn /* Error in Z flag */
96:
97: 1: mtpr $0,$TBIA
98: movab _prb2,r0
99: movl r4,Cache
100: bispsw $Z
101: _prb2:
102: prober $1,*Cache,r3 /* Z flag should be 0 : accessible */
103: bneq 1f
104: brw error0
105:
106: 1: mtpr $0,$TBIA
107: movab _prb3,r0
108: movl r6,Cache
109: bicpsw $Z
110: _prb3:
111: prober r1,(r4),Cache /* Z flag should be 1 : not accessible */
112: beql 1f
113: brw error0
114:
115: /* PROBE read in Kernel mode */
116:
117: 1: mtpr $0,$TBIA
118: movb $KERNEL,Cache
119: movab _prb4,r0
120: bispsw $Z
121: _prb4:
122: prober Cache,(r4),r3 /* Z flag should be 0 : accessible */
123: bneq 1f
124: brw error0
125:
126: 1: mtpr $0,$TBIA
127: movab _prb5,r0
128: bicpsw $Z
129: _prb5:
130: prober r1,(r2),r3 /* Z flag should be 1 : not accessible */
131: beql 1f
132: brw error0
133:
134: 1: mtpr $0,$TBIA
135: movab _prb6,r0
136: bicpsw $Z
137: _prb6:
138: prober $0,(r4),r6 /* Z flag should be 1 : not accessible */
139: beql 1f
140: brw error0
141:
142:
143: /* PROBE write in User mode */
144:
145: 1: mtpr $0,$TBIA
146: movl $USER,r1 /* R1 : Mode used in PROBE */
147: movl $WRITE,r7 /* R7 : type of access */
148:
149: movab _prb7,r0
150: movl r2,Cache
151: bicpsw $Z
152: _prb7:
153: probew r1,*Cache,r3 /* Z flag should be 1 : not accessible */
154: beql 1f
155: error1:
156: movpsl r5 /* R5 : PSL after PROBE */
157: jmp *badrtn /* Error in Z flag */
158: 1:
159: mtpr $0,$TBIA
160: movab _prb8,r0
161: movl r4,Cache
162: bispsw $Z
163: _prb8:
164: probew $1,*Cache,r3 /* Z flag should be 0 : accessible */
165: mtpr $0,$TBIA
166: bneq 1f
167: brw error1
168:
169: 1: mtpr $0,$TBIA
170: movab _prb9,r0
171: movl r6,Cache
172: bicpsw $Z
173: _prb9:
174: probew r1,(r4),Cache /* Z flag should be 1 : not accessible */
175: beql 1f
176: brw error1
177:
178: /* PROBE write in Kernel mode */
179:
180: 1: mtpr $0,$TBIA
181: movb $KERNEL,Cache
182: movab _prb10,r0
183: bispsw $Z
184: _prb10:
185: probew Cache,(r4),r3 /* Z flag should be 0 : accessible */
186: bneq 1f
187: brw error0
188:
189: 1: mtpr $0,$TBIA
190: movab _prb11,r0
191: bicpsw $Z
192: _prb11:
193: probew $0,(r2),r3 /* Z flag should be 1 : not accessible */
194: beql 1f
195: brw error0
196:
197: 1: mtpr $0,$TBIA
198: movab _prb12,r0
199: bicpsw $Z
200: _prb12:
201: probew r1,(r4),r6 /* Z flag should be 1 : not accessible */
202: beql 1f
203: brw error0
204:
205: 1: mtpr $0,$TBIA
206: decl r12 /* Decrement loop count */
207: blss endt
208:
209: movl $(1 << PGSHIFT)|P0ADDR,r2
210: /* R2 : base address of NO_ACCESS page */
211: movl $(0 << PGSHIFT)|P0ADDR,r4
212: /* R4 : base address of accessible page */
213: jmp tstart /* Test again but in P0 space */
214: endt:
215: clrl r0
216: ret
217:
218: .align 2
219: Cache:
220: .long 0
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.