diff options
Diffstat (limited to 'drivers/video/fbdev/controlfb.h')
| -rw-r--r-- | drivers/video/fbdev/controlfb.h | 145 | 
1 files changed, 145 insertions, 0 deletions
diff --git a/drivers/video/fbdev/controlfb.h b/drivers/video/fbdev/controlfb.h new file mode 100644 index 00000000000..6026c60fc10 --- /dev/null +++ b/drivers/video/fbdev/controlfb.h @@ -0,0 +1,145 @@ +/* + * 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 */ +}; +  | 
