mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 20:42:39 +00:00 
			
		
		
		
	 a09e64fbc0
			
		
	
	
		a09e64fbc0
		
	
	
	
	
		
			
			This just leaves include/asm-arm/plat-* to deal with. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
		
			
				
	
	
		
			139 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /*
 | |
|  *  linux/drivers/acorn/scsi/acornscsi-io.S: Acorn SCSI card IO
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify
 | |
|  * it under the terms of the GNU General Public License version 2 as
 | |
|  * published by the Free Software Foundation.
 | |
|  */
 | |
| #include <linux/linkage.h>
 | |
| 
 | |
| #include <asm/assembler.h>
 | |
| #include <mach/hardware.h>
 | |
| 
 | |
| #if defined(__APCS_32__)
 | |
| #define LOADREGS(t,r,l...)	ldm##t	r, l
 | |
| #elif defined(__APCS_26__)
 | |
| #define LOADREGS(t,r,l...)	ldm##t	r, l##^
 | |
| #endif
 | |
| 
 | |
| @ Purpose: transfer a block of data from the acorn scsi card to memory
 | |
| @ Proto  : void acornscsi_in(unsigned int addr_start, char *buffer, int length)
 | |
| @ Returns: nothing
 | |
| 
 | |
| 		.align
 | |
| ENTRY(__acornscsi_in)
 | |
| 		stmfd	sp!, {r4 - r7, lr}
 | |
| 		bic	r0, r0, #3
 | |
| 		mov	lr, #0xff
 | |
| 		orr	lr, lr, #0xff00
 | |
| acornscsi_in16lp:
 | |
| 		subs	r2, r2, #16
 | |
| 		bmi	acornscsi_in8
 | |
| 		ldmia	r0!, {r3, r4, r5, r6}
 | |
| 		and	r3, r3, lr
 | |
| 		orr	r3, r3, r4, lsl #16
 | |
| 		and 	r4, r5, lr
 | |
| 		orr	r4, r4, r6, lsl #16
 | |
| 		ldmia	r0!, {r5, r6, r7, ip}
 | |
| 		and	r5, r5, lr
 | |
| 		orr	r5, r5, r6, lsl #16
 | |
| 		and	r6, r7, lr
 | |
| 		orr	r6, r6, ip, lsl #16
 | |
| 		stmia	r1!, {r3 - r6}
 | |
| 		bne	acornscsi_in16lp
 | |
| 		LOADREGS(fd, sp!, {r4 - r7, pc})
 | |
| 
 | |
| acornscsi_in8:	adds	r2, r2, #8
 | |
| 		bmi	acornscsi_in4
 | |
| 		ldmia	r0!, {r3, r4, r5, r6}
 | |
| 		and	r3, r3, lr
 | |
| 		orr	r3, r3, r4, lsl #16
 | |
| 		and	r4, r5, lr
 | |
| 		orr	r4, r4, r6, lsl #16
 | |
| 		stmia	r1!, {r3 - r4}
 | |
| 		LOADREGS(eqfd, sp!, {r4 - r7, pc})
 | |
| 		sub	r2, r2, #8
 | |
| 
 | |
| acornscsi_in4:	adds	r2, r2, #4
 | |
| 		bmi	acornscsi_in2
 | |
| 		ldmia	r0!, {r3, r4}
 | |
| 		and	r3, r3, lr
 | |
| 		orr	r3, r3, r4, lsl #16
 | |
| 		str	r3, [r1], #4
 | |
| 		LOADREGS(eqfd, sp!, {r4 - r7, pc})
 | |
| 		sub	r2, r2, #4
 | |
| 
 | |
| acornscsi_in2:	adds	r2, r2, #2
 | |
| 		ldr	r3, [r0], #4
 | |
| 		and	r3, r3, lr
 | |
| 		strb	r3, [r1], #1
 | |
| 		mov	r3, r3, lsr #8
 | |
| 		strplb	r3, [r1], #1
 | |
| 		LOADREGS(fd, sp!, {r4 - r7, pc})
 | |
| 
 | |
| @ Purpose: transfer a block of data from memory to the acorn scsi card
 | |
| @ Proto  : void acornscsi_in(unsigned int addr_start, char *buffer, int length)
 | |
| @ Returns: nothing
 | |
| 
 | |
| ENTRY(__acornscsi_out)
 | |
| 		stmfd	sp!, {r4 - r6, lr}
 | |
| 		bic	r0, r0, #3
 | |
| acornscsi_out16lp:
 | |
| 		subs	r2, r2, #16
 | |
| 		bmi	acornscsi_out8
 | |
| 		ldmia	r1!, {r4, r6, ip, lr}
 | |
| 		mov	r3, r4, lsl #16
 | |
| 		orr	r3, r3, r3, lsr #16
 | |
| 		mov	r4, r4, lsr #16
 | |
| 		orr	r4, r4, r4, lsl #16
 | |
| 		mov	r5, r6, lsl #16
 | |
| 		orr	r5, r5, r5, lsr #16
 | |
| 		mov	r6, r6, lsr #16
 | |
| 		orr	r6, r6, r6, lsl #16
 | |
| 		stmia	r0!, {r3, r4, r5, r6}
 | |
| 		mov	r3, ip, lsl #16
 | |
| 		orr	r3, r3, r3, lsr #16
 | |
| 		mov	r4, ip, lsr #16
 | |
| 		orr	r4, r4, r4, lsl #16
 | |
| 		mov	ip, lr, lsl #16
 | |
| 		orr	ip, ip, ip, lsr #16
 | |
| 		mov	lr, lr, lsr #16
 | |
| 		orr	lr, lr, lr, lsl #16
 | |
| 		stmia	r0!, {r3, r4, ip, lr}
 | |
| 		bne	acornscsi_out16lp
 | |
| 		LOADREGS(fd, sp!, {r4 - r6, pc})
 | |
| 
 | |
| acornscsi_out8:	adds	r2, r2, #8
 | |
| 		bmi	acornscsi_out4
 | |
| 		ldmia	r1!, {r4, r6}
 | |
| 		mov	r3, r4, lsl #16
 | |
| 		orr	r3, r3, r3, lsr #16
 | |
| 		mov	r4, r4, lsr #16
 | |
| 		orr	r4, r4, r4, lsl #16
 | |
| 		mov	r5, r6, lsl #16
 | |
| 		orr	r5, r5, r5, lsr #16
 | |
| 		mov	r6, r6, lsr #16
 | |
| 		orr	r6, r6, r6, lsl #16
 | |
| 		stmia	r0!, {r3, r4, r5, r6}
 | |
| 		LOADREGS(eqfd, sp!, {r4 - r6, pc})
 | |
| 
 | |
| 		sub	r2, r2, #8
 | |
| acornscsi_out4:	adds	r2, r2, #4
 | |
| 		bmi	acornscsi_out2
 | |
| 		ldr	r4, [r1], #4
 | |
| 		mov	r3, r4, lsl #16
 | |
| 		orr	r3, r3, r3, lsr #16
 | |
| 		mov	r4, r4, lsr #16
 | |
| 		orr	r4, r4, r4, lsl #16
 | |
| 		stmia	r0!, {r3, r4}
 | |
| 		LOADREGS(eqfd, sp!, {r4 - r6, pc})
 | |
| 
 | |
| 		sub	r2, r2, #4
 | |
| acornscsi_out2:	adds	r2, r2, #2
 | |
| 		ldr	r3, [r1], #2
 | |
| 		strb	r3, [r0], #1
 | |
| 		mov	r3, r3, lsr #8
 | |
| 		strplb	r3, [r0], #1
 | |
| 		LOADREGS(fd, sp!, {r4 - r6, pc})
 | |
| 
 |