2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_OSREFERENCE_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
10 * License may not be used to create, or enable the creation or
11 * redistribution of, unlawful or unlicensed copies of an Apple operating
12 * system, or to circumvent, violate, or enable the circumvention or
13 * violation of, any terms of an Apple operating system software license
16 * Please obtain a copy of the License at
17 * http://www.opensource.apple.com/apsl/ and read it before using this
20 * The Original Code and all software distributed under the License are
21 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
22 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
23 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
24 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
25 * Please see the License for the specific language governing rights and
26 * limitations under the License.
28 * @APPLE_LICENSE_OSREFERENCE_HEADER_END@
32 #include <chud/ppc/chud_spr.h>
34 #include <mach/kern_return.h>
37 * kern_return_t mfspr64(uint64_t *val, int spr);
39 * r3: address to store value in
40 * r4: spr to read from
44 ; Force a line boundry here
49 ;; generic PPC 64-bit wide SPRs
50 cmpwi r4,chud_ppc_srr0
52 cmpwi r4,chud_ppc_srr1
56 cmpwi r4,chud_ppc_sdr1
58 cmpwi r4,chud_ppc_sprg0
60 cmpwi r4,chud_ppc_sprg1
62 cmpwi r4,chud_ppc_sprg2
64 cmpwi r4,chud_ppc_sprg3
66 cmpwi r4,chud_ppc64_asr
68 cmpwi r4,chud_ppc_dabr
71 ;; GPUL specific 64-bit wide SPRs
72 cmpwi r4,chud_970_hid0
74 cmpwi r4,chud_970_hid1
76 cmpwi r4,chud_970_hid4
78 cmpwi r4,chud_970_hid5
80 cmpwi r4,chud_970_mmcr0
82 cmpwi r4,chud_970_mmcr1
84 cmpwi r4,chud_970_mmcra
86 cmpwi r4,chud_970_siar
88 cmpwi r4,chud_970_sdar
92 cmpwi r4,chud_970_rmor
94 cmpwi r4,chud_970_hrmor
96 cmpwi r4,chud_970_hior
98 cmpwi r4,chud_970_lpidr
100 cmpwi r4,chud_970_lpcr
102 cmpwi r4,chud_970_dabrx
104 cmpwi r4,chud_970_hsprg0
106 cmpwi r4,chud_970_hsprg1
108 cmpwi r4,chud_970_hsrr0
110 cmpwi r4,chud_970_hsrr1
112 cmpwi r4,chud_970_hdec
114 cmpwi r4,chud_970_trig0
116 cmpwi r4,chud_970_trig1
118 cmpwi r4,chud_970_trig2
120 cmpwi r4,chud_ppc64_accr
122 cmpwi r4,chud_970_scomc
124 cmpwi r4,chud_970_scomd
130 mfspr r5,chud_ppc_srr0
134 mfspr r5,chud_ppc_srr1
138 mfspr r5,chud_ppc_dar
142 mfspr r5,chud_ppc_sdr1
146 mfspr r5,chud_ppc_sprg0
150 mfspr r5,chud_ppc_sprg1
154 mfspr r5,chud_ppc_sprg2
158 mfspr r5,chud_ppc_sprg3
162 mfspr r5,chud_ppc64_asr
166 mfspr r5,chud_ppc_dabr
170 mfspr r5,chud_970_hid0
174 mfspr r5,chud_970_hid1
178 mfspr r5,chud_970_hid4
182 mfspr r5,chud_970_hid5
186 mfspr r5,chud_970_mmcr0
190 mfspr r5,chud_970_mmcr1
194 mfspr r5,chud_970_mmcra
198 mfspr r5,chud_970_siar
202 mfspr r5,chud_970_sdar
206 mfspr r5,chud_970_imc
210 mfspr r5,chud_970_rmor
214 mfspr r5,chud_970_hrmor
218 mfspr r5,chud_970_hior
222 mfspr r5,chud_970_lpidr
226 mfspr r5,chud_970_lpcr
230 mfspr r5,chud_970_dabrx
234 mfspr r5,chud_970_hsprg0
238 mfspr r5,chud_970_hsprg1
242 mfspr r5,chud_970_hsrr0
246 mfspr r5,chud_970_hsrr1
250 mfspr r5,chud_970_hdec
254 mfspr r5,chud_970_trig0
258 mfspr r5,chud_970_trig1
262 mfspr r5,chud_970_trig2
266 mfspr r5,chud_ppc64_accr
270 mfspr r5,chud_970_scomc
274 mfspr r5,chud_970_scomd
288 * kern_return_t mtspr64(int spr, uint64_t *val);
290 * r3: spr to write to
291 * r4: address to get value from
295 ; Force a line boundry here
300 ;; generic PPC 64-bit wide SPRs
301 cmpwi r3,chud_ppc_srr0
303 cmpwi r3,chud_ppc_srr1
305 cmpwi r3,chud_ppc_dar
307 cmpwi r3,chud_ppc_sdr1
309 cmpwi r3,chud_ppc_sprg0
311 cmpwi r3,chud_ppc_sprg1
313 cmpwi r3,chud_ppc_sprg2
315 cmpwi r3,chud_ppc_sprg3
317 cmpwi r3,chud_ppc64_asr
319 cmpwi r3,chud_ppc_dabr
322 ;; GPUL specific 64-bit wide SPRs
323 cmpwi r3,chud_970_hid0
325 cmpwi r3,chud_970_hid1
327 cmpwi r3,chud_970_hid4
329 cmpwi r3,chud_970_hid5
331 cmpwi r3,chud_970_mmcr0
333 cmpwi r3,chud_970_mmcr1
335 cmpwi r3,chud_970_mmcra
337 cmpwi r3,chud_970_siar
339 cmpwi r3,chud_970_sdar
341 cmpwi r3,chud_970_imc
343 cmpwi r3,chud_970_rmor
345 cmpwi r3,chud_970_hrmor
347 cmpwi r3,chud_970_hior
349 cmpwi r3,chud_970_lpidr
351 cmpwi r3,chud_970_lpcr
353 cmpwi r3,chud_970_dabrx
355 cmpwi r3,chud_970_hsprg0
357 cmpwi r3,chud_970_hsprg1
359 cmpwi r3,chud_970_hsrr0
361 cmpwi r3,chud_970_hsrr1
363 cmpwi r3,chud_970_hdec
365 cmpwi r3,chud_970_trig0
367 cmpwi r3,chud_970_trig1
369 cmpwi r3,chud_970_trig2
371 cmpwi r3,chud_ppc64_accr
373 cmpwi r3,chud_970_scomc
375 cmpwi r3,chud_970_scomd
382 mtspr chud_ppc_srr0,r5
386 mtspr chud_ppc_srr1,r5
390 mtspr chud_ppc_dar,r5
394 mtspr chud_ppc_sdr1,r5
398 mtspr chud_ppc_sprg0,r5
402 mtspr chud_ppc_sprg1,r5
406 mtspr chud_ppc_sprg2,r5
410 mtspr chud_ppc_sprg3,r5
414 mtspr chud_ppc64_asr,r5
418 mtspr chud_ppc_dabr,r5
423 mtspr chud_970_hid0,r5
424 mfspr r5,chud_970_hid0 /* syncronization requirements */
425 mfspr r5,chud_970_hid0
426 mfspr r5,chud_970_hid0
427 mfspr r5,chud_970_hid0
428 mfspr r5,chud_970_hid0
429 mfspr r5,chud_970_hid0
433 mtspr chud_970_hid1,r5 /* tell you twice */
434 mtspr chud_970_hid1,r5
439 sync /* syncronization requirements */
440 mtspr chud_970_hid4,r5
445 mtspr chud_970_hid5,r5
449 mtspr chud_970_mmcr0,r5
453 mtspr chud_970_mmcr1,r5
457 mtspr chud_970_mmcra,r5
461 mtspr chud_970_siar,r5
465 mtspr chud_970_sdar,r5
469 mtspr chud_970_imc,r5
473 mtspr chud_970_rmor,r5
477 mtspr chud_970_hrmor,r5
481 mtspr chud_970_hior,r5
485 mtspr chud_970_lpidr,r5
489 mtspr chud_970_lpcr,r5
493 mtspr chud_970_dabrx,r5
497 mtspr chud_970_hsprg0,r5
501 mtspr chud_970_hsprg1,r5
505 mtspr chud_970_hsrr0,r5
509 mtspr chud_970_hsrr1,r5
513 mtspr chud_970_hdec,r5
517 mtspr chud_970_trig0,r5
521 mtspr chud_970_trig1,r5
525 mtspr chud_970_trig2,r5
529 mtspr chud_ppc64_accr,r5
533 mtspr chud_970_scomc,r5
537 mtspr chud_970_scomd,r5
550 * kern_return_t mfmsr64(uint64_t *val);
552 * r3: address to store value in
556 ; Force a line boundry here
573 * kern_return_t mtmsr64(uint64_t *val);
575 * r3: address to load value from
579 ; Force a line boundry here