diff --git a/sys/arch/arm32/podulebus/podulebus_io.c b/sys/arch/arm32/podulebus/podulebus_io.c new file mode 100644 index 000000000000..64e6e6683dc7 --- /dev/null +++ b/sys/arch/arm32/podulebus/podulebus_io.c @@ -0,0 +1,186 @@ +/* $NetBSD: podulebus_io.c,v 1.1 1997/01/17 01:00:47 mark Exp $ */ + +/* + * Copyright (c) 1997 Mark Brinicombe. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Mark Brinicombe. + * 4. The name of the company nor the name of the author may be used to + * endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * bus_space I/O functions for podulebus + */ + +#include +#include +#include + +/* Proto types for all the bus_space structure functions */ + +bs_protos(podulebus); + +/* Declare the podulebus bus space tag */ + +struct bus_space podulebus_bs_tag = { + /* cookie */ + NULL, + + /* mapping/unmapping */ + podulebus_map, + podulebus_unmap, + podulebus_subregion, + + /* allocation/deallocation */ + podulebus_alloc, + podulebus_free, + + /* read (single) */ + podulebus_r_1, + podulebus_r_2, + podulebus_r_4, + podulebus_r_8, + + /* read multi */ + podulebus_rm_1, + podulebus_rm_2, + podulebus_rm_4, + podulebus_rm_8, + + /* read region */ + podulebus_rr_1, + podulebus_rr_2, + podulebus_rr_4, + podulebus_rr_8, + + /* write (single) */ + podulebus_w_1, + podulebus_w_2, + podulebus_w_4, + podulebus_w_8, + + /* write multi */ + podulebus_wm_1, + podulebus_wm_2, + podulebus_wm_4, + podulebus_wm_8, + + /* write region */ + podulebus_wr_1, + podulebus_wr_2, + podulebus_wr_4, + podulebus_wr_8, + + /* set multi */ + /* XXX IMPLEMENT */ + + /* set region */ + /* XXX IMPLEMENT */ + + /* copy */ + /* XXX IMPLEMENT */ + + /* barrier */ + podulebus_barrier +}; + +/* bus space functions */ + +int +podulebus_map(t, bpa, size, cacheable, bshp) + void *t; + bus_addr_t bpa; + bus_size_t size; + int cacheable; + bus_space_handle_t *bshp; +{ + /* + * Temporary implementation as all I/O is already mapped etc. + * + * Eventually this function will do the mapping check for multiple maps + */ + *bshp = bpa; + return(0); + } + +int +podulebus_alloc(t, rstart, rend, size, alignment, boundary, cacheable, + bpap, bshp) + void *t; + bus_addr_t rstart, rend; + bus_size_t size, alignment, boundary; + int cacheable; + bus_addr_t *bpap; + bus_space_handle_t *bshp; +{ + panic("podulebus_alloc(): Help!\n"); +} + + +void +podulebus_unmap(t, bsh, size) + void *t; + bus_space_handle_t bsh; + bus_size_t size; +{ + /* + * Temporary implementation + */ +} + +void +podulebus_free(t, bsh, size) + void *t; + bus_space_handle_t bsh; + bus_size_t size; +{ + + panic("podulebus_free(): Help!\n"); + /* podulebus_unmap() does all that we need to do. */ +/* podulebus_unmap(t, bsh, size);*/ +} + +int +podulebus_subregion(t, bsh, offset, size, nbshp) + void *t; + bus_space_handle_t bsh; + bus_size_t offset, size; + bus_space_handle_t *nbshp; +{ + + *nbshp = bsh + offset; + return (0); +} + +void +podulebus_barrier(t, bsh, offset, len, flags) + void *t; + bus_space_handle_t bsh; + bus_size_t offset, len; + int flags; +{ +} diff --git a/sys/arch/arm32/podulebus/podulebus_io_asm.S b/sys/arch/arm32/podulebus/podulebus_io_asm.S new file mode 100644 index 000000000000..b7518c95cbb5 --- /dev/null +++ b/sys/arch/arm32/podulebus/podulebus_io_asm.S @@ -0,0 +1,259 @@ +/* $NetBSD: podulebus_io_asm.S,v 1.1 1997/01/17 01:00:48 mark Exp $ */ + +/* + * Copyright (c) 1997 Mark Brinicombe. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by Mark Brinicombe. + * 4. The name of the company nor the name of the author may be used to + * endorse or promote products derived from this software without specific + * prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * bus_space I/O functions for podulebus + */ + +sp .req r13 +lr .req r14 +pc .req r15 + + .text + +/* + * read single + */ + + .global _podulebus_r_1 +_podulebus_r_1: + ldrb r0, [r1, r2, lsl #2] + mov pc, lr + + .global _podulebus_r_2 +_podulebus_r_2: + ldr r0, [r1, r2, lsl #2] + bic r0, r0, #0xff000000 + bic r0, r0, #0x00ff0000 + mov pc, lr + + .global _podulebus_r_4 +_podulebus_r_4: + ldr r0, [r1, r2, lsl #2] + mov pc, lr + + .global _podulebus_r_8 +_podulebus_r_8: + adr r0, podulebus_r_8_text + b _panic + +podulebus_r_8_text: + .asciz "podulebus_r_8(%x,%x): Not implemented\n" + .align 0 + +/* + * write single + */ + + .global _podulebus_w_1 +_podulebus_w_1: + strb r3, [r1, r2, lsl #2] + mov pc, lr + + .global _podulebus_w_2 +_podulebus_w_2: + mov r3, r3, lsl #16 + orr r3, r3, r3, lsr #16 + str r3, [r1, r2, lsl #2] + mov pc, lr + + .global _podulebus_w_4 +_podulebus_w_4: + str r3, [r1, r2, lsl #2] + mov pc, lr + + .global _podulebus_w_8 +_podulebus_w_8: + adr r0, podulebus_w_8_text + b _panic + +podulebus_w_8_text: + .asciz "podulebus_w_8(%x,%x): Not implemented\n" + .align 0 + +/* + * read multiple + */ + + .global _podulebus_rm_1 +_podulebus_rm_1: + adr r0, podulebus_rm_1_text + b _panic + +podulebus_rm_1_text: + .asciz "podulebus_rm_1(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_rm_2 +_podulebus_rm_2: + add r0, r1, r2, lsl #2 + mov r1, r3 + ldr r2, [sp, #0] + b _insw + + .global _podulebus_rm_4 +_podulebus_rm_4: + adr r0, podulebus_rm_4_text + b _panic + +podulebus_rm_4_text: + .asciz "podulebus_rm_4(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_rm_8 +_podulebus_rm_8: + adr r0, podulebus_rm_8_text + b _panic + +podulebus_rm_8_text: + .asciz "podulebus_rm_8(%x,%x,%x): Not implemented\n" + .align 0 + +/* + * write multiple + */ + + .global _podulebus_wm_1 +_podulebus_wm_1: + adr r0, podulebus_wm_1_text + b _panic + +podulebus_wm_1_text: + .asciz "podulebus_wm_1(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_wm_2 +_podulebus_wm_2: + add r0, r1, r2, lsl #2 + mov r1, r3 + ldr r2, [sp, #0] + b _outsw + + .global _podulebus_wm_4 +_podulebus_wm_4: + adr r0, podulebus_wm_4_text + b _panic + +podulebus_wm_4_text: + .asciz "podulebus_wm_4(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_wm_8 +_podulebus_wm_8: + adr r0, podulebus_wm_8_text + b _panic + +podulebus_wm_8_text: + .asciz "podulebus_wm_8(%x,%x,%x): Not implemented\n" + .align 0 + +/* + * read region + */ + + .global _podulebus_rr_1 +_podulebus_rr_1: + adr r0, podulebus_rr_1_text + b _panic + +podulebus_rr_1_text: + .asciz "podulebus_rr_1(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_rr_2 +_podulebus_rr_2: + adr r0, podulebus_rr_2_text + b _panic + +podulebus_rr_2_text: + .asciz "podulebus_rr_2(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_rr_4 +_podulebus_rr_4: + adr r0, podulebus_rr_4_text + b _panic + +podulebus_rr_4_text: + .asciz "podulebus_rr_4(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_rr_8 +_podulebus_rr_8: + adr r0, podulebus_rr_8_text + b _panic + +podulebus_rr_8_text: + .asciz "podulebus_rr_8(%x,%x,%x): Not implemented\n" + .align 0 + +/* + * write region + */ + + .global _podulebus_wr_1 +_podulebus_wr_1: + adr r0, podulebus_wr_1_text + b _panic + +podulebus_wr_1_text: + .asciz "podulebus_wr_1(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_wr_2 +_podulebus_wr_2: + adr r0, podulebus_wr_2_text + b _panic + +podulebus_wr_2_text: + .asciz "podulebus_wr_2(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_wr_4 +_podulebus_wr_4: + adr r0, podulebus_wr_4_text + b _panic + +podulebus_wr_4_text: + .asciz "podulebus_wr_4(%x,%x,%x): Not implemented\n" + .align 0 + + .global _podulebus_wr_8 +_podulebus_wr_8: + adr r0, podulebus_wr_8_text + b _panic + +podulebus_wr_8_text: + .asciz "podulebus_wr_8(%x,%x,%x): Not implemented\n" + .align 0