/** arch/alpha/lib/callback_srm.S*/#include <asm/console.h>.text#define HWRPB_CRB_OFFSET 0xc0#if defined(CONFIG_ALPHA_SRM) || defined(CONFIG_ALPHA_GENERIC).align 4srm_dispatch:#if defined(CONFIG_ALPHA_GENERIC)ldl $4,alpha_using_srmbeq $4,nosrm#endifldq $0,hwrpb # gp is set up by CALLBACK macro.ldl $25,0($25) # Pick up the wrapper data.mov $20,$21 # Shift arguments right.mov $19,$20ldq $1,HWRPB_CRB_OFFSET($0)mov $18,$19mov $17,$18mov $16,$17addq $0,$1,$2 # CRB addressldq $27,0($2) # DISPATCH procedure descriptor (VMS call std)extwl $25,0,$16 # SRM callback function codeldq $3,8($27) # call addressextwl $25,2,$25 # argument information (VMS calling std)jmp ($3) # Return directly to caller of wrapper..align 4.globl srm_fixup.ent srm_fixupsrm_fixup:ldgp $29,0($27)#if defined(CONFIG_ALPHA_GENERIC)ldl $4,alpha_using_srmbeq $4,nosrm#endifldq $0,hwrpbldq $1,HWRPB_CRB_OFFSET($0)addq $0,$1,$2 # CRB addressldq $27,16($2) # VA of FIXUP procedure descriptorldq $3,8($27) # call addresslda $25,2($31) # two integer argumentsjmp ($3) # Return directly to caller of srm_fixup..end srm_fixup#if defined(CONFIG_ALPHA_GENERIC).align 3nosrm:lda $0,-1($31)ret#endif#define CALLBACK(NAME, CODE, ARG_CNT) \.align 4; .globl callback_##NAME; .ent callback_##NAME; callback_##NAME##: \ldgp 29,0ドル(27ドル); br 25,ドルsrm_dispatch; .word CODE, ARG_CNT; .end callback_##NAME#else /* defined(CONFIG_ALPHA_SRM) || defined(CONFIG_ALPHA_GENERIC) */#define CALLBACK(NAME, CODE, ARG_CNT) \.align 3; .globl callback_##NAME; .ent callback_##NAME; callback_##NAME##: \lda 0,ドル-1(31ドル); ret; .end callback_##NAME.align 3.globl srm_fixup.ent srm_fixupsrm_fixup:lda $0,-1($31)ret.end srm_fixup#endif /* defined(CONFIG_ALPHA_SRM) || defined(CONFIG_ALPHA_GENERIC) */CALLBACK(puts, CCB_PUTS, 4)CALLBACK(open, CCB_OPEN, 3)CALLBACK(close, CCB_CLOSE, 2)CALLBACK(read, CCB_READ, 5)CALLBACK(open_console, CCB_OPEN_CONSOLE, 1)CALLBACK(close_console, CCB_CLOSE_CONSOLE, 1)CALLBACK(getenv, CCB_GET_ENV, 4)CALLBACK(setenv, CCB_SET_ENV, 4)CALLBACK(getc, CCB_GETC, 2)CALLBACK(reset_term, CCB_RESET_TERM, 2)CALLBACK(term_int, CCB_SET_TERM_INT, 3)CALLBACK(term_ctl, CCB_SET_TERM_CTL, 3)CALLBACK(process_keycode, CCB_PROCESS_KEYCODE, 3)CALLBACK(ioctl, CCB_IOCTL, 6)CALLBACK(write, CCB_WRITE, 5)CALLBACK(reset_env, CCB_RESET_ENV, 4)CALLBACK(save_env, CCB_SAVE_ENV, 1)CALLBACK(pswitch, CCB_PSWITCH, 3)CALLBACK(bios_emul, CCB_BIOS_EMUL, 5).data__alpha_using_srm: # For use by bootpheader.long 7 # value is not 1 for link debugging.weak alpha_using_srm; alpha_using_srm = __alpha_using_srm__callback_init_done: # For use by bootpheader.long 7 # value is not 1 for link debugging.weak callback_init_done; callback_init_done = __callback_init_done
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。