2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
29 #include <chud/ppc/chud_spr.h>
31 #include <mach/kern_return.h>
34 * kern_return_t mfspr64(uint64_t *val, int spr);
36 * r3: address to store value in
37 * r4: spr to read from
41 ; Force a line boundry here
46 ;; generic PPC 64-bit wide SPRs
47 cmpwi r4,chud_ppc_srr0
49 cmpwi r4,chud_ppc_srr1
53 cmpwi r4,chud_ppc_sdr1
55 cmpwi r4,chud_ppc_sprg0
57 cmpwi r4,chud_ppc_sprg1
59 cmpwi r4,chud_ppc_sprg2
61 cmpwi r4,chud_ppc_sprg3
63 cmpwi r4,chud_ppc64_asr
65 cmpwi r4,chud_ppc_dabr
68 ;; GPUL specific 64-bit wide SPRs
69 cmpwi r4,chud_970_hid0
71 cmpwi r4,chud_970_hid1
73 cmpwi r4,chud_970_hid4
75 cmpwi r4,chud_970_hid5
77 cmpwi r4,chud_970_mmcr0
79 cmpwi r4,chud_970_mmcr1
81 cmpwi r4,chud_970_mmcra
83 cmpwi r4,chud_970_siar
85 cmpwi r4,chud_970_sdar
89 cmpwi r4,chud_970_rmor
91 cmpwi r4,chud_970_hrmor
93 cmpwi r4,chud_970_hior
95 cmpwi r4,chud_970_lpidr
97 cmpwi r4,chud_970_lpcr
99 cmpwi r4,chud_970_dabrx
101 cmpwi r4,chud_970_hsprg0
103 cmpwi r4,chud_970_hsprg1
105 cmpwi r4,chud_970_hsrr0
107 cmpwi r4,chud_970_hsrr1
109 cmpwi r4,chud_970_hdec
111 cmpwi r4,chud_970_trig0
113 cmpwi r4,chud_970_trig1
115 cmpwi r4,chud_970_trig2
117 cmpwi r4,chud_ppc64_accr
119 cmpwi r4,chud_970_scomc
121 cmpwi r4,chud_970_scomd
127 mfspr r5,chud_ppc_srr0
131 mfspr r5,chud_ppc_srr1
135 mfspr r5,chud_ppc_dar
139 mfspr r5,chud_ppc_sdr1
143 mfspr r5,chud_ppc_sprg0
147 mfspr r5,chud_ppc_sprg1
151 mfspr r5,chud_ppc_sprg2
155 mfspr r5,chud_ppc_sprg3
159 mfspr r5,chud_ppc64_asr
163 mfspr r5,chud_ppc_dabr
167 mfspr r5,chud_970_hid0
171 mfspr r5,chud_970_hid1
175 mfspr r5,chud_970_hid4
179 mfspr r5,chud_970_hid5
183 mfspr r5,chud_970_mmcr0
187 mfspr r5,chud_970_mmcr1
191 mfspr r5,chud_970_mmcra
195 mfspr r5,chud_970_siar
199 mfspr r5,chud_970_sdar
203 mfspr r5,chud_970_imc
207 mfspr r5,chud_970_rmor
211 mfspr r5,chud_970_hrmor
215 mfspr r5,chud_970_hior
219 mfspr r5,chud_970_lpidr
223 mfspr r5,chud_970_lpcr
227 mfspr r5,chud_970_dabrx
231 mfspr r5,chud_970_hsprg0
235 mfspr r5,chud_970_hsprg1
239 mfspr r5,chud_970_hsrr0
243 mfspr r5,chud_970_hsrr1
247 mfspr r5,chud_970_hdec
251 mfspr r5,chud_970_trig0
255 mfspr r5,chud_970_trig1
259 mfspr r5,chud_970_trig2
263 mfspr r5,chud_ppc64_accr
267 mfspr r5,chud_970_scomc
271 mfspr r5,chud_970_scomd
285 * kern_return_t mtspr64(int spr, uint64_t *val);
287 * r3: spr to write to
288 * r4: address to get value from
292 ; Force a line boundry here
297 ;; generic PPC 64-bit wide SPRs
298 cmpwi r3,chud_ppc_srr0
300 cmpwi r3,chud_ppc_srr1
302 cmpwi r3,chud_ppc_dar
304 cmpwi r3,chud_ppc_sdr1
306 cmpwi r3,chud_ppc_sprg0
308 cmpwi r3,chud_ppc_sprg1
310 cmpwi r3,chud_ppc_sprg2
312 cmpwi r3,chud_ppc_sprg3
314 cmpwi r3,chud_ppc64_asr
316 cmpwi r3,chud_ppc_dabr
319 ;; GPUL specific 64-bit wide SPRs
320 cmpwi r3,chud_970_hid0
322 cmpwi r3,chud_970_hid1
324 cmpwi r3,chud_970_hid4
326 cmpwi r3,chud_970_hid5
328 cmpwi r3,chud_970_mmcr0
330 cmpwi r3,chud_970_mmcr1
332 cmpwi r3,chud_970_mmcra
334 cmpwi r3,chud_970_siar
336 cmpwi r3,chud_970_sdar
338 cmpwi r3,chud_970_imc
340 cmpwi r3,chud_970_rmor
342 cmpwi r3,chud_970_hrmor
344 cmpwi r3,chud_970_hior
346 cmpwi r3,chud_970_lpidr
348 cmpwi r3,chud_970_lpcr
350 cmpwi r3,chud_970_dabrx
352 cmpwi r3,chud_970_hsprg0
354 cmpwi r3,chud_970_hsprg1
356 cmpwi r3,chud_970_hsrr0
358 cmpwi r3,chud_970_hsrr1
360 cmpwi r3,chud_970_hdec
362 cmpwi r3,chud_970_trig0
364 cmpwi r3,chud_970_trig1
366 cmpwi r3,chud_970_trig2
368 cmpwi r3,chud_ppc64_accr
370 cmpwi r3,chud_970_scomc
372 cmpwi r3,chud_970_scomd
379 mtspr chud_ppc_srr0,r5
383 mtspr chud_ppc_srr1,r5
387 mtspr chud_ppc_dar,r5
391 mtspr chud_ppc_sdr1,r5
395 mtspr chud_ppc_sprg0,r5
399 mtspr chud_ppc_sprg1,r5
403 mtspr chud_ppc_sprg2,r5
407 mtspr chud_ppc_sprg3,r5
411 mtspr chud_ppc64_asr,r5
415 mtspr chud_ppc_dabr,r5
420 mtspr chud_970_hid0,r5
421 mfspr r5,chud_970_hid0 /* syncronization requirements */
422 mfspr r5,chud_970_hid0
423 mfspr r5,chud_970_hid0
424 mfspr r5,chud_970_hid0
425 mfspr r5,chud_970_hid0
426 mfspr r5,chud_970_hid0
430 mtspr chud_970_hid1,r5 /* tell you twice */
431 mtspr chud_970_hid1,r5
436 sync /* syncronization requirements */
437 mtspr chud_970_hid4,r5
442 mtspr chud_970_hid5,r5
446 mtspr chud_970_mmcr0,r5
450 mtspr chud_970_mmcr1,r5
454 mtspr chud_970_mmcra,r5
458 mtspr chud_970_siar,r5
462 mtspr chud_970_sdar,r5
466 mtspr chud_970_imc,r5
470 mtspr chud_970_rmor,r5
474 mtspr chud_970_hrmor,r5
478 mtspr chud_970_hior,r5
482 mtspr chud_970_lpidr,r5
486 mtspr chud_970_lpcr,r5
490 mtspr chud_970_dabrx,r5
494 mtspr chud_970_hsprg0,r5
498 mtspr chud_970_hsprg1,r5
502 mtspr chud_970_hsrr0,r5
506 mtspr chud_970_hsrr1,r5
510 mtspr chud_970_hdec,r5
514 mtspr chud_970_trig0,r5
518 mtspr chud_970_trig1,r5
522 mtspr chud_970_trig2,r5
526 mtspr chud_ppc64_accr,r5
530 mtspr chud_970_scomc,r5
534 mtspr chud_970_scomd,r5
547 * kern_return_t mfmsr64(uint64_t *val);
549 * r3: address to store value in
553 ; Force a line boundry here
570 * kern_return_t mtmsr64(uint64_t *val);
572 * r3: address to load value from
576 ; Force a line boundry here