brintos

brintos / linux-shallow public Read only

0
0
Text · 3.1 KiB · fdd7237 Raw
136 lines · plain
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 *  linux/drivers/acorn/scsi/acornscsi-io.S: Acorn SCSI card IO4 */5#include <linux/linkage.h>6 7#include <asm/assembler.h>8#include <mach/hardware.h>9 10#if defined(__APCS_32__)11#define LOADREGS(t,r,l...)	ldm##t	r, l12#elif defined(__APCS_26__)13#define LOADREGS(t,r,l...)	ldm##t	r, l##^14#endif15 16@ Purpose: transfer a block of data from the acorn scsi card to memory17@ Proto  : void acornscsi_in(unsigned int addr_start, char *buffer, int length)18@ Returns: nothing19 20		.align21ENTRY(__acornscsi_in)22		stmfd	sp!, {r4 - r7, lr}23		bic	r0, r0, #324		mov	lr, #0xff25		orr	lr, lr, #0xff0026acornscsi_in16lp:27		subs	r2, r2, #1628		bmi	acornscsi_in829		ldmia	r0!, {r3, r4, r5, r6}30		and	r3, r3, lr31		orr	r3, r3, r4, lsl #1632		and 	r4, r5, lr33		orr	r4, r4, r6, lsl #1634		ldmia	r0!, {r5, r6, r7, ip}35		and	r5, r5, lr36		orr	r5, r5, r6, lsl #1637		and	r6, r7, lr38		orr	r6, r6, ip, lsl #1639		stmia	r1!, {r3 - r6}40		bne	acornscsi_in16lp41		LOADREGS(fd, sp!, {r4 - r7, pc})42 43acornscsi_in8:	adds	r2, r2, #844		bmi	acornscsi_in445		ldmia	r0!, {r3, r4, r5, r6}46		and	r3, r3, lr47		orr	r3, r3, r4, lsl #1648		and	r4, r5, lr49		orr	r4, r4, r6, lsl #1650		stmia	r1!, {r3 - r4}51		LOADREGS(eqfd, sp!, {r4 - r7, pc})52		sub	r2, r2, #853 54acornscsi_in4:	adds	r2, r2, #455		bmi	acornscsi_in256		ldmia	r0!, {r3, r4}57		and	r3, r3, lr58		orr	r3, r3, r4, lsl #1659		str	r3, [r1], #460		LOADREGS(eqfd, sp!, {r4 - r7, pc})61		sub	r2, r2, #462 63acornscsi_in2:	adds	r2, r2, #264		ldr	r3, [r0], #465		and	r3, r3, lr66		strb	r3, [r1], #167		mov	r3, r3, lsr #868		strplb	r3, [r1], #169		LOADREGS(fd, sp!, {r4 - r7, pc})70 71@ Purpose: transfer a block of data from memory to the acorn scsi card72@ Proto  : void acornscsi_in(unsigned int addr_start, char *buffer, int length)73@ Returns: nothing74 75ENTRY(__acornscsi_out)76		stmfd	sp!, {r4 - r6, lr}77		bic	r0, r0, #378acornscsi_out16lp:79		subs	r2, r2, #1680		bmi	acornscsi_out881		ldmia	r1!, {r4, r6, ip, lr}82		mov	r3, r4, lsl #1683		orr	r3, r3, r3, lsr #1684		mov	r4, r4, lsr #1685		orr	r4, r4, r4, lsl #1686		mov	r5, r6, lsl #1687		orr	r5, r5, r5, lsr #1688		mov	r6, r6, lsr #1689		orr	r6, r6, r6, lsl #1690		stmia	r0!, {r3, r4, r5, r6}91		mov	r3, ip, lsl #1692		orr	r3, r3, r3, lsr #1693		mov	r4, ip, lsr #1694		orr	r4, r4, r4, lsl #1695		mov	ip, lr, lsl #1696		orr	ip, ip, ip, lsr #1697		mov	lr, lr, lsr #1698		orr	lr, lr, lr, lsl #1699		stmia	r0!, {r3, r4, ip, lr}100		bne	acornscsi_out16lp101		LOADREGS(fd, sp!, {r4 - r6, pc})102 103acornscsi_out8:	adds	r2, r2, #8104		bmi	acornscsi_out4105		ldmia	r1!, {r4, r6}106		mov	r3, r4, lsl #16107		orr	r3, r3, r3, lsr #16108		mov	r4, r4, lsr #16109		orr	r4, r4, r4, lsl #16110		mov	r5, r6, lsl #16111		orr	r5, r5, r5, lsr #16112		mov	r6, r6, lsr #16113		orr	r6, r6, r6, lsl #16114		stmia	r0!, {r3, r4, r5, r6}115		LOADREGS(eqfd, sp!, {r4 - r6, pc})116 117		sub	r2, r2, #8118acornscsi_out4:	adds	r2, r2, #4119		bmi	acornscsi_out2120		ldr	r4, [r1], #4121		mov	r3, r4, lsl #16122		orr	r3, r3, r3, lsr #16123		mov	r4, r4, lsr #16124		orr	r4, r4, r4, lsl #16125		stmia	r0!, {r3, r4}126		LOADREGS(eqfd, sp!, {r4 - r6, pc})127 128		sub	r2, r2, #4129acornscsi_out2:	adds	r2, r2, #2130		ldr	r3, [r1], #2131		strb	r3, [r0], #1132		mov	r3, r3, lsr #8133		strplb	r3, [r0], #1134		LOADREGS(fd, sp!, {r4 - r6, pc})135 136