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