146 lines
		
	
	
	
		
			4.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			146 lines
		
	
	
	
		
			4.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * 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 */
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 |