Annotation of sys/arch/hp300/stand/common/machdep.c, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: machdep.c,v 1.7 2006/08/17 06:31:10 miod Exp $ */
! 2: /* $NetBSD: machdep.c,v 1.4 1997/06/28 07:20:25 thorpej Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1988 University of Utah.
! 6: * Copyright (c) 1982, 1986, 1990, 1993
! 7: * The Regents of the University of California. All rights reserved.
! 8: *
! 9: * This code is derived from software contributed to Berkeley by
! 10: * the Systems Programming Group of the University of Utah Computer
! 11: * Science Department.
! 12: *
! 13: * Redistribution and use in source and binary forms, with or without
! 14: * modification, are permitted provided that the following conditions
! 15: * are met:
! 16: * 1. Redistributions of source code must retain the above copyright
! 17: * notice, this list of conditions and the following disclaimer.
! 18: * 2. Redistributions in binary form must reproduce the above copyright
! 19: * notice, this list of conditions and the following disclaimer in the
! 20: * documentation and/or other materials provided with the distribution.
! 21: * 3. Neither the name of the University nor the names of its contributors
! 22: * may be used to endorse or promote products derived from this software
! 23: * without specific prior written permission.
! 24: *
! 25: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 26: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 27: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 28: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 29: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 30: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 31: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 32: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 33: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 34: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 35: * SUCH DAMAGE.
! 36: *
! 37: * from: Utah $Hdr: machdep.c 1.10 92/06/18
! 38: *
! 39: * @(#)machdep.c 8.1 (Berkeley) 6/10/93
! 40: */
! 41:
! 42: #include <sys/param.h>
! 43:
! 44: #include <lib/libsa/stand.h>
! 45:
! 46: #include "samachdep.h"
! 47:
! 48: char *
! 49: getmachineid()
! 50: {
! 51: extern int machineid, mmuid;
! 52: char *cp;
! 53:
! 54: switch (machineid) {
! 55: case HP_320:
! 56: cp = "320"; break;
! 57: case HP_330:
! 58: cp = "318/319/330"; break;
! 59: case HP_340:
! 60: cp = "340"; break;
! 61: case HP_345:
! 62: cp = "345"; break;
! 63: case HP_350:
! 64: cp = "350"; break;
! 65: case HP_360:
! 66: cp = "360"; break;
! 67: #if 0 /* bootblocks do not tell 360 apart from 362 at the moment */
! 68: case HP_362:
! 69: cp = "362"; break;
! 70: #endif
! 71: case HP_370:
! 72: cp = "370"; break;
! 73: case HP_375:
! 74: cp = "375"; break;
! 75: case HP_380:
! 76: cp = "380"; break;
! 77: case HP_382:
! 78: cp = "382"; break;
! 79: case HP_385:
! 80: cp = "385"; break;
! 81: case HP_400:
! 82: cp = "400"; break;
! 83: case HP_425:
! 84: switch (mmuid) {
! 85: case MMUID_425_T:
! 86: cp = "425t"; break;
! 87: case MMUID_425_S:
! 88: cp = "425s"; break;
! 89: case MMUID_425_E:
! 90: cp = "425e"; break;
! 91: default:
! 92: cp = "425"; break;
! 93: }
! 94: break;
! 95: case HP_433:
! 96: switch (mmuid) {
! 97: case MMUID_433_T:
! 98: cp = "433t"; break;
! 99: case MMUID_433_S:
! 100: cp = "433s"; break;
! 101: default:
! 102: cp = "433"; break;
! 103: }
! 104: break;
! 105: default:
! 106: cp = "???"; break;
! 107: }
! 108: return(cp);
! 109: }
! 110:
! 111: int userom;
! 112:
! 113: struct trapframe {
! 114: int dregs[8];
! 115: int aregs[8];
! 116: int whoknows;
! 117: short sr;
! 118: int pc;
! 119: short frame;
! 120: };
! 121:
! 122: int trap(struct trapframe *);
! 123:
! 124: int
! 125: trap(fp)
! 126: struct trapframe *fp;
! 127: {
! 128: static int intrap = 0;
! 129:
! 130: if (intrap)
! 131: return(0);
! 132: intrap = 1;
! 133:
! 134: #if 0
! 135: userom = 1;
! 136: #endif
! 137:
! 138: printf("Got unexpected trap: format=%x vector=%x ps=%x pc=%x\n",
! 139: (fp->frame>>12)&0xF, fp->frame&0xFFF, fp->sr, fp->pc);
! 140: printf("dregs: %x %x %x %x %x %x %x %x\n",
! 141: fp->dregs[0], fp->dregs[1], fp->dregs[2], fp->dregs[3],
! 142: fp->dregs[4], fp->dregs[5], fp->dregs[6], fp->dregs[7]);
! 143: printf("aregs: %x %x %x %x %x %x %x %x\n",
! 144: fp->aregs[0], fp->aregs[1], fp->aregs[2], fp->aregs[3],
! 145: fp->aregs[4], fp->aregs[5], fp->aregs[6], fp->aregs[7]);
! 146: printf("bytes at pc: %x %x %x %x %x %x\n",
! 147: ((char *)fp->pc)[0], ((char *)fp->pc)[1], ((char *)fp->pc)[2],
! 148: ((char *)fp->pc)[3], ((char *)fp->pc)[4], ((char *)fp->pc)[5]);
! 149:
! 150: #if 0
! 151: userom = 0;
! 152: #endif
! 153:
! 154: intrap = 0;
! 155:
! 156: return(0);
! 157: }
! 158:
! 159: #define ROWS 24
! 160: #define COLS 80
! 161:
! 162: void
! 163: romputchar(int c)
! 164: {
! 165: static char buf[COLS];
! 166: static int col = 0, row = 0;
! 167: int i;
! 168:
! 169: switch (c) {
! 170: case '\0':
! 171: break;
! 172: case '\r':
! 173: break; /* ignore */
! 174: case '\n':
! 175: for (i = col; i < COLS-1; i++)
! 176: buf[i] = ' ';
! 177: buf[i] = '\0';
! 178: romout(row, buf);
! 179: col = 0;
! 180: if (++row == ROWS)
! 181: row = 0;
! 182: break;
! 183:
! 184: case '\t':
! 185: do {
! 186: romputchar(' ');
! 187: } while (col & 7);
! 188: break;
! 189:
! 190: default:
! 191: buf[col] = c;
! 192: if (++col == COLS-1)
! 193: romputchar('\n');
! 194: break;
! 195: }
! 196: }
! 197:
! 198: void
! 199: machdep_start(char *entry, int howto, char *loadaddr, char *ssym, char *esym)
! 200: {
! 201: /* Fix what we were passed in from exec() */
! 202: entry = loadaddr;
! 203: #define round_to_size(x) (((int)(x) + sizeof(int) - 1) & ~(sizeof(int) - 1))
! 204: esym = (char *)round_to_size(esym - (char *)loadaddr);
! 205: #undef round_to_size
! 206:
! 207: __asm __volatile ("movl %0,d7" : : "m" (howto));
! 208: __asm __volatile ("movl %0,d6" : : "m" (opendev));
! 209: __asm __volatile ("movl %0,a5" : : "a" (loadaddr));
! 210: __asm __volatile ("movl %0,a4" : : "a" (esym));
! 211: (*((int (*)(void))entry))();
! 212: }
CVSweb