1 //==========================================================================
5 // Generic support for safe memory read/write.
7 //==========================================================================
8 //####ECOSGPLCOPYRIGHTBEGIN####
9 // -------------------------------------------
10 // This file is part of eCos, the Embedded Configurable Operating System.
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
13 // eCos is free software; you can redistribute it and/or modify it under
14 // the terms of the GNU General Public License as published by the Free
15 // Software Foundation; either version 2 or (at your option) any later version.
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
22 // You should have received a copy of the GNU General Public License along
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
26 // As a special exception, if other files instantiate templates or use macros
27 // or inline functions from this file, or you compile this file and link it
28 // with other works to produce a work based on this file, this file does not
29 // by itself cause the resulting work to be covered by the GNU General Public
30 // License. However the source code for this file must still be made available
31 // in accordance with section (3) of the GNU General Public License.
33 // This exception does not invalidate any other reasons why a work based on
34 // this file might be covered by the GNU General Public License.
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
37 // at http://sources.redhat.com/ecos/ecos-license/
38 // -------------------------------------------
39 //####ECOSGPLCOPYRIGHTEND####
40 //==========================================================================
41 //#####DESCRIPTIONBEGIN####
44 // Contributors: gthomas
46 // Purpose: Generic support for safe memory read/write.
47 // Description: Some targets may need to provide their own version.
50 //####DESCRIPTIONEND####
52 //=========================================================================
58 typedef void (*moveproc_t)(void *s, void *d);
60 static jmp_buf __errjmp;
63 * These are globals because we want them preserved
64 * across function calls.
66 static bsp_handler_t __oldtrap;
71 move_8(void *src, void *dest)
73 *(char *)dest = *(char *)src;
78 move_16(void *src, void *dest)
80 *(short *)dest = *(short *)src;
85 move_32(void *src, void *dest)
87 *(int *)dest = *(int *)src;
92 err_trap(int exc_nr, void *regs)
99 bsp_memory_read(void *addr, /* start addr of memory to read */
100 int asid, /* address space id */
101 int rsize, /* size of individual read operation */
102 int nreads, /* number of read operations */
103 void *buf) /* result buffer */
108 __oldtrap = bsp_install_dbg_handler(err_trap);
110 if (setjmp(__errjmp) == 0) {
129 (void)bsp_install_dbg_handler(__oldtrap);
136 for (__done = 0; __done < nreads; __done++) {
143 (void)bsp_install_dbg_handler(__oldtrap);
148 int bsp_memory_write(void *addr, /* start addr of memory to write */
149 int asid, /* address space id */
150 int wsize, /* size of individual write operation */
151 int nwrites, /* number of write operations */
152 void *buf) /* source buffer for write data */
157 __oldtrap = bsp_install_dbg_handler(err_trap);
159 if (setjmp(__errjmp) == 0) {
178 (void)bsp_install_dbg_handler(__oldtrap);
185 for (__done = 0; __done < nwrites; __done++) {
192 (void)bsp_install_dbg_handler(__oldtrap);