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