|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * @OSF_FREE_COPYRIGHT@ ! 24: */ ! 25: /* ! 26: * @APPLE_FREE_COPYRIGHT@ ! 27: */ ! 28: ! 29: /* ! 30: * Here be the firmware's public interfaces ! 31: * Lovingly crafted by Bill Angell using traditional methods ! 32: */ ! 33: ! 34: #ifndef _FIRMWARE_H_ ! 35: #define _FIRMWARE_H_ ! 36: ! 37: #ifndef __ppc__ ! 38: #error This file is only useful on PowerPC. ! 39: #endif ! 40: ! 41: /* ! 42: * This routine is used to write debug output to either the modem or printer port. ! 43: * parm 1 is printer (0) or modem (1); parm 2 is ID (printed directly); parm 3 converted to hex ! 44: */ ! 45: ! 46: void dbgDisp(unsigned int port, unsigned int id, unsigned int data); ! 47: void dbgLog(unsigned int d0, unsigned int d1, unsigned int d2, unsigned int d3); ! 48: void dbgLog2(unsigned int type, unsigned int p1, unsigned int p2); ! 49: void dbgDispLL(unsigned int port, unsigned int id, unsigned int data); ! 50: void fwSCCinit(unsigned int port); ! 51: ! 52: extern void dbgTrace(unsigned int item1, unsigned int item2, unsigned int item3); ! 53: #if 0 /* (TEST/DEBUG) - eliminate inline */ ! 54: extern __inline__ void dbgTrace(unsigned int item1, unsigned int item2, unsigned int item3) { ! 55: ! 56: __asm__ volatile("mr r3,%0" : : "r" (item1) : "r3"); ! 57: __asm__ volatile("mr r4,%0" : : "r" (item2) : "r4"); ! 58: __asm__ volatile("mr r5,%0" : : "r" (item3) : "r5"); ! 59: #ifdef __ELF__ ! 60: __asm__ volatile("lis r0,CutTrace@h" : : : "r0"); ! 61: __asm__ volatile("ori r0,r0,CutTrace@l" : : : "r0"); ! 62: #else ! 63: __asm__ volatile("lis r0,hi16(CutTrace)" : : : "r0"); ! 64: __asm__ volatile("ori r0,r0,lo16(CutTrace)" : : : "r0"); ! 65: #endif ! 66: __asm__ volatile("sc"); ! 67: return; ! 68: } ! 69: #endif ! 70: ! 71: extern void DoPreempt(void); ! 72: extern __inline__ void DoPreempt(void) { ! 73: #ifdef __ELF__ ! 74: __asm__ volatile("lis r0,DoPreemptCall@h" : : : "r0"); ! 75: __asm__ volatile("ori r0,r0,DoPreemptCall@l" : : : "r0"); ! 76: #else ! 77: __asm__ volatile("lis r0,hi16(DoPreemptCall)" : : : "r0"); ! 78: __asm__ volatile("ori r0,r0,lo16(DoPreemptCall)" : : : "r0"); ! 79: #endif ! 80: __asm__ volatile("sc"); ! 81: return; ! 82: } ! 83: ! 84: extern void CreateFakeIO(void); ! 85: extern __inline__ void CreateFakeIO(void) { ! 86: #ifdef __ELF__ ! 87: __asm__ volatile("lis r0,CreateFakeIOCall@h" : : : "r0"); ! 88: __asm__ volatile("ori r0,r0,CreateFakeIOCall@l" : : : "r0"); ! 89: #else ! 90: __asm__ volatile("lis r0,hi16(CreateFakeIOCall)" : : : "r0"); ! 91: __asm__ volatile("ori r0,r0,lo16(CreateFakeIOCall)" : : : "r0"); ! 92: #endif ! 93: __asm__ volatile("sc"); ! 94: return; ! 95: } ! 96: ! 97: extern void CreateFakeDEC(void); ! 98: extern __inline__ void CreateFakeDEC(void) { ! 99: #ifdef __ELF__ ! 100: __asm__ volatile("lis r0,CreateFakeDECCall@h" : : : "r0"); ! 101: __asm__ volatile("ori r0,r0,CreateFakeDECCall@l" : : : "r0"); ! 102: #else ! 103: __asm__ volatile("lis r0,hi16(CreateFakeDECCall)" : : : "r0"); ! 104: __asm__ volatile("ori r0,r0,lo16(CreateFakeDECCall)" : : : "r0"); ! 105: #endif ! 106: __asm__ volatile("sc"); ! 107: return; ! 108: } ! 109: ! 110: typedef struct Boot_Video bootBumbleC; ! 111: ! 112: extern void StoreReal(unsigned int val, unsigned int addr); ! 113: extern void ReadReal(unsigned int raddr, unsigned int *vaddr); ! 114: extern void ClearReal(unsigned int addr, unsigned int lgn); ! 115: extern void LoadDBATs(unsigned int *bat); ! 116: extern void LoadIBATs(unsigned int *bat); ! 117: extern void stFloat(unsigned int *addr); ! 118: extern int stVectors(unsigned int *addr); ! 119: extern int stSpecrs(unsigned int *addr); ! 120: extern unsigned int LLTraceSet(unsigned int tflags); ! 121: extern void GratefulDebInit(bootBumbleC *boot_video_info); ! 122: extern void GratefulDebDisp(unsigned int coord, unsigned int data); ! 123: extern void checkNMI(void); ! 124: ! 125: typedef struct GDWorkArea { /* Grateful Deb work area one per processor */ ! 126: ! 127: /* Note that a lot of info is duplicated for each processor */ ! 128: ! 129: unsigned int GDsave[32]; /* Save area for registers */ ! 130: ! 131: unsigned int GDfp0[2]; ! 132: unsigned int GDfp1[2]; ! 133: unsigned int GDfp2[2]; ! 134: unsigned int GDfp3[2]; ! 135: ! 136: unsigned int GDtop; /* Top pixel of CPU's window */ ! 137: unsigned int GDleft; /* Left pixel of CPU's window */ ! 138: unsigned int GDtopleft; /* Physical address of top left in frame buffer */ ! 139: unsigned int GDrowbytes; /* Bytes per row */ ! 140: unsigned int GDrowchar; /* Bytes per row of characters plus leading */ ! 141: unsigned int GDdepth; /* Bits per pixel */ ! 142: unsigned int GDcollgn; /* Column width in bytes */ ! 143: unsigned int GDready; /* We are ready to go */ ! 144: unsigned int GDfiller[16]; /* Fill it up to a 256 byte boundary */ ! 145: ! 146: unsigned int GDrowbuf1[128]; /* Buffer to an 8 character row */ ! 147: unsigned int GDrowbuf2[128]; /* Buffer to an 8 character row */ ! 148: ! 149: } GDWorkArea; ! 150: #define GDfontsize 16 ! 151: #define GDdispcols 2 ! 152: ! 153: #endif /* _FIRMWARE_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.