Rev 54 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
54 | pj | 1 | /* |
2 | * ramdac.h: |
||
3 | * |
||
4 | * Structures and functions for programmable ramdac support. |
||
5 | */ |
||
6 | |||
80 | pj | 7 | #include "ll/sys/cdefs.h" |
8 | |||
9 | __BEGIN_DECLS |
||
10 | |||
54 | pj | 11 | /* DacMethods type. */ |
12 | |||
13 | typedef struct { |
||
14 | int id; |
||
15 | char *name; |
||
16 | int flags; |
||
17 | /* |
||
18 | * The following function tries to detect the DAC; |
||
19 | * returns nonzero if succesful. |
||
20 | */ |
||
21 | int (*probe) (void); |
||
22 | /* |
||
23 | * The following function initializes the DAC; it is usually |
||
24 | * called once after detection. |
||
25 | */ |
||
26 | void (*initialize) (void); |
||
27 | /* |
||
28 | * The following function fills in dot clock limits, and |
||
29 | * mapping functions for the raw clock and horizontal |
||
30 | * CRTC timing, in the cardspecs structure. |
||
31 | * |
||
32 | * dacspeed is the max pixel clock in kHz the dac can handle, |
||
33 | * or 0 for default. |
||
34 | */ |
||
35 | void (*qualifyCardSpecs) (CardSpecs * cardspecs, int dacspeed); |
||
36 | /* |
||
37 | * The following function saves RAMDAC registers into regs. |
||
38 | */ |
||
39 | void (*saveState) (unsigned char *regs); |
||
40 | /* |
||
41 | * The following function sets the RAMDAC registers with the |
||
42 | * values from regs. |
||
43 | */ |
||
44 | void (*restoreState) (const unsigned char *regs); |
||
45 | /* |
||
46 | * The following function sets up the RAMDAC register values |
||
47 | * for the desired color operating mode. If the DAC has |
||
48 | * programmable clocks, it should also program the clock. |
||
49 | */ |
||
50 | void (*initializeState) (unsigned char *regs, int bpp, int colormode, |
||
51 | int pixelclock); |
||
52 | int stateSize; /* Size in bytes of the state (saved registers). */ |
||
53 | } DacMethods; |
||
54 | |||
55 | /* IDs */ |
||
56 | |||
57 | #define NORMAL_DAC 1 |
||
58 | #define S3_GENDAC 2 /* S3-GenDAC (8-bit DAC). */ |
||
59 | #define S3_SDAC 3 /* S3-SDAC (16-bit DAC). */ |
||
60 | #define TRIO64 4 /* Trio64 internal DAC. */ |
||
61 | #define SIERRA_32K 5 /* Basic DAC with 32K color mode support. */ |
||
62 | #define ATT20C490 6 /* Standard AT&T 8-bit DAC with truecolor. */ |
||
63 | #define ATT20C498 7 /* Standard AT&T 16-bit DAC. */ |
||
64 | #define IC_WORKS 8 /* IC Works DAC (16-bit ZoomDac). */ |
||
65 | #define SIERRA_15025 9 /* Sierra SC15025/26 DAC. */ |
||
66 | #define IBMRGB52x 10 /* IBM RGB52x Palette DAC. */ |
||
67 | #define SIERRA_1148X 11 /* Sierra SC1148x DAC. */ |
||
68 | |||
69 | /* Flags. */ |
||
70 | |||
71 | #define DAC_HAS_PROGRAMMABLE_CLOCKS 0x1 |
||
72 | |||
73 | /* Color modes. */ |
||
74 | |||
75 | #define CLUT8_6 0 |
||
76 | #define CLUT8_8 1 |
||
77 | #define RGB16_555 2 |
||
78 | #define RGB16_565 3 |
||
79 | #define RGB24_888_B 4 /* 3 bytes per pixel, blue byte first. */ |
||
80 | #define RGB32_888_B 5 /* 4 bytes per pixel. */ |
||
81 | |||
82 | /* State size */ |
||
83 | #define MAX_DAC_STATE 0x101 /* IBMRGB has this many */ |
||
84 | |||
85 | /* RAMDAC methods */ |
||
86 | |||
87 | #ifdef INCLUDE_NORMAL_DAC |
||
88 | extern DacMethods __svgalib_normal_dac_methods; |
||
89 | #endif |
||
90 | #ifdef INCLUDE_S3_SDAC_DAC |
||
91 | extern DacMethods __svgalib_S3_SDAC_methods; |
||
92 | #endif |
||
93 | #ifdef INCLUDE_S3_GENDAC_DAC |
||
94 | extern DacMethods __svgalib_S3_GENDAC_methods; |
||
95 | #endif |
||
96 | #ifdef INCLUDE_S3_TRIO64_DAC |
||
97 | extern DacMethods __svgalib_Trio64_methods; |
||
98 | #endif |
||
99 | #ifdef INCLUDE_SIERRA_DAC |
||
100 | extern DacMethods __svgalib_Sierra_32K_methods; |
||
101 | #endif |
||
102 | #ifdef INCLUDE_SC15025_DAC |
||
103 | extern DacMethods __svgalib_SC15025_methods; |
||
104 | #endif |
||
105 | #ifdef INCLUDE_ATT20C490_DAC |
||
106 | extern DacMethods __svgalib_ATT20C490_methods; |
||
107 | #endif |
||
108 | #ifdef INCLUDE_ATT20C498_DAC |
||
109 | extern DacMethods __svgalib_ATT20C498_methods; |
||
110 | #endif |
||
111 | #ifdef INCLUDE_ICW_DAC |
||
112 | extern DacMethods __svgalib_ICW_methods; |
||
113 | #endif |
||
114 | #ifdef INCLUDE_IBMRGB52x_DAC |
||
115 | extern DacMethods __svgalib_IBMRGB52x_methods; |
||
116 | #endif |
||
117 | #ifdef INCLUDE_SC1148X_DAC |
||
118 | extern DacMethods __svgalib_SC1148X_methods; |
||
119 | #endif |
||
120 | #ifdef INCLUDE_ICS_GENDAC_DAC |
||
121 | extern DacMethods __svgalib_ICS_GENDAC_methods; |
||
122 | #endif |
||
123 | |||
124 | extern DacMethods *__svgalib_all_dacs[]; /* List of all defined DACs. */ |
||
125 | |||
126 | /* Functions defined in ramdac.c. */ |
||
127 | |||
128 | /* |
||
129 | * The following function probes the DACs in daclist, which must be |
||
130 | * terminated by NULL. It returns the detected DAC if succesful, NULL |
||
131 | * otherwise. The detected DAC is also initialized. |
||
132 | */ |
||
133 | |||
134 | DacMethods *__svgalib_probeDacs(DacMethods ** daclist); |
||
135 | |||
136 | /* |
||
137 | * Internal functions (not meant for export, but no such mechanism in C) |
||
138 | */ |
||
139 | int __svgalib_setDacSpeed(int dacspeed, int defspeed); |
||
140 | |||
141 | void __svgalib_Sierra_32K_savestate(unsigned char *regs); |
||
142 | void __svgalib_Sierra_32K_restorestate(const unsigned char *regs); |
||
143 | |||
144 | #ifdef __OPTIMIZE__ |
||
145 | static __inline__ void _ramdac_dactocomm(void) |
||
146 | { |
||
147 | inb(PEL_IW); |
||
148 | inb(PEL_MSK); |
||
149 | inb(PEL_MSK); |
||
150 | inb(PEL_MSK); |
||
151 | inb(PEL_MSK); |
||
152 | } |
||
153 | |||
154 | static __inline__ void _ramdac_dactopel(void) |
||
155 | { |
||
156 | inb(PEL_IW); |
||
157 | } |
||
158 | |||
159 | static __inline__ unsigned char _ramdac_setcomm(unsigned char data) |
||
160 | { |
||
161 | _ramdac_dactocomm(); |
||
162 | outb(PEL_MSK, data); |
||
163 | _ramdac_dactocomm(); |
||
164 | return inb(PEL_MSK); |
||
165 | } |
||
166 | #else |
||
167 | void _ramdac_dactocomm(void); |
||
168 | void _ramdac_dactopel(void); |
||
169 | unsigned char _ramdac_setcomm(unsigned char data); |
||
170 | #endif |
||
80 | pj | 171 | |
172 | __END_DECLS |