162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * linux/arch/arm/lib/ecard.S 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (C) 1995, 1996 Russell King 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * 27/03/03 Ian Molton Clean up CONFIG_CPU 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci#include <linux/linkage.h> 1062306a36Sopenharmony_ci#include <asm/assembler.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#define CPSR2SPSR(rt) \ 1362306a36Sopenharmony_ci mrs rt, cpsr; \ 1462306a36Sopenharmony_ci msr spsr_cxsf, rt 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci@ Purpose: call an expansion card loader to read bytes. 1762306a36Sopenharmony_ci@ Proto : char read_loader(int offset, char *card_base, char *loader); 1862306a36Sopenharmony_ci@ Returns: byte read 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ciENTRY(ecard_loader_read) 2162306a36Sopenharmony_ci stmfd sp!, {r4 - r12, lr} 2262306a36Sopenharmony_ci mov r11, r1 2362306a36Sopenharmony_ci mov r1, r0 2462306a36Sopenharmony_ci CPSR2SPSR(r0) 2562306a36Sopenharmony_ci mov lr, pc 2662306a36Sopenharmony_ci mov pc, r2 2762306a36Sopenharmony_ci ldmfd sp!, {r4 - r12, pc} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci@ Purpose: call an expansion card loader to reset the card 3062306a36Sopenharmony_ci@ Proto : void read_loader(int card_base, char *loader); 3162306a36Sopenharmony_ci@ Returns: byte read 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ciENTRY(ecard_loader_reset) 3462306a36Sopenharmony_ci stmfd sp!, {r4 - r12, lr} 3562306a36Sopenharmony_ci mov r11, r0 3662306a36Sopenharmony_ci CPSR2SPSR(r0) 3762306a36Sopenharmony_ci mov lr, pc 3862306a36Sopenharmony_ci add pc, r1, #8 3962306a36Sopenharmony_ci ldmfd sp!, {r4 - r12, pc} 4062306a36Sopenharmony_ci 41