1
2#ifndef S3BCI_H
3#define S3BCI_H
4
5
6/* BCI Control Register */
7#define   S3_BCI_CONTROL                0x816C
8
9/*
10 *  High 8 bit of primary bitmap descriptor 2 register.
11 *  Bits 25-24: Tile Format  00 = Linear ; 10 = 16 bits; 11 = 32 bits (Savage4)
12 *            00 = Linear ; 01 = Tile; 10 = Texture tiling format/ Destination Tiling format
13 *            11 = Reserved/Destination tiling format.
14 */
15
16
17#define   TILE_LINEAR                   0
18#define   TILE_FORMAT_LINEAR            0
19#define   TILE_TEXTURE                  2
20#define   TILE_DESTINATION              1
21#define   TILE_FORMAT_16BPP     	2
22#define   TILE_FORMAT_32BPP     	3
23
24/* BD - BCI enable */
25/* savage4, MX, IX, 3D */
26#define   BCI_ENABLE                    8
27/* twister, prosavage, DDR, supersavage, 2000 */
28#define   BCI_ENABLE_TWISTER            0
29
30#define   S3_BIG_ENDIAN                    4
31#define   S3_LITTLE_ENDIAN                 0
32#define   S3_BD64                          1
33
34
35
36/*  Global Bitmap Descriptor */
37#define   S3_BCI_GLB_BD_LOW             0x8168
38#define   S3_BCI_GLB_BD_HIGH            0x816C
39
40#define REVERSE_BYTE_ORDER32(dword) {\
41    unsigned int temp; \
42    dword =  (temp & 0xFF) << 24; \
43    dword |= (temp & 0xFF00) << 8; \
44    dword |= (temp & 0xFF0000) >> 8; \
45    dword |= (temp & 0xFF000000) >> 24; }
46
47#define BCI_GET_PTR volatile CARD32 * bci_ptr = (CARD32 *) psav->BciMem
48#define BCI_RESET bci_ptr = (CARD32 *) psav->BciMem
49
50#define BCI_SEND(dw)   (*bci_ptr++ = (CARD32)(dw))
51
52#define BCI_CMD_NOP                  0x40000000
53#define BCI_CMD_RECT                 0x48000000
54#define BCI_CMD_RECT_XP              0x01000000
55#define BCI_CMD_RECT_YP              0x02000000
56#define BCI_CMD_SCANLINE             0x50000000
57#define BCI_CMD_LINE                 0x5C000000
58#define BCI_CMD_LINE_LAST_PIXEL      0x58000000
59#define BCI_CMD_BYTE_TEXT            0x63000000
60#define BCI_CMD_NT_BYTE_TEXT         0x67000000
61#define BCI_CMD_BIT_TEXT             0x6C000000
62#define BCI_CMD_GET_ROP(cmd)         (((cmd) >> 16) & 0xFF)
63#define BCI_CMD_SET_ROP(cmd, rop)    ((cmd) |= ((rop & 0xFF) << 16))
64#define BCI_CMD_SEND_COLOR           0x00008000
65
66#define BCI_CMD_CLIP_NONE            0x00000000
67#define BCI_CMD_CLIP_CURRENT         0x00002000
68#define BCI_CMD_CLIP_LR              0x00004000
69#define BCI_CMD_CLIP_NEW             0x00006000
70
71#define BCI_CMD_DEST_GBD             0x00000000
72#define BCI_CMD_DEST_PBD             0x00000800
73#define BCI_CMD_DEST_PBD_NEW         0x00000C00
74#define BCI_CMD_DEST_SBD             0x00001000
75#define BCI_CMD_DEST_SBD_NEW         0x00001400
76
77#define BCI_CMD_SRC_TRANSPARENT      0x00000200
78#define BCI_CMD_SRC_SOLID            0x00000000
79#define BCI_CMD_SRC_GBD              0x00000020
80#define BCI_CMD_SRC_COLOR            0x00000040
81#define BCI_CMD_SRC_MONO             0x00000060
82#define BCI_CMD_SRC_PBD_COLOR        0x00000080
83#define BCI_CMD_SRC_PBD_MONO         0x000000A0
84#define BCI_CMD_SRC_PBD_COLOR_NEW    0x000000C0
85#define BCI_CMD_SRC_PBD_MONO_NEW     0x000000E0
86#define BCI_CMD_SRC_SBD_COLOR        0x00000100
87#define BCI_CMD_SRC_SBD_MONO         0x00000120
88#define BCI_CMD_SRC_SBD_COLOR_NEW    0x00000140
89#define BCI_CMD_SRC_SBD_MONO_NEW     0x00000160
90
91#define BCI_CMD_PAT_TRANSPARENT      0x00000010
92#define BCI_CMD_PAT_NONE             0x00000000
93#define BCI_CMD_PAT_COLOR            0x00000002
94#define BCI_CMD_PAT_MONO             0x00000003
95#define BCI_CMD_PAT_PBD_COLOR        0x00000004
96#define BCI_CMD_PAT_PBD_MONO         0x00000005
97#define BCI_CMD_PAT_PBD_COLOR_NEW    0x00000006
98#define BCI_CMD_PAT_PBD_MONO_NEW     0x00000007
99#define BCI_CMD_PAT_SBD_COLOR        0x00000008
100#define BCI_CMD_PAT_SBD_MONO         0x00000009
101#define BCI_CMD_PAT_SBD_COLOR_NEW    0x0000000A
102#define BCI_CMD_PAT_SBD_MONO_NEW     0x0000000B
103
104#define BCI_BD_BW_DISABLE            0x10000000
105#define BCI_BD_TILE_MASK             0x03000000
106#define BCI_BD_TILE_NONE             0x00000000
107#define BCI_BD_TILE_16               0x02000000
108#define BCI_BD_TILE_32               0x03000000
109#define BCI_BD_TILE_DESTINATION      0x01000000
110
111#define BCI_BD_GET_BPP(bd)           (((bd) >> 16) & 0xFF)
112#define BCI_BD_SET_BPP(bd, bpp)      ((bd) |= (((bpp) & 0xFF) << 16))
113#define BCI_BD_GET_STRIDE(bd)        ((bd) & 0xFFFF)
114#define BCI_BD_SET_STRIDE(bd, st)    ((bd) |= ((st) & 0xFFFF))
115
116#define BCI_SET_REGISTER             0x96000000
117#define BCI_SET_REGISTER_COUNT(count) ((count) << 16)
118#define BCI_BITPLANE_WRITE_MASK	     0xD7
119#define BCI_BITPLANE_READ_MASK	     0xD8
120#define BCI_GBD_1		     0xE0
121#define BCI_GBD_2		     0xE1
122#define BCI_PBD_1		     0xE2
123#define BCI_PBD_2		     0xE3
124#define BCI_SBD_1		     0xE4
125#define BCI_SBD_2		     0xE5
126
127#define BCI_W_H(w, h)                ((((h) << 16) | (w)) & 0x0FFF0FFF)
128#define BCI_X_Y(x, y)                ((((y) << 16) | (x)) & 0x0FFF0FFF)
129#define BCI_X_W(x, y)                ((((w) << 16) | (x)) & 0x0FFF0FFF)
130#define BCI_CLIP_LR(l, r)            ((((r) << 16) | (l)) & 0x0FFF0FFF)
131#define BCI_CLIP_TL(t, l)            ((((t) << 16) | (l)) & 0x0FFF0FFF)
132#define BCI_CLIP_BR(b, r)            ((((b) << 16) | (r)) & 0x0FFF0FFF)
133
134#define BCI_LINE_X_Y(x, y)           (((y) << 16) | ((x) & 0xFFFF))
135#define BCI_LINE_STEPS(diag, axi)    (((axi) << 16) | ((diag) & 0xFFFF))
136#define BCI_LINE_MISC(maj, ym, xp, yp, err) \
137	(((maj) & 0x1FFF) | \
138	((ym) ? 1<<13 : 0) | \
139	((xp) ? 1<<14 : 0) | \
140	((yp) ? 1<<15 : 0) | \
141	((err) << 16))
142
143#endif /* S3BCI_H */
144