|
|
1.1.1.3 ! root 1: /* $Id: sun-fb.h,v 1.4 2009/11/08 17:02:39 fredette Exp $ */ 1.1 root 2: 3: /* machine/sun/sun-fb.h - header file for Sun framebuffer emulation: */ 4: 5: /* 1.1.1.2 root 6: * Copyright (c) 2004, 2006 Matt Fredette 1.1 root 7: * All rights reserved. 8: * 9: * Redistribution and use in source and binary forms, with or without 10: * modification, are permitted provided that the following conditions 11: * are met: 12: * 1. Redistributions of source code must retain the above copyright 13: * notice, this list of conditions and the following disclaimer. 14: * 2. Redistributions in binary form must reproduce the above copyright 15: * notice, this list of conditions and the following disclaimer in the 16: * documentation and/or other materials provided with the distribution. 17: * 3. All advertising materials mentioning features or use of this software 18: * must display the following acknowledgement: 19: * This product includes software developed by Matt Fredette. 20: * 4. The name of the author may not be used to endorse or promote products 21: * derived from this software without specific prior written permission. 22: * 23: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 24: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 25: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 26: * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 27: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 28: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 29: * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 31: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 32: * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 33: * POSSIBILITY OF SUCH DAMAGE. 34: */ 35: 36: #ifndef _MACHINE_SUN_FB_H 37: #define _MACHINE_SUN_FB_H 38: 39: #include <tme/common.h> 1.1.1.3 ! root 40: _TME_RCSID("$Id: sun-fb.h,v 1.4 2009/11/08 17:02:39 fredette Exp $"); 1.1 root 41: 42: /* includes: */ 43: #include <tme/generic/bus.h> 1.1.1.2 root 44: #include <tme/generic/bus-device.h> 45: #include <tme/generic/fb.h> 46: #include <tme/ic/bt458.h> 1.1.1.3 ! root 47: #include <tme/completion.h> 1.1 root 48: 49: /* macros: */ 50: 1.1.1.2 root 51: /* Sun framebuffer sizes: */ 52: /* NB: TME_SUNFB_SIZE_1152_900 should be first, since whatever size is 53: first is what most framebuffers will default to: */ 54: #define TME_SUNFB_SIZE_NULL (0) 55: #define TME_SUNFB_SIZE_1152_900 TME_BIT(0) 56: #define TME_SUNFB_SIZE_1024_1024 TME_BIT(1) 57: #define TME_SUNFB_SIZE_1280_1024 TME_BIT(2) 58: #define TME_SUNFB_SIZE_1600_1280 TME_BIT(3) 59: #define TME_SUNFB_SIZE_1440_1440 TME_BIT(4) 60: #define TME_SUNFB_SIZE_1024_768 TME_BIT(5) 61: #define TME_SUNFB_SIZE_640_480 TME_BIT(6) 1.1 root 62: 1.1.1.2 root 63: /* P4 register framebuffer identifiers: */ 64: #define TME_SUNFB_P4_ID_MASK (0xf0000000) 65: #define TME_SUNFB_P4_ID_BWTWO (0x00000000) 66: #define TME_SUNFB_P4_ID_CGFOUR (0x40000000) 67: #define TME_SUNFB_P4_ID_CGEIGHT (0x45000000) 68: #define TME_SUNFB_P4_ID_CGSIX (0x60000000) 69: 70: /* offsets in many P4 framebuffers: */ 71: #define TME_SUNFB_P4_OFFSET_P4 (0x00000000) 72: #define TME_SUNFB_P4_OFFSET_BITMAP (0x00100000) 73: 74: /* offsets in many S4 framebuffers: */ 75: #define TME_SUNFB_S4_OFFSET_REGS (0x00400000) 76: #define TME_SUNFB_S4_OFFSET_MEMORY (0x00800000) 77: 78: /* flags: */ 79: #define TME_SUNFB_FLAG_BT458_CMAP_PACKED TME_BIT(0) 80: #define TME_SUNFB_FLAG_BT458_BYTE_D0_D7 (0) 81: #define TME_SUNFB_FLAG_BT458_BYTE_D24_D31 TME_BIT(1) 82: 83: /* callout flags: */ 84: #define TME_SUNFB_CALLOUT_RUNNING TME_BIT(0) 85: #define TME_SUNFB_CALLOUTS_MASK (-2) 86: #define TME_SUNFB_CALLOUT_MODE_CHANGE TME_BIT(1) 87: #define TME_SUNFB_CALLOUT_INT TME_BIT(2) 88: 89: /* the maximum number of bus subregions for registers that a Sun 90: framebuffer can have: */ 91: #define TME_SUNFB_BUS_SUBREGIONS_MAX (8) 92: 1.1.1.3 ! root 93: /* the log handle: */ ! 94: #define TME_SUNFB_LOG_HANDLE(sunfb) (&(sunfb)->tme_sunfb_element->tme_element_log_handle) ! 95: ! 96: #define TME_SUNFB_BUS_TRANSITION (1) ! 97: 1.1.1.2 root 98: /* a Sun framebuffer: */ 99: struct tme_sunfb { 100: 101: /* our simple bus device header: */ 102: struct tme_bus_device tme_sunfb_device; 103: #define tme_sunfb_element tme_sunfb_device.tme_bus_device_element 104: 105: /* the mutex protecting the card: */ 106: tme_mutex_t tme_sunfb_mutex; 107: 108: /* the rwlock protecting the card: */ 109: tme_rwlock_t tme_sunfb_rwlock; 110: 111: /* the framebuffer connection: */ 112: struct tme_fb_connection *tme_sunfb_fb_connection; 113: 114: /* more bus subregions: */ 115: struct tme_bus_subregion tme_sunfb_bus_subregions[TME_SUNFB_BUS_SUBREGIONS_MAX]; 116: 117: /* bus cycle handlers for the subregions: */ 118: tme_bus_cycle_handler tme_sunfb_bus_handlers[TME_SUNFB_BUS_SUBREGIONS_MAX]; 119: 120: /* some of the bus subregions have specific purposes: */ 121: #define tme_sunfb_bus_subregion_memory tme_sunfb_device.tme_bus_device_subregions 122: #define tme_sunfb_bus_subregion_regs tme_sunfb_bus_subregions[0] 123: #define tme_sunfb_bus_handler_regs tme_sunfb_bus_handlers[0] 124: 125: /* the class of the framebuffer: */ 126: unsigned int tme_sunfb_class; 127: 128: /* the depth of the framebuffer: */ 129: unsigned int tme_sunfb_depth; 130: 131: /* the size of the framebuffer: */ 132: tme_uint32_t tme_sunfb_size; 133: 134: /* framebuffer flags: */ 135: tme_uint32_t tme_sunfb_flags; 136: 137: /* the callout flags: */ 138: int tme_sunfb_callout_flags; 139: 140: /* this is nonzero if the interrupt is asserted: */ 141: int tme_sunfb_int_asserted; 142: 143: /* the callout thread condition: */ 144: tme_cond_t tme_sunfb_callout_cond; 145: 146: /* the (relative) bus address of the last byte of displayed 147: framebuffer memory: */ 1.1.1.3 ! root 148: tme_bus_addr32_t tme_sunfb_memory_address_last_displayed; 1.1.1.2 root 149: 150: /* the memory. usually, this memory is displayed directly, but this 151: won't be the case when there is an overlay plane, for example: */ 152: tme_uint8_t *tme_sunfb_memory; 153: 154: /* any memory pad: */ 155: tme_uint8_t *tme_sunfb_memory_pad; 156: 157: /* a framebuffer memory update function: */ 158: int (*tme_sunfb_memory_update)(struct tme_fb_connection *conn_fb); 159: 160: /* this forces the next update to be a full one: */ 161: void (*tme_sunfb_update_full) _TME_P((struct tme_sunfb *)); 162: 1.1.1.3 ! root 163: /* the token for one outstanding writable TLB entry: */ ! 164: struct tme_token *tme_sunfb_tlb_token; ! 165: ! 166: /* the offsets of the first and last bytes updated in the real ! 167: framebuffer memory: */ ! 168: tme_uint32_t tme_sunfb_offset_updated_first; ! 169: tme_uint32_t tme_sunfb_offset_updated_last; ! 170: 1.1.1.2 root 171: /* these are used for index-mapping pixel values or pixel subfield 172: values to intensities, or vice-versa. if these are NULL, 173: everything is linearly mapped: */ 174: void *tme_sunfb_cmap_primaries[3]; 175: #define tme_sunfb_cmap_g tme_sunfb_cmap_primaries[0] 176: #define tme_sunfb_cmap_r tme_sunfb_cmap_primaries[1] 177: #define tme_sunfb_cmap_b tme_sunfb_cmap_primaries[2] 178: 179: /* a P4 register: */ 180: tme_uint32_t tme_sunfb_p4; 181: 182: /* many Sun 8-bit framebuffers use the Brooktree Bt458 RAMDAC: */ 183: struct tme_bt458 tme_sunfb_bt458; 184: 185: /* S4 basic registers: */ 186: struct { 187: tme_uint8_t tme_sunfb_s4_regs_control; 188: #define tme_sunfb_s4_regs_first tme_sunfb_s4_regs_control 189: tme_uint8_t tme_sunfb_s4_regs_status; 190: tme_uint8_t tme_sunfb_s4_regs_cursor_start; 191: tme_uint8_t tme_sunfb_s4_regs_cursor_end; 192: tme_uint8_t tme_sunfb_s4_regs_h_blank_set; 193: tme_uint8_t tme_sunfb_s4_regs_h_blank_clear; 194: tme_uint8_t tme_sunfb_s4_regs_h_sync_set; 195: tme_uint8_t tme_sunfb_s4_regs_h_sync_clear; 196: tme_uint8_t tme_sunfb_s4_regs_comp_sync_clear; 197: tme_uint8_t tme_sunfb_s4_regs_v_blank_set_high; 198: tme_uint8_t tme_sunfb_s4_regs_v_blank_set_low; 199: tme_uint8_t tme_sunfb_s4_regs_v_blank_clear; 200: tme_uint8_t tme_sunfb_s4_regs_v_sync_set; 201: tme_uint8_t tme_sunfb_s4_regs_v_sync_clear; 202: tme_uint8_t tme_sunfb_s4_regs_xfer_holdoff_set; 203: tme_uint8_t tme_sunfb_s4_regs_xfer_holdoff_clear; 204: } tme_sunfb_s4_regs; 205: 206: /* if the given type is valid, it returns NULL and updates the 207: framebuffer structure, else it returns a string of valid types: */ 208: const char *(*tme_sunfb_type_set) _TME_P((struct tme_sunfb *, const char *)); 1.1.1.3 ! root 209: ! 210: /* any interrupt signal: */ ! 211: tme_uint32_t tme_sunfb_bus_signal_int; 1.1.1.2 root 212: }; 1.1 root 213: 214: /* prototypes: */ 1.1.1.2 root 215: 216: /* miscellaneous: */ 217: tme_uint32_t tme_sunfb_size _TME_P((const char *)); 218: tme_uint32_t tme_sunfb_size_width _TME_P((tme_uint32_t)); 219: tme_uint32_t tme_sunfb_size_height _TME_P((tme_uint32_t)); 220: 221: /* this creates a new Sun framebuffer: */ 222: int tme_sunfb_new(struct tme_sunfb *sunfb, const char * const *args, char **_output); 223: 224: /* some standard register bus cycle handlers: */ 225: int tme_sunfb_bus_cycle_p4 _TME_P((void *, struct tme_bus_cycle *)); 226: int tme_sunfb_bus_cycle_s4 _TME_P((void *, struct tme_bus_cycle *)); 1.1.1.3 ! root 227: int tme_sunfb_bus_cycle_bt458 _TME_P((void *, struct tme_bus_cycle *)); 1.1.1.2 root 228: 229: /* this is called before the framebuffer's display is updated: */ 230: int tme_sunfb_memory_update _TME_P((struct tme_fb_connection *)); 1.1 root 231: 1.1.1.3 ! root 232: #if TME_SUNFB_BUS_TRANSITION ! 233: ! 234: /* this is the bus cycle transition glue: */ ! 235: struct tme_completion; ! 236: int tme_sunfb_bus_cycle_transition _TME_P((void *, ! 237: struct tme_bus_cycle *, ! 238: void (*) _TME_P((struct tme_sunfb *, ! 239: struct tme_bus_cycle *, ! 240: tme_uint32_t *, ! 241: struct tme_completion *)))); ! 242: ! 243: #endif /* TME_SUNFB_BUS_TRANSITION */ ! 244: 1.1 root 245: #endif /* !_MACHINE_SUN_FB_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.