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