[BACK]Return to p9000.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/p9000.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: p9000.h,v 1.4 2007/05/22 04:14:03 jsg Exp $   */
        !             2: /*
        !             3:  * Copyright (c) 2003, Miodrag Vallat.
        !             4:  *
        !             5:  * Redistribution and use in source and binary forms, with or without
        !             6:  * modification, are permitted provided that the following conditions
        !             7:  * are met:
        !             8:  * 1. Redistributions of source code must retain the above copyright
        !             9:  *    notice, this list of conditions and the following disclaimer.
        !            10:  * 2. Redistributions in binary form must reproduce the above copyright
        !            11:  *    notice, this list of conditions and the following disclaimer in the
        !            12:  *    documentation and/or other materials provided with the distribution.
        !            13:  *
        !            14:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
        !            15:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
        !            16:  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
        !            17:  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
        !            18:  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
        !            19:  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
        !            20:  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !            21:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
        !            22:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
        !            23:  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
        !            24:  * POSSIBILITY OF SUCH DAMAGE.
        !            25:  */
        !            26:
        !            27: /*
        !            28:  * Weitek Power9000 and Power9100 definitions.
        !            29:  *
        !            30:  * Although the datasheet is not available anymore, a good source of
        !            31:  * documentation is several code examples in XFree86 3.x (vga256/p9x00) and the
        !            32:  * {Net,Open}BSD source trees.
        !            33:  */
        !            34:
        !            35: /*
        !            36:  * Frame buffer control registers
        !            37:  *
        !            38:  * Offsets below are relative to the following locations:
        !            39:  * P9000 at 0x00100000, P9100 at 0x000000
        !            40:  */
        !            41:
        !            42: /*
        !            43:  * System control registers
        !            44:  */
        !            45:
        !            46: /* System configuration register */
        !            47: #define        P9000_SYSTEM_CONFIG                             0x00000004
        !            48:
        !            49: #define        SCR_PIXEL_MASK                                  0x1c000000
        !            50: #define        SCR_PIXEL_8BPP                                  0x08000000
        !            51: #define        SCR_PIXEL_16BPP                                 0x0c000000
        !            52: #define        SCR_PIXEL_24BPP                                 0x1c000000
        !            53: #define        SCR_PIXEL_32BPP                                 0x14000000
        !            54: #define        SCR_SWAP_WORDS                                  0x00002000
        !            55: #define        SCR_SWAP_BYTES                                  0x00001000
        !            56: #define        SCR_SWAP_BITS                                   0x00000800
        !            57: #define        SCR_READ_BUFFER_MASK                            0x00000400
        !            58: #define        SCR_WRITE_BUFFER_MASK                           0x00000200
        !            59: #define        SCR_ID_MASK                                     0x00000007
        !            60: #define        SCR_SC(sc0, sc1, sc2, sc3) \
        !            61:     (((sc0) << 14) | ((sc1) << 17) | ((sc2) << 20) | ((sc3) << 29))
        !            62:
        !            63: /* Interrupt status register */
        !            64: #define        P9000_INTERRUPT                                 0x00000008
        !            65:
        !            66: /* Interrupt enable register */
        !            67: #define        P9000_INTERRUPT_ENABLE                          0x0000000c
        !            68:
        !            69: #define        IER_MASTER_ENABLE                               0x00000080
        !            70: #define        IER_MASTER_INTERRUPT                            0x00000040
        !            71: #define        IER_VBLANK_ENABLE                               0x00000020
        !            72: #define        IER_VBLANK_INTERRUPT                            0x00000010
        !            73: #define        IER_PICK_ENABLE                                 0x00000008
        !            74: #define        IER_PICK_INTERRUPT                              0x00000004
        !            75: #define        IER_IDLE_ENABLE                                 0x00000002
        !            76: #define        IER_IDLE_INTERRUPT                              0x00000001
        !            77:
        !            78: /* Alternate read bank register (bits 16-22) */
        !            79: #define        P9000_ALTBANK_READ                              0x00000010
        !            80:
        !            81: /* Alternate write bank register (bits 16-22) */
        !            82: #define        P9000_ALTBANK_WRITE                             0x00000014
        !            83:
        !            84: /*
        !            85:  * Video control registers
        !            86:  */
        !            87:
        !            88: /* Horizontal counter */
        !            89: #define        P9000_HCR                                       0x00000104
        !            90: /* Horizontal total */
        !            91: #define        P9000_HTR                                       0x00000108
        !            92: /* Horizontal sync rising edge */
        !            93: #define        P9000_HSRE                                      0x0000010c
        !            94: /* Horizontal blank rising edge */
        !            95: #define        P9000_HBRE                                      0x00000110
        !            96: /* Horizontal blank falling edge */
        !            97: #define        P9000_HBFE                                      0x00000114
        !            98: /* Horizontal counter preload */
        !            99: #define        P9000_HCP                                       0x00000118
        !           100:
        !           101: /* Vertical counter */
        !           102: #define        P9000_VCR                                       0x0000011c
        !           103: /* Vertical length */
        !           104: #define        P9000_VL                                        0x00000120
        !           105: /* Vertical sync rising edge */
        !           106: #define        P9000_VSRE                                      0x00000124
        !           107: /* Vertical blank rising edge */
        !           108: #define        P9000_VBRE                                      0x00000128
        !           109: /* Vertical blank falling edge */
        !           110: #define        P9000_VBFE                                      0x0000012c
        !           111: /* Vertical counter preload */
        !           112: #define        P9000_VCP                                       0x00000130
        !           113:
        !           114: /* Screen repaint address */
        !           115: #define        P9000_SRA                                       0x00000134
        !           116: /* Screen repaint timing control #1 */
        !           117: #define        P9000_SRTC1                                     0x00000138
        !           118:
        !           119: #define        SRTC1_VSYNC_INTERNAL                            0x00000100
        !           120: #define        SRTC1_HSYNC_INTERNAL                            0x00000080
        !           121: #define        SRTC1_VIDEN                                     0x00000020
        !           122: #define        SRTC1_RESTRICTED                                0x00000010
        !           123: #define        SRTC1_BUFFER1                                   0x00000008
        !           124:
        !           125: /* QSF counter. Film at 11 */
        !           126: #define        P9000_QSF                                       0x0000013c
        !           127: /* Screen repaint timing control #2 */
        !           128: #define        P9000_SRTC2                                     0x00000140
        !           129:
        !           130: /*
        !           131:  * VRAM control registers
        !           132:  */
        !           133:
        !           134: /* Memory configuration */
        !           135: #define        P9000_MCR                                       0x00000184
        !           136: /* Refresh period */
        !           137: #define        P9000_REFRESH_PERIOD                            0x00000188
        !           138: /* Refresh count */
        !           139: #define        P9000_REFRESH_COUNT                             0x0000018c
        !           140: /* RAS low maximum */
        !           141: #define        P9000_RASLOW_MAXIMUM                            0x00000190
        !           142: /* RAS low current */
        !           143: #define        P9000_RASLOW_CURRENT                            0x00000194
        !           144: /* RAMDAC free FIFO (P9100 only, bits 12-15) and power-up configuration */
        !           145: #define        P9000_POWERUP_CONFIG                            0x00000198
        !           146: #define        P9100_FREE_FIFO                                 0x00000198
        !           147:
        !           148: /*
        !           149:  * RAMDAC registers (P9100 only)
        !           150:  */
        !           151:
        !           152: #define        P9100_RAMDAC_REGISTER(index)            (0x00000200 + ((index) << 2))
        !           153:
        !           154:
        !           155: /*
        !           156:  * Accelerated features
        !           157:  *
        !           158:  * Offsets below are relative to the following locations:
        !           159:  * P9000 at 0x00180000, P9100 at 0x002000
        !           160:  */
        !           161:
        !           162: /*
        !           163:  * Parameter engine
        !           164:  */
        !           165:
        !           166: /* Status register */
        !           167: #define        P9000_PE_STATUS                                 0x00000000
        !           168: #define        STATUS_QUAD_BUSY                                0x80000000
        !           169: #define        STATUS_BLIT_BUSY                                0x40000000
        !           170: #define        STATUS_PICK_DETECTED                            0x00000080
        !           171: #define        STATUS_PIXEL_ERROR                              0x00000040
        !           172: #define        STATUS_BLIT_ERROR                               0x00000020
        !           173: #define        STATUS_QUAD_ERROR                               0x00000010
        !           174: #define        STATUS_QUAD_CONCAVE                             0x00000008
        !           175: #define        STATUS_QUAD_OUTSIDE                             0x00000004
        !           176: #define        STATUS_QUAD_INSIDE                              0x00000002
        !           177: #define        STATUS_QUAD_STRADDLE                            0x00000001
        !           178:
        !           179: /* Engine arguments / operation triggers */
        !           180: #define        P9000_PE_BLIT                                   0x00000004
        !           181: #define        P9000_PE_QUAD                                   0x00000008
        !           182: #define        P9000_PE_PIXEL8                                 0x0000000c
        !           183: #define        P9000_PE_NEXTPIXELS                             0x00000014
        !           184: #define        P9000_PE_PIXEL1(index)                  (0x00000080 + ((index) << 2))
        !           185:
        !           186: /* Control and conditions registers */
        !           187:
        !           188: /* Out of range */
        !           189: #define        P9000_PE_OOR                                    0x00000184
        !           190: /* Index register (0-3, for meta coordinates) */
        !           191: #define        P9000_PE_INDEX                                  0x0000018c
        !           192: /* Window offset (16x16)*/
        !           193: #define        P9000_PE_WINOFFSET                              0x00000190
        !           194: /* Clipping window */
        !           195: #define        P9000_PE_WINMIN                                 0x00000194
        !           196: #define        P9000_PE_WINMAX                                 0x00000198
        !           197: /* X Clip register */
        !           198: #define        P9000_X_CLIPPING                                0x000001a0
        !           199: /* Y Clip register */
        !           200: #define        P9000_Y_CLIPPING                                0x000001a4
        !           201: /* X Edge Less Than register */
        !           202: #define        P9000_X_EDGE_LESS                               0x000001a8
        !           203: /* X Edge Greater Than register */
        !           204: #define        P9000_X_EDGE_GREATER                            0x000001ac
        !           205: /* Y Edge Less Than register */
        !           206: #define        P9000_Y_EDGE_LESS                               0x000001b0
        !           207: /* Y Edge Greater Than register */
        !           208: #define        P9000_Y_EDGE_GREATER                            0x000001b4
        !           209:
        !           210: /*
        !           211:  * Drawing engine
        !           212:  */
        !           213:
        !           214: /* Colors - 8 bit for P9000, 32 bit for P9100 */
        !           215: #define        P9000_DE_FG_COLOR                               0x00000200
        !           216: #define        P9000_DE_BG_COLOR                               0x00000204
        !           217: #define        P9100_DE_COLOR0                                 0x00000200
        !           218: #define        P9100_DE_COLOR1                                 0x00000204
        !           219: #define        P9100_DE_COLOR2                                 0x00000238
        !           220: #define        P9100_DE_COLOR3                                 0x0000023c
        !           221:
        !           222: /* How to encode a colors in 8 and 16 bit mode, for the P9100 */
        !           223: #define        P9100_COLOR8(c)         ((c) | ((c) << 8) | ((c) << 16) | ((c) << 24))
        !           224: #define        P9100_COLOR16(c)        ((c) | ((c) << 16))
        !           225:
        !           226: /* Plane mask (8 bits on P9000, 32 bits on P9100) */
        !           227: #define        P9000_DE_PLANEMASK                              0x00000208
        !           228:
        !           229: /* Drawing mode */
        !           230: #define        P9000_DE_DRAWMODE                               0x0000020c
        !           231: #define        DM_PICK_CONTROL                                 0x00000008
        !           232: #define        DM_PICK_ENABLE                                  0x00000004
        !           233: #define        DM_BUFFER_CONTROL                               0x00000002
        !           234: #define        DM_BUFFER_ENABLE0                               0x00000000
        !           235: #define        DM_BUFFER_ENABLE1                               0x00000001
        !           236:
        !           237: /* Pattern Origin (4 bit x 4 bit offset) */
        !           238: #define        P9000_DE_PATTERN_ORIGIN_X                       0x00000210
        !           239: #define        P9000_DE_PATTERN_ORIGIN_Y                       0x00000214
        !           240:
        !           241: /* Raster operation */
        !           242: #define        P9000_DE_RASTER                                 0x00000218
        !           243: #define        P9100_RASTER_NO_SOLID                           0x00002000
        !           244: #define        P9100_RASTER_PATTERN_4COLOR                     0x00004000
        !           245: #define        P9100_RASTER_PIXEL1_TRANSPARENT                 0x00008000
        !           246: #define        P9000_RASTER_QUAD_OVERSIZE                      0x00010000
        !           247: #define        P9000_RASTER_QUAD_PATTERN                       0x00020000
        !           248:
        !           249: /* Raster minterms */
        !           250: #define        P9000_RASTER_SRC                                0xcccc
        !           251: #define        P9000_RASTER_DST                                0xaaaa
        !           252: #define        P9000_RASTER_PATTERN                            0xff00
        !           253: #define        P9000_RASTER_MASK                               0xffff
        !           254: #define        P9100_RASTER_SRC                                0x00cc
        !           255: #define        P9100_RASTER_DST                                0x00aa
        !           256: #define        P9100_RASTER_PATTERN                            0x00f0
        !           257: #define        P9100_RASTER_MASK                               0x00ff
        !           258:
        !           259: /* Pixel8 excess storage */
        !           260: #define        P9000_DE_PIXEL8                                 0x0000021c
        !           261:
        !           262: /* Clipping window - same as in PE */
        !           263: #define        P9000_DE_WINMIN                                 0x00000220
        !           264: #define        P9000_DE_WINMAX                                 0x00000224
        !           265:
        !           266: /* Quad pattern - up to 4 items on P9000, 8 on P9100 */
        !           267: #define        P9000_DE_PATTERN(index)                 (0x00000280 + ((index) << 2))
        !           268:
        !           269: /* User pattern - up to 4 items */
        !           270: #define        P9000_DE_USER(index)                    (0x00000290 + ((index) << 2))
        !           271:
        !           272: /* Byte clipping window */
        !           273: #define        P9100_DE_B_WINMIN                               0x000002a0
        !           274: #define        P9100_DE_B_WINMAX                               0x000002a4
        !           275:
        !           276: /*
        !           277:  * Coordinates
        !           278:  */
        !           279:
        !           280: /* 32 bit X value */
        !           281: #define        P9000_COORD_X                                   0x00000008
        !           282: /* 32 bit Y value */
        !           283: #define        P9000_COORD_Y                                   0x00000010
        !           284: /* 16 bit X, 16 bit Y values packed */
        !           285: #define        P9000_COORD_XY                                  0x00000018
        !           286:
        !           287: /* Absolute (screen) coordinates */
        !           288: #define        P9000_COORD_ABS                                 0x00000000
        !           289: /* Relative (in-window) coordinates */
        !           290: #define        P9000_COORD_REL                                 0x00000020
        !           291:
        !           292: /* How to pack a x16y16 value - note that they are in fact 12 bit values */
        !           293: #define        P9000_COORDS(x,y)       ((((x) & 0x0fff) << 16) | ((y) & 0x0fff))
        !           294:
        !           295: /* Device coordinates - 4 edges */
        !           296: #define        P9000_DC_COORD(index)                   (0x00001000 + ((index) * 0x40))
        !           297:
        !           298: /* Load coordinates */
        !           299: #define        P9000_LC_POINT                                  0x00001200
        !           300: #define        P9000_LC_LINE                                   0x00001240
        !           301: #define        P9000_LC_TRI                                    0x00001280
        !           302: #define        P9000_LC_QUAD                                   0x000012c0
        !           303: #define        P9000_LC_RECT                                   0x00001300

CVSweb