xref: /inferno-os/os/ks32/dat.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth typedef struct Conf	Conf;
2*74a4d8c2SCharles.Forsyth typedef struct FPU	FPU;
3*74a4d8c2SCharles.Forsyth typedef struct FPenv	FPenv;
4*74a4d8c2SCharles.Forsyth typedef struct Label	Label;
5*74a4d8c2SCharles.Forsyth typedef struct Lock	Lock;
6*74a4d8c2SCharles.Forsyth typedef struct Mach	Mach;
7*74a4d8c2SCharles.Forsyth typedef struct Ureg	Ureg;
8*74a4d8c2SCharles.Forsyth typedef struct ISAConf	ISAConf;
9*74a4d8c2SCharles.Forsyth typedef struct PCMmap	PCMmap;
10*74a4d8c2SCharles.Forsyth typedef struct PCIcfg	PCIcfg;
11*74a4d8c2SCharles.Forsyth typedef struct TouchPnt TouchPnt;
12*74a4d8c2SCharles.Forsyth typedef struct TouchTrans TouchTrans;
13*74a4d8c2SCharles.Forsyth typedef struct TouchCal TouchCal;
14*74a4d8c2SCharles.Forsyth typedef struct Vmode Vmode;
15*74a4d8c2SCharles.Forsyth 
16*74a4d8c2SCharles.Forsyth typedef ulong Instr;
17*74a4d8c2SCharles.Forsyth 
18*74a4d8c2SCharles.Forsyth #define ISAOPTLEN 16
19*74a4d8c2SCharles.Forsyth #define NISAOPT 8
20*74a4d8c2SCharles.Forsyth struct Conf
21*74a4d8c2SCharles.Forsyth {
22*74a4d8c2SCharles.Forsyth 	ulong	nmach;			/* processors */
23*74a4d8c2SCharles.Forsyth 	ulong	nproc;			/* processes */
24*74a4d8c2SCharles.Forsyth 	ulong	npage0;			/* total physical pages of memory */
25*74a4d8c2SCharles.Forsyth 	ulong	npage1;			/* total physical pages of memory */
26*74a4d8c2SCharles.Forsyth 	ulong	topofmem;		/* highest physical address + 1 */
27*74a4d8c2SCharles.Forsyth 	ulong	npage;			/* total physical pages of memory */
28*74a4d8c2SCharles.Forsyth 	ulong	base0;			/* base of bank 0 */
29*74a4d8c2SCharles.Forsyth 	ulong	base1;			/* base of bank 1 */
30*74a4d8c2SCharles.Forsyth 	ulong	ialloc;			/* max interrupt time allocation in bytes */
31*74a4d8c2SCharles.Forsyth 	ulong	flashbase;
32*74a4d8c2SCharles.Forsyth 	ulong	cpuspeed;
33*74a4d8c2SCharles.Forsyth 	ulong	pagetable;
34*74a4d8c2SCharles.Forsyth 
35*74a4d8c2SCharles.Forsyth 	int		useminicache;		/* screen.c/lcd.c */
36*74a4d8c2SCharles.Forsyth 	int		cansetbacklight;	/* screen.c/lcd.c */
37*74a4d8c2SCharles.Forsyth 	int		cansetcontrast;		/* screen.c/lcd.c */
38*74a4d8c2SCharles.Forsyth 	int		remaplo;			/* use alt ivec */
39*74a4d8c2SCharles.Forsyth 	int		textwrite;			/* writeable text segment, for debug */
40*74a4d8c2SCharles.Forsyth };
41*74a4d8c2SCharles.Forsyth 
42*74a4d8c2SCharles.Forsyth struct ISAConf {
43*74a4d8c2SCharles.Forsyth 	char	type[KNAMELEN];
44*74a4d8c2SCharles.Forsyth 	ulong	port;
45*74a4d8c2SCharles.Forsyth 	ulong	irq;
46*74a4d8c2SCharles.Forsyth 	ulong	sairq;
47*74a4d8c2SCharles.Forsyth 	ulong	dma;
48*74a4d8c2SCharles.Forsyth 	ulong	mem;
49*74a4d8c2SCharles.Forsyth 	ulong	size;
50*74a4d8c2SCharles.Forsyth 	ulong	freq;
51*74a4d8c2SCharles.Forsyth 
52*74a4d8c2SCharles.Forsyth 	int	nopt;
53*74a4d8c2SCharles.Forsyth 	char	opt[NISAOPT][ISAOPTLEN];
54*74a4d8c2SCharles.Forsyth };
55*74a4d8c2SCharles.Forsyth 
56*74a4d8c2SCharles.Forsyth /*
57*74a4d8c2SCharles.Forsyth  * FPenv.status
58*74a4d8c2SCharles.Forsyth  */
59*74a4d8c2SCharles.Forsyth enum
60*74a4d8c2SCharles.Forsyth {
61*74a4d8c2SCharles.Forsyth 	FPINIT,
62*74a4d8c2SCharles.Forsyth 	FPACTIVE,
63*74a4d8c2SCharles.Forsyth 	FPINACTIVE,
64*74a4d8c2SCharles.Forsyth };
65*74a4d8c2SCharles.Forsyth 
66*74a4d8c2SCharles.Forsyth struct	FPenv
67*74a4d8c2SCharles.Forsyth {
68*74a4d8c2SCharles.Forsyth 	ulong	status;
69*74a4d8c2SCharles.Forsyth 	ulong	control;
70*74a4d8c2SCharles.Forsyth 	ushort	fpistate;	/* emulated fp */
71*74a4d8c2SCharles.Forsyth 	ulong	regs[8][3];	/* emulated fp */
72*74a4d8c2SCharles.Forsyth };
73*74a4d8c2SCharles.Forsyth 
74*74a4d8c2SCharles.Forsyth /*
75*74a4d8c2SCharles.Forsyth  * This structure must agree with fpsave and fprestore asm routines
76*74a4d8c2SCharles.Forsyth  */
77*74a4d8c2SCharles.Forsyth struct	FPU
78*74a4d8c2SCharles.Forsyth {
79*74a4d8c2SCharles.Forsyth 	FPenv	env;
80*74a4d8c2SCharles.Forsyth 	uchar	regs[80];	/* floating point registers */
81*74a4d8c2SCharles.Forsyth };
82*74a4d8c2SCharles.Forsyth 
83*74a4d8c2SCharles.Forsyth struct Label
84*74a4d8c2SCharles.Forsyth {
85*74a4d8c2SCharles.Forsyth 	ulong	sp;
86*74a4d8c2SCharles.Forsyth 	ulong	pc;
87*74a4d8c2SCharles.Forsyth };
88*74a4d8c2SCharles.Forsyth 
89*74a4d8c2SCharles.Forsyth struct Lock
90*74a4d8c2SCharles.Forsyth {
91*74a4d8c2SCharles.Forsyth 	ulong	key;
92*74a4d8c2SCharles.Forsyth 	ulong	sr;
93*74a4d8c2SCharles.Forsyth 	ulong	pc;
94*74a4d8c2SCharles.Forsyth 	int	pri;
95*74a4d8c2SCharles.Forsyth };
96*74a4d8c2SCharles.Forsyth 
97*74a4d8c2SCharles.Forsyth #include "../port/portdat.h"
98*74a4d8c2SCharles.Forsyth 
99*74a4d8c2SCharles.Forsyth /*
100*74a4d8c2SCharles.Forsyth  *  machine dependent definitions not used by ../port/dat.h
101*74a4d8c2SCharles.Forsyth  */
102*74a4d8c2SCharles.Forsyth struct Mach
103*74a4d8c2SCharles.Forsyth {
104*74a4d8c2SCharles.Forsyth 	ulong	ticks;			/* of the clock since boot time */
105*74a4d8c2SCharles.Forsyth 	Proc	*proc;			/* current process on this processor */
106*74a4d8c2SCharles.Forsyth 	Label	sched;			/* scheduler wakeup */
107*74a4d8c2SCharles.Forsyth 	Lock	alarmlock;		/* access to alarm list */
108*74a4d8c2SCharles.Forsyth 	void	*alarm;			/* alarms bound to this clock */
109*74a4d8c2SCharles.Forsyth 	int	machno;
110*74a4d8c2SCharles.Forsyth 	int	nrdy;
111*74a4d8c2SCharles.Forsyth 
112*74a4d8c2SCharles.Forsyth 	int	stack[1];
113*74a4d8c2SCharles.Forsyth };
114*74a4d8c2SCharles.Forsyth 
115*74a4d8c2SCharles.Forsyth #define	MACHP(n)	(n == 0 ? (Mach*)(MACHADDR) : (Mach*)0)
116*74a4d8c2SCharles.Forsyth 
117*74a4d8c2SCharles.Forsyth extern Mach Mach0;
118*74a4d8c2SCharles.Forsyth extern Mach *m;
119*74a4d8c2SCharles.Forsyth extern Proc *up;
120*74a4d8c2SCharles.Forsyth 
121*74a4d8c2SCharles.Forsyth typedef struct MemBank {
122*74a4d8c2SCharles.Forsyth 	uint	pbase;
123*74a4d8c2SCharles.Forsyth 	uint	plimit;
124*74a4d8c2SCharles.Forsyth 	uint	vbase;
125*74a4d8c2SCharles.Forsyth 	uint	vlimit;
126*74a4d8c2SCharles.Forsyth } MemBank;
127*74a4d8c2SCharles.Forsyth 
128*74a4d8c2SCharles.Forsyth enum {
129*74a4d8c2SCharles.Forsyth 	// DMA configuration parameters
130*74a4d8c2SCharles.Forsyth 
131*74a4d8c2SCharles.Forsyth 	 // DMA Direction
132*74a4d8c2SCharles.Forsyth 	DmaOUT=		0,
133*74a4d8c2SCharles.Forsyth 	DmaIN=		1,
134*74a4d8c2SCharles.Forsyth 
135*74a4d8c2SCharles.Forsyth 	 // dma endianess
136*74a4d8c2SCharles.Forsyth 	DmaLittle=	0,
137*74a4d8c2SCharles.Forsyth 	DmaBig=		1,
138*74a4d8c2SCharles.Forsyth 
139*74a4d8c2SCharles.Forsyth 	 // dma devices
140*74a4d8c2SCharles.Forsyth 	DmaUDC=		0,
141*74a4d8c2SCharles.Forsyth 	DmaSDLC=	2,
142*74a4d8c2SCharles.Forsyth 	DmaUART0=	4,
143*74a4d8c2SCharles.Forsyth 	DmaHSSP=	6,
144*74a4d8c2SCharles.Forsyth 	DmaUART1=	7,	// special case (is really 6)
145*74a4d8c2SCharles.Forsyth 	DmaUART2=	8,
146*74a4d8c2SCharles.Forsyth 	DmaMCPaudio=	10,
147*74a4d8c2SCharles.Forsyth 	DmaMCPtelecom=	12,
148*74a4d8c2SCharles.Forsyth 	DmaSSP=		14,
149*74a4d8c2SCharles.Forsyth };
150*74a4d8c2SCharles.Forsyth 
151*74a4d8c2SCharles.Forsyth enum touch_source {
152*74a4d8c2SCharles.Forsyth 	TOUCH_READ_X1, TOUCH_READ_X2, TOUCH_READ_X3, TOUCH_READ_X4,
153*74a4d8c2SCharles.Forsyth 	TOUCH_READ_Y1, TOUCH_READ_Y2, TOUCH_READ_Y3, TOUCH_READ_Y4,
154*74a4d8c2SCharles.Forsyth 	TOUCH_READ_P1, TOUCH_READ_P2,
155*74a4d8c2SCharles.Forsyth 	TOUCH_READ_RX1, TOUCH_READ_RX2,
156*74a4d8c2SCharles.Forsyth 	TOUCH_READ_RY1, TOUCH_READ_RY2,
157*74a4d8c2SCharles.Forsyth 	TOUCH_NUMRAWCAL = 10,
158*74a4d8c2SCharles.Forsyth };
159*74a4d8c2SCharles.Forsyth 
160*74a4d8c2SCharles.Forsyth struct TouchPnt {
161*74a4d8c2SCharles.Forsyth 	int	x;
162*74a4d8c2SCharles.Forsyth 	int	y;
163*74a4d8c2SCharles.Forsyth };
164*74a4d8c2SCharles.Forsyth 
165*74a4d8c2SCharles.Forsyth struct TouchTrans {
166*74a4d8c2SCharles.Forsyth 	int	xxm;
167*74a4d8c2SCharles.Forsyth 	int	xym;
168*74a4d8c2SCharles.Forsyth 	int	yxm;
169*74a4d8c2SCharles.Forsyth 	int	yym;
170*74a4d8c2SCharles.Forsyth 	int	xa;
171*74a4d8c2SCharles.Forsyth 	int	ya;
172*74a4d8c2SCharles.Forsyth };
173*74a4d8c2SCharles.Forsyth 
174*74a4d8c2SCharles.Forsyth struct TouchCal {
175*74a4d8c2SCharles.Forsyth 	TouchPnt	p[4];	// screen points
176*74a4d8c2SCharles.Forsyth 	TouchPnt	r[4][4];// raw points
177*74a4d8c2SCharles.Forsyth 	TouchTrans 	t[4];	// transformations
178*74a4d8c2SCharles.Forsyth 	TouchPnt	err;	// maximum error
179*74a4d8c2SCharles.Forsyth 	TouchPnt	var;	// usual maximum variance for readings
180*74a4d8c2SCharles.Forsyth 	int 		ptp;	// pressure threshold for press
181*74a4d8c2SCharles.Forsyth 	int		ptr;	// pressure threshold for release
182*74a4d8c2SCharles.Forsyth };
183*74a4d8c2SCharles.Forsyth 
184*74a4d8c2SCharles.Forsyth extern TouchCal touchcal;
185*74a4d8c2SCharles.Forsyth 
186*74a4d8c2SCharles.Forsyth struct Vmode {
187*74a4d8c2SCharles.Forsyth 	int	wid;	/* 0 -> default or any match for all fields */
188*74a4d8c2SCharles.Forsyth 	int	hgt;
189*74a4d8c2SCharles.Forsyth 	uchar	d;
190*74a4d8c2SCharles.Forsyth 	uchar	hz;
191*74a4d8c2SCharles.Forsyth 	ushort	flags;
192*74a4d8c2SCharles.Forsyth };
193*74a4d8c2SCharles.Forsyth 
194*74a4d8c2SCharles.Forsyth enum {
195*74a4d8c2SCharles.Forsyth 	VMODE_MONO = 0x0001,    /* monochrome display */
196*74a4d8c2SCharles.Forsyth 	VMODE_COLOR = 0x0002,   /* color (RGB) display */
197*74a4d8c2SCharles.Forsyth 	VMODE_TFT = 0x0004,	/* TFT (active matrix) display */
198*74a4d8c2SCharles.Forsyth 	VMODE_STATIC = 0x0010,  /* fixed palette */
199*74a4d8c2SCharles.Forsyth 	VMODE_PSEUDO = 0x0020,  /* changeable palette */
200*74a4d8c2SCharles.Forsyth 	VMODE_LINEAR = 0x0100,  /* linear frame buffer */
201*74a4d8c2SCharles.Forsyth 	VMODE_PAGED = 0x0200,   /* paged frame buffer */
202*74a4d8c2SCharles.Forsyth 	VMODE_PLANAR = 0x1000,  /* pixel bits split between planes */
203*74a4d8c2SCharles.Forsyth 	VMODE_PACKED = 0x2000,  /* pixel bits packed together */
204*74a4d8c2SCharles.Forsyth 	VMODE_LILEND = 0x4000,	/* little endian pixel layout */
205*74a4d8c2SCharles.Forsyth 	VMODE_BIGEND = 0x8000,	/* big endian pixel layout */
206*74a4d8c2SCharles.Forsyth };
207*74a4d8c2SCharles.Forsyth 
208*74a4d8c2SCharles.Forsyth /*
209*74a4d8c2SCharles.Forsyth  *	Interface to PCMCIA stubs
210*74a4d8c2SCharles.Forsyth  */
211*74a4d8c2SCharles.Forsyth enum {
212*74a4d8c2SCharles.Forsyth 	/* argument to pcmpin() */
213*74a4d8c2SCharles.Forsyth 	PCMready,
214*74a4d8c2SCharles.Forsyth 	PCMeject,
215*74a4d8c2SCharles.Forsyth 	PCMstschng,
216*74a4d8c2SCharles.Forsyth };
217*74a4d8c2SCharles.Forsyth 
218*74a4d8c2SCharles.Forsyth #define	swcursor	1
219