xref: /illumos-gate/usr/src/uts/sun4v/cpu/mach_cpu_module.c (revision 59ac0c1669407488b67ae9e273667a340dccc611)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #pragma ident	"%Z%%M%	%I%	%E% SMI"
28 
29 #include <sys/cpu_module.h>
30 #include <vm/page.h>
31 #include <vm/seg_map.h>
32 
33 /*ARGSUSED*/
34 void
35 cpu_fiximp(struct cpu_node *cpunode)
36 {}
37 
38 /*ARGSUSED*/
39 void
40 cpu_map_exec_units(struct cpu *cp)
41 {}
42 
43 void
44 cpu_flush_ecache(void)
45 {}
46 
47 /*ARGSUSED*/
48 void
49 cpu_faulted_enter(struct cpu *cp)
50 {}
51 
52 /*ARGSUSED*/
53 void
54 cpu_faulted_exit(struct cpu *cp)
55 {}
56 
57 /*
58  * Ecache scrub operations
59  */
60 void
61 cpu_init_cache_scrub(void)
62 {}
63 
64 /* ARGSUSED */
65 void
66 prefetch_page_w(void *pp)
67 {
68 #define	ECACHE_SUBBLOCKS_PER_PAGE	2
69 #define	ECACHE_SUBBLOCK_SIZE_BYTES	64
70 #define	ECACHE_PAGE_BYTE_MAX	\
71 	(ECACHE_SUBBLOCKS_PER_PAGE*ECACHE_SUBBLOCK_SIZE_BYTES+1)
72 
73 	/*
74 	 * The following line is intended to cause an error
75 	 * whenever the sun4u page_t grows beyond 128
76 	 * bytes.
77 	 *
78 	 * If you get an error here, you'll need to change
79 	 * the 'prefetch_page_w' assembly language code
80 	 * (see also prefetch_page_w prologue comment)
81 	 */
82 	/*LINTED*/
83 	volatile int garbage[ECACHE_PAGE_BYTE_MAX - sizeof (page_t)];
84 }
85 
86 /* ARGSUSED */
87 void
88 prefetch_page_r(void *pp)
89 {
90 #define	ECACHE_SUBBLOCKS_PER_PAGE	2
91 #define	ECACHE_SUBBLOCK_SIZE_BYTES	64
92 #define	ECACHE_PAGE_BYTE_MAX	\
93 	(ECACHE_SUBBLOCKS_PER_PAGE*ECACHE_SUBBLOCK_SIZE_BYTES+1)
94 
95 	/*
96 	 * The following line is intended to cause an error
97 	 * whenever the sun4u page_t grows beyond 128
98 	 * bytes.
99 	 *
100 	 * If you get an error here, you'll need to change
101 	 * the 'prefetch_page_r' assembly language code
102 	 * (see also prefetch_page_w prologue comment)
103 	 */
104 	/*LINTED*/
105 	volatile int garbage[ECACHE_PAGE_BYTE_MAX - sizeof (page_t)];
106 }
107 
108 
109 #ifdef	SEGKPM_SUPPORT
110 #define	SMAP_SIZE	80
111 #else
112 #define	SMAP_SIZE	56
113 #endif
114 
115 /* ARGSUSED */
116 void
117 prefetch_smap_w(void *smp)
118 {
119 
120 	/*
121 	 * The following lines are intended to cause an error
122 	 * whenever the smap object size changes from the current
123 	 * size of 48 bytes.  If you get an error here, you'll
124 	 * need to update the code in the 'prefetch_smap_w' assembly
125 	 * language code.
126 	 */
127 	/*LINTED*/
128 	volatile int smap_size_changed [SMAP_SIZE - sizeof (struct smap) + 1];
129 	volatile int smap_size_changed2 [sizeof (struct smap) - SMAP_SIZE + 1];
130 }
131 
132 void
133 kdi_flush_caches(void)
134 {}
135 
136 /*ARGSUSED*/
137 int
138 kzero(void *addr, size_t count)
139 { return (0); }
140 
141 /*ARGSUSED*/
142 void
143 uzero(void *addr, size_t count)
144 {}
145 
146 /*ARGSUSED*/
147 void
148 bzero(void *addr, size_t count)
149 {}
150 
151 /*ARGSUSED*/
152 void
153 cpu_inv_tsb(caddr_t tsb_base, uint_t tsb_bytes)
154 {}
155 
156 /*
157  *  Atomic Function Stubs
158  */
159 
160 uint8_t
161 cas8(uint8_t *target, uint8_t value1, uint8_t value2)
162 { return (0); }
163 
164 /* ARGSUSED */
165 uint32_t
166 cas32(uint32_t *target, uint32_t value1, uint32_t value2)
167 { return (0); }
168 
169 /* ARGSUSED */
170 uint64_t
171 cas64(uint64_t *target, uint64_t value1, uint64_t value2)
172 { return (0); }
173 
174 /* ARGSUSED */
175 ulong_t
176 caslong(ulong_t *target, ulong_t value1, ulong_t value2)
177 { return (0); }
178 
179 /* ARGSUSED */
180 void *
181 casptr(void *ptr1, void *ptr2, void *ptr3)
182 { return (0); }
183 
184 /* ARGSUSED */
185 void
186 atomic_and_long(ulong_t *target, ulong_t value)
187 {}
188 
189 /* ARGSUSED */
190 void
191 atomic_or_long(ulong_t *target, ulong_t value)
192 {}
193 
194 /* ARGSUSED */
195 void
196 atomic_inc_8(volatile uint8_t *target)
197 {}
198 
199 /* ARGSUSED */
200 void
201 atomic_inc_uchar(volatile uchar_t *target)
202 {}
203 
204 /* ARGSUSED */
205 void
206 atomic_inc_16(volatile uint16_t *target)
207 {}
208 
209 /* ARGSUSED */
210 void
211 atomic_inc_ushort(volatile ushort_t *target)
212 {}
213 
214 /* ARGSUSED */
215 void
216 atomic_inc_32(volatile uint32_t *target)
217 {}
218 
219 /* ARGSUSED */
220 void
221 atomic_inc_uint(volatile uint_t *target)
222 {}
223 
224 /* ARGSUSED */
225 void
226 atomic_inc_ulong(volatile ulong_t *target)
227 {}
228 
229 /* ARGSUSED */
230 void
231 atomic_inc_64(volatile uint64_t *target)
232 {}
233 
234 /* ARGSUSED */
235 void
236 atomic_dec_8(volatile uint8_t *target)
237 {}
238 
239 /* ARGSUSED */
240 void
241 atomic_dec_uchar(volatile uchar_t *target)
242 {}
243 
244 /* ARGSUSED */
245 void
246 atomic_dec_16(volatile uint16_t *target)
247 {}
248 
249 /* ARGSUSED */
250 void
251 atomic_dec_ushort(volatile ushort_t *target)
252 {}
253 
254 /* ARGSUSED */
255 void
256 atomic_dec_32(volatile uint32_t *target)
257 {}
258 
259 /* ARGSUSED */
260 void
261 atomic_dec_uint(volatile uint_t *target)
262 {}
263 
264 /* ARGSUSED */
265 void
266 atomic_dec_ulong(volatile ulong_t *target)
267 {}
268 
269 /* ARGSUSED */
270 void
271 atomic_dec_64(volatile uint64_t *target)
272 {}
273 
274 /* ARGSUSED */
275 void
276 atomic_add_8(volatile uint8_t *target, int8_t value)
277 {}
278 
279 /* ARGSUSED */
280 void
281 atomic_add_char(volatile uchar_t *target, signed char value)
282 {}
283 
284 /* ARGSUSED */
285 void
286 atomic_add_16(volatile uint16_t *target, int16_t delta)
287 {}
288 
289 /* ARGSUSED */
290 void
291 atomic_add_ushort(volatile ushort_t *target, short value)
292 {}
293 
294 /* ARGSUSED */
295 void
296 atomic_add_32(volatile uint32_t *target, int32_t delta)
297 {}
298 
299 /* ARGSUSED */
300 void
301 atomic_add_ptr(volatile void *target, ssize_t value)
302 {}
303 
304 /* ARGSUSED */
305 void
306 atomic_add_long(volatile ulong_t *target, long delta)
307 {}
308 
309 /* ARGSUSED */
310 void
311 atomic_add_64(volatile uint64_t *target, int64_t delta)
312 {}
313 
314 /* ARGSUSED */
315 void
316 atomic_or_8(volatile uint8_t *target, uint8_t bits)
317 {}
318 
319 /* ARGSUSED */
320 void
321 atomic_or_uchar(volatile uchar_t *target, uchar_t bits)
322 {}
323 
324 /* ARGSUSED */
325 void
326 atomic_or_16(volatile uint16_t *target, uint16_t bits)
327 {}
328 
329 /* ARGSUSED */
330 void
331 atomic_or_ushort(volatile ushort_t *target, ushort_t bits)
332 {}
333 
334 /* ARGSUSED */
335 void
336 atomic_or_32(volatile uint32_t *target, uint32_t bits)
337 {}
338 
339 /* ARGSUSED */
340 void
341 atomic_or_uint(volatile uint_t *target, uint_t bits)
342 {}
343 
344 /* ARGSUSED */
345 void
346 atomic_or_ulong(volatile ulong_t *target, ulong_t bits)
347 {}
348 
349 /* ARGSUSED */
350 void
351 atomic_or_64(volatile uint64_t *target, uint64_t bits)
352 {}
353 
354 /* ARGSUSED */
355 void
356 atomic_and_8(volatile uint8_t *target, uint8_t bits)
357 {}
358 
359 /* ARGSUSED */
360 void
361 atomic_and_uchar(volatile uchar_t *target, uchar_t bits)
362 {}
363 
364 /* ARGSUSED */
365 void
366 atomic_and_16(volatile uint16_t *target, uint16_t bits)
367 {}
368 
369 /* ARGSUSED */
370 void
371 atomic_and_ushort(volatile ushort_t *target, ushort_t bits)
372 {}
373 
374 /* ARGSUSED */
375 void
376 atomic_and_32(volatile uint32_t *target, uint32_t bits)
377 {}
378 
379 /* ARGSUSED */
380 void
381 atomic_and_uint(volatile uint_t *target, uint_t bits)
382 {}
383 
384 /* ARGSUSED */
385 void
386 atomic_and_ulong(volatile ulong_t *target, ulong_t bits)
387 {}
388 
389 /* ARGSUSED */
390 void
391 atomic_and_64(volatile uint64_t *target, uint64_t bits)
392 {}
393 
394 /* ARGSUSED */
395 uint8_t
396 atomic_inc_8_nv(volatile uint8_t *target)
397 { return (0); }
398 
399 /* ARGSUSED */
400 uchar_t
401 atomic_inc_uchar_nv(volatile uchar_t *target)
402 { return (0); }
403 
404 /* ARGSUSED */
405 uint16_t
406 atomic_inc_16_nv(volatile uint16_t *target)
407 { return (0); }
408 
409 /* ARGSUSED */
410 ushort_t
411 atomic_inc_ushort_nv(volatile ushort_t *target)
412 { return (0); }
413 
414 /* ARGSUSED */
415 uint32_t
416 atomic_inc_32_nv(volatile uint32_t *target)
417 { return (0); }
418 
419 /* ARGSUSED */
420 uint_t
421 atomic_inc_uint_nv(volatile uint_t *target)
422 { return (0); }
423 
424 /* ARGSUSED */
425 ulong_t
426 atomic_inc_ulong_nv(volatile ulong_t *target)
427 { return (0); }
428 
429 /* ARGSUSED */
430 uint64_t
431 atomic_inc_64_nv(volatile uint64_t *target)
432 { return (0); }
433 
434 /* ARGSUSED */
435 uint8_t
436 atomic_dec_8_nv(volatile uint8_t *target)
437 { return (0); }
438 
439 /* ARGSUSED */
440 uchar_t
441 atomic_dec_uchar_nv(volatile uchar_t *target)
442 { return (0); }
443 
444 /* ARGSUSED */
445 uint16_t
446 atomic_dec_16_nv(volatile uint16_t *target)
447 { return (0); }
448 
449 /* ARGSUSED */
450 ushort_t
451 atomic_dec_ushort_nv(volatile ushort_t *target)
452 { return (0); }
453 
454 /* ARGSUSED */
455 uint32_t
456 atomic_dec_32_nv(volatile uint32_t *target)
457 { return (0); }
458 
459 /* ARGSUSED */
460 uint_t
461 atomic_dec_uint_nv(volatile uint_t *target)
462 { return (0); }
463 
464 /* ARGSUSED */
465 ulong_t
466 atomic_dec_ulong_nv(volatile ulong_t *target)
467 { return (0); }
468 
469 /* ARGSUSED */
470 uint64_t
471 atomic_dec_64_nv(volatile uint64_t *target)
472 { return (0); }
473 
474 /* ARGSUSED */
475 uint8_t
476 atomic_add_8_nv(volatile uint8_t *target, int8_t value)
477 { return (0); }
478 
479 /* ARGSUSED */
480 uchar_t
481 atomic_add_char_nv(volatile uchar_t *target, signed char value)
482 { return (0); }
483 
484 /* ARGSUSED */
485 uint16_t
486 atomic_add_16_nv(volatile uint16_t *target, int16_t delta)
487 { return (0); }
488 
489 /* ARGSUSED */
490 ushort_t
491 atomic_add_short_nv(volatile ushort_t *target, short value)
492 { return (0); }
493 
494 /* ARGSUSED */
495 uint32_t
496 atomic_add_32_nv(volatile uint32_t *target, int32_t delta)
497 { return (0); }
498 
499 /* ARGSUSED */
500 uint_t
501 atomic_add_int_nv(volatile uint_t *target, int delta)
502 { return (0); }
503 
504 /* ARGSUSED */
505 void *
506 atomic_add_ptr_nv(volatile void *target, ssize_t value)
507 { return (NULL); }
508 
509 /* ARGSUSED */
510 ulong_t
511 atomic_add_long_nv(volatile ulong_t *target, long delta)
512 { return (0); }
513 
514 /* ARGSUSED */
515 uint64_t
516 atomic_add_64_nv(volatile uint64_t *target, int64_t delta)
517 { return (0); }
518 
519 /* ARGSUSED */
520 uint8_t
521 atomic_or_8_nv(volatile uint8_t *target, uint8_t value)
522 { return (0); }
523 
524 /* ARGSUSED */
525 uchar_t
526 atomic_or_uchar_nv(volatile uchar_t *target, uchar_t value)
527 { return (0); }
528 
529 /* ARGSUSED */
530 uint16_t
531 atomic_or_16_nv(volatile uint16_t *target, uint16_t value)
532 { return (0); }
533 
534 /* ARGSUSED */
535 ushort_t
536 atomic_or_ushort_nv(volatile ushort_t *target, ushort_t value)
537 { return (0); }
538 
539 /* ARGSUSED */
540 uint32_t
541 atomic_or_32_nv(volatile uint32_t *target, uint32_t value)
542 { return (0); }
543 
544 /* ARGSUSED */
545 uint_t
546 atomic_or_uint_nv(volatile uint_t *target, uint_t value)
547 { return (0); }
548 
549 /* ARGSUSED */
550 ulong_t
551 atomic_or_ulong_nv(volatile ulong_t *target, ulong_t value)
552 { return (0); }
553 
554 /* ARGSUSED */
555 uint64_t
556 atomic_or_64_nv(volatile uint64_t *target, uint64_t value)
557 { return (0); }
558 
559 /* ARGSUSED */
560 uint8_t
561 atomic_and_8_nv(volatile uint8_t *target, uint8_t value)
562 { return (0); }
563 
564 /* ARGSUSED */
565 uchar_t
566 atomic_and_uchar_nv(volatile uchar_t *target, uchar_t value)
567 { return (0); }
568 
569 /* ARGSUSED */
570 uint16_t
571 atomic_and_16_nv(volatile uint16_t *target, uint16_t value)
572 { return (0); }
573 
574 /* ARGSUSED */
575 ushort_t
576 atomic_and_ushort_nv(volatile ushort_t *target, ushort_t value)
577 { return (0); }
578 
579 /* ARGSUSED */
580 uint32_t
581 atomic_and_32_nv(volatile uint32_t *target, uint32_t value)
582 { return (0); }
583 
584 /* ARGSUSED */
585 uint_t
586 atomic_and_uint_nv(volatile uint_t *target, uint_t value)
587 { return (0); }
588 
589 /* ARGSUSED */
590 ulong_t
591 atomic_and_ulong_nv(volatile ulong_t *target, ulong_t value)
592 { return (0); }
593 
594 /* ARGSUSED */
595 uint64_t
596 atomic_and_64_nv(volatile uint64_t *target, uint64_t value)
597 { return (0); }
598 
599 /* ARGSUSED */
600 uint8_t
601 atomic_cas_8(volatile uint8_t *target, uint8_t cmp, uint8_t new)
602 { return (0); }
603 
604 /* ARGSUSED */
605 uchar_t
606 atomic_cas_uchar(volatile uchar_t *target, uchar_t cmp, uchar_t new)
607 { return (0); }
608 
609 /* ARGSUSED */
610 uint16_t
611 atomic_cas_16(volatile uint16_t *target, uint16_t cmp, uint16_t new)
612 { return (0); }
613 
614 /* ARGSUSED */
615 ushort_t
616 atomic_cas_ushort(volatile ushort_t *target, ushort_t cmp, ushort_t new)
617 { return (0); }
618 
619 /* ARGSUSED */
620 uint32_t
621 atomic_cas_32(volatile uint32_t *target, uint32_t cmp, uint32_t new)
622 { return (0); }
623 
624 /* ARGSUSED */
625 uint_t
626 atomic_cas_uint(volatile uint_t *target, uint_t cmp, uint_t new)
627 { return (0); }
628 
629 /* ARGSUSED */
630 ulong_t
631 atomic_cas_ulong(volatile ulong_t *target, ulong_t cmp, ulong_t new)
632 { return (0); }
633 
634 /* ARGSUSED */
635 uint64_t
636 atomic_cas_uint64(volatile uint64_t *target, ulong_t cmp, uint64_t new)
637 { return (0); }
638 
639 /* ARGSUSED */
640 void *
641 atomic_cas_ptr(volatile void *target, void *cmp, void *new)
642 { return (NULL); }
643 
644 /* ARGSUSED */
645 uint8_t
646 atomic_swap_8(volatile uint8_t *target, uint8_t new)
647 { return (0); }
648 
649 /* ARGSUSED */
650 uchar_t
651 atomic_swap_char(volatile uchar_t *target, uchar_t new)
652 { return (0); }
653 
654 /* ARGSUSED */
655 uint16_t
656 atomic_swap_16(volatile uint16_t *target, uint16_t new)
657 { return (0); }
658 
659 /* ARGSUSED */
660 ushort_t
661 atomic_swap_ushort(volatile ushort_t *target, ushort_t new)
662 { return (0); }
663 
664 /* ARGSUSED */
665 uint32_t
666 atomic_swap_32(volatile uint32_t *target, uint32_t new)
667 { return (0); }
668 
669 /* ARGSUSED */
670 uint_t
671 atomic_swap_uint(volatile uint_t *target, uint_t new)
672 { return (0); }
673 
674 /* ARGSUSED */
675 uint64_t
676 atomic_swap_64(volatile uint64_t *target, uint64_t new)
677 { return (0); }
678 
679 /* ARGSUSED */
680 void *
681 atomic_swap_ptr(volatile void *target, void *new)
682 { return (NULL); }
683 
684 /* ARGSUSED */
685 ulong_t
686 atomic_swap_ulong(volatile ulong_t *target, ulong_t new)
687 { return (0); }
688 
689 /* ARGSUSED */
690 int
691 atomic_set_long_excl(volatile ulong_t *target, uint_t value)
692 { return (0); }
693 
694 /* ARGSUSED */
695 int
696 atomic_clear_long_excl(volatile ulong_t *target, uint_t value)
697 { return (0); }
698 
699 void
700 fp_zero(void)
701 {}
702