Linux Audio

Check our new training course

In-person Linux kernel drivers training

Jun 16-20, 2025
Register
Loading...
  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 */
 23struct 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
 39struct preg {			/* padded register */
 40	unsigned r;
 41	char pad[12];
 42};
 43
 44struct 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
 77struct 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 */
103struct 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 */
116struct max_cmodes {
117	int m[2];	/* 0: 2MB vram, 1: 4MB vram */
118};
119
120/*
121 * Video modes supported by macmodes.c
122 */
123static 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