ddi_i86_asm.s revision 545:5aee29e2128c
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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 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#ifdef _LP64 41 42/*ARGSUSED*/ 43uint8_t 44ddi_get8(ddi_acc_handle_t handle, uint8_t *addr) 45{ 46 return (0); 47} 48 49/*ARGSUSED*/ 50uint8_t 51ddi_mem_get8(ddi_acc_handle_t handle, uint8_t *addr) 52{ 53 return (0); 54} 55 56/*ARGSUSED*/ 57uint8_t 58ddi_io_get8(ddi_acc_handle_t handle, uint8_t *dev_addr) 59{ 60 return (0); 61} 62 63/*ARGSUSED*/ 64uint16_t 65ddi_get16(ddi_acc_handle_t handle, uint16_t *addr) 66{ 67 return (0); 68} 69 70/*ARGSUSED*/ 71uint16_t 72ddi_mem_get16(ddi_acc_handle_t handle, uint16_t *addr) 73{ 74 return (0); 75} 76 77/*ARGSUSED*/ 78uint16_t 79ddi_io_get16(ddi_acc_handle_t handle, uint16_t *dev_addr) 80{ 81 return (0); 82} 83 84/*ARGSUSED*/ 85uint32_t 86ddi_get32(ddi_acc_handle_t handle, uint32_t *addr) 87{ 88 return (0); 89} 90 91/*ARGSUSED*/ 92uint32_t 93ddi_mem_get32(ddi_acc_handle_t handle, uint32_t *addr) 94{ 95 return (0); 96} 97 98/*ARGSUSED*/ 99uint32_t 100ddi_io_get32(ddi_acc_handle_t handle, uint32_t *dev_addr) 101{ 102 return (0); 103} 104 105/*ARGSUSED*/ 106uint64_t 107ddi_get64(ddi_acc_handle_t handle, uint64_t *addr) 108{ 109 return (0); 110} 111 112/*ARGSUSED*/ 113uint64_t 114ddi_mem_get64(ddi_acc_handle_t handle, uint64_t *addr) 115{ 116 return (0); 117} 118 119/*ARGSUSED*/ 120void 121ddi_put8(ddi_acc_handle_t handle, uint8_t *addr, uint8_t value) 122{} 123 124/*ARGSUSED*/ 125void 126ddi_mem_put8(ddi_acc_handle_t handle, uint8_t *dev_addr, uint8_t value) 127{} 128 129/*ARGSUSED*/ 130void 131ddi_io_put8(ddi_acc_handle_t handle, uint8_t *dev_addr, uint8_t value) 132{} 133 134/*ARGSUSED*/ 135void 136ddi_put16(ddi_acc_handle_t handle, uint16_t *addr, uint16_t value) 137{} 138 139/*ARGSUSED*/ 140void 141ddi_mem_put16(ddi_acc_handle_t handle, uint16_t *dev_addr, uint16_t value) 142{} 143 144/*ARGSUSED*/ 145void 146ddi_io_put16(ddi_acc_handle_t handle, uint16_t *dev_addr, uint16_t value) 147{} 148 149/*ARGSUSED*/ 150void 151ddi_put32(ddi_acc_handle_t handle, uint32_t *addr, uint32_t value) 152{} 153 154/*ARGSUSED*/ 155void 156ddi_mem_put32(ddi_acc_handle_t handle, uint32_t *dev_addr, uint32_t value) 157{} 158 159/*ARGSUSED*/ 160void 161ddi_io_put32(ddi_acc_handle_t handle, uint32_t *dev_addr, uint32_t value) 162{} 163 164/*ARGSUSED*/ 165void 166ddi_put64(ddi_acc_handle_t handle, uint64_t *addr, uint64_t value) 167{} 168 169/*ARGSUSED*/ 170void 171ddi_mem_put64(ddi_acc_handle_t handle, uint64_t *dev_addr, uint64_t value) 172{} 173 174/*ARGSUSED*/ 175void 176ddi_rep_get8(ddi_acc_handle_t handle, uint8_t *host_addr, uint8_t *dev_addr, 177 size_t repcount, uint_t flags) 178{} 179 180/*ARGSUSED*/ 181void 182ddi_rep_get16(ddi_acc_handle_t handle, uint16_t *host_addr, uint16_t *dev_addr, 183 size_t repcount, uint_t flags) 184{} 185 186/*ARGSUSED*/ 187void 188ddi_rep_get32(ddi_acc_handle_t handle, uint32_t *host_addr, uint32_t *dev_addr, 189 size_t repcount, uint_t flags) 190{} 191 192/*ARGSUSED*/ 193void 194ddi_rep_get64(ddi_acc_handle_t handle, uint64_t *host_addr, uint64_t *dev_addr, 195 size_t repcount, uint_t flags) 196{} 197 198/*ARGSUSED*/ 199void 200ddi_rep_put8(ddi_acc_handle_t handle, uint8_t *host_addr, uint8_t *dev_addr, 201 size_t repcount, uint_t flags) 202{} 203 204/*ARGSUSED*/ 205void 206ddi_rep_put16(ddi_acc_handle_t handle, uint16_t *host_addr, uint16_t *dev_addr, 207 size_t repcount, uint_t flags) 208{} 209 210/*ARGSUSED*/ 211void 212ddi_rep_put32(ddi_acc_handle_t handle, uint32_t *host_addr, uint32_t *dev_addr, 213 size_t repcount, uint_t flags) 214{} 215 216/*ARGSUSED*/ 217void 218ddi_rep_put64(ddi_acc_handle_t handle, uint64_t *host_addr, uint64_t *dev_addr, 219 size_t repcount, uint_t flags) 220{} 221 222/*ARGSUSED*/ 223void 224ddi_mem_rep_get8(ddi_acc_handle_t handle, uint8_t *host_addr, 225 uint8_t *dev_addr, size_t repcount, uint_t flags) 226{} 227 228/*ARGSUSED*/ 229void 230ddi_mem_rep_get16(ddi_acc_handle_t handle, uint16_t *host_addr, 231 uint16_t *dev_addr, size_t repcount, uint_t flags) 232{} 233 234/*ARGSUSED*/ 235void 236ddi_mem_rep_get32(ddi_acc_handle_t handle, uint32_t *host_addr, 237 uint32_t *dev_addr, size_t repcount, uint_t flags) 238{} 239 240/*ARGSUSED*/ 241void 242ddi_mem_rep_get64(ddi_acc_handle_t handle, uint64_t *host_addr, 243 uint64_t *dev_addr, size_t repcount, uint_t flags) 244{} 245 246/*ARGSUSED*/ 247void 248ddi_mem_rep_put8(ddi_acc_handle_t handle, uint8_t *host_addr, 249 uint8_t *dev_addr, size_t repcount, uint_t flags) 250{} 251 252/*ARGSUSED*/ 253void 254ddi_mem_rep_put16(ddi_acc_handle_t handle, uint16_t *host_addr, 255 uint16_t *dev_addr, size_t repcount, uint_t flags) 256{} 257 258/*ARGSUSED*/ 259void 260ddi_mem_rep_put32(ddi_acc_handle_t handle, uint32_t *host_addr, 261 uint32_t *dev_addr, size_t repcount, uint_t flags) 262{} 263 264/*ARGSUSED*/ 265void 266ddi_mem_rep_put64(ddi_acc_handle_t handle, uint64_t *host_addr, 267 uint64_t *dev_addr, size_t repcount, uint_t flags) 268{} 269 270#else /* _ILP32 */ 271 272uint8_t 273ddi_io_getb(ddi_acc_handle_t handle, uint8_t *addr) 274{ 275 return ((((ddi_acc_impl_t *)handle)->ahi_get8) 276 ((ddi_acc_impl_t *)handle, addr)); 277} 278 279uint16_t 280ddi_getw(ddi_acc_handle_t handle, uint16_t *addr) 281{ 282 return ((((ddi_acc_impl_t *)handle)->ahi_get16) 283 ((ddi_acc_impl_t *)handle, addr)); 284} 285 286uint16_t 287ddi_mem_getw(ddi_acc_handle_t handle, uint16_t *addr) 288{ 289 return ((((ddi_acc_impl_t *)handle)->ahi_get16) 290 ((ddi_acc_impl_t *)handle, addr)); 291} 292 293uint16_t 294ddi_io_getw(ddi_acc_handle_t handle, uint16_t *addr) 295{ 296 return ((((ddi_acc_impl_t *)handle)->ahi_get16) 297 ((ddi_acc_impl_t *)handle, addr)); 298} 299 300uint32_t 301ddi_getl(ddi_acc_handle_t handle, uint32_t *addr) 302{ 303 return ((((ddi_acc_impl_t *)handle)->ahi_get32) 304 ((ddi_acc_impl_t *)handle, addr)); 305} 306 307uint32_t 308ddi_mem_getl(ddi_acc_handle_t handle, uint32_t *addr) 309{ 310 return ((((ddi_acc_impl_t *)handle)->ahi_get32) 311 ((ddi_acc_impl_t *)handle, addr)); 312} 313 314uint32_t 315ddi_io_getl(ddi_acc_handle_t handle, uint32_t *addr) 316{ 317 return ((((ddi_acc_impl_t *)handle)->ahi_get32) 318 ((ddi_acc_impl_t *)handle, addr)); 319} 320 321uint64_t 322ddi_getll(ddi_acc_handle_t handle, uint64_t *addr) 323{ 324 return ((((ddi_acc_impl_t *)handle)->ahi_get64) 325 ((ddi_acc_impl_t *)handle, addr)); 326} 327 328uint64_t 329ddi_mem_getll(ddi_acc_handle_t handle, uint64_t *addr) 330{ 331 return ((((ddi_acc_impl_t *)handle)->ahi_get64) 332 ((ddi_acc_impl_t *)handle, addr)); 333} 334 335void 336ddi_putb(ddi_acc_handle_t handle, uint8_t *addr, uint8_t value) 337{ 338 (((ddi_acc_impl_t *)handle)->ahi_put8) 339 ((ddi_acc_impl_t *)handle, addr, value); 340} 341 342void 343ddi_mem_putb(ddi_acc_handle_t handle, uint8_t *addr, uint8_t value) 344{ 345 (((ddi_acc_impl_t *)handle)->ahi_put8) 346 ((ddi_acc_impl_t *)handle, addr, value); 347} 348 349void 350ddi_io_putb(ddi_acc_handle_t handle, uint8_t *addr, uint8_t value) 351{ 352 (((ddi_acc_impl_t *)handle)->ahi_put8) 353 ((ddi_acc_impl_t *)handle, addr, value); 354} 355 356void 357ddi_put16(ddi_acc_handle_t handle, uint16_t *addr, uint16_t value) 358{ 359 (((ddi_acc_impl_t *)handle)->ahi_put16) 360 ((ddi_acc_impl_t *)handle, addr, value); 361} 362 363void 364ddi_mem_putw(ddi_acc_handle_t handle, uint16_t *addr, uint16_t value) 365{ 366 (((ddi_acc_impl_t *)handle)->ahi_put16) 367 ((ddi_acc_impl_t *)handle, addr, value); 368} 369 370void 371ddi_io_putw(ddi_acc_handle_t handle, uint16_t *addr, uint16_t value) 372{ 373 (((ddi_acc_impl_t *)handle)->ahi_put16) 374 ((ddi_acc_impl_t *)handle, addr, value); 375} 376 377void 378ddi_putl(ddi_acc_handle_t handle, uint32_t *addr, uint32_t value) 379{ 380 (((ddi_acc_impl_t *)handle)->ahi_put32) 381 ((ddi_acc_impl_t *)handle, addr, value); 382} 383 384void 385ddi_mem_putl(ddi_acc_handle_t handle, uint32_t *addr, uint32_t value) 386{ 387 (((ddi_acc_impl_t *)handle)->ahi_put32) 388 ((ddi_acc_impl_t *)handle, addr, value); 389} 390 391void 392ddi_io_putl(ddi_acc_handle_t handle, uint32_t *addr, uint32_t value) 393{ 394 (((ddi_acc_impl_t *)handle)->ahi_put32) 395 ((ddi_acc_impl_t *)handle, addr, value); 396} 397 398void 399ddi_putll(ddi_acc_handle_t handle, uint64_t *addr, uint64_t value) 400{ 401 (((ddi_acc_impl_t *)handle)->ahi_put64) 402 ((ddi_acc_impl_t *)handle, addr, value); 403} 404 405void 406ddi_mem_putll(ddi_acc_handle_t handle, uint64_t *addr, uint64_t value) 407{ 408 (((ddi_acc_impl_t *)handle)->ahi_put64) 409 ((ddi_acc_impl_t *)handle, addr, value); 410} 411 412/*ARGSUSED*/ 413void 414ddi_rep_getb(ddi_acc_handle_t handle, uint8_t *host_addr, uint8_t *dev_addr, 415 size_t repcount, uint_t flags) 416{} 417 418/*ARGSUSED*/ 419void 420ddi_rep_getw(ddi_acc_handle_t handle, uint16_t *host_addr, uint16_t *dev_addr, 421 size_t repcount, uint_t flags) 422{} 423 424/*ARGSUSED*/ 425void 426ddi_rep_getl(ddi_acc_handle_t handle, uint32_t *host_addr, uint32_t *dev_addr, 427 size_t repcount, uint_t flags) 428{} 429 430/*ARGSUSED*/ 431void 432ddi_rep_getll(ddi_acc_handle_t handle, uint64_t *host_addr, uint64_t *dev_addr, 433 size_t repcount, uint_t flags) 434{} 435 436/*ARGSUSED*/ 437void 438ddi_rep_putb(ddi_acc_handle_t handle, uint8_t *host_addr, uint8_t *dev_addr, 439 size_t repcount, uint_t flags) 440{} 441 442/*ARGSUSED*/ 443void 444ddi_rep_putw(ddi_acc_handle_t handle, uint16_t *host_addr, uint16_t *dev_addr, 445 size_t repcount, uint_t flags) 446{} 447 448/*ARGSUSED*/ 449void 450ddi_rep_putl(ddi_acc_handle_t handle, uint32_t *host_addr, uint32_t *dev_addr, 451 size_t repcount, uint_t flags) 452{} 453 454/*ARGSUSED*/ 455void 456ddi_rep_putll(ddi_acc_handle_t handle, uint64_t *host_addr, uint64_t *dev_addr, 457 size_t repcount, uint_t flags) 458{} 459 460/*ARGSUSED*/ 461void 462ddi_mem_rep_getb(ddi_acc_handle_t handle, uint8_t *host_addr, 463 uint8_t *dev_addr, size_t repcount, uint_t flags) 464{} 465 466/*ARGSUSED*/ 467void 468ddi_mem_rep_getw(ddi_acc_handle_t handle, uint16_t *host_addr, 469 uint16_t *dev_addr, size_t repcount, uint_t flags) 470{} 471 472/*ARGSUSED*/ 473void 474ddi_mem_rep_getl(ddi_acc_handle_t handle, uint32_t *host_addr, 475 uint32_t *dev_addr, size_t repcount, uint_t flags) 476{} 477 478/*ARGSUSED*/ 479void 480ddi_mem_rep_getll(ddi_acc_handle_t handle, uint64_t *host_addr, 481 uint64_t *dev_addr, size_t repcount, uint_t flags) 482{} 483 484/*ARGSUSED*/ 485void 486ddi_mem_rep_putb(ddi_acc_handle_t handle, uint8_t *host_addr, 487 uint8_t *dev_addr, size_t repcount, uint_t flags) 488{} 489 490/*ARGSUSED*/ 491void 492ddi_mem_rep_putw(ddi_acc_handle_t handle, uint16_t *host_addr, 493 uint16_t *dev_addr, size_t repcount, uint_t flags) 494{} 495 496/*ARGSUSED*/ 497void 498ddi_mem_rep_putl(ddi_acc_handle_t handle, uint32_t *host_addr, 499 uint32_t *dev_addr, size_t repcount, uint_t flags) 500{} 501 502/*ARGSUSED*/ 503void 504ddi_mem_rep_putll(ddi_acc_handle_t handle, uint64_t *host_addr, 505 uint64_t *dev_addr, size_t repcount, uint_t flags) 506{} 507 508#endif /* _LP64 */ 509 510#else /* lint */ 511 512 513#if defined(__amd64) 514 515 ENTRY(ddi_getb) 516 ALTENTRY(ddi_get8) 517 ALTENTRY(ddi_mem_getb) 518 ALTENTRY(ddi_mem_get8) 519 ALTENTRY(ddi_io_getb) 520 ALTENTRY(ddi_io_get8) 521 movl ACC_ATTR(%rdi), %edx 522 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx 523 jne 1f 524 movq %rsi, %rdx 525 xorq %rax, %rax 526 inb (%dx) 527 ret 5281: 529 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx 530 jne 2f 531 movzbq (%rsi), %rax 532 ret 5332: 534 jmp *ACC_GETB(%rdi) 535 SET_SIZE(ddi_getb) 536 SET_SIZE(ddi_get8) 537 SET_SIZE(ddi_mem_getb) 538 SET_SIZE(ddi_mem_get8) 539 SET_SIZE(ddi_io_getb) 540 SET_SIZE(ddi_io_get8) 541 542#elif defined(__i386) 543 544 ENTRY(ddi_getb) 545 ALTENTRY(ddi_get8) 546 ALTENTRY(ddi_mem_getb) 547 ALTENTRY(ddi_mem_get8) 548 ALTENTRY(ddi_io_getb) 549 ALTENTRY(ddi_io_get8) 550 movl 4(%esp), %eax 551 movl ACC_ATTR(%eax), %ecx 552 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 553 jne 1f 554 movl 8(%esp), %edx 555 xorl %eax, %eax 556 inb (%dx) 557 ret 5581: 559 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 560 jne 2f 561 movl 8(%esp), %eax 562 movzbl (%eax), %eax 563 ret 5642: 565 jmp *ACC_GETB(%eax) 566 SET_SIZE(ddi_getb) 567 SET_SIZE(ddi_get8) 568 SET_SIZE(ddi_mem_getb) 569 SET_SIZE(ddi_mem_get8) 570 SET_SIZE(ddi_io_getb) 571 SET_SIZE(ddi_io_get8) 572 573#endif /* __i386 */ 574 575#if defined(__amd64) 576 577 ENTRY(ddi_getw) 578 ALTENTRY(ddi_get16) 579 ALTENTRY(ddi_mem_getw) 580 ALTENTRY(ddi_mem_get16) 581 ALTENTRY(ddi_io_getw) 582 ALTENTRY(ddi_io_get16) 583 movl ACC_ATTR(%rdi), %edx 584 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx 585 jne 3f 586 movq %rsi, %rdx 587 xorq %rax, %rax 588 inw (%dx) 589 ret 5903: 591 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx 592 jne 4f 593 movzwq (%rsi), %rax 594 ret 5954: 596 jmp *ACC_GETW(%rdi) 597 SET_SIZE(ddi_getw) 598 SET_SIZE(ddi_get16) 599 SET_SIZE(ddi_mem_getw) 600 SET_SIZE(ddi_mem_get16) 601 SET_SIZE(ddi_io_getw) 602 SET_SIZE(ddi_io_get16) 603 604#elif defined(__i386) 605 606 ENTRY(ddi_getw) 607 ALTENTRY(ddi_get16) 608 ALTENTRY(ddi_mem_getw) 609 ALTENTRY(ddi_mem_get16) 610 ALTENTRY(ddi_io_getw) 611 ALTENTRY(ddi_io_get16) 612 movl 4(%esp), %eax 613 movl ACC_ATTR(%eax), %ecx 614 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 615 jne 3f 616 movl 8(%esp), %edx 617 xorl %eax, %eax 618 inw (%dx) 619 ret 6203: 621 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 622 jne 4f 623 movl 8(%esp), %eax 624 movzwl (%eax), %eax 625 ret 6264: 627 jmp *ACC_GETW(%eax) 628 SET_SIZE(ddi_getw) 629 SET_SIZE(ddi_get16) 630 SET_SIZE(ddi_mem_getw) 631 SET_SIZE(ddi_mem_get16) 632 SET_SIZE(ddi_io_getw) 633 SET_SIZE(ddi_io_get16) 634 635#endif /* __i386 */ 636 637#if defined(__amd64) 638 639 ENTRY(ddi_getl) 640 ALTENTRY(ddi_get32) 641 ALTENTRY(ddi_mem_getl) 642 ALTENTRY(ddi_mem_get32) 643 ALTENTRY(ddi_io_getl) 644 ALTENTRY(ddi_io_get32) 645 movl ACC_ATTR(%rdi), %edx 646 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %edx 647 jne 5f 648 movq %rsi, %rdx 649 inl (%dx) 650 ret 6515: 652 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx 653 jne 6f 654 movl (%rsi), %eax 655 ret 6566: 657 jmp *ACC_GETL(%rdi) 658 SET_SIZE(ddi_getl) 659 SET_SIZE(ddi_get32) 660 SET_SIZE(ddi_mem_getl) 661 SET_SIZE(ddi_mem_get32) 662 SET_SIZE(ddi_io_getl) 663 SET_SIZE(ddi_io_get32) 664 665#elif defined(__i386) 666 667 ENTRY(ddi_getl) 668 ALTENTRY(ddi_get32) 669 ALTENTRY(ddi_mem_getl) 670 ALTENTRY(ddi_mem_get32) 671 ALTENTRY(ddi_io_getl) 672 ALTENTRY(ddi_io_get32) 673 movl 4(%esp), %eax 674 movl ACC_ATTR(%eax), %ecx 675 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 676 jne 5f 677 movl 8(%esp), %edx 678 inl (%dx) 679 ret 6805: 681 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 682 jne 6f 683 movl 8(%esp), %eax 684 movl (%eax), %eax 685 ret 6866: 687 jmp *ACC_GETL(%eax) 688 SET_SIZE(ddi_getl) 689 SET_SIZE(ddi_get32) 690 SET_SIZE(ddi_mem_getl) 691 SET_SIZE(ddi_mem_get32) 692 SET_SIZE(ddi_io_getl) 693 SET_SIZE(ddi_io_get32) 694 695#endif /* __i386 */ 696 697#if defined(__amd64) 698 699 ENTRY(ddi_getll) 700 ALTENTRY(ddi_get64) 701 ALTENTRY(ddi_mem_getll) 702 ALTENTRY(ddi_mem_get64) 703 jmp *ACC_GETLL(%rdi) 704 SET_SIZE(ddi_getll) 705 SET_SIZE(ddi_get64) 706 SET_SIZE(ddi_mem_getll) 707 SET_SIZE(ddi_mem_get64) 708 709#elif defined(__i386) 710 711 ENTRY(ddi_getll) 712 ALTENTRY(ddi_get64) 713 ALTENTRY(ddi_mem_getll) 714 ALTENTRY(ddi_mem_get64) 715 movl 4(%esp), %eax 716 jmp *ACC_GETLL(%eax) 717 SET_SIZE(ddi_getll) 718 SET_SIZE(ddi_get64) 719 SET_SIZE(ddi_mem_getll) 720 SET_SIZE(ddi_mem_get64) 721 722#endif /* __i386 */ 723 724#if defined(__amd64) 725 726 ENTRY(ddi_putb) 727 ALTENTRY(ddi_put8) 728 ALTENTRY(ddi_mem_putb) 729 ALTENTRY(ddi_mem_put8) 730 ALTENTRY(ddi_io_putb) 731 ALTENTRY(ddi_io_put8) 732 movl ACC_ATTR(%rdi), %ecx 733 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 734 jne 7f 735 movq %rdx, %rax 736 movq %rsi, %rdx 737 outb (%dx) 738 ret 7397: 740 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 741 jne 8f 742 movb %dl, (%rsi) 743 ret 7448: 745 jmp *ACC_PUTB(%rdi) 746 SET_SIZE(ddi_putb) 747 SET_SIZE(ddi_put8) 748 SET_SIZE(ddi_mem_putb) 749 SET_SIZE(ddi_mem_put8) 750 SET_SIZE(ddi_io_putb) 751 SET_SIZE(ddi_io_put8) 752 753#elif defined(__i386) 754 755 ENTRY(ddi_putb) 756 ALTENTRY(ddi_put8) 757 ALTENTRY(ddi_mem_putb) 758 ALTENTRY(ddi_mem_put8) 759 ALTENTRY(ddi_io_putb) 760 ALTENTRY(ddi_io_put8) 761 movl 4(%esp), %eax 762 movl ACC_ATTR(%eax), %ecx 763 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 764 jne 7f 765 movl 12(%esp), %eax 766 movl 8(%esp), %edx 767 outb (%dx) 768 ret 7697: 770 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 771 jne 8f 772 movl 8(%esp), %eax 773 movl 12(%esp), %ecx 774 movb %cl, (%eax) 775 ret 7768: 777 jmp *ACC_PUTB(%eax) 778 SET_SIZE(ddi_putb) 779 SET_SIZE(ddi_put8) 780 SET_SIZE(ddi_mem_putb) 781 SET_SIZE(ddi_mem_put8) 782 SET_SIZE(ddi_io_putb) 783 SET_SIZE(ddi_io_put8) 784 785#endif /* __i386 */ 786 787#if defined(__amd64) 788 789 ENTRY(ddi_putw) 790 ALTENTRY(ddi_put16) 791 ALTENTRY(ddi_mem_putw) 792 ALTENTRY(ddi_mem_put16) 793 ALTENTRY(ddi_io_putw) 794 ALTENTRY(ddi_io_put16) 795 movl ACC_ATTR(%rdi), %ecx 796 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 797 jne 8f 798 movq %rdx, %rax 799 movq %rsi, %rdx 800 outw (%dx) 801 ret 8028: 803 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 804 jne 9f 805 movw %dx, (%rsi) 806 ret 8079: 808 jmp *ACC_PUTW(%rdi) 809 SET_SIZE(ddi_putw) 810 SET_SIZE(ddi_put16) 811 SET_SIZE(ddi_mem_putw) 812 SET_SIZE(ddi_mem_put16) 813 SET_SIZE(ddi_io_putw) 814 SET_SIZE(ddi_io_put16) 815 816#elif defined(__i386) 817 818 ENTRY(ddi_putw) 819 ALTENTRY(ddi_put16) 820 ALTENTRY(ddi_mem_putw) 821 ALTENTRY(ddi_mem_put16) 822 ALTENTRY(ddi_io_putw) 823 ALTENTRY(ddi_io_put16) 824 movl 4(%esp), %eax 825 movl ACC_ATTR(%eax), %ecx 826 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 827 jne 8f 828 movl 12(%esp), %eax 829 movl 8(%esp), %edx 830 outw (%dx) 831 ret 8328: 833 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 834 jne 9f 835 movl 8(%esp), %eax 836 movl 12(%esp), %ecx 837 movw %cx, (%eax) 838 ret 8399: 840 jmp *ACC_PUTW(%eax) 841 SET_SIZE(ddi_putw) 842 SET_SIZE(ddi_put16) 843 SET_SIZE(ddi_mem_putw) 844 SET_SIZE(ddi_mem_put16) 845 SET_SIZE(ddi_io_putw) 846 SET_SIZE(ddi_io_put16) 847 848#endif /* __i386 */ 849 850#if defined(__amd64) 851 852 ENTRY(ddi_putl) 853 ALTENTRY(ddi_put32) 854 ALTENTRY(ddi_mem_putl) 855 ALTENTRY(ddi_mem_put32) 856 ALTENTRY(ddi_io_putl) 857 ALTENTRY(ddi_io_put32) 858 movl ACC_ATTR(%rdi), %ecx 859 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 860 jne 8f 861 movq %rdx, %rax 862 movq %rsi, %rdx 863 outl (%dx) 864 ret 8658: 866 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 867 jne 9f 868 movl %edx, (%rsi) 869 ret 8709: 871 jmp *ACC_PUTL(%rdi) 872 SET_SIZE(ddi_putl) 873 SET_SIZE(ddi_put32) 874 SET_SIZE(ddi_mem_putl) 875 SET_SIZE(ddi_mem_put32) 876 SET_SIZE(ddi_io_putl) 877 SET_SIZE(ddi_io_put32) 878 879#elif defined(__i386) 880 881 ENTRY(ddi_putl) 882 ALTENTRY(ddi_put32) 883 ALTENTRY(ddi_mem_putl) 884 ALTENTRY(ddi_mem_put32) 885 ALTENTRY(ddi_io_putl) 886 ALTENTRY(ddi_io_put32) 887 movl 4(%esp), %eax 888 movl ACC_ATTR(%eax), %ecx 889 cmpl $_CONST(DDI_ACCATTR_IO_SPACE|DDI_ACCATTR_DIRECT), %ecx 890 jne 8f 891 movl 12(%esp), %eax 892 movl 8(%esp), %edx 893 outl (%dx) 894 ret 8958: 896 cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx 897 jne 9f 898 movl 8(%esp), %eax 899 movl 12(%esp), %ecx 900 movl %ecx, (%eax) 901 ret 9029: 903 jmp *ACC_PUTL(%eax) 904 SET_SIZE(ddi_putl) 905 SET_SIZE(ddi_put32) 906 SET_SIZE(ddi_mem_putl) 907 SET_SIZE(ddi_mem_put32) 908 SET_SIZE(ddi_io_putl) 909 SET_SIZE(ddi_io_put32) 910 911#endif /* __i386 */ 912 913#if defined(__amd64) 914 915 ENTRY(ddi_putll) 916 ALTENTRY(ddi_put64) 917 ALTENTRY(ddi_mem_putll) 918 ALTENTRY(ddi_mem_put64) 919 jmp *ACC_PUTLL(%rdi) 920 SET_SIZE(ddi_putll) 921 SET_SIZE(ddi_put64) 922 SET_SIZE(ddi_mem_putll) 923 SET_SIZE(ddi_mem_put64) 924 925#elif defined(__i386) 926 927 ENTRY(ddi_putll) 928 ALTENTRY(ddi_put64) 929 ALTENTRY(ddi_mem_putll) 930 ALTENTRY(ddi_mem_put64) 931 movl 4(%esp), %eax 932 jmp *ACC_PUTLL(%eax) 933 SET_SIZE(ddi_putll) 934 SET_SIZE(ddi_put64) 935 SET_SIZE(ddi_mem_putll) 936 SET_SIZE(ddi_mem_put64) 937 938#endif /* __i386 */ 939 940#if defined(__amd64) 941 942 ENTRY(ddi_rep_getb) 943 ALTENTRY(ddi_rep_get8) 944 ALTENTRY(ddi_mem_rep_getb) 945 ALTENTRY(ddi_mem_rep_get8) 946 jmp *ACC_REP_GETB(%rdi) 947 SET_SIZE(ddi_rep_getb) 948 SET_SIZE(ddi_rep_get8) 949 SET_SIZE(ddi_mem_rep_getb) 950 SET_SIZE(ddi_mem_rep_get8) 951 952#elif defined(__i386) 953 954 ENTRY(ddi_rep_getb) 955 ALTENTRY(ddi_rep_get8) 956 ALTENTRY(ddi_mem_rep_getb) 957 ALTENTRY(ddi_mem_rep_get8) 958 movl 4(%esp), %eax 959 jmp *ACC_REP_GETB(%eax) 960 SET_SIZE(ddi_rep_getb) 961 SET_SIZE(ddi_rep_get8) 962 SET_SIZE(ddi_mem_rep_getb) 963 SET_SIZE(ddi_mem_rep_get8) 964 965#endif /* __i386 */ 966 967#if defined(__amd64) 968 969 ENTRY(ddi_rep_getw) 970 ALTENTRY(ddi_rep_get16) 971 ALTENTRY(ddi_mem_rep_getw) 972 ALTENTRY(ddi_mem_rep_get16) 973 jmp *ACC_REP_GETW(%rdi) 974 SET_SIZE(ddi_rep_getw) 975 SET_SIZE(ddi_rep_get16) 976 SET_SIZE(ddi_mem_rep_getw) 977 SET_SIZE(ddi_mem_rep_get16) 978 979#elif defined(__i386) 980 981 ENTRY(ddi_rep_getw) 982 ALTENTRY(ddi_rep_get16) 983 ALTENTRY(ddi_mem_rep_getw) 984 ALTENTRY(ddi_mem_rep_get16) 985 movl 4(%esp), %eax 986 jmp *ACC_REP_GETW(%eax) 987 SET_SIZE(ddi_rep_getw) 988 SET_SIZE(ddi_rep_get16) 989 SET_SIZE(ddi_mem_rep_getw) 990 SET_SIZE(ddi_mem_rep_get16) 991 992#endif /* __i386 */ 993 994#if defined(__amd64) 995 996 ENTRY(ddi_rep_getl) 997 ALTENTRY(ddi_rep_get32) 998 ALTENTRY(ddi_mem_rep_getl) 999 ALTENTRY(ddi_mem_rep_get32) 1000 jmp *ACC_REP_GETL(%rdi) 1001 SET_SIZE(ddi_rep_getl) 1002 SET_SIZE(ddi_rep_get32) 1003 SET_SIZE(ddi_mem_rep_getl) 1004 SET_SIZE(ddi_mem_rep_get32) 1005 1006#elif defined(__i386) 1007 1008 ENTRY(ddi_rep_getl) 1009 ALTENTRY(ddi_rep_get32) 1010 ALTENTRY(ddi_mem_rep_getl) 1011 ALTENTRY(ddi_mem_rep_get32) 1012 movl 4(%esp), %eax 1013 jmp *ACC_REP_GETL(%eax) 1014 SET_SIZE(ddi_rep_getl) 1015 SET_SIZE(ddi_rep_get32) 1016 SET_SIZE(ddi_mem_rep_getl) 1017 SET_SIZE(ddi_mem_rep_get32) 1018 1019#endif /* __i386 */ 1020 1021#if defined(__amd64) 1022 1023 ENTRY(ddi_rep_getll) 1024 ALTENTRY(ddi_rep_get64) 1025 ALTENTRY(ddi_mem_rep_getll) 1026 ALTENTRY(ddi_mem_rep_get64) 1027 jmp *ACC_REP_GETLL(%rdi) 1028 SET_SIZE(ddi_rep_getll) 1029 SET_SIZE(ddi_rep_get64) 1030 SET_SIZE(ddi_mem_rep_getll) 1031 SET_SIZE(ddi_mem_rep_get64) 1032 1033#elif defined(__i386) 1034 1035 ENTRY(ddi_rep_getll) 1036 ALTENTRY(ddi_rep_get64) 1037 ALTENTRY(ddi_mem_rep_getll) 1038 ALTENTRY(ddi_mem_rep_get64) 1039 movl 4(%esp), %eax 1040 jmp *ACC_REP_GETLL(%eax) 1041 SET_SIZE(ddi_rep_getll) 1042 SET_SIZE(ddi_rep_get64) 1043 SET_SIZE(ddi_mem_rep_getll) 1044 SET_SIZE(ddi_mem_rep_get64) 1045 1046#endif /* __i386 */ 1047 1048#if defined(__amd64) 1049 1050 ENTRY(ddi_rep_putb) 1051 ALTENTRY(ddi_rep_put8) 1052 ALTENTRY(ddi_mem_rep_putb) 1053 ALTENTRY(ddi_mem_rep_put8) 1054 jmp *ACC_REP_PUTB(%rdi) 1055 SET_SIZE(ddi_rep_putb) 1056 SET_SIZE(ddi_rep_put8) 1057 SET_SIZE(ddi_mem_rep_putb) 1058 SET_SIZE(ddi_mem_rep_put8) 1059 1060#elif defined(__i386) 1061 1062 ENTRY(ddi_rep_putb) 1063 ALTENTRY(ddi_rep_put8) 1064 ALTENTRY(ddi_mem_rep_putb) 1065 ALTENTRY(ddi_mem_rep_put8) 1066 movl 4(%esp), %eax 1067 jmp *ACC_REP_PUTB(%eax) 1068 SET_SIZE(ddi_rep_putb) 1069 SET_SIZE(ddi_rep_put8) 1070 SET_SIZE(ddi_mem_rep_putb) 1071 SET_SIZE(ddi_mem_rep_put8) 1072 1073#endif /* __i386 */ 1074 1075#if defined(__amd64) 1076 1077 ENTRY(ddi_rep_putw) 1078 ALTENTRY(ddi_rep_put16) 1079 ALTENTRY(ddi_mem_rep_putw) 1080 ALTENTRY(ddi_mem_rep_put16) 1081 jmp *ACC_REP_PUTW(%rdi) 1082 SET_SIZE(ddi_rep_putw) 1083 SET_SIZE(ddi_rep_put16) 1084 SET_SIZE(ddi_mem_rep_putw) 1085 SET_SIZE(ddi_mem_rep_put16) 1086 1087#elif defined(__i386) 1088 1089 ENTRY(ddi_rep_putw) 1090 ALTENTRY(ddi_rep_put16) 1091 ALTENTRY(ddi_mem_rep_putw) 1092 ALTENTRY(ddi_mem_rep_put16) 1093 movl 4(%esp), %eax 1094 jmp *ACC_REP_PUTW(%eax) 1095 SET_SIZE(ddi_rep_putw) 1096 SET_SIZE(ddi_rep_put16) 1097 SET_SIZE(ddi_mem_rep_putw) 1098 SET_SIZE(ddi_mem_rep_put16) 1099 1100#endif /* __i386 */ 1101 1102#if defined(__amd64) 1103 1104 ENTRY(ddi_rep_putl) 1105 ALTENTRY(ddi_rep_put32) 1106 ALTENTRY(ddi_mem_rep_putl) 1107 ALTENTRY(ddi_mem_rep_put32) 1108 jmp *ACC_REP_PUTL(%rdi) 1109 SET_SIZE(ddi_rep_putl) 1110 SET_SIZE(ddi_rep_put32) 1111 SET_SIZE(ddi_mem_rep_putl) 1112 SET_SIZE(ddi_mem_rep_put32) 1113 1114#elif defined(__i386) 1115 1116 ENTRY(ddi_rep_putl) 1117 ALTENTRY(ddi_rep_put32) 1118 ALTENTRY(ddi_mem_rep_putl) 1119 ALTENTRY(ddi_mem_rep_put32) 1120 movl 4(%esp), %eax 1121 jmp *ACC_REP_PUTL(%eax) 1122 SET_SIZE(ddi_rep_putl) 1123 SET_SIZE(ddi_rep_put32) 1124 SET_SIZE(ddi_mem_rep_putl) 1125 SET_SIZE(ddi_mem_rep_put32) 1126 1127#endif /* __i386 */ 1128 1129#if defined(__amd64) 1130 1131 ENTRY(ddi_rep_putll) 1132 ALTENTRY(ddi_rep_put64) 1133 ALTENTRY(ddi_mem_rep_putll) 1134 ALTENTRY(ddi_mem_rep_put64) 1135 jmp *ACC_REP_PUTLL(%rdi) 1136 SET_SIZE(ddi_rep_putll) 1137 SET_SIZE(ddi_rep_put64) 1138 SET_SIZE(ddi_mem_rep_putll) 1139 SET_SIZE(ddi_mem_rep_put64) 1140 1141#elif defined(__i386) 1142 1143 ENTRY(ddi_rep_putll) 1144 ALTENTRY(ddi_rep_put64) 1145 ALTENTRY(ddi_mem_rep_putll) 1146 ALTENTRY(ddi_mem_rep_put64) 1147 movl 4(%esp), %eax 1148 jmp *ACC_REP_PUTLL(%eax) 1149 SET_SIZE(ddi_rep_putll) 1150 SET_SIZE(ddi_rep_put64) 1151 SET_SIZE(ddi_mem_rep_putll) 1152 SET_SIZE(ddi_mem_rep_put64) 1153 1154#endif /* __i386 */ 1155 1156#endif /* lint */ 1157 1158#if defined(lint) || defined(__lint) 1159 1160/*ARGSUSED*/ 1161uint8_t 1162i_ddi_vaddr_get8(ddi_acc_impl_t *hdlp, uint8_t *addr) 1163{ 1164 return (*addr); 1165} 1166 1167/*ARGSUSED*/ 1168uint16_t 1169i_ddi_vaddr_get16(ddi_acc_impl_t *hdlp, uint16_t *addr) 1170{ 1171 return (*addr); 1172} 1173 1174/*ARGSUSED*/ 1175uint32_t 1176i_ddi_vaddr_get32(ddi_acc_impl_t *hdlp, uint32_t *addr) 1177{ 1178 return (*addr); 1179} 1180 1181/*ARGSUSED*/ 1182uint64_t 1183i_ddi_vaddr_get64(ddi_acc_impl_t *hdlp, uint64_t *addr) 1184{ 1185 return (*addr); 1186} 1187 1188#else /* lint */ 1189 1190#if defined(__amd64) 1191 1192 ENTRY(i_ddi_vaddr_get8) 1193 movzbq (%rsi), %rax 1194 ret 1195 SET_SIZE(i_ddi_vaddr_get8) 1196 1197#elif defined(__i386) 1198 1199 ENTRY(i_ddi_vaddr_get8) 1200 movl 8(%esp), %eax 1201 movzbl (%eax), %eax 1202 ret 1203 SET_SIZE(i_ddi_vaddr_get8) 1204 1205#endif /* __i386 */ 1206 1207#if defined(__amd64) 1208 1209 ENTRY(i_ddi_vaddr_get16) 1210 movzwq (%rsi), %rax 1211 ret 1212 SET_SIZE(i_ddi_vaddr_get16) 1213 1214#elif defined(__i386) 1215 1216 ENTRY(i_ddi_vaddr_get16) 1217 movl 8(%esp), %eax 1218 movzwl (%eax), %eax 1219 ret 1220 SET_SIZE(i_ddi_vaddr_get16) 1221 1222#endif /* __i386 */ 1223 1224#if defined(__amd64) 1225 1226 ENTRY(i_ddi_vaddr_get32) 1227 movl (%rsi), %eax 1228 ret 1229 SET_SIZE(i_ddi_vaddr_get32) 1230 1231#elif defined(__i386) 1232 1233 ENTRY(i_ddi_vaddr_get32) 1234 movl 8(%esp), %eax 1235 movl (%eax), %eax 1236 ret 1237 SET_SIZE(i_ddi_vaddr_get32) 1238 1239#endif /* __i386 */ 1240 1241#if defined(__amd64) 1242 1243 ENTRY(i_ddi_vaddr_get64) 1244 movq (%rsi), %rax 1245 ret 1246 SET_SIZE(i_ddi_vaddr_get64) 1247 1248#elif defined(__i386) 1249 1250 ENTRY(i_ddi_vaddr_get64) 1251 movl 8(%esp), %ecx 1252 movl (%ecx), %eax 1253 movl 4(%ecx), %edx 1254 ret 1255 SET_SIZE(i_ddi_vaddr_get64) 1256 1257#endif /* __i386 */ 1258 1259#endif /* lint */ 1260 1261 1262#if defined(lint) || defined(__lint) 1263 1264/*ARGSUSED*/ 1265uint8_t 1266i_ddi_io_get8(ddi_acc_impl_t *hdlp, uint8_t *addr) 1267{ 1268 return (0); 1269} 1270 1271/*ARGSUSED*/ 1272uint16_t 1273i_ddi_io_get16(ddi_acc_impl_t *hdlp, uint16_t *addr) 1274{ 1275 return (0); 1276} 1277 1278/*ARGSUSED*/ 1279uint32_t 1280i_ddi_io_get32(ddi_acc_impl_t *hdlp, uint32_t *addr) 1281{ 1282 return (0); 1283} 1284 1285#else /* lint */ 1286 1287#if defined(__amd64) 1288 1289 ENTRY(i_ddi_io_get8) 1290 movq %rsi, %rdx 1291 inb (%dx) 1292 movzbq %al, %rax 1293 ret 1294 SET_SIZE(i_ddi_io_get8) 1295 1296#elif defined(__i386) 1297 1298 ENTRY(i_ddi_io_get8) 1299 movl 8(%esp), %edx 1300 inb (%dx) 1301 movzbl %al, %eax 1302 ret 1303 SET_SIZE(i_ddi_io_get8) 1304 1305#endif /* __i386 */ 1306 1307#if defined(__amd64) 1308 1309 ENTRY(i_ddi_io_get16) 1310 movq %rsi, %rdx 1311 inw (%dx) 1312 movzwq %ax, %rax 1313 ret 1314 SET_SIZE(i_ddi_io_get16) 1315 1316#elif defined(__i386) 1317 1318 ENTRY(i_ddi_io_get16) 1319 movl 8(%esp), %edx 1320 inw (%dx) 1321 movzwl %ax, %eax 1322 ret 1323 SET_SIZE(i_ddi_io_get16) 1324 1325#endif /* __i386 */ 1326 1327#if defined(__amd64) 1328 1329 ENTRY(i_ddi_io_get32) 1330 movq %rsi, %rdx 1331 inl (%dx) 1332 ret 1333 SET_SIZE(i_ddi_io_get32) 1334 1335#elif defined(__i386) 1336 1337 ENTRY(i_ddi_io_get32) 1338 movl 8(%esp), %edx 1339 inl (%dx) 1340 ret 1341 SET_SIZE(i_ddi_io_get32) 1342 1343#endif /* __i386 */ 1344 1345#endif /* lint */ 1346 1347#if defined(lint) || defined(__lint) 1348 1349/*ARGSUSED*/ 1350void 1351i_ddi_vaddr_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value) 1352{ 1353 *addr = value; 1354} 1355 1356/*ARGSUSED*/ 1357void 1358i_ddi_vaddr_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value) 1359{ 1360 *addr = value; 1361} 1362 1363/*ARGSUSED*/ 1364void 1365i_ddi_vaddr_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value) 1366{ 1367 *(uint32_t *)addr = value; 1368} 1369 1370/*ARGSUSED*/ 1371void 1372i_ddi_vaddr_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value) 1373{ 1374 *addr = value; 1375} 1376 1377#else /* lint */ 1378 1379#if defined(__amd64) 1380 1381 ENTRY(i_ddi_vaddr_put8) 1382 movb %dl, (%rsi) 1383 ret 1384 SET_SIZE(i_ddi_vaddr_put8) 1385 1386#elif defined(__i386) 1387 1388 ENTRY(i_ddi_vaddr_put8) 1389 movl 8(%esp), %eax 1390 movb 12(%esp), %cl 1391 movb %cl, (%eax) 1392 ret 1393 SET_SIZE(i_ddi_vaddr_put8) 1394 1395#endif /* __i386 */ 1396 1397#if defined(__amd64) 1398 1399 ENTRY(i_ddi_vaddr_put16) 1400 movw %dx, (%rsi) 1401 ret 1402 SET_SIZE(i_ddi_vaddr_put16) 1403 1404#elif defined(__i386) 1405 1406 ENTRY(i_ddi_vaddr_put16) 1407 movl 8(%esp), %eax 1408 movl 12(%esp), %ecx 1409 movw %cx, (%eax) 1410 ret 1411 SET_SIZE(i_ddi_vaddr_put16) 1412 1413#endif /* __i386 */ 1414 1415#if defined(__amd64) 1416 1417 ENTRY(i_ddi_vaddr_put32) 1418 movl %edx, (%rsi) 1419 ret 1420 SET_SIZE(i_ddi_vaddr_put32) 1421 1422#elif defined(__i386) 1423 1424 ENTRY(i_ddi_vaddr_put32) 1425 movl 8(%esp), %eax 1426 movl 12(%esp), %ecx 1427 movl %ecx, (%eax) 1428 ret 1429 SET_SIZE(i_ddi_vaddr_put32) 1430 1431#endif /* __i386 */ 1432 1433#if defined(__amd64) 1434 1435 ENTRY(i_ddi_vaddr_put64) 1436 movq %rdx, (%rsi) 1437 ret 1438 SET_SIZE(i_ddi_vaddr_put64) 1439 1440#elif defined(__i386) 1441 1442 ENTRY(i_ddi_vaddr_put64) 1443 movl 8(%esp), %ecx 1444 movl 12(%esp), %edx 1445 movl 16(%esp), %eax 1446 movl %edx, (%ecx) 1447 movl %eax, 4(%ecx) 1448 ret 1449 SET_SIZE(i_ddi_vaddr_put64) 1450 1451#endif /* __i386 */ 1452 1453#endif /* lint */ 1454 1455#if defined(lint) || defined(__lint) 1456 1457/*ARGSUSED*/ 1458void 1459i_ddi_io_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value) 1460{} 1461 1462/*ARGSUSED*/ 1463void 1464i_ddi_io_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value) 1465{} 1466 1467/*ARGSUSED*/ 1468void 1469i_ddi_io_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value) 1470{} 1471 1472#else /* lint */ 1473 1474#if defined(__amd64) 1475 1476 ENTRY(i_ddi_io_put8) 1477 movq %rdx, %rax 1478 movq %rsi, %rdx 1479 outb (%dx) 1480 ret 1481 SET_SIZE(i_ddi_io_put8) 1482 1483#elif defined(__i386) 1484 1485 ENTRY(i_ddi_io_put8) 1486 movl 12(%esp), %eax 1487 movl 8(%esp), %edx 1488 outb (%dx) 1489 ret 1490 SET_SIZE(i_ddi_io_put8) 1491 1492#endif /* __i386 */ 1493 1494#if defined(__amd64) 1495 1496 ENTRY(i_ddi_io_put16) 1497 movq %rdx, %rax 1498 movq %rsi, %rdx 1499 outw (%dx) 1500 ret 1501 SET_SIZE(i_ddi_io_put16) 1502 1503#elif defined(__i386) 1504 1505 ENTRY(i_ddi_io_put16) 1506 movl 12(%esp), %eax 1507 movl 8(%esp), %edx 1508 outw (%dx) 1509 ret 1510 SET_SIZE(i_ddi_io_put16) 1511 1512#endif /* __i386 */ 1513 1514#if defined(__amd64) 1515 1516 ENTRY(i_ddi_io_put32) 1517 movq %rdx, %rax 1518 movq %rsi, %rdx 1519 outl (%dx) 1520 ret 1521 SET_SIZE(i_ddi_io_put32) 1522 1523#elif defined(__i386) 1524 1525 ENTRY(i_ddi_io_put32) 1526 movl 12(%esp), %eax 1527 movl 8(%esp), %edx 1528 outl (%dx) 1529 ret 1530 SET_SIZE(i_ddi_io_put32) 1531 1532#endif /* __i386 */ 1533 1534#endif /* lint */ 1535 1536#if defined(lint) || defined(__lint) 1537 1538/*ARGSUSED*/ 1539void 1540i_ddi_io_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 1541 uint8_t *dev_addr, size_t repcount, uint_t flags) 1542{} 1543 1544/*ARGSUSED*/ 1545void 1546i_ddi_io_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 1547 uint16_t *dev_addr, size_t repcount, uint_t flags) 1548{} 1549 1550/*ARGSUSED*/ 1551void 1552i_ddi_io_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 1553 uint32_t *dev_addr, size_t repcount, uint_t flags) 1554{} 1555 1556#else /* lint */ 1557 1558#if defined(__amd64) 1559 1560 /* 1561 * Incoming arguments 1562 * 1563 * %rdi : hdlp 1564 * %rsi : host_addr 1565 * %rdx : dev_addr 1566 * %rcx : repcount 1567 * %r8 : flags 1568 * 1569 * This routine will destroy values in %rdx, %rsi, %rcx. 1570 */ 1571 ENTRY(i_ddi_io_rep_get8) 1572 1573 cmpq $DDI_DEV_AUTOINCR, %r8 1574 je gb_ioadv 1575 movq %rsi, %rdi 1576 rep 1577 insb 1578 ret 1579 1580gb_ioadv: 1581 andq %rcx, %rcx 1582 jz gb_ioadv_done 1583gb_ioadv2: 1584 inb (%dx) 1585 movb %al, (%rsi) 1586 incq %rdx 1587 incq %rsi 1588 decq %rcx 1589 jg gb_ioadv2 1590 1591gb_ioadv_done: 1592 rep; ret /* use 2 byte return instruction when branch target */ 1593 /* AMD Software Optimization Guide - Section 6.2 */ 1594 1595 SET_SIZE(i_ddi_io_rep_get8) 1596 1597#elif defined(__i386) 1598 1599 ENTRY(i_ddi_io_rep_get8) 1600 pushl %edi 1601 1602 movl 12(%esp),%edi / get host_addr 1603 movl 16(%esp),%edx / get port 1604 movl 20(%esp),%ecx / get repcount 1605 cmpl $DDI_DEV_AUTOINCR, 24(%esp) 1606 je gb_ioadv 1607 1608 rep 1609 insb 1610 popl %edi 1611 ret 1612 1613gb_ioadv: 1614 andl %ecx, %ecx 1615 jz gb_ioadv_done 1616gb_ioadv2: 1617 inb (%dx) 1618 movb %al,(%edi) 1619 incl %edi 1620 incl %edx 1621 decl %ecx 1622 jg gb_ioadv2 1623 1624gb_ioadv_done: 1625 popl %edi 1626 ret 1627 1628 SET_SIZE(i_ddi_io_rep_get8) 1629 1630#endif /* __i386 */ 1631 1632#if defined(__amd64) 1633 1634 ENTRY(i_ddi_io_rep_get16) 1635 1636 cmpq $DDI_DEV_AUTOINCR, %r8 1637 je gw_ioadv 1638 1639 movq %rsi, %rdi 1640 rep 1641 insw 1642 ret 1643 1644gw_ioadv: 1645 andq %rcx, %rcx 1646 jz gw_ioadv_done 1647gw_ioadv2: 1648 inw (%dx) 1649 movw %ax,(%rsi) 1650 addq $2, %rsi 1651 addq $2, %rdx 1652 decq %rcx 1653 jg gw_ioadv2 1654 1655gw_ioadv_done: 1656 rep; ret /* use 2 byte return instruction when branch target */ 1657 /* AMD Software Optimization Guide - Section 6.2 */ 1658 SET_SIZE(i_ddi_io_rep_get16) 1659 1660#elif defined(__i386) 1661 1662 ENTRY(i_ddi_io_rep_get16) 1663 pushl %edi 1664 1665 movl 12(%esp),%edi / get host_addr 1666 movl 16(%esp),%edx / get port 1667 movl 20(%esp),%ecx / get repcount 1668 cmpl $DDI_DEV_AUTOINCR, 24(%esp) 1669 je gw_ioadv 1670 1671 rep 1672 insw 1673 popl %edi 1674 ret 1675 1676gw_ioadv: 1677 andl %ecx, %ecx 1678 jz gw_ioadv_done 1679gw_ioadv2: 1680 inw (%dx) 1681 movw %ax,(%edi) 1682 addl $2, %edi 1683 addl $2, %edx 1684 decl %ecx 1685 jg gw_ioadv2 1686 1687gw_ioadv_done: 1688 popl %edi 1689 ret 1690 SET_SIZE(i_ddi_io_rep_get16) 1691 1692#endif /* __i386 */ 1693 1694#if defined(__amd64) 1695 1696 ENTRY(i_ddi_io_rep_get32) 1697 1698 cmpq $DDI_DEV_AUTOINCR, %r8 1699 je gl_ioadv 1700 1701 movq %rsi, %rdi 1702 rep 1703 insl 1704 ret 1705 1706gl_ioadv: 1707 andq %rcx, %rcx 1708 jz gl_ioadv_done 1709gl_ioadv2: 1710 inl (%dx) 1711 movl %eax,(%rsi) 1712 addq $4, %rsi 1713 addq $4, %rdx 1714 decq %rcx 1715 jg gl_ioadv2 1716 1717gl_ioadv_done: 1718 rep; ret /* use 2 byte return instruction when branch target */ 1719 /* AMD Software Optimization Guide - Section 6.2 */ 1720 1721 SET_SIZE(i_ddi_io_rep_get32) 1722 1723 1724#elif defined(__i386) 1725 1726 ENTRY(i_ddi_io_rep_get32) 1727 pushl %edi 1728 1729 movl 12(%esp),%edi / get host_addr 1730 movl 16(%esp),%edx / get port 1731 movl 20(%esp),%ecx / get repcount 1732 cmpl $DDI_DEV_AUTOINCR, 24(%esp) 1733 je gl_ioadv 1734 1735 rep 1736 insl 1737 popl %edi 1738 ret 1739 1740gl_ioadv: 1741 andl %ecx, %ecx 1742 jz gl_ioadv_done 1743gl_ioadv2: 1744 inl (%dx) 1745 movl %eax,(%edi) 1746 addl $4, %edi 1747 addl $4, %edx 1748 decl %ecx 1749 jg gl_ioadv2 1750 1751gl_ioadv_done: 1752 popl %edi 1753 ret 1754 1755 SET_SIZE(i_ddi_io_rep_get32) 1756 1757#endif /* __i386 */ 1758 1759#endif /* lint */ 1760 1761#if defined(lint) || defined(__lint) 1762 1763/*ARGSUSED*/ 1764void 1765i_ddi_io_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 1766 uint8_t *dev_addr, size_t repcount, uint_t flags) 1767{} 1768 1769/*ARGSUSED*/ 1770void 1771i_ddi_io_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 1772 uint16_t *dev_addr, size_t repcount, uint_t flags) 1773{} 1774 1775/*ARGSUSED*/ 1776void 1777i_ddi_io_rep_put32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 1778 uint32_t *dev_addr, size_t repcount, uint_t flags) 1779{} 1780 1781#else /* lint */ 1782 1783#if defined(__amd64) 1784 1785 /* 1786 * Incoming arguments 1787 * 1788 * %rdi : hdlp 1789 * %rsi : host_addr 1790 * %rdx : dev_addr 1791 * %rcx : repcount 1792 * %r8 : flags 1793 * 1794 * This routine will destroy values in %rdx, %rsi, %rcx. 1795 */ 1796 ENTRY(i_ddi_io_rep_put8) 1797 1798 cmpq $DDI_DEV_AUTOINCR, %r8 1799 je pb_ioadv 1800 1801 movq %rsi, %rdi 1802 rep 1803 outsb 1804 ret 1805 1806pb_ioadv: 1807 andq %rcx, %rcx 1808 jz pb_ioadv_done 1809pb_ioadv2: 1810 movb (%rsi), %al 1811 outb (%dx) 1812 incq %rsi 1813 incq %rdx 1814 decq %rcx 1815 jg pb_ioadv2 1816 1817pb_ioadv_done: 1818 rep; ret /* use 2 byte return instruction when branch target */ 1819 /* AMD Software Optimization Guide - Section 6.2 */ 1820 SET_SIZE(i_ddi_io_rep_put8) 1821 1822#elif defined(__i386) 1823 1824 ENTRY(i_ddi_io_rep_put8) 1825 pushl %esi 1826 1827 movl 12(%esp),%esi / get host_addr 1828 movl 16(%esp),%edx / get port 1829 movl 20(%esp),%ecx / get repcount 1830 cmpl $DDI_DEV_AUTOINCR, 24(%esp) 1831 je pb_ioadv 1832 1833 rep 1834 outsb 1835 popl %esi 1836 ret 1837 1838pb_ioadv: 1839 andl %ecx, %ecx 1840 jz pb_ioadv_done 1841pb_ioadv2: 1842 movb (%esi), %al 1843 outb (%dx) 1844 incl %esi 1845 incl %edx 1846 decl %ecx 1847 jg pb_ioadv2 1848 1849pb_ioadv_done: 1850 popl %esi 1851 ret 1852 SET_SIZE(i_ddi_io_rep_put8) 1853 1854#endif /* __i386 */ 1855 1856#if defined(__amd64) 1857 1858 ENTRY(i_ddi_io_rep_put16) 1859 1860 cmpq $DDI_DEV_AUTOINCR, %r8 1861 je pw_ioadv 1862 1863 movq %rsi, %rdi 1864 rep 1865 outsw 1866 ret 1867 1868pw_ioadv: 1869 andq %rcx, %rcx 1870 jz pw_ioadv_done 1871pw_ioadv2: 1872 movw (%rsi), %ax 1873 outw (%dx) 1874 addq $2, %rsi 1875 addq $2, %rdx 1876 decq %rcx 1877 jg pw_ioadv2 1878 1879pw_ioadv_done: 1880 rep; ret /* use 2 byte return instruction when branch target */ 1881 /* AMD Software Optimization Guide - Section 6.2 */ 1882 SET_SIZE(i_ddi_io_rep_put16) 1883 1884#elif defined(__i386) 1885 1886 ENTRY(i_ddi_io_rep_put16) 1887 pushl %esi 1888 1889 movl 12(%esp),%esi / get host_addr 1890 movl 16(%esp),%edx / get port 1891 movl 20(%esp),%ecx / get repcount 1892 cmpl $DDI_DEV_AUTOINCR, 24(%esp) 1893 je pw_ioadv 1894 1895 rep 1896 outsw 1897 popl %esi 1898 ret 1899 1900pw_ioadv: 1901 andl %ecx, %ecx 1902 jz pw_ioadv_done 1903pw_ioadv2: 1904 movw (%esi), %ax 1905 outw (%dx) 1906 addl $2, %esi 1907 addl $2, %edx 1908 decl %ecx 1909 jg pw_ioadv2 1910 1911pw_ioadv_done: 1912 popl %esi 1913 ret 1914 SET_SIZE(i_ddi_io_rep_put16) 1915 1916#endif /* __i386 */ 1917 1918#if defined(__amd64) 1919 1920 ENTRY(i_ddi_io_rep_put32) 1921 1922 cmpq $DDI_DEV_AUTOINCR, %r8 1923 je pl_ioadv 1924 1925 movq %rsi, %rdi 1926 rep 1927 outsl 1928 ret 1929 1930pl_ioadv: 1931 andq %rcx, %rcx 1932 jz pl_ioadv_done 1933pl_ioadv2: 1934 movl (%rsi), %eax 1935 outl (%dx) 1936 addq $4, %rsi 1937 addq $4, %rdx 1938 decq %rcx 1939 jg pl_ioadv2 1940 1941pl_ioadv_done: 1942 rep; ret /* use 2 byte return instruction when branch target */ 1943 /* AMD Software Optimization Guide - Section 6.2 */ 1944 SET_SIZE(i_ddi_io_rep_put32) 1945 1946#elif defined(__i386) 1947 1948 ENTRY(i_ddi_io_rep_put32) 1949 pushl %esi 1950 1951 movl 12(%esp),%esi / get host_addr 1952 movl 16(%esp),%edx / get port 1953 movl 20(%esp),%ecx / get repcount 1954 cmpl $DDI_DEV_AUTOINCR, 24(%esp) 1955 je pl_ioadv 1956 1957 rep 1958 outsl 1959 popl %esi 1960 ret 1961 1962pl_ioadv: 1963 andl %ecx, %ecx 1964 jz pl_ioadv_done 1965pl_ioadv2: 1966 movl (%esi), %eax 1967 outl (%dx) 1968 addl $4, %esi 1969 addl $4, %edx 1970 decl %ecx 1971 jg pl_ioadv2 1972 1973pl_ioadv_done: 1974 popl %esi 1975 ret 1976 SET_SIZE(i_ddi_io_rep_put32) 1977 1978#endif /* __i386 */ 1979 1980#endif /* lint */ 1981