Tizen 2.0 Release
[profile/ivi/osmesa.git] / src / mesa / drivers / dri / mga / server / mga_macros.h
1
2 #ifndef _MGA_MACROS_H_
3 #define _MGA_MACROS_H_
4
5 #ifndef PSZ
6 #define PSZ 8
7 #endif
8
9 #if PSZ == 8
10 #define REPLICATE(r) r &= 0xFF; r |= r << 8; r |= r << 16
11 #elif PSZ == 16
12 #define REPLICATE(r) r &= 0xFFFF; r |= r << 16
13 #elif PSZ == 24
14 #define REPLICATE(r) r &= 0xFFFFFF; r |= r << 24
15 #else
16 #define REPLICATE(r) /* */
17 #endif
18
19 #define RGBEQUAL(c) (!((((c) >> 8) ^ (c)) & 0xffff))
20
21 #ifdef XF86DRI
22 #define MGA_SYNC_XTAG                 0x275f4200
23
24 #define MGABUSYWAIT() do { \
25 OUTREG(MGAREG_DWGSYNC, MGA_SYNC_XTAG); \
26 while(INREG(MGAREG_DWGSYNC) != MGA_SYNC_XTAG) ; \
27 }while(0);
28
29 #endif
30
31 #define MGAISBUSY() (INREG8(MGAREG_Status + 2) & 0x01)
32
33 #define WAITFIFO(cnt) \
34    if(!pMga->UsePCIRetry) {\
35         register int n = cnt; \
36         if(n > pMga->FifoSize) n = pMga->FifoSize; \
37         while(pMga->fifoCount < (n))\
38             pMga->fifoCount = INREG8(MGAREG_FIFOSTATUS);\
39         pMga->fifoCount -= n;\
40    }
41
42 #define XYADDRESS(x,y) \
43     ((y) * pMga->CurrentLayout.displayWidth + (x) + pMga->YDstOrg)
44
45 #define MAKEDMAINDEX(index)  ((((index) >> 2) & 0x7f) | (((index) >> 6) & 0x80))
46
47 #define DMAINDICES(one,two,three,four)  \
48         ( MAKEDMAINDEX(one) | \
49          (MAKEDMAINDEX(two) << 8) | \
50          (MAKEDMAINDEX(three) << 16) | \
51          (MAKEDMAINDEX(four) << 24) )
52
53 #if PSZ == 24
54 #define SET_PLANEMASK(p) /**/
55 #else
56 #define SET_PLANEMASK(p) \
57         if(!(pMga->AccelFlags & MGA_NO_PLANEMASK) && ((p) != pMga->PlaneMask)) { \
58            pMga->PlaneMask = (p); \
59            REPLICATE((p)); \
60            OUTREG(MGAREG_PLNWT,(p)); \
61         }
62 #endif
63
64 #define SET_FOREGROUND(c) \
65         if((c) != pMga->FgColor) { \
66            pMga->FgColor = (c); \
67            REPLICATE((c)); \
68            OUTREG(MGAREG_FCOL,(c)); \
69         }
70
71 #define SET_BACKGROUND(c) \
72         if((c) != pMga->BgColor) { \
73            pMga->BgColor = (c); \
74            REPLICATE((c)); \
75            OUTREG(MGAREG_BCOL,(c)); \
76         }
77
78 #define DISABLE_CLIP() { \
79         pMga->AccelFlags &= ~CLIPPER_ON; \
80         WAITFIFO(1); \
81         OUTREG(MGAREG_CXBNDRY, 0xFFFF0000); }
82
83 #ifdef XF86DRI
84 #define CHECK_DMA_QUIESCENT(pMGA, pScrn) {      \
85    if (!pMGA->haveQuiescense) {                 \
86       pMGA->GetQuiescence( pScrn );             \
87    }                                            \
88 }
89 #else
90 #define CHECK_DMA_QUIESCENT(pMGA, pScrn)
91 #endif
92
93 #ifdef USEMGAHAL
94 #define HAL_CHIPSETS ((pMga->Chipset == PCI_CHIP_MGAG200_PCI) || \
95                   (pMga->Chipset == PCI_CHIP_MGAG200) || \
96                   (pMga->Chipset == PCI_CHIP_MGAG400) || \
97                   (pMga->Chipset == PCI_CHIP_MGAG550))
98     
99 #define MGA_HAL(x) { \
100         MGAPtr pMga = MGAPTR(pScrn); \
101         if (pMga->HALLoaded && HAL_CHIPSETS) { x; } \
102 }
103 #define MGA_NOT_HAL(x) { \
104         MGAPtr pMga = MGAPTR(pScrn); \
105         if (!pMga->HALLoaded || !HAL_CHIPSETS) { x; } \
106 }
107 #else
108 #define MGA_NOT_HAL(x) { x; }
109 #endif
110
111 #define MGAISGx50(x) ( (((x)->Chipset == PCI_CHIP_MGAG400) && ((x)->ChipRev >= 0x80)) || \
112                        ((x)->Chipset == PCI_CHIP_MGAG550) )
113
114 #define MGA_DH_NEEDS_HAL(x) (((x)->Chipset == PCI_CHIP_MGAG400) && \
115                              ((x)->ChipRev < 0x80))
116
117 #endif /* _MGA_MACROS_H_ */