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