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