|
|
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.