|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)probe.c 1.1 86/02/03 Copyr 1983 Sun Micro"; ! 3: #endif ! 4: ! 5: /* ! 6: * Copyright (c) 1983 by Sun Microsystems, Inc. ! 7: */ ! 8: ! 9: /* ! 10: * Common routines for probing memory. ! 11: * Typically called by drivers during initialization to ! 12: * see if a device is present on the Mainbus. ! 13: */ ! 14: #include "../h/types.h" ! 15: #include "../machine/fault.h" ! 16: ! 17: static label_t *saved_jb; ! 18: static label_t jb; ! 19: ! 20: /* ! 21: * Probe a location by attempting to read a word ! 22: */ ! 23: peek(a) ! 24: short *a; ! 25: { ! 26: int val; ! 27: ! 28: saved_jb = nofault; ! 29: nofault = (label_t *)jb; ! 30: if (!setjmp(jb)) { ! 31: val = *a; ! 32: /* if we get here, it worked */ ! 33: nofault = saved_jb; ! 34: return (val & 0xFFFF); ! 35: } ! 36: /* A fault occured */ ! 37: nofault = saved_jb; ! 38: return (-1); ! 39: } ! 40: ! 41: /* ! 42: * Probe a location by attempting to read a byte ! 43: */ ! 44: peekc(a) ! 45: char *a; ! 46: { ! 47: int val; ! 48: ! 49: saved_jb = nofault; ! 50: nofault = (label_t *)jb; ! 51: if (!setjmp(jb)) { ! 52: val = *a; ! 53: /* if we get here, it worked */ ! 54: nofault = saved_jb; ! 55: return (val & 0xFF); ! 56: } ! 57: /* A fault occured */ ! 58: nofault = saved_jb; ! 59: return (-1); ! 60: } ! 61: ! 62: /* ! 63: * Probe a location by attempting to write a word ! 64: */ ! 65: poke(a, val) ! 66: short *a; ! 67: short val; ! 68: { ! 69: ! 70: saved_jb = nofault; ! 71: nofault = (label_t *)jb; ! 72: if (!setjmp(jb)) { ! 73: *a = val; ! 74: /* if we get here, it worked */ ! 75: nofault = saved_jb; ! 76: return (0); ! 77: } ! 78: /* A fault occured */ ! 79: nofault = saved_jb; ! 80: return (1); ! 81: } ! 82: ! 83: /* ! 84: * Probe a location by attempting to write a byte ! 85: */ ! 86: pokec(a, val) ! 87: char *a; ! 88: char val; ! 89: { ! 90: ! 91: saved_jb = nofault; ! 92: nofault = (label_t *)jb; ! 93: if (!setjmp(jb)) { ! 94: *a = val; ! 95: /* if we get here, it worked */ ! 96: nofault = saved_jb; ! 97: return (0); ! 98: } ! 99: /* A fault occured */ ! 100: nofault = saved_jb; ! 101: return (1); ! 102: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.