1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun/* 3*4882a593Smuzhiyun * linux/arch/arm/lib/ecard.S 4*4882a593Smuzhiyun * 5*4882a593Smuzhiyun * Copyright (C) 1995, 1996 Russell King 6*4882a593Smuzhiyun * 7*4882a593Smuzhiyun * 27/03/03 Ian Molton Clean up CONFIG_CPU 8*4882a593Smuzhiyun */ 9*4882a593Smuzhiyun#include <linux/linkage.h> 10*4882a593Smuzhiyun#include <asm/assembler.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun#define CPSR2SPSR(rt) \ 13*4882a593Smuzhiyun mrs rt, cpsr; \ 14*4882a593Smuzhiyun msr spsr_cxsf, rt 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun@ Purpose: call an expansion card loader to read bytes. 17*4882a593Smuzhiyun@ Proto : char read_loader(int offset, char *card_base, char *loader); 18*4882a593Smuzhiyun@ Returns: byte read 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunENTRY(ecard_loader_read) 21*4882a593Smuzhiyun stmfd sp!, {r4 - r12, lr} 22*4882a593Smuzhiyun mov r11, r1 23*4882a593Smuzhiyun mov r1, r0 24*4882a593Smuzhiyun CPSR2SPSR(r0) 25*4882a593Smuzhiyun mov lr, pc 26*4882a593Smuzhiyun mov pc, r2 27*4882a593Smuzhiyun ldmfd sp!, {r4 - r12, pc} 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun@ Purpose: call an expansion card loader to reset the card 30*4882a593Smuzhiyun@ Proto : void read_loader(int card_base, char *loader); 31*4882a593Smuzhiyun@ Returns: byte read 32*4882a593Smuzhiyun 33*4882a593SmuzhiyunENTRY(ecard_loader_reset) 34*4882a593Smuzhiyun stmfd sp!, {r4 - r12, lr} 35*4882a593Smuzhiyun mov r11, r0 36*4882a593Smuzhiyun CPSR2SPSR(r0) 37*4882a593Smuzhiyun mov lr, pc 38*4882a593Smuzhiyun add pc, r1, #8 39*4882a593Smuzhiyun ldmfd sp!, {r4 - r12, pc} 40*4882a593Smuzhiyun 41