summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/m68k/shared/misc/memProbe.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libcpu/m68k/shared/misc/memProbe.c')
-rw-r--r--c/src/lib/libcpu/m68k/shared/misc/memProbe.c105
1 files changed, 0 insertions, 105 deletions
diff --git a/c/src/lib/libcpu/m68k/shared/misc/memProbe.c b/c/src/lib/libcpu/m68k/shared/misc/memProbe.c
deleted file mode 100644
index d352f76b6e..0000000000
--- a/c/src/lib/libcpu/m68k/shared/misc/memProbe.c
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- * Address Probing for M68k/ColdFire
- */
-
-#include <bsp.h>
-#include <string.h>
-#include <rtems/m68k/sim.h>
-
-#if (M68K_COLDFIRE_ARCH == 1)
-# define EXCEPTION_FRAME_PC_OFFSET "4"
-#else
-# define EXCEPTION_FRAME_PC_OFFSET "2"
-#endif
-
-typedef int (*MemProber)(void *from, void *to);
-int memProbeByte(void *from, void *to);
-int memProbeShort(void *from, void *to);
-int memProbeLong(void *from, void *to);
-int memProbeCatcher(void);
-rtems_status_code bspExtMemProbe(void *addr, int write, int size, void *pval);
-
-__asm__(
- ".text\n"
- "memProbeByte: \n"
- " move.l %sp@(4),%a0\n"
- " move.b %a0@,%d0 \n"
- " move.l %sp@(8),%a0\n"
- " move.b %d0,%a0@ \n"
- " bra.b 1f \n"
- "memProbeShort: \n"
- " move.l %sp@(4),%a0\n"
- " move.w %a0@,%d0 \n"
- " move.l %sp@(8),%a0\n"
- " move.w %d0,%a0@ \n"
- " bra.b 1f \n"
- "memProbeLong: \n"
- " move.l %sp@(4),%a0\n"
- " move.l %a0@,%d0 \n"
- " move.l %sp@(8),%a0\n"
- " move.l %d0,%a0@ \n"
- "1: nop \n"
- " moveq.l #1,%d0 \n"
- " rts \n"
- "memProbeCatcher: \n"
- " move.l #1f,%d0 \n"
- " move.l %d0,%sp@(" EXCEPTION_FRAME_PC_OFFSET ")\n"
- " rte \n"
- "1: clr.l %d0 \n"
- " rts \n"
-);
-
-rtems_status_code
-bspExtMemProbe(void *addr, int write, int size, void *pval)
-{
- rtems_status_code rval=RTEMS_SUCCESSFUL;
- rtems_interrupt_level level;
- unsigned long buf;
- MemProber probe;
- void *saveVector;
- void **exceptionPointer;
- void *vbr;
-
- /*
- * Sanity check
- */
- switch (size) {
- case sizeof(char): probe=memProbeByte; break;
- case sizeof(short): probe=memProbeShort; break;
- case sizeof(long): probe=memProbeLong; break;
- default: return RTEMS_INVALID_SIZE;
- }
-
- /*
- * use a buffer to make sure we don't end up probing 'pval'.
- */
- if (write && pval)
- memcpy(&buf, pval, size);
-
- /*
- * Get location of access fault exception
- */
- m68k_get_vbr(vbr);
- exceptionPointer = (void **)((char *)vbr + (2 * 4));
-
- /*
- * Probe!
- */
- rtems_interrupt_disable(level);
- saveVector = *exceptionPointer;
- *exceptionPointer = memProbeCatcher;
- if (write) {
- if (probe(&buf, addr) == 0)
- rval = RTEMS_INVALID_ADDRESS;
- }
- else {
- if (probe(addr, &buf) == 0)
- rval = RTEMS_INVALID_ADDRESS;
- }
- *exceptionPointer = saveVector;
- rtems_interrupt_enable(level);
-
- if (!write && pval && (rval == RTEMS_SUCCESSFUL))
- memcpy(pval, &buf, size);
- return rval;
-}