| /* | 
 |  * controlfb_hw.h: Constants of all sorts for controlfb | 
 |  * | 
 |  * Copyright (C) 1998 Daniel Jacobowitz <dan@debian.org> | 
 |  * | 
 |  * This program is free software; you can redistribute it and/or | 
 |  * modify it under the terms of the GNU General Public License | 
 |  * as published by the Free Software Foundation; either version | 
 |  * 2 of the License, or (at your option) any later version. | 
 |  * | 
 |  * Based on an awful lot of code, including: | 
 |  * | 
 |  * control.c: Console support for PowerMac "control" display adaptor. | 
 |  * Copyright (C) 1996 Paul Mackerras. | 
 |  * | 
 |  * The so far unpublished platinumfb.c | 
 |  * Copyright (C) 1998 Jon Howell | 
 |  */ | 
 |  | 
 | /* | 
 |  * Structure of the registers for the RADACAL colormap device. | 
 |  */ | 
 | struct cmap_regs { | 
 | 	unsigned char addr;	/* index for both cmap and misc registers */ | 
 | 	char pad1[15]; | 
 | 	unsigned char crsr;	/* cursor palette */ | 
 | 	char pad2[15]; | 
 | 	unsigned char dat;	/* RADACAL misc register data */ | 
 | 	char pad3[15]; | 
 | 	unsigned char lut;	/* cmap data */ | 
 | 	char pad4[15]; | 
 | }; | 
 |  | 
 | /* | 
 |  * Structure of the registers for the "control" display adaptor. | 
 |  */ | 
 | #define PAD(x)	char x[12] | 
 |  | 
 | struct preg {			/* padded register */ | 
 | 	unsigned r; | 
 | 	char pad[12]; | 
 | }; | 
 |  | 
 | struct control_regs { | 
 | 	struct preg vcount;	/* vertical counter */ | 
 | 	/* Vertical parameters are in units of 1/2 scan line */ | 
 | 	struct preg vswin;	/* between vsblank and vssync */ | 
 | 	struct preg vsblank;	/* vert start blank */ | 
 | 	struct preg veblank;	/* vert end blank (display start) */ | 
 | 	struct preg vewin;	/* between vesync and veblank */ | 
 | 	struct preg vesync;	/* vert end sync */ | 
 | 	struct preg vssync;	/* vert start sync */ | 
 | 	struct preg vperiod;	/* vert period */ | 
 | 	struct preg piped;	/* pipe delay hardware cursor */ | 
 | 	/* Horizontal params are in units of 2 pixels */ | 
 | 	struct preg hperiod;	/* horiz period - 2 */ | 
 | 	struct preg hsblank;	/* horiz start blank */ | 
 | 	struct preg heblank;	/* horiz end blank */ | 
 | 	struct preg hesync;	/* horiz end sync */ | 
 | 	struct preg hssync;	/* horiz start sync */ | 
 | 	struct preg heq;	/* half horiz sync len */ | 
 | 	struct preg hlfln;	/* half horiz period */ | 
 | 	struct preg hserr;	/* horiz period - horiz sync len */ | 
 | 	struct preg cnttst; | 
 | 	struct preg ctrl;	/* display control */ | 
 | 	struct preg start_addr;	/* start address: 5 lsbs zero */ | 
 | 	struct preg pitch;	/* addrs diff between scan lines */ | 
 | 	struct preg mon_sense;	/* monitor sense bits */ | 
 | 	struct preg vram_attr;	/* enable vram banks */ | 
 | 	struct preg mode; | 
 | 	struct preg rfrcnt;	/* refresh count */ | 
 | 	struct preg intr_ena;	/* interrupt enable */ | 
 | 	struct preg intr_stat;	/* interrupt status */ | 
 | 	struct preg res[5]; | 
 | }; | 
 |  | 
 | struct control_regints { | 
 | 	/* Vertical parameters are in units of 1/2 scan line */ | 
 | 	unsigned vswin;	/* between vsblank and vssync */ | 
 | 	unsigned vsblank;	/* vert start blank */ | 
 | 	unsigned veblank;	/* vert end blank (display start) */ | 
 | 	unsigned vewin;	/* between vesync and veblank */ | 
 | 	unsigned vesync;	/* vert end sync */ | 
 | 	unsigned vssync;	/* vert start sync */ | 
 | 	unsigned vperiod;	/* vert period */ | 
 | 	unsigned piped;		/* pipe delay hardware cursor */ | 
 | 	/* Horizontal params are in units of 2 pixels */ | 
 | 	/* Except, apparently, for hres > 1024 (or == 1280?) */ | 
 | 	unsigned hperiod;	/* horiz period - 2 */ | 
 | 	unsigned hsblank;	/* horiz start blank */ | 
 | 	unsigned heblank;	/* horiz end blank */ | 
 | 	unsigned hesync;	/* horiz end sync */ | 
 | 	unsigned hssync;	/* horiz start sync */ | 
 | 	unsigned heq;		/* half horiz sync len */ | 
 | 	unsigned hlfln;		/* half horiz period */ | 
 | 	unsigned hserr;		/* horiz period - horiz sync len */ | 
 | }; | 
 | 	 | 
 | /* | 
 |  * Dot clock rate is | 
 |  * 3.9064MHz * 2**clock_params[2] * clock_params[1] / clock_params[0]. | 
 |  */ | 
 | struct control_regvals { | 
 | 	unsigned regs[16];		/* for vswin .. hserr */ | 
 | 	unsigned char mode; | 
 | 	unsigned char radacal_ctrl; | 
 | 	unsigned char clock_params[3]; | 
 | }; | 
 |  | 
 | #define CTRLFB_OFF 16	/* position of pixel 0 in frame buffer */ | 
 |  | 
 |  | 
 | /* | 
 |  * Best cmode supported by control | 
 |  */ | 
 | struct max_cmodes { | 
 | 	int m[2];	/* 0: 2MB vram, 1: 4MB vram */ | 
 | }; | 
 |  | 
 | /* | 
 |  * Video modes supported by macmodes.c | 
 |  */ | 
 | static struct max_cmodes control_mac_modes[] = { | 
 | 	{{-1,-1}},	/* 512x384, 60Hz interlaced (NTSC) */ | 
 | 	{{-1,-1}},	/* 512x384, 60Hz */ | 
 | 	{{-1,-1}},	/* 640x480, 50Hz interlaced (PAL) */ | 
 | 	{{-1,-1}},	/* 640x480, 60Hz interlaced (NTSC) */ | 
 | 	{{ 2, 2}},	/* 640x480, 60Hz (VGA) */ | 
 | 	{{ 2, 2}},	/* 640x480, 67Hz */ | 
 | 	{{-1,-1}},	/* 640x870, 75Hz (portrait) */ | 
 | 	{{-1,-1}},	/* 768x576, 50Hz (PAL full frame) */ | 
 | 	{{ 2, 2}},	/* 800x600, 56Hz */ | 
 | 	{{ 2, 2}},	/* 800x600, 60Hz */ | 
 | 	{{ 2, 2}},	/* 800x600, 72Hz */ | 
 | 	{{ 2, 2}},	/* 800x600, 75Hz */ | 
 | 	{{ 1, 2}},	/* 832x624, 75Hz */ | 
 | 	{{ 1, 2}},	/* 1024x768, 60Hz */ | 
 | 	{{ 1, 2}},	/* 1024x768, 70Hz (or 72Hz?) */ | 
 | 	{{ 1, 2}},	/* 1024x768, 75Hz (VESA) */ | 
 | 	{{ 1, 2}},	/* 1024x768, 75Hz */ | 
 | 	{{ 1, 2}},	/* 1152x870, 75Hz */ | 
 | 	{{ 0, 1}},	/* 1280x960, 75Hz */ | 
 | 	{{ 0, 1}},	/* 1280x1024, 75Hz */ | 
 | }; | 
 |  |