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 2005 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 #if defined(lint) || defined(__lint)
30 #include <sys/types.h>
31 #include <sys/sunddi.h>
32 #else
33 #include <sys/asm_linkage.h>
34 #include <sys/asm_misc.h>
35 #include "assym.h"
36 #endif
37
38 #if defined(lint) || defined(__lint)
39
40 /*ARGSUSED*/
41 uint8_t
42 ddi_get8(ddi_acc_handle_t handle, uint8_t *addr)
43 {
44 return (0);
45 }
46
47 /*ARGSUSED*/
272
273 ENTRY(ddi_get8)
274 ALTENTRY(ddi_getb)
275 ALTENTRY(ddi_mem_getb)
276 ALTENTRY(ddi_mem_get8)
277 ALTENTRY(ddi_io_getb)
278 ALTENTRY(ddi_io_get8)
279 movl ACC_ATTR(%rdi), %edx
280 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx
281 jne 1f
282 movq %rsi, %rdx
283 xorq %rax, %rax
284 inb (%dx)
285 ret
286 1:
287 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
288 jne 2f
289 movzbq (%rsi), %rax
290 ret
291 2:
292 jmp *ACC_GETB(%rdi)
293 SET_SIZE(ddi_get8)
294 SET_SIZE(ddi_getb)
295 SET_SIZE(ddi_mem_getb)
296 SET_SIZE(ddi_mem_get8)
297 SET_SIZE(ddi_io_getb)
298 SET_SIZE(ddi_io_get8)
299
300 #elif defined(__i386)
301
302 ENTRY(ddi_get8)
303 ALTENTRY(ddi_getb)
304 ALTENTRY(ddi_mem_getb)
305 ALTENTRY(ddi_mem_get8)
306 ALTENTRY(ddi_io_getb)
307 ALTENTRY(ddi_io_get8)
308 movl 4(%esp), %eax
309 movl ACC_ATTR(%eax), %ecx
310 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
311 jne 1f
312 movl 8(%esp), %edx
334
335 ENTRY(ddi_get16)
336 ALTENTRY(ddi_getw)
337 ALTENTRY(ddi_mem_getw)
338 ALTENTRY(ddi_mem_get16)
339 ALTENTRY(ddi_io_getw)
340 ALTENTRY(ddi_io_get16)
341 movl ACC_ATTR(%rdi), %edx
342 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx
343 jne 3f
344 movq %rsi, %rdx
345 xorq %rax, %rax
346 inw (%dx)
347 ret
348 3:
349 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
350 jne 4f
351 movzwq (%rsi), %rax
352 ret
353 4:
354 jmp *ACC_GETW(%rdi)
355 SET_SIZE(ddi_get16)
356 SET_SIZE(ddi_getw)
357 SET_SIZE(ddi_mem_getw)
358 SET_SIZE(ddi_mem_get16)
359 SET_SIZE(ddi_io_getw)
360 SET_SIZE(ddi_io_get16)
361
362 #elif defined(__i386)
363
364 ENTRY(ddi_get16)
365 ALTENTRY(ddi_getw)
366 ALTENTRY(ddi_mem_getw)
367 ALTENTRY(ddi_mem_get16)
368 ALTENTRY(ddi_io_getw)
369 ALTENTRY(ddi_io_get16)
370 movl 4(%esp), %eax
371 movl ACC_ATTR(%eax), %ecx
372 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
373 jne 3f
374 movl 8(%esp), %edx
395 #if defined(__amd64)
396
397 ENTRY(ddi_get32)
398 ALTENTRY(ddi_getl)
399 ALTENTRY(ddi_mem_getl)
400 ALTENTRY(ddi_mem_get32)
401 ALTENTRY(ddi_io_getl)
402 ALTENTRY(ddi_io_get32)
403 movl ACC_ATTR(%rdi), %edx
404 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx
405 jne 5f
406 movq %rsi, %rdx
407 inl (%dx)
408 ret
409 5:
410 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
411 jne 6f
412 movl (%rsi), %eax
413 ret
414 6:
415 jmp *ACC_GETL(%rdi)
416 SET_SIZE(ddi_get32)
417 SET_SIZE(ddi_getl)
418 SET_SIZE(ddi_mem_getl)
419 SET_SIZE(ddi_mem_get32)
420 SET_SIZE(ddi_io_getl)
421 SET_SIZE(ddi_io_get32)
422
423 #elif defined(__i386)
424
425 ENTRY(ddi_get32)
426 ALTENTRY(ddi_getl)
427 ALTENTRY(ddi_mem_getl)
428 ALTENTRY(ddi_mem_get32)
429 ALTENTRY(ddi_io_getl)
430 ALTENTRY(ddi_io_get32)
431 movl 4(%esp), %eax
432 movl ACC_ATTR(%eax), %ecx
433 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
434 jne 5f
435 movl 8(%esp), %edx
441 movl 8(%esp), %eax
442 movl (%eax), %eax
443 ret
444 6:
445 jmp *ACC_GETL(%eax)
446 SET_SIZE(ddi_get32)
447 SET_SIZE(ddi_getl)
448 SET_SIZE(ddi_mem_getl)
449 SET_SIZE(ddi_mem_get32)
450 SET_SIZE(ddi_io_getl)
451 SET_SIZE(ddi_io_get32)
452
453 #endif /* __i386 */
454
455 #if defined(__amd64)
456
457 ENTRY(ddi_get64)
458 ALTENTRY(ddi_getll)
459 ALTENTRY(ddi_mem_getll)
460 ALTENTRY(ddi_mem_get64)
461 jmp *ACC_GETLL(%rdi)
462 SET_SIZE(ddi_get64)
463 SET_SIZE(ddi_getll)
464 SET_SIZE(ddi_mem_getll)
465 SET_SIZE(ddi_mem_get64)
466
467 #elif defined(__i386)
468
469 ENTRY(ddi_get64)
470 ALTENTRY(ddi_getll)
471 ALTENTRY(ddi_mem_getll)
472 ALTENTRY(ddi_mem_get64)
473 movl 4(%esp), %eax
474 jmp *ACC_GETLL(%eax)
475 SET_SIZE(ddi_get64)
476 SET_SIZE(ddi_getll)
477 SET_SIZE(ddi_mem_getll)
478 SET_SIZE(ddi_mem_get64)
479
480 #endif /* __i386 */
481
483
484 ENTRY(ddi_put8)
485 ALTENTRY(ddi_putb)
486 ALTENTRY(ddi_mem_putb)
487 ALTENTRY(ddi_mem_put8)
488 ALTENTRY(ddi_io_putb)
489 ALTENTRY(ddi_io_put8)
490 movl ACC_ATTR(%rdi), %ecx
491 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
492 jne 7f
493 movq %rdx, %rax
494 movq %rsi, %rdx
495 outb (%dx)
496 ret
497 7:
498 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
499 jne 8f
500 movb %dl, (%rsi)
501 ret
502 8:
503 jmp *ACC_PUTB(%rdi)
504 SET_SIZE(ddi_put8)
505 SET_SIZE(ddi_putb)
506 SET_SIZE(ddi_mem_putb)
507 SET_SIZE(ddi_mem_put8)
508 SET_SIZE(ddi_io_putb)
509 SET_SIZE(ddi_io_put8)
510
511 #elif defined(__i386)
512
513 ENTRY(ddi_put8)
514 ALTENTRY(ddi_putb)
515 ALTENTRY(ddi_mem_putb)
516 ALTENTRY(ddi_mem_put8)
517 ALTENTRY(ddi_io_putb)
518 ALTENTRY(ddi_io_put8)
519 movl 4(%esp), %eax
520 movl ACC_ATTR(%eax), %ecx
521 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
522 jne 7f
523 movl 12(%esp), %eax
546
547 ENTRY(ddi_put16)
548 ALTENTRY(ddi_putw)
549 ALTENTRY(ddi_mem_putw)
550 ALTENTRY(ddi_mem_put16)
551 ALTENTRY(ddi_io_putw)
552 ALTENTRY(ddi_io_put16)
553 movl ACC_ATTR(%rdi), %ecx
554 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
555 jne 8f
556 movq %rdx, %rax
557 movq %rsi, %rdx
558 outw (%dx)
559 ret
560 8:
561 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
562 jne 9f
563 movw %dx, (%rsi)
564 ret
565 9:
566 jmp *ACC_PUTW(%rdi)
567 SET_SIZE(ddi_put16)
568 SET_SIZE(ddi_putw)
569 SET_SIZE(ddi_mem_putw)
570 SET_SIZE(ddi_mem_put16)
571 SET_SIZE(ddi_io_putw)
572 SET_SIZE(ddi_io_put16)
573
574 #elif defined(__i386)
575
576 ENTRY(ddi_put16)
577 ALTENTRY(ddi_putw)
578 ALTENTRY(ddi_mem_putw)
579 ALTENTRY(ddi_mem_put16)
580 ALTENTRY(ddi_io_putw)
581 ALTENTRY(ddi_io_put16)
582 movl 4(%esp), %eax
583 movl ACC_ATTR(%eax), %ecx
584 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
585 jne 8f
586 movl 12(%esp), %eax
609
610 ENTRY(ddi_put32)
611 ALTENTRY(ddi_putl)
612 ALTENTRY(ddi_mem_putl)
613 ALTENTRY(ddi_mem_put32)
614 ALTENTRY(ddi_io_putl)
615 ALTENTRY(ddi_io_put32)
616 movl ACC_ATTR(%rdi), %ecx
617 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
618 jne 8f
619 movq %rdx, %rax
620 movq %rsi, %rdx
621 outl (%dx)
622 ret
623 8:
624 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
625 jne 9f
626 movl %edx, (%rsi)
627 ret
628 9:
629 jmp *ACC_PUTL(%rdi)
630 SET_SIZE(ddi_put32)
631 SET_SIZE(ddi_putl)
632 SET_SIZE(ddi_mem_putl)
633 SET_SIZE(ddi_mem_put32)
634 SET_SIZE(ddi_io_putl)
635 SET_SIZE(ddi_io_put32)
636
637 #elif defined(__i386)
638
639 ENTRY(ddi_put32)
640 ALTENTRY(ddi_putl)
641 ALTENTRY(ddi_mem_putl)
642 ALTENTRY(ddi_mem_put32)
643 ALTENTRY(ddi_io_putl)
644 ALTENTRY(ddi_io_put32)
645 movl 4(%esp), %eax
646 movl ACC_ATTR(%eax), %ecx
647 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
648 jne 8f
649 movl 12(%esp), %eax
657 movl 12(%esp), %ecx
658 movl %ecx, (%eax)
659 ret
660 9:
661 jmp *ACC_PUTL(%eax)
662 SET_SIZE(ddi_put32)
663 SET_SIZE(ddi_putl)
664 SET_SIZE(ddi_mem_putl)
665 SET_SIZE(ddi_mem_put32)
666 SET_SIZE(ddi_io_putl)
667 SET_SIZE(ddi_io_put32)
668
669 #endif /* __i386 */
670
671 #if defined(__amd64)
672
673 ENTRY(ddi_put64)
674 ALTENTRY(ddi_putll)
675 ALTENTRY(ddi_mem_putll)
676 ALTENTRY(ddi_mem_put64)
677 jmp *ACC_PUTLL(%rdi)
678 SET_SIZE(ddi_put64)
679 SET_SIZE(ddi_putll)
680 SET_SIZE(ddi_mem_putll)
681 SET_SIZE(ddi_mem_put64)
682
683 #elif defined(__i386)
684
685 ENTRY(ddi_put64)
686 ALTENTRY(ddi_putll)
687 ALTENTRY(ddi_mem_putll)
688 ALTENTRY(ddi_mem_put64)
689 movl 4(%esp), %eax
690 jmp *ACC_PUTLL(%eax)
691 SET_SIZE(ddi_put64)
692 SET_SIZE(ddi_putll)
693 SET_SIZE(ddi_mem_putll)
694 SET_SIZE(ddi_mem_put64)
695
696 #endif /* __i386 */
697
698 #if defined(__amd64)
699
700 ENTRY(ddi_rep_get8)
701 ALTENTRY(ddi_rep_getb)
702 ALTENTRY(ddi_mem_rep_getb)
703 ALTENTRY(ddi_mem_rep_get8)
704 jmp *ACC_REP_GETB(%rdi)
705 SET_SIZE(ddi_rep_get8)
706 SET_SIZE(ddi_rep_getb)
707 SET_SIZE(ddi_mem_rep_getb)
708 SET_SIZE(ddi_mem_rep_get8)
709
710 #elif defined(__i386)
711
712 ENTRY(ddi_rep_get8)
713 ALTENTRY(ddi_rep_getb)
714 ALTENTRY(ddi_mem_rep_getb)
715 ALTENTRY(ddi_mem_rep_get8)
716 movl 4(%esp), %eax
717 jmp *ACC_REP_GETB(%eax)
718 SET_SIZE(ddi_rep_get8)
719 SET_SIZE(ddi_rep_getb)
720 SET_SIZE(ddi_mem_rep_getb)
721 SET_SIZE(ddi_mem_rep_get8)
722
723 #endif /* __i386 */
724
725 #if defined(__amd64)
726
727 ENTRY(ddi_rep_get16)
728 ALTENTRY(ddi_rep_getw)
729 ALTENTRY(ddi_mem_rep_getw)
730 ALTENTRY(ddi_mem_rep_get16)
731 jmp *ACC_REP_GETW(%rdi)
732 SET_SIZE(ddi_rep_get16)
733 SET_SIZE(ddi_rep_getw)
734 SET_SIZE(ddi_mem_rep_getw)
735 SET_SIZE(ddi_mem_rep_get16)
736
737 #elif defined(__i386)
738
739 ENTRY(ddi_rep_get16)
740 ALTENTRY(ddi_rep_getw)
741 ALTENTRY(ddi_mem_rep_getw)
742 ALTENTRY(ddi_mem_rep_get16)
743 movl 4(%esp), %eax
744 jmp *ACC_REP_GETW(%eax)
745 SET_SIZE(ddi_rep_get16)
746 SET_SIZE(ddi_rep_getw)
747 SET_SIZE(ddi_mem_rep_getw)
748 SET_SIZE(ddi_mem_rep_get16)
749
750 #endif /* __i386 */
751
752 #if defined(__amd64)
753
754 ENTRY(ddi_rep_get32)
755 ALTENTRY(ddi_rep_getl)
756 ALTENTRY(ddi_mem_rep_getl)
757 ALTENTRY(ddi_mem_rep_get32)
758 jmp *ACC_REP_GETL(%rdi)
759 SET_SIZE(ddi_rep_get32)
760 SET_SIZE(ddi_rep_getl)
761 SET_SIZE(ddi_mem_rep_getl)
762 SET_SIZE(ddi_mem_rep_get32)
763
764 #elif defined(__i386)
765
766 ENTRY(ddi_rep_get32)
767 ALTENTRY(ddi_rep_getl)
768 ALTENTRY(ddi_mem_rep_getl)
769 ALTENTRY(ddi_mem_rep_get32)
770 movl 4(%esp), %eax
771 jmp *ACC_REP_GETL(%eax)
772 SET_SIZE(ddi_rep_get32)
773 SET_SIZE(ddi_rep_getl)
774 SET_SIZE(ddi_mem_rep_getl)
775 SET_SIZE(ddi_mem_rep_get32)
776
777 #endif /* __i386 */
778
779 #if defined(__amd64)
780
781 ENTRY(ddi_rep_get64)
782 ALTENTRY(ddi_rep_getll)
783 ALTENTRY(ddi_mem_rep_getll)
784 ALTENTRY(ddi_mem_rep_get64)
785 jmp *ACC_REP_GETLL(%rdi)
786 SET_SIZE(ddi_rep_get64)
787 SET_SIZE(ddi_rep_getll)
788 SET_SIZE(ddi_mem_rep_getll)
789 SET_SIZE(ddi_mem_rep_get64)
790
791 #elif defined(__i386)
792
793 ENTRY(ddi_rep_get64)
794 ALTENTRY(ddi_rep_getll)
795 ALTENTRY(ddi_mem_rep_getll)
796 ALTENTRY(ddi_mem_rep_get64)
797 movl 4(%esp), %eax
798 jmp *ACC_REP_GETLL(%eax)
799 SET_SIZE(ddi_rep_get64)
800 SET_SIZE(ddi_rep_getll)
801 SET_SIZE(ddi_mem_rep_getll)
802 SET_SIZE(ddi_mem_rep_get64)
803
804 #endif /* __i386 */
805
806 #if defined(__amd64)
807
808 ENTRY(ddi_rep_put8)
809 ALTENTRY(ddi_rep_putb)
810 ALTENTRY(ddi_mem_rep_putb)
811 ALTENTRY(ddi_mem_rep_put8)
812 jmp *ACC_REP_PUTB(%rdi)
813 SET_SIZE(ddi_rep_put8)
814 SET_SIZE(ddi_rep_putb)
815 SET_SIZE(ddi_mem_rep_putb)
816 SET_SIZE(ddi_mem_rep_put8)
817
818 #elif defined(__i386)
819
820 ENTRY(ddi_rep_put8)
821 ALTENTRY(ddi_rep_putb)
822 ALTENTRY(ddi_mem_rep_putb)
823 ALTENTRY(ddi_mem_rep_put8)
824 movl 4(%esp), %eax
825 jmp *ACC_REP_PUTB(%eax)
826 SET_SIZE(ddi_rep_put8)
827 SET_SIZE(ddi_rep_putb)
828 SET_SIZE(ddi_mem_rep_putb)
829 SET_SIZE(ddi_mem_rep_put8)
830
831 #endif /* __i386 */
832
833 #if defined(__amd64)
834
835 ENTRY(ddi_rep_put16)
836 ALTENTRY(ddi_rep_putw)
837 ALTENTRY(ddi_mem_rep_putw)
838 ALTENTRY(ddi_mem_rep_put16)
839 jmp *ACC_REP_PUTW(%rdi)
840 SET_SIZE(ddi_rep_put16)
841 SET_SIZE(ddi_rep_putw)
842 SET_SIZE(ddi_mem_rep_putw)
843 SET_SIZE(ddi_mem_rep_put16)
844
845 #elif defined(__i386)
846
847 ENTRY(ddi_rep_put16)
848 ALTENTRY(ddi_rep_putw)
849 ALTENTRY(ddi_mem_rep_putw)
850 ALTENTRY(ddi_mem_rep_put16)
851 movl 4(%esp), %eax
852 jmp *ACC_REP_PUTW(%eax)
853 SET_SIZE(ddi_rep_put16)
854 SET_SIZE(ddi_rep_putw)
855 SET_SIZE(ddi_mem_rep_putw)
856 SET_SIZE(ddi_mem_rep_put16)
857
858 #endif /* __i386 */
859
860 #if defined(__amd64)
861
862 ENTRY(ddi_rep_put32)
863 ALTENTRY(ddi_rep_putl)
864 ALTENTRY(ddi_mem_rep_putl)
865 ALTENTRY(ddi_mem_rep_put32)
866 jmp *ACC_REP_PUTL(%rdi)
867 SET_SIZE(ddi_rep_put32)
868 SET_SIZE(ddi_rep_putl)
869 SET_SIZE(ddi_mem_rep_putl)
870 SET_SIZE(ddi_mem_rep_put32)
871
872 #elif defined(__i386)
873
874 ENTRY(ddi_rep_put32)
875 ALTENTRY(ddi_rep_putl)
876 ALTENTRY(ddi_mem_rep_putl)
877 ALTENTRY(ddi_mem_rep_put32)
878 movl 4(%esp), %eax
879 jmp *ACC_REP_PUTL(%eax)
880 SET_SIZE(ddi_rep_put32)
881 SET_SIZE(ddi_rep_putl)
882 SET_SIZE(ddi_mem_rep_putl)
883 SET_SIZE(ddi_mem_rep_put32)
884
885 #endif /* __i386 */
886
887 #if defined(__amd64)
888
889 ENTRY(ddi_rep_put64)
890 ALTENTRY(ddi_rep_putll)
891 ALTENTRY(ddi_mem_rep_putll)
892 ALTENTRY(ddi_mem_rep_put64)
893 jmp *ACC_REP_PUTLL(%rdi)
894 SET_SIZE(ddi_rep_put64)
895 SET_SIZE(ddi_rep_putll)
896 SET_SIZE(ddi_mem_rep_putll)
897 SET_SIZE(ddi_mem_rep_put64)
898
899 #elif defined(__i386)
900
901 ENTRY(ddi_rep_put64)
902 ALTENTRY(ddi_rep_putll)
903 ALTENTRY(ddi_mem_rep_putll)
904 ALTENTRY(ddi_mem_rep_put64)
905 movl 4(%esp), %eax
906 jmp *ACC_REP_PUTLL(%eax)
907 SET_SIZE(ddi_rep_put64)
908 SET_SIZE(ddi_rep_putll)
909 SET_SIZE(ddi_mem_rep_putll)
910 SET_SIZE(ddi_mem_rep_put64)
911
912 #endif /* __i386 */
913
|
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 2005 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
25 */
26
27 /*
28 * Copyright 2019 Joyent, Inc.
29 */
30
31 #if defined(lint) || defined(__lint)
32 #include <sys/types.h>
33 #include <sys/sunddi.h>
34 #else
35 #include <sys/asm_linkage.h>
36 #include <sys/asm_misc.h>
37 #include "assym.h"
38 #endif
39
40 #if defined(lint) || defined(__lint)
41
42 /*ARGSUSED*/
43 uint8_t
44 ddi_get8(ddi_acc_handle_t handle, uint8_t *addr)
45 {
46 return (0);
47 }
48
49 /*ARGSUSED*/
274
275 ENTRY(ddi_get8)
276 ALTENTRY(ddi_getb)
277 ALTENTRY(ddi_mem_getb)
278 ALTENTRY(ddi_mem_get8)
279 ALTENTRY(ddi_io_getb)
280 ALTENTRY(ddi_io_get8)
281 movl ACC_ATTR(%rdi), %edx
282 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx
283 jne 1f
284 movq %rsi, %rdx
285 xorq %rax, %rax
286 inb (%dx)
287 ret
288 1:
289 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
290 jne 2f
291 movzbq (%rsi), %rax
292 ret
293 2:
294 movq ACC_GETB(%rdi), %rax
295 INDIRECT_JMP_REG(rax)
296 SET_SIZE(ddi_get8)
297 SET_SIZE(ddi_getb)
298 SET_SIZE(ddi_mem_getb)
299 SET_SIZE(ddi_mem_get8)
300 SET_SIZE(ddi_io_getb)
301 SET_SIZE(ddi_io_get8)
302
303 #elif defined(__i386)
304
305 ENTRY(ddi_get8)
306 ALTENTRY(ddi_getb)
307 ALTENTRY(ddi_mem_getb)
308 ALTENTRY(ddi_mem_get8)
309 ALTENTRY(ddi_io_getb)
310 ALTENTRY(ddi_io_get8)
311 movl 4(%esp), %eax
312 movl ACC_ATTR(%eax), %ecx
313 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
314 jne 1f
315 movl 8(%esp), %edx
337
338 ENTRY(ddi_get16)
339 ALTENTRY(ddi_getw)
340 ALTENTRY(ddi_mem_getw)
341 ALTENTRY(ddi_mem_get16)
342 ALTENTRY(ddi_io_getw)
343 ALTENTRY(ddi_io_get16)
344 movl ACC_ATTR(%rdi), %edx
345 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx
346 jne 3f
347 movq %rsi, %rdx
348 xorq %rax, %rax
349 inw (%dx)
350 ret
351 3:
352 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
353 jne 4f
354 movzwq (%rsi), %rax
355 ret
356 4:
357 movq ACC_GETW(%rdi), %rax
358 INDIRECT_JMP_REG(rax)
359 SET_SIZE(ddi_get16)
360 SET_SIZE(ddi_getw)
361 SET_SIZE(ddi_mem_getw)
362 SET_SIZE(ddi_mem_get16)
363 SET_SIZE(ddi_io_getw)
364 SET_SIZE(ddi_io_get16)
365
366 #elif defined(__i386)
367
368 ENTRY(ddi_get16)
369 ALTENTRY(ddi_getw)
370 ALTENTRY(ddi_mem_getw)
371 ALTENTRY(ddi_mem_get16)
372 ALTENTRY(ddi_io_getw)
373 ALTENTRY(ddi_io_get16)
374 movl 4(%esp), %eax
375 movl ACC_ATTR(%eax), %ecx
376 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
377 jne 3f
378 movl 8(%esp), %edx
399 #if defined(__amd64)
400
401 ENTRY(ddi_get32)
402 ALTENTRY(ddi_getl)
403 ALTENTRY(ddi_mem_getl)
404 ALTENTRY(ddi_mem_get32)
405 ALTENTRY(ddi_io_getl)
406 ALTENTRY(ddi_io_get32)
407 movl ACC_ATTR(%rdi), %edx
408 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx
409 jne 5f
410 movq %rsi, %rdx
411 inl (%dx)
412 ret
413 5:
414 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
415 jne 6f
416 movl (%rsi), %eax
417 ret
418 6:
419 movq ACC_GETL(%rdi), %rax
420 INDIRECT_JMP_REG(rax)
421 SET_SIZE(ddi_get32)
422 SET_SIZE(ddi_getl)
423 SET_SIZE(ddi_mem_getl)
424 SET_SIZE(ddi_mem_get32)
425 SET_SIZE(ddi_io_getl)
426 SET_SIZE(ddi_io_get32)
427
428 #elif defined(__i386)
429
430 ENTRY(ddi_get32)
431 ALTENTRY(ddi_getl)
432 ALTENTRY(ddi_mem_getl)
433 ALTENTRY(ddi_mem_get32)
434 ALTENTRY(ddi_io_getl)
435 ALTENTRY(ddi_io_get32)
436 movl 4(%esp), %eax
437 movl ACC_ATTR(%eax), %ecx
438 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
439 jne 5f
440 movl 8(%esp), %edx
446 movl 8(%esp), %eax
447 movl (%eax), %eax
448 ret
449 6:
450 jmp *ACC_GETL(%eax)
451 SET_SIZE(ddi_get32)
452 SET_SIZE(ddi_getl)
453 SET_SIZE(ddi_mem_getl)
454 SET_SIZE(ddi_mem_get32)
455 SET_SIZE(ddi_io_getl)
456 SET_SIZE(ddi_io_get32)
457
458 #endif /* __i386 */
459
460 #if defined(__amd64)
461
462 ENTRY(ddi_get64)
463 ALTENTRY(ddi_getll)
464 ALTENTRY(ddi_mem_getll)
465 ALTENTRY(ddi_mem_get64)
466 movq ACC_GETLL(%rdi), %rax
467 INDIRECT_JMP_REG(rax)
468 SET_SIZE(ddi_get64)
469 SET_SIZE(ddi_getll)
470 SET_SIZE(ddi_mem_getll)
471 SET_SIZE(ddi_mem_get64)
472
473 #elif defined(__i386)
474
475 ENTRY(ddi_get64)
476 ALTENTRY(ddi_getll)
477 ALTENTRY(ddi_mem_getll)
478 ALTENTRY(ddi_mem_get64)
479 movl 4(%esp), %eax
480 jmp *ACC_GETLL(%eax)
481 SET_SIZE(ddi_get64)
482 SET_SIZE(ddi_getll)
483 SET_SIZE(ddi_mem_getll)
484 SET_SIZE(ddi_mem_get64)
485
486 #endif /* __i386 */
487
489
490 ENTRY(ddi_put8)
491 ALTENTRY(ddi_putb)
492 ALTENTRY(ddi_mem_putb)
493 ALTENTRY(ddi_mem_put8)
494 ALTENTRY(ddi_io_putb)
495 ALTENTRY(ddi_io_put8)
496 movl ACC_ATTR(%rdi), %ecx
497 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
498 jne 7f
499 movq %rdx, %rax
500 movq %rsi, %rdx
501 outb (%dx)
502 ret
503 7:
504 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
505 jne 8f
506 movb %dl, (%rsi)
507 ret
508 8:
509 movq ACC_PUTB(%rdi), %rax
510 INDIRECT_JMP_REG(rax)
511 SET_SIZE(ddi_put8)
512 SET_SIZE(ddi_putb)
513 SET_SIZE(ddi_mem_putb)
514 SET_SIZE(ddi_mem_put8)
515 SET_SIZE(ddi_io_putb)
516 SET_SIZE(ddi_io_put8)
517
518 #elif defined(__i386)
519
520 ENTRY(ddi_put8)
521 ALTENTRY(ddi_putb)
522 ALTENTRY(ddi_mem_putb)
523 ALTENTRY(ddi_mem_put8)
524 ALTENTRY(ddi_io_putb)
525 ALTENTRY(ddi_io_put8)
526 movl 4(%esp), %eax
527 movl ACC_ATTR(%eax), %ecx
528 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
529 jne 7f
530 movl 12(%esp), %eax
553
554 ENTRY(ddi_put16)
555 ALTENTRY(ddi_putw)
556 ALTENTRY(ddi_mem_putw)
557 ALTENTRY(ddi_mem_put16)
558 ALTENTRY(ddi_io_putw)
559 ALTENTRY(ddi_io_put16)
560 movl ACC_ATTR(%rdi), %ecx
561 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
562 jne 8f
563 movq %rdx, %rax
564 movq %rsi, %rdx
565 outw (%dx)
566 ret
567 8:
568 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
569 jne 9f
570 movw %dx, (%rsi)
571 ret
572 9:
573 movq ACC_PUTW(%rdi), %rax
574 INDIRECT_JMP_REG(rax)
575 SET_SIZE(ddi_put16)
576 SET_SIZE(ddi_putw)
577 SET_SIZE(ddi_mem_putw)
578 SET_SIZE(ddi_mem_put16)
579 SET_SIZE(ddi_io_putw)
580 SET_SIZE(ddi_io_put16)
581
582 #elif defined(__i386)
583
584 ENTRY(ddi_put16)
585 ALTENTRY(ddi_putw)
586 ALTENTRY(ddi_mem_putw)
587 ALTENTRY(ddi_mem_put16)
588 ALTENTRY(ddi_io_putw)
589 ALTENTRY(ddi_io_put16)
590 movl 4(%esp), %eax
591 movl ACC_ATTR(%eax), %ecx
592 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
593 jne 8f
594 movl 12(%esp), %eax
617
618 ENTRY(ddi_put32)
619 ALTENTRY(ddi_putl)
620 ALTENTRY(ddi_mem_putl)
621 ALTENTRY(ddi_mem_put32)
622 ALTENTRY(ddi_io_putl)
623 ALTENTRY(ddi_io_put32)
624 movl ACC_ATTR(%rdi), %ecx
625 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
626 jne 8f
627 movq %rdx, %rax
628 movq %rsi, %rdx
629 outl (%dx)
630 ret
631 8:
632 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
633 jne 9f
634 movl %edx, (%rsi)
635 ret
636 9:
637 movq ACC_PUTL(%rdi), %rax
638 INDIRECT_JMP_REG(rax)
639 SET_SIZE(ddi_put32)
640 SET_SIZE(ddi_putl)
641 SET_SIZE(ddi_mem_putl)
642 SET_SIZE(ddi_mem_put32)
643 SET_SIZE(ddi_io_putl)
644 SET_SIZE(ddi_io_put32)
645
646 #elif defined(__i386)
647
648 ENTRY(ddi_put32)
649 ALTENTRY(ddi_putl)
650 ALTENTRY(ddi_mem_putl)
651 ALTENTRY(ddi_mem_put32)
652 ALTENTRY(ddi_io_putl)
653 ALTENTRY(ddi_io_put32)
654 movl 4(%esp), %eax
655 movl ACC_ATTR(%eax), %ecx
656 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx
657 jne 8f
658 movl 12(%esp), %eax
666 movl 12(%esp), %ecx
667 movl %ecx, (%eax)
668 ret
669 9:
670 jmp *ACC_PUTL(%eax)
671 SET_SIZE(ddi_put32)
672 SET_SIZE(ddi_putl)
673 SET_SIZE(ddi_mem_putl)
674 SET_SIZE(ddi_mem_put32)
675 SET_SIZE(ddi_io_putl)
676 SET_SIZE(ddi_io_put32)
677
678 #endif /* __i386 */
679
680 #if defined(__amd64)
681
682 ENTRY(ddi_put64)
683 ALTENTRY(ddi_putll)
684 ALTENTRY(ddi_mem_putll)
685 ALTENTRY(ddi_mem_put64)
686 movq ACC_PUTLL(%rdi), %rax
687 INDIRECT_JMP_REG(rax)
688 SET_SIZE(ddi_put64)
689 SET_SIZE(ddi_putll)
690 SET_SIZE(ddi_mem_putll)
691 SET_SIZE(ddi_mem_put64)
692
693 #elif defined(__i386)
694
695 ENTRY(ddi_put64)
696 ALTENTRY(ddi_putll)
697 ALTENTRY(ddi_mem_putll)
698 ALTENTRY(ddi_mem_put64)
699 movl 4(%esp), %eax
700 jmp *ACC_PUTLL(%eax)
701 SET_SIZE(ddi_put64)
702 SET_SIZE(ddi_putll)
703 SET_SIZE(ddi_mem_putll)
704 SET_SIZE(ddi_mem_put64)
705
706 #endif /* __i386 */
707
708 #if defined(__amd64)
709
710 ENTRY(ddi_rep_get8)
711 ALTENTRY(ddi_rep_getb)
712 ALTENTRY(ddi_mem_rep_getb)
713 ALTENTRY(ddi_mem_rep_get8)
714 movq ACC_REP_GETB(%rdi), %rax
715 INDIRECT_JMP_REG(rax)
716 SET_SIZE(ddi_rep_get8)
717 SET_SIZE(ddi_rep_getb)
718 SET_SIZE(ddi_mem_rep_getb)
719 SET_SIZE(ddi_mem_rep_get8)
720
721 #elif defined(__i386)
722
723 ENTRY(ddi_rep_get8)
724 ALTENTRY(ddi_rep_getb)
725 ALTENTRY(ddi_mem_rep_getb)
726 ALTENTRY(ddi_mem_rep_get8)
727 movl 4(%esp), %eax
728 jmp *ACC_REP_GETB(%eax)
729 SET_SIZE(ddi_rep_get8)
730 SET_SIZE(ddi_rep_getb)
731 SET_SIZE(ddi_mem_rep_getb)
732 SET_SIZE(ddi_mem_rep_get8)
733
734 #endif /* __i386 */
735
736 #if defined(__amd64)
737
738 ENTRY(ddi_rep_get16)
739 ALTENTRY(ddi_rep_getw)
740 ALTENTRY(ddi_mem_rep_getw)
741 ALTENTRY(ddi_mem_rep_get16)
742 movq ACC_REP_GETW(%rdi), %rax
743 INDIRECT_JMP_REG(rax)
744 SET_SIZE(ddi_rep_get16)
745 SET_SIZE(ddi_rep_getw)
746 SET_SIZE(ddi_mem_rep_getw)
747 SET_SIZE(ddi_mem_rep_get16)
748
749 #elif defined(__i386)
750
751 ENTRY(ddi_rep_get16)
752 ALTENTRY(ddi_rep_getw)
753 ALTENTRY(ddi_mem_rep_getw)
754 ALTENTRY(ddi_mem_rep_get16)
755 movl 4(%esp), %eax
756 jmp *ACC_REP_GETW(%eax)
757 SET_SIZE(ddi_rep_get16)
758 SET_SIZE(ddi_rep_getw)
759 SET_SIZE(ddi_mem_rep_getw)
760 SET_SIZE(ddi_mem_rep_get16)
761
762 #endif /* __i386 */
763
764 #if defined(__amd64)
765
766 ENTRY(ddi_rep_get32)
767 ALTENTRY(ddi_rep_getl)
768 ALTENTRY(ddi_mem_rep_getl)
769 ALTENTRY(ddi_mem_rep_get32)
770 movq ACC_REP_GETL(%rdi), %rax
771 INDIRECT_JMP_REG(rax)
772 SET_SIZE(ddi_rep_get32)
773 SET_SIZE(ddi_rep_getl)
774 SET_SIZE(ddi_mem_rep_getl)
775 SET_SIZE(ddi_mem_rep_get32)
776
777 #elif defined(__i386)
778
779 ENTRY(ddi_rep_get32)
780 ALTENTRY(ddi_rep_getl)
781 ALTENTRY(ddi_mem_rep_getl)
782 ALTENTRY(ddi_mem_rep_get32)
783 movl 4(%esp), %eax
784 jmp *ACC_REP_GETL(%eax)
785 SET_SIZE(ddi_rep_get32)
786 SET_SIZE(ddi_rep_getl)
787 SET_SIZE(ddi_mem_rep_getl)
788 SET_SIZE(ddi_mem_rep_get32)
789
790 #endif /* __i386 */
791
792 #if defined(__amd64)
793
794 ENTRY(ddi_rep_get64)
795 ALTENTRY(ddi_rep_getll)
796 ALTENTRY(ddi_mem_rep_getll)
797 ALTENTRY(ddi_mem_rep_get64)
798 movq ACC_REP_GETLL(%rdi), %rax
799 INDIRECT_JMP_REG(rax)
800 SET_SIZE(ddi_rep_get64)
801 SET_SIZE(ddi_rep_getll)
802 SET_SIZE(ddi_mem_rep_getll)
803 SET_SIZE(ddi_mem_rep_get64)
804
805 #elif defined(__i386)
806
807 ENTRY(ddi_rep_get64)
808 ALTENTRY(ddi_rep_getll)
809 ALTENTRY(ddi_mem_rep_getll)
810 ALTENTRY(ddi_mem_rep_get64)
811 movl 4(%esp), %eax
812 jmp *ACC_REP_GETLL(%eax)
813 SET_SIZE(ddi_rep_get64)
814 SET_SIZE(ddi_rep_getll)
815 SET_SIZE(ddi_mem_rep_getll)
816 SET_SIZE(ddi_mem_rep_get64)
817
818 #endif /* __i386 */
819
820 #if defined(__amd64)
821
822 ENTRY(ddi_rep_put8)
823 ALTENTRY(ddi_rep_putb)
824 ALTENTRY(ddi_mem_rep_putb)
825 ALTENTRY(ddi_mem_rep_put8)
826 movq ACC_REP_PUTB(%rdi), %rax
827 INDIRECT_JMP_REG(rax)
828 SET_SIZE(ddi_rep_put8)
829 SET_SIZE(ddi_rep_putb)
830 SET_SIZE(ddi_mem_rep_putb)
831 SET_SIZE(ddi_mem_rep_put8)
832
833 #elif defined(__i386)
834
835 ENTRY(ddi_rep_put8)
836 ALTENTRY(ddi_rep_putb)
837 ALTENTRY(ddi_mem_rep_putb)
838 ALTENTRY(ddi_mem_rep_put8)
839 movl 4(%esp), %eax
840 jmp *ACC_REP_PUTB(%eax)
841 SET_SIZE(ddi_rep_put8)
842 SET_SIZE(ddi_rep_putb)
843 SET_SIZE(ddi_mem_rep_putb)
844 SET_SIZE(ddi_mem_rep_put8)
845
846 #endif /* __i386 */
847
848 #if defined(__amd64)
849
850 ENTRY(ddi_rep_put16)
851 ALTENTRY(ddi_rep_putw)
852 ALTENTRY(ddi_mem_rep_putw)
853 ALTENTRY(ddi_mem_rep_put16)
854 movq ACC_REP_PUTW(%rdi), %rax
855 INDIRECT_JMP_REG(rax)
856 SET_SIZE(ddi_rep_put16)
857 SET_SIZE(ddi_rep_putw)
858 SET_SIZE(ddi_mem_rep_putw)
859 SET_SIZE(ddi_mem_rep_put16)
860
861 #elif defined(__i386)
862
863 ENTRY(ddi_rep_put16)
864 ALTENTRY(ddi_rep_putw)
865 ALTENTRY(ddi_mem_rep_putw)
866 ALTENTRY(ddi_mem_rep_put16)
867 movl 4(%esp), %eax
868 jmp *ACC_REP_PUTW(%eax)
869 SET_SIZE(ddi_rep_put16)
870 SET_SIZE(ddi_rep_putw)
871 SET_SIZE(ddi_mem_rep_putw)
872 SET_SIZE(ddi_mem_rep_put16)
873
874 #endif /* __i386 */
875
876 #if defined(__amd64)
877
878 ENTRY(ddi_rep_put32)
879 ALTENTRY(ddi_rep_putl)
880 ALTENTRY(ddi_mem_rep_putl)
881 ALTENTRY(ddi_mem_rep_put32)
882 movq ACC_REP_PUTL(%rdi), %rax
883 INDIRECT_JMP_REG(rax)
884 SET_SIZE(ddi_rep_put32)
885 SET_SIZE(ddi_rep_putl)
886 SET_SIZE(ddi_mem_rep_putl)
887 SET_SIZE(ddi_mem_rep_put32)
888
889 #elif defined(__i386)
890
891 ENTRY(ddi_rep_put32)
892 ALTENTRY(ddi_rep_putl)
893 ALTENTRY(ddi_mem_rep_putl)
894 ALTENTRY(ddi_mem_rep_put32)
895 movl 4(%esp), %eax
896 jmp *ACC_REP_PUTL(%eax)
897 SET_SIZE(ddi_rep_put32)
898 SET_SIZE(ddi_rep_putl)
899 SET_SIZE(ddi_mem_rep_putl)
900 SET_SIZE(ddi_mem_rep_put32)
901
902 #endif /* __i386 */
903
904 #if defined(__amd64)
905
906 ENTRY(ddi_rep_put64)
907 ALTENTRY(ddi_rep_putll)
908 ALTENTRY(ddi_mem_rep_putll)
909 ALTENTRY(ddi_mem_rep_put64)
910 movq ACC_REP_PUTLL(%rdi), %rax
911 INDIRECT_JMP_REG(rax)
912 SET_SIZE(ddi_rep_put64)
913 SET_SIZE(ddi_rep_putll)
914 SET_SIZE(ddi_mem_rep_putll)
915 SET_SIZE(ddi_mem_rep_put64)
916
917 #elif defined(__i386)
918
919 ENTRY(ddi_rep_put64)
920 ALTENTRY(ddi_rep_putll)
921 ALTENTRY(ddi_mem_rep_putll)
922 ALTENTRY(ddi_mem_rep_put64)
923 movl 4(%esp), %eax
924 jmp *ACC_REP_PUTLL(%eax)
925 SET_SIZE(ddi_rep_put64)
926 SET_SIZE(ddi_rep_putll)
927 SET_SIZE(ddi_mem_rep_putll)
928 SET_SIZE(ddi_mem_rep_put64)
929
930 #endif /* __i386 */
931
|