| /* The registers for cross calls will be: |
| * DATA 0: [low 32-bits] Address of function to call, jmp to this |
| * [high 32-bits] MMU Context Argument 0, place in %g5 |
| * DATA 1: Address Argument 1, place in %g1 |
| * DATA 2: Address Argument 2, place in %g7 |
| * With this method we can do most of the cross-call tlb/cache |
| ldxa [%g3 + %g0] ASI_INTR_R, %g3 |
| bgeu,pn %xcc, do_ivec_xcall |
| stxa %g0, [%g0] ASI_INTR_RECEIVE |
| sethi %hi(ivector_table_pa), %g2 |
| ldx [%g2 + %lo(ivector_table_pa)], %g2 |
| TRAP_LOAD_IRQ_WORK_PA(%g6, %g1) |
| stxa %g5, [%g3] ASI_PHYS_USE_EC |
| wr %g0, 1 << PIL_DEVICE_IRQ, %set_softint |
| ldxa [%g1 + %g0] ASI_INTR_R, %g1 |
| ldxa [%g7 + %g0] ASI_INTR_R, %g7 |
| stxa %g0, [%g0] ASI_INTR_RECEIVE |