144 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * controlfb_hw.h: Constants of all sorts for controlfb4 *5 * Copyright (C) 1998 Daniel Jacobowitz <dan@debian.org>6 *7 * Based on an awful lot of code, including:8 *9 * control.c: Console support for PowerMac "control" display adaptor.10 * Copyright (C) 1996 Paul Mackerras.11 *12 * The so far unpublished platinumfb.c13 * Copyright (C) 1998 Jon Howell14 */15 16/*17 * Structure of the registers for the RADACAL colormap device.18 */19struct cmap_regs {20 unsigned char addr; /* index for both cmap and misc registers */21 char pad1[15];22 unsigned char crsr; /* cursor palette */23 char pad2[15];24 unsigned char dat; /* RADACAL misc register data */25 char pad3[15];26 unsigned char lut; /* cmap data */27 char pad4[15];28};29 30/*31 * Structure of the registers for the "control" display adaptor.32 */33#define PAD(x) char x[12]34 35struct preg { /* padded register */36 unsigned r;37 char pad[12];38};39 40struct control_regs {41 struct preg vcount; /* vertical counter */42 /* Vertical parameters are in units of 1/2 scan line */43 struct preg vswin; /* between vsblank and vssync */44 struct preg vsblank; /* vert start blank */45 struct preg veblank; /* vert end blank (display start) */46 struct preg vewin; /* between vesync and veblank */47 struct preg vesync; /* vert end sync */48 struct preg vssync; /* vert start sync */49 struct preg vperiod; /* vert period */50 struct preg piped; /* pipe delay hardware cursor */51 /* Horizontal params are in units of 2 pixels */52 struct preg hperiod; /* horiz period - 2 */53 struct preg hsblank; /* horiz start blank */54 struct preg heblank; /* horiz end blank */55 struct preg hesync; /* horiz end sync */56 struct preg hssync; /* horiz start sync */57 struct preg heq; /* half horiz sync len */58 struct preg hlfln; /* half horiz period */59 struct preg hserr; /* horiz period - horiz sync len */60 struct preg cnttst;61 struct preg ctrl; /* display control */62 struct preg start_addr; /* start address: 5 lsbs zero */63 struct preg pitch; /* addrs diff between scan lines */64 struct preg mon_sense; /* monitor sense bits */65 struct preg vram_attr; /* enable vram banks */66 struct preg mode;67 struct preg rfrcnt; /* refresh count */68 struct preg intr_ena; /* interrupt enable */69 struct preg intr_stat; /* interrupt status */70 struct preg res[5];71};72 73struct control_regints {74 /* Vertical parameters are in units of 1/2 scan line */75 unsigned vswin; /* between vsblank and vssync */76 unsigned vsblank; /* vert start blank */77 unsigned veblank; /* vert end blank (display start) */78 unsigned vewin; /* between vesync and veblank */79 unsigned vesync; /* vert end sync */80 unsigned vssync; /* vert start sync */81 unsigned vperiod; /* vert period */82 unsigned piped; /* pipe delay hardware cursor */83 /* Horizontal params are in units of 2 pixels */84 /* Except, apparently, for hres > 1024 (or == 1280?) */85 unsigned hperiod; /* horiz period - 2 */86 unsigned hsblank; /* horiz start blank */87 unsigned heblank; /* horiz end blank */88 unsigned hesync; /* horiz end sync */89 unsigned hssync; /* horiz start sync */90 unsigned heq; /* half horiz sync len */91 unsigned hlfln; /* half horiz period */92 unsigned hserr; /* horiz period - horiz sync len */93};94 95/*96 * Dot clock rate is97 * 3.9064MHz * 2**clock_params[2] * clock_params[1] / clock_params[0].98 */99struct control_regvals {100 unsigned regs[16]; /* for vswin .. hserr */101 unsigned char mode;102 unsigned char radacal_ctrl;103 unsigned char clock_params[3];104};105 106#define CTRLFB_OFF 16 /* position of pixel 0 in frame buffer */107 108 109/*110 * Best cmode supported by control111 */112struct max_cmodes {113 int m[2]; /* 0: 2MB vram, 1: 4MB vram */114};115 116/*117 * Video modes supported by macmodes.c118 */119static struct max_cmodes control_mac_modes[] = {120 {{-1,-1}}, /* 512x384, 60Hz interlaced (NTSC) */121 {{-1,-1}}, /* 512x384, 60Hz */122 {{-1,-1}}, /* 640x480, 50Hz interlaced (PAL) */123 {{-1,-1}}, /* 640x480, 60Hz interlaced (NTSC) */124 {{ 2, 2}}, /* 640x480, 60Hz (VGA) */125 {{ 2, 2}}, /* 640x480, 67Hz */126 {{-1,-1}}, /* 640x870, 75Hz (portrait) */127 {{-1,-1}}, /* 768x576, 50Hz (PAL full frame) */128 {{ 2, 2}}, /* 800x600, 56Hz */129 {{ 2, 2}}, /* 800x600, 60Hz */130 {{ 2, 2}}, /* 800x600, 72Hz */131 {{ 2, 2}}, /* 800x600, 75Hz */132 {{ 1, 2}}, /* 832x624, 75Hz */133 {{ 1, 2}}, /* 1024x768, 60Hz */134 {{ 1, 2}}, /* 1024x768, 70Hz (or 72Hz?) */135 {{ 1, 2}}, /* 1024x768, 75Hz (VESA) */136 {{ 1, 2}}, /* 1024x768, 75Hz */137 {{ 1, 2}}, /* 1152x870, 75Hz */138 {{ 0, 1}}, /* 1280x960, 75Hz */139 {{ 0, 1}}, /* 1280x1024, 75Hz */140 {{ 1, 2}}, /* 1152x768, 60Hz */141 {{ 0, 1}}, /* 1600x1024, 60Hz */142};143 144