162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * controlfb_hw.h: Constants of all sorts for controlfb
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (C) 1998 Daniel Jacobowitz <dan@debian.org>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Based on an awful lot of code, including:
862306a36Sopenharmony_ci *
962306a36Sopenharmony_ci * control.c: Console support for PowerMac "control" display adaptor.
1062306a36Sopenharmony_ci * Copyright (C) 1996 Paul Mackerras.
1162306a36Sopenharmony_ci *
1262306a36Sopenharmony_ci * The so far unpublished platinumfb.c
1362306a36Sopenharmony_ci * Copyright (C) 1998 Jon Howell
1462306a36Sopenharmony_ci */
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci/*
1762306a36Sopenharmony_ci * Structure of the registers for the RADACAL colormap device.
1862306a36Sopenharmony_ci */
1962306a36Sopenharmony_cistruct cmap_regs {
2062306a36Sopenharmony_ci	unsigned char addr;	/* index for both cmap and misc registers */
2162306a36Sopenharmony_ci	char pad1[15];
2262306a36Sopenharmony_ci	unsigned char crsr;	/* cursor palette */
2362306a36Sopenharmony_ci	char pad2[15];
2462306a36Sopenharmony_ci	unsigned char dat;	/* RADACAL misc register data */
2562306a36Sopenharmony_ci	char pad3[15];
2662306a36Sopenharmony_ci	unsigned char lut;	/* cmap data */
2762306a36Sopenharmony_ci	char pad4[15];
2862306a36Sopenharmony_ci};
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci/*
3162306a36Sopenharmony_ci * Structure of the registers for the "control" display adaptor.
3262306a36Sopenharmony_ci */
3362306a36Sopenharmony_ci#define PAD(x)	char x[12]
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cistruct preg {			/* padded register */
3662306a36Sopenharmony_ci	unsigned r;
3762306a36Sopenharmony_ci	char pad[12];
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistruct control_regs {
4162306a36Sopenharmony_ci	struct preg vcount;	/* vertical counter */
4262306a36Sopenharmony_ci	/* Vertical parameters are in units of 1/2 scan line */
4362306a36Sopenharmony_ci	struct preg vswin;	/* between vsblank and vssync */
4462306a36Sopenharmony_ci	struct preg vsblank;	/* vert start blank */
4562306a36Sopenharmony_ci	struct preg veblank;	/* vert end blank (display start) */
4662306a36Sopenharmony_ci	struct preg vewin;	/* between vesync and veblank */
4762306a36Sopenharmony_ci	struct preg vesync;	/* vert end sync */
4862306a36Sopenharmony_ci	struct preg vssync;	/* vert start sync */
4962306a36Sopenharmony_ci	struct preg vperiod;	/* vert period */
5062306a36Sopenharmony_ci	struct preg piped;	/* pipe delay hardware cursor */
5162306a36Sopenharmony_ci	/* Horizontal params are in units of 2 pixels */
5262306a36Sopenharmony_ci	struct preg hperiod;	/* horiz period - 2 */
5362306a36Sopenharmony_ci	struct preg hsblank;	/* horiz start blank */
5462306a36Sopenharmony_ci	struct preg heblank;	/* horiz end blank */
5562306a36Sopenharmony_ci	struct preg hesync;	/* horiz end sync */
5662306a36Sopenharmony_ci	struct preg hssync;	/* horiz start sync */
5762306a36Sopenharmony_ci	struct preg heq;	/* half horiz sync len */
5862306a36Sopenharmony_ci	struct preg hlfln;	/* half horiz period */
5962306a36Sopenharmony_ci	struct preg hserr;	/* horiz period - horiz sync len */
6062306a36Sopenharmony_ci	struct preg cnttst;
6162306a36Sopenharmony_ci	struct preg ctrl;	/* display control */
6262306a36Sopenharmony_ci	struct preg start_addr;	/* start address: 5 lsbs zero */
6362306a36Sopenharmony_ci	struct preg pitch;	/* addrs diff between scan lines */
6462306a36Sopenharmony_ci	struct preg mon_sense;	/* monitor sense bits */
6562306a36Sopenharmony_ci	struct preg vram_attr;	/* enable vram banks */
6662306a36Sopenharmony_ci	struct preg mode;
6762306a36Sopenharmony_ci	struct preg rfrcnt;	/* refresh count */
6862306a36Sopenharmony_ci	struct preg intr_ena;	/* interrupt enable */
6962306a36Sopenharmony_ci	struct preg intr_stat;	/* interrupt status */
7062306a36Sopenharmony_ci	struct preg res[5];
7162306a36Sopenharmony_ci};
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistruct control_regints {
7462306a36Sopenharmony_ci	/* Vertical parameters are in units of 1/2 scan line */
7562306a36Sopenharmony_ci	unsigned vswin;	/* between vsblank and vssync */
7662306a36Sopenharmony_ci	unsigned vsblank;	/* vert start blank */
7762306a36Sopenharmony_ci	unsigned veblank;	/* vert end blank (display start) */
7862306a36Sopenharmony_ci	unsigned vewin;	/* between vesync and veblank */
7962306a36Sopenharmony_ci	unsigned vesync;	/* vert end sync */
8062306a36Sopenharmony_ci	unsigned vssync;	/* vert start sync */
8162306a36Sopenharmony_ci	unsigned vperiod;	/* vert period */
8262306a36Sopenharmony_ci	unsigned piped;		/* pipe delay hardware cursor */
8362306a36Sopenharmony_ci	/* Horizontal params are in units of 2 pixels */
8462306a36Sopenharmony_ci	/* Except, apparently, for hres > 1024 (or == 1280?) */
8562306a36Sopenharmony_ci	unsigned hperiod;	/* horiz period - 2 */
8662306a36Sopenharmony_ci	unsigned hsblank;	/* horiz start blank */
8762306a36Sopenharmony_ci	unsigned heblank;	/* horiz end blank */
8862306a36Sopenharmony_ci	unsigned hesync;	/* horiz end sync */
8962306a36Sopenharmony_ci	unsigned hssync;	/* horiz start sync */
9062306a36Sopenharmony_ci	unsigned heq;		/* half horiz sync len */
9162306a36Sopenharmony_ci	unsigned hlfln;		/* half horiz period */
9262306a36Sopenharmony_ci	unsigned hserr;		/* horiz period - horiz sync len */
9362306a36Sopenharmony_ci};
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci/*
9662306a36Sopenharmony_ci * Dot clock rate is
9762306a36Sopenharmony_ci * 3.9064MHz * 2**clock_params[2] * clock_params[1] / clock_params[0].
9862306a36Sopenharmony_ci */
9962306a36Sopenharmony_cistruct control_regvals {
10062306a36Sopenharmony_ci	unsigned regs[16];		/* for vswin .. hserr */
10162306a36Sopenharmony_ci	unsigned char mode;
10262306a36Sopenharmony_ci	unsigned char radacal_ctrl;
10362306a36Sopenharmony_ci	unsigned char clock_params[3];
10462306a36Sopenharmony_ci};
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci#define CTRLFB_OFF 16	/* position of pixel 0 in frame buffer */
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ci
10962306a36Sopenharmony_ci/*
11062306a36Sopenharmony_ci * Best cmode supported by control
11162306a36Sopenharmony_ci */
11262306a36Sopenharmony_cistruct max_cmodes {
11362306a36Sopenharmony_ci	int m[2];	/* 0: 2MB vram, 1: 4MB vram */
11462306a36Sopenharmony_ci};
11562306a36Sopenharmony_ci
11662306a36Sopenharmony_ci/*
11762306a36Sopenharmony_ci * Video modes supported by macmodes.c
11862306a36Sopenharmony_ci */
11962306a36Sopenharmony_cistatic struct max_cmodes control_mac_modes[] = {
12062306a36Sopenharmony_ci	{{-1,-1}},	/* 512x384, 60Hz interlaced (NTSC) */
12162306a36Sopenharmony_ci	{{-1,-1}},	/* 512x384, 60Hz */
12262306a36Sopenharmony_ci	{{-1,-1}},	/* 640x480, 50Hz interlaced (PAL) */
12362306a36Sopenharmony_ci	{{-1,-1}},	/* 640x480, 60Hz interlaced (NTSC) */
12462306a36Sopenharmony_ci	{{ 2, 2}},	/* 640x480, 60Hz (VGA) */
12562306a36Sopenharmony_ci	{{ 2, 2}},	/* 640x480, 67Hz */
12662306a36Sopenharmony_ci	{{-1,-1}},	/* 640x870, 75Hz (portrait) */
12762306a36Sopenharmony_ci	{{-1,-1}},	/* 768x576, 50Hz (PAL full frame) */
12862306a36Sopenharmony_ci	{{ 2, 2}},	/* 800x600, 56Hz */
12962306a36Sopenharmony_ci	{{ 2, 2}},	/* 800x600, 60Hz */
13062306a36Sopenharmony_ci	{{ 2, 2}},	/* 800x600, 72Hz */
13162306a36Sopenharmony_ci	{{ 2, 2}},	/* 800x600, 75Hz */
13262306a36Sopenharmony_ci	{{ 1, 2}},	/* 832x624, 75Hz */
13362306a36Sopenharmony_ci	{{ 1, 2}},	/* 1024x768, 60Hz */
13462306a36Sopenharmony_ci	{{ 1, 2}},	/* 1024x768, 70Hz (or 72Hz?) */
13562306a36Sopenharmony_ci	{{ 1, 2}},	/* 1024x768, 75Hz (VESA) */
13662306a36Sopenharmony_ci	{{ 1, 2}},	/* 1024x768, 75Hz */
13762306a36Sopenharmony_ci	{{ 1, 2}},	/* 1152x870, 75Hz */
13862306a36Sopenharmony_ci	{{ 0, 1}},	/* 1280x960, 75Hz */
13962306a36Sopenharmony_ci	{{ 0, 1}},	/* 1280x1024, 75Hz */
14062306a36Sopenharmony_ci	{{ 1, 2}},	/* 1152x768, 60Hz */
14162306a36Sopenharmony_ci	{{ 0, 1}},	/* 1600x1024, 60Hz */
14262306a36Sopenharmony_ci};
14362306a36Sopenharmony_ci
144