| 1 | /* SPDX-License-Identifier: GPL-2.0 */
|
| 2 | /*
|
| 3 | * arch/alpha/lib/callback_srm.S
|
| 4 | */
|
| 5 |
|
| 6 | |
| 7 | |
| 8 |
|
| 9 | .text
|
| 10 | |
| 11 |
|
| 12 | |
| 13 | .align 4
|
| 14 | srm_dispatch:
|
| 15 | |
| 16 | ldl $4,alpha_using_srm
|
| 17 | beq $4,nosrm
|
| 18 | |
| 19 | ldq $0,hwrpb |
| 20 | ldl $25,0($25) |
| 21 | mov $20,$21 |
| 22 | mov $19,$20
|
| 23 | ldq $1,HWRPB_CRB_OFFSET($0)
|
| 24 | mov $18,$19
|
| 25 | mov $17,$18
|
| 26 | mov $16,$17
|
| 27 | addq $0,$1,$2 |
| 28 | ldq $27,0($2) |
| 29 | extwl $25,0,$16 |
| 30 | ldq $3,8($27) |
| 31 | extwl $25,2,$25 |
| 32 | jmp ($3) |
| 33 |
|
| 34 | .align 4
|
| 35 | .globl srm_fixup
|
| 36 | .ent srm_fixup
|
| 37 | srm_fixup:
|
| 38 | ldgp $29,0($27)
|
| 39 | |
| 40 | ldl $4,alpha_using_srm
|
| 41 | beq $4,nosrm
|
| 42 | |
| 43 | ldq $0,hwrpb
|
| 44 | ldq $1,HWRPB_CRB_OFFSET($0)
|
| 45 | addq $0,$1,$2 |
| 46 | ldq $27,16($2) |
| 47 | ldq $3,8($27) |
| 48 | lda $25,2($31) |
| 49 | jmp ($3) |
| 50 | .end srm_fixup
|
| 51 |
|
| 52 | |
| 53 | .align 3
|
| 54 | nosrm:
|
| 55 | lda $0,-1($31)
|
| 56 | ret
|
| 57 | |
| 58 |
|
| 59 | |
| 60 | .align 4; .globl callback_ |
| 61 | ldgp $29,0($27); br $25,srm_dispatch; .word CODE, ARG_CNT; .end callback_ |
| 62 |
|
| 63 | |
| 64 |
|
| 65 | |
| 66 | .align 3; .globl callback_ |
| 67 | lda $0,-1($31); ret; .end callback_ |
| 68 |
|
| 69 | .align 3
|
| 70 | .globl srm_fixup
|
| 71 | .ent srm_fixup
|
| 72 | srm_fixup:
|
| 73 | lda $0,-1($31)
|
| 74 | ret
|
| 75 | .end srm_fixup
|
| 76 | |
| 77 |
|
| 78 | CALLBACK(puts, CCB_PUTS, 4)
|
| 79 | CALLBACK(open, CCB_OPEN, 3)
|
| 80 | CALLBACK(close, CCB_CLOSE, 2)
|
| 81 | CALLBACK(read, CCB_READ, 5)
|
| 82 | CALLBACK(open_console, CCB_OPEN_CONSOLE, 1)
|
| 83 | CALLBACK(close_console, CCB_CLOSE_CONSOLE, 1)
|
| 84 | CALLBACK(getenv, CCB_GET_ENV, 4)
|
| 85 | CALLBACK(setenv, CCB_SET_ENV, 4)
|
| 86 | CALLBACK(getc, CCB_GETC, 2)
|
| 87 | CALLBACK(reset_term, CCB_RESET_TERM, 2)
|
| 88 | CALLBACK(term_int, CCB_SET_TERM_INT, 3)
|
| 89 | CALLBACK(term_ctl, CCB_SET_TERM_CTL, 3)
|
| 90 | CALLBACK(process_keycode, CCB_PROCESS_KEYCODE, 3)
|
| 91 | CALLBACK(ioctl, CCB_IOCTL, 6)
|
| 92 | CALLBACK(write, CCB_WRITE, 5)
|
| 93 | CALLBACK(reset_env, CCB_RESET_ENV, 4)
|
| 94 | CALLBACK(save_env, CCB_SAVE_ENV, 1)
|
| 95 | CALLBACK(pswitch, CCB_PSWITCH, 3)
|
| 96 | CALLBACK(bios_emul, CCB_BIOS_EMUL, 5)
|
| 97 |
|
| 98 | EXPORT_SYMBOL(callback_getenv)
|
| 99 | EXPORT_SYMBOL(callback_setenv)
|
| 100 | EXPORT_SYMBOL(callback_save_env)
|
| 101 |
|
| 102 | .data
|
| 103 | __alpha_using_srm: |
| 104 | .long 7 |
| 105 | .weak alpha_using_srm; alpha_using_srm = __alpha_using_srm
|
| 106 | __callback_init_done: |
| 107 | .long 7 |
| 108 | .weak callback_init_done; callback_init_done = __callback_init_done
|
| 109 |
|