2 * Copyright (c) 2003 Apple Computer, Inc. All rights reserved.
4 * @APPLE_LICENSE_HEADER_START@
6 * The contents of this file constitute Original Code as defined in and
7 * are subject to the Apple Public Source License Version 1.1 (the
8 * "License"). You may not use this file except in compliance with the
9 * License. Please obtain a copy of the License at
10 * http://www.apple.com/publicsource and read it before using this file.
12 * This Original Code and all software distributed under the License are
13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
17 * License for the specific language governing rights and limitations
20 * @APPLE_LICENSE_HEADER_END@
24 #include <chud/ppc/chud_spr.h>
26 #include <mach/kern_return.h>
29 * kern_return_t mfspr64(uint64_t *val, int spr);
31 * r3: address to store value in
32 * r4: spr to read from
36 ; Force a line boundry here
41 ;; generic PPC 64-bit wide SPRs
42 cmpwi r4,chud_ppc_srr0
44 cmpwi r4,chud_ppc_srr1
48 cmpwi r4,chud_ppc_sdr1
50 cmpwi r4,chud_ppc_sprg0
52 cmpwi r4,chud_ppc_sprg1
54 cmpwi r4,chud_ppc_sprg2
56 cmpwi r4,chud_ppc_sprg3
58 cmpwi r4,chud_ppc64_asr
60 cmpwi r4,chud_ppc_dabr
63 ;; GPUL specific 64-bit wide SPRs
64 cmpwi r4,chud_970_hid0
66 cmpwi r4,chud_970_hid1
68 cmpwi r4,chud_970_hid4
70 cmpwi r4,chud_970_hid5
72 cmpwi r4,chud_970_mmcr0
74 cmpwi r4,chud_970_mmcr1
76 cmpwi r4,chud_970_mmcra
78 cmpwi r4,chud_970_siar
80 cmpwi r4,chud_970_sdar
84 cmpwi r4,chud_970_rmor
86 cmpwi r4,chud_970_hrmor
88 cmpwi r4,chud_970_hior
90 cmpwi r4,chud_970_lpidr
92 cmpwi r4,chud_970_lpcr
94 cmpwi r4,chud_970_dabrx
96 cmpwi r4,chud_970_hsprg0
98 cmpwi r4,chud_970_hsprg1
100 cmpwi r4,chud_970_hsrr0
102 cmpwi r4,chud_970_hsrr1
104 cmpwi r4,chud_970_hdec
106 cmpwi r4,chud_970_trig0
108 cmpwi r4,chud_970_trig1
110 cmpwi r4,chud_970_trig2
112 cmpwi r4,chud_ppc64_accr
114 cmpwi r4,chud_970_scomc
116 cmpwi r4,chud_970_scomd
122 mfspr r5,chud_ppc_srr0
126 mfspr r5,chud_ppc_srr1
130 mfspr r5,chud_ppc_dar
134 mfspr r5,chud_ppc_sdr1
138 mfspr r5,chud_ppc_sprg0
142 mfspr r5,chud_ppc_sprg1
146 mfspr r5,chud_ppc_sprg2
150 mfspr r5,chud_ppc_sprg3
154 mfspr r5,chud_ppc64_asr
158 mfspr r5,chud_ppc_dabr
162 mfspr r5,chud_970_hid0
166 mfspr r5,chud_970_hid1
170 mfspr r5,chud_970_hid4
174 mfspr r5,chud_970_hid5
178 mfspr r5,chud_970_mmcr0
182 mfspr r5,chud_970_mmcr1
186 mfspr r5,chud_970_mmcra
190 mfspr r5,chud_970_siar
194 mfspr r5,chud_970_sdar
198 mfspr r5,chud_970_imc
202 mfspr r5,chud_970_rmor
206 mfspr r5,chud_970_hrmor
210 mfspr r5,chud_970_hior
214 mfspr r5,chud_970_lpidr
218 mfspr r5,chud_970_lpcr
222 mfspr r5,chud_970_dabrx
226 mfspr r5,chud_970_hsprg0
230 mfspr r5,chud_970_hsprg1
234 mfspr r5,chud_970_hsrr0
238 mfspr r5,chud_970_hsrr1
242 mfspr r5,chud_970_hdec
246 mfspr r5,chud_970_trig0
250 mfspr r5,chud_970_trig1
254 mfspr r5,chud_970_trig2
258 mfspr r5,chud_ppc64_accr
262 mfspr r5,chud_970_scomc
266 mfspr r5,chud_970_scomd
280 * kern_return_t mtspr64(int spr, uint64_t *val);
282 * r3: spr to write to
283 * r4: address to get value from
287 ; Force a line boundry here
292 ;; generic PPC 64-bit wide SPRs
293 cmpwi r3,chud_ppc_srr0
295 cmpwi r3,chud_ppc_srr1
297 cmpwi r3,chud_ppc_dar
299 cmpwi r3,chud_ppc_sdr1
301 cmpwi r3,chud_ppc_sprg0
303 cmpwi r3,chud_ppc_sprg1
305 cmpwi r3,chud_ppc_sprg2
307 cmpwi r3,chud_ppc_sprg3
309 cmpwi r3,chud_ppc64_asr
311 cmpwi r3,chud_ppc_dabr
314 ;; GPUL specific 64-bit wide SPRs
315 cmpwi r3,chud_970_hid0
317 cmpwi r3,chud_970_hid1
319 cmpwi r3,chud_970_hid4
321 cmpwi r3,chud_970_hid5
323 cmpwi r3,chud_970_mmcr0
325 cmpwi r3,chud_970_mmcr1
327 cmpwi r3,chud_970_mmcra
329 cmpwi r3,chud_970_siar
331 cmpwi r3,chud_970_sdar
333 cmpwi r3,chud_970_imc
335 cmpwi r3,chud_970_rmor
337 cmpwi r3,chud_970_hrmor
339 cmpwi r3,chud_970_hior
341 cmpwi r3,chud_970_lpidr
343 cmpwi r3,chud_970_lpcr
345 cmpwi r3,chud_970_dabrx
347 cmpwi r3,chud_970_hsprg0
349 cmpwi r3,chud_970_hsprg1
351 cmpwi r3,chud_970_hsrr0
353 cmpwi r3,chud_970_hsrr1
355 cmpwi r3,chud_970_hdec
357 cmpwi r3,chud_970_trig0
359 cmpwi r3,chud_970_trig1
361 cmpwi r3,chud_970_trig2
363 cmpwi r3,chud_ppc64_accr
365 cmpwi r3,chud_970_scomc
367 cmpwi r3,chud_970_scomd
374 mtspr chud_ppc_srr0,r5
378 mtspr chud_ppc_srr1,r5
382 mtspr chud_ppc_dar,r5
386 mtspr chud_ppc_sdr1,r5
390 mtspr chud_ppc_sprg0,r5
394 mtspr chud_ppc_sprg1,r5
398 mtspr chud_ppc_sprg2,r5
402 mtspr chud_ppc_sprg3,r5
406 mtspr chud_ppc64_asr,r5
410 mtspr chud_ppc_dabr,r5
415 mtspr chud_970_hid0,r5
416 mfspr r5,chud_970_hid0 /* syncronization requirements */
417 mfspr r5,chud_970_hid0
418 mfspr r5,chud_970_hid0
419 mfspr r5,chud_970_hid0
420 mfspr r5,chud_970_hid0
421 mfspr r5,chud_970_hid0
425 mtspr chud_970_hid1,r5 /* tell you twice */
426 mtspr chud_970_hid1,r5
431 sync /* syncronization requirements */
432 mtspr chud_970_hid4,r5
437 mtspr chud_970_hid5,r5
441 mtspr chud_970_mmcr0,r5
445 mtspr chud_970_mmcr1,r5
449 mtspr chud_970_mmcra,r5
453 mtspr chud_970_siar,r5
457 mtspr chud_970_sdar,r5
461 mtspr chud_970_imc,r5
465 mtspr chud_970_rmor,r5
469 mtspr chud_970_hrmor,r5
473 mtspr chud_970_hior,r5
477 mtspr chud_970_lpidr,r5
481 mtspr chud_970_lpcr,r5
485 mtspr chud_970_dabrx,r5
489 mtspr chud_970_hsprg0,r5
493 mtspr chud_970_hsprg1,r5
497 mtspr chud_970_hsrr0,r5
501 mtspr chud_970_hsrr1,r5
505 mtspr chud_970_hdec,r5
509 mtspr chud_970_trig0,r5
513 mtspr chud_970_trig1,r5
517 mtspr chud_970_trig2,r5
521 mtspr chud_ppc64_accr,r5
525 mtspr chud_970_scomc,r5
529 mtspr chud_970_scomd,r5
542 * kern_return_t mfmsr64(uint64_t *val);
544 * r3: address to store value in
548 ; Force a line boundry here
565 * kern_return_t mtmsr64(uint64_t *val);
567 * r3: address to load value from
571 ; Force a line boundry here