summitreg.h revision 1.9 1 /* $NetBSD: summitreg.h,v 1.9 2024/12/18 05:19:17 macallan Exp $ */
2
3 /*
4 * Copyright (c) 2024 Michael Lorenz
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
19 * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
20 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
24 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
25 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26 * THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29 /* HP Visualize FX 4 and related hardware, aka Summit */
30
31 /*
32 * register values, found by disassembling the ROM
33 * some found by Sven Schnelle
34 * ( see https://patchwork.kernel.org/project/linux-parisc/patch/20211031204952.25678-2-svens@stackframe.org/ )
35 * some by me
36 */
37
38 #ifndef SUMMITREG_H
39 #define SUMMITREG_H
40
41 #define VISFX_STATUS 0x641400 // zero when idle
42 #define VISFX_FIFO 0x641440
43 #define VISFX_VRAM_WRITE_MODE 0xa00808
44 #define VISFX_VRAM_READ_MODE 0xa0080c // this is a guess
45 #define VISFX_PIXEL_MASK 0xa0082c
46 #define VISFX_FG_COLOUR 0xa0083c
47 #define VISFX_BG_COLOUR 0xa00844
48 #define VISFX_PLANE_MASK 0xa0084c
49 /* this controls what we see in the FB aperture */
50 #define VISFX_APERTURE_ACCESS 0xa00858
51 #define VISFX_DEPTH_8 0xb0
52 #define VISFX_DEPTH_32 0xd0
53
54 #define VISFX_VRAM_WRITE_DATA_INCRX 0xa60000
55 #define VISFX_VRAM_WRITE_DATA_INCRY 0xa68000
56 #define VISFX_VRAM_WRITE_DEST 0xac1000
57
58 #define VISFX_CLIP_TL 0xac1050 /* clipping rect, top/left */
59 #define VISFX_CLIP_WH 0xac1054 /* clipping rect, w/h */
60
61 #define VISFX_WRITE_MODE_PLAIN 0x02000000
62 #define VISFX_WRITE_MODE_EXPAND 0x050004c0
63 #define VISFX_WRITE_MODE_FILL 0x050008c0
64 #define VISFX_WRITE_MODE_TRANSPARENT 0x00000800 /* bg is tansparent */
65 #define VISFX_WRITE_MODE_MASK 0x00000400 /* apply pixel mask */
66 /* 0x00000200 - some pattern */
67 /* looks like 0x000000c0 enables fb/bg colours to be applied */
68
69 #define VISFX_READ_MODE_COPY 0x02000400
70
71 /*
72 * for STI colour change mode:
73 * set VISFX_FG_COLOUR, VISFX_BG_COLOUR
74 * set VISFX_VRAM_READ_MODE 0x05000400
75 * set VISFX_VRAM_WRITE_MODE 0x050000c0
76 */
77
78 /* fill */
79 #define VISFX_START 0xb3c000
80 #define VISFX_SIZE 0xb3c808 /* start, FX4 uses 0xb3c908 */
81
82 /* copy */
83 #define VISFX_COPY_SRC 0xb3c010
84 #define VISFX_COPY_WH 0xb3c008
85 #define VISFX_COPY_DST 0xb3cc00
86 /*
87 * looks like ORing 0x800 to the register address starts a command
88 * - 0x800 - fill
89 * - 0xc00 - copy
90 * 0x100 and 0x200 seem to have functions as well, not sure what though
91 * for example, the FX4 ROM uses 0xb3c908 to start a rectangle fill, but
92 * it also works with 0xb3c808 and 0xb3ca08
93 * same with copy, 0xc00 seems to be what matters, setting 0x100 or 0x200
94 * doesn't seem to make a difference
95 * 0x400 or 0x100 by themselves don't start a command either
96 */
97
98 /*
99 * Turns out 0x40xxxx and 0x80xxxx access the same registers, one difference
100 * is that through 0x80xxxx we can read back at least some values, so use
101 * that one
102 * The _POS, _INDEX and _DATA registers work exactly like on HCRX
103 */
104
105 #define VISFX_CURSOR_POS 0x800000
106 #define VISFX_CURSOR_ENABLE 0x80000000
107 #define VISFX_CURSOR_INDEX 0x800004
108 #define VISFX_CURSOR_DATA 0x800008
109 #define VISFX_CURSOR_FG 0x80000c
110 #define VISFX_CURSOR_BG 0x800010
111 #define VISFX_COLOR_MASK 0x800018
112 #define VISFX_COLOR_INDEX 0x800020
113 #define VISFX_COLOR_VALUE 0x800024
114
115 #endif /* SUMMITREG_H */
116