File: /usr/src/linux/drivers/video/controlfb.h

1     /*
2      * controlfb_hw.h: Constants of all sorts for controlfb
3      *
4      * Copyright (C) 1998 Daniel Jacobowitz <dan@debian.org>
5      *
6      * This program is free software; you can redistribute it and/or
7      * modify it under the terms of the GNU General Public License
8      * as published by the Free Software Foundation; either version
9      * 2 of the License, or (at your option) any later version.
10      *
11      * Based on an awful lot of code, including:
12      *
13      * control.c: Console support for PowerMac "control" display adaptor.
14      * Copyright (C) 1996 Paul Mackerras.
15      *
16      * The so far unpublished platinumfb.c
17      * Copyright (C) 1998 Jon Howell
18      */
19     
20     /*
21      * Structure of the registers for the RADACAL colormap device.
22      */
23     struct cmap_regs {
24     	unsigned char addr;	/* index for both cmap and misc registers */
25     	char pad1[15];
26     	unsigned char crsr;	/* cursor palette */
27     	char pad2[15];
28     	unsigned char dat;	/* RADACAL misc register data */
29     	char pad3[15];
30     	unsigned char lut;	/* cmap data */
31     	char pad4[15];
32     };
33     
34     /*
35      * Structure of the registers for the "control" display adaptor.
36      */
37     #define PAD(x)	char x[12]
38     
39     struct preg {			/* padded register */
40     	unsigned r;
41     	char pad[12];
42     };
43     
44     struct control_regs {
45     	struct preg vcount;	/* vertical counter */
46     	/* Vertical parameters are in units of 1/2 scan line */
47     	struct preg vswin;	/* between vsblank and vssync */
48     	struct preg vsblank;	/* vert start blank */
49     	struct preg veblank;	/* vert end blank (display start) */
50     	struct preg vewin;	/* between vesync and veblank */
51     	struct preg vesync;	/* vert end sync */
52     	struct preg vssync;	/* vert start sync */
53     	struct preg vperiod;	/* vert period */
54     	struct preg piped;	/* pipe delay hardware cursor */
55     	/* Horizontal params are in units of 2 pixels */
56     	struct preg hperiod;	/* horiz period - 2 */
57     	struct preg hsblank;	/* horiz start blank */
58     	struct preg heblank;	/* horiz end blank */
59     	struct preg hesync;	/* horiz end sync */
60     	struct preg hssync;	/* horiz start sync */
61     	struct preg heq;	/* half horiz sync len */
62     	struct preg hlfln;	/* half horiz period */
63     	struct preg hserr;	/* horiz period - horiz sync len */
64     	struct preg cnttst;
65     	struct preg ctrl;	/* display control */
66     	struct preg start_addr;	/* start address: 5 lsbs zero */
67     	struct preg pitch;	/* addrs diff between scan lines */
68     	struct preg mon_sense;	/* monitor sense bits */
69     	struct preg vram_attr;	/* enable vram banks */
70     	struct preg mode;
71     	struct preg rfrcnt;	/* refresh count */
72     	struct preg intr_ena;	/* interrupt enable */
73     	struct preg intr_stat;	/* interrupt status */
74     	struct preg res[5];
75     };
76     
77     struct control_regints {
78     	/* Vertical parameters are in units of 1/2 scan line */
79     	unsigned vswin;	/* between vsblank and vssync */
80     	unsigned vsblank;	/* vert start blank */
81     	unsigned veblank;	/* vert end blank (display start) */
82     	unsigned vewin;	/* between vesync and veblank */
83     	unsigned vesync;	/* vert end sync */
84     	unsigned vssync;	/* vert start sync */
85     	unsigned vperiod;	/* vert period */
86     	unsigned piped;		/* pipe delay hardware cursor */
87     	/* Horizontal params are in units of 2 pixels */
88     	/* Except, apparently, for hres > 1024 (or == 1280?) */
89     	unsigned hperiod;	/* horiz period - 2 */
90     	unsigned hsblank;	/* horiz start blank */
91     	unsigned heblank;	/* horiz end blank */
92     	unsigned hesync;	/* horiz end sync */
93     	unsigned hssync;	/* horiz start sync */
94     	unsigned heq;		/* half horiz sync len */
95     	unsigned hlfln;		/* half horiz period */
96     	unsigned hserr;		/* horiz period - horiz sync len */
97     };
98     	
99     /*
100      * Dot clock rate is
101      * 3.9064MHz * 2**clock_params[2] * clock_params[1] / clock_params[0].
102      */
103     struct control_regvals {
104     	unsigned regs[16];		/* for vswin .. hserr */
105     	unsigned char mode;
106     	unsigned char radacal_ctrl;
107     	unsigned char clock_params[3];
108     };
109     
110     #define CTRLFB_OFF 16	/* position of pixel 0 in frame buffer */
111     
112     
113     /*
114      * Best cmode supported by control
115      */
116     struct max_cmodes {
117     	int m[2];	/* 0: 2MB vram, 1: 4MB vram */
118     };
119     
120     /*
121      * Video modes supported by macmodes.c
122      */
123     static struct max_cmodes control_mac_modes[] = {
124     	{{-1,-1}},	/* 512x384, 60Hz interlaced (NTSC) */
125     	{{-1,-1}},	/* 512x384, 60Hz */
126     	{{-1,-1}},	/* 640x480, 50Hz interlaced (PAL) */
127     	{{-1,-1}},	/* 640x480, 60Hz interlaced (NTSC) */
128     	{{ 2, 2}},	/* 640x480, 60Hz (VGA) */
129     	{{ 2, 2}},	/* 640x480, 67Hz */
130     	{{-1,-1}},	/* 640x870, 75Hz (portrait) */
131     	{{-1,-1}},	/* 768x576, 50Hz (PAL full frame) */
132     	{{ 2, 2}},	/* 800x600, 56Hz */
133     	{{ 2, 2}},	/* 800x600, 60Hz */
134     	{{ 2, 2}},	/* 800x600, 72Hz */
135     	{{ 2, 2}},	/* 800x600, 75Hz */
136     	{{ 1, 2}},	/* 832x624, 75Hz */
137     	{{ 1, 2}},	/* 1024x768, 60Hz */
138     	{{ 1, 2}},	/* 1024x768, 70Hz (or 72Hz?) */
139     	{{ 1, 2}},	/* 1024x768, 75Hz (VESA) */
140     	{{ 1, 2}},	/* 1024x768, 75Hz */
141     	{{ 1, 2}},	/* 1152x870, 75Hz */
142     	{{ 0, 1}},	/* 1280x960, 75Hz */
143     	{{ 0, 1}},	/* 1280x1024, 75Hz */
144     };
145     
146