coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
vga_io.c
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 /*
4  * All IO necessary to poke VGA registers.
5  */
6 #include <pc80/vga_io.h>
7 
8 #include <arch/io.h>
9 
10 #define VGA_CR_INDEX 0x3D4
11 #define VGA_CR_VALUE 0x3D5
12 
13 #define VGA_SR_INDEX 0x3C4
14 #define VGA_SR_VALUE 0x3C5
15 
16 #define VGA_GR_INDEX 0x3CE
17 #define VGA_GR_VALUE 0x3CF
18 
19 #define VGA_AR_INDEX 0x3C0
20 #define VGA_AR_VALUE_READ 0x3C1
21 #define VGA_AR_VALUE_WRITE VGA_AR_INDEX
22 
23 #define VGA_MISC_WRITE 0x3C2
24 #define VGA_MISC_READ 0x3CC
25 
26 #define VGA_ENABLE 0x3C3
27 #define VGA_STAT1 0x3DA
28 
29 #define VGA_DAC_MASK 0x3C6
30 #define VGA_DAC_READ_ADDRESS 0x3C7
31 #define VGA_DAC_WRITE_ADDRESS 0x3C8
32 #define VGA_DAC_DATA 0x3C9
33 
34 /*
35  * VGA enable. Poke this to have the PCI IO enabled device accept VGA IO.
36  */
37 unsigned char
39 {
40  return inb(VGA_ENABLE);
41 }
42 
43 void
44 vga_enable_write(unsigned char value)
45 {
47 }
48 
49 void
50 vga_enable_mask(unsigned char value, unsigned char mask)
51 {
52  unsigned char tmp;
53 
54  tmp = vga_enable_read();
55  tmp &= ~mask;
56  tmp |= (value & mask);
57  vga_enable_write(tmp);
58 }
59 
60 /*
61  * Miscellaneous register.
62  */
63 unsigned char
65 {
66  return inb(VGA_MISC_READ);
67 }
68 
69 void
70 vga_misc_write(unsigned char value)
71 {
73 }
74 
75 void
76 vga_misc_mask(unsigned char value, unsigned char mask)
77 {
78  unsigned char tmp;
79 
80  tmp = vga_misc_read();
81  tmp &= ~mask;
82  tmp |= (value & mask);
83  vga_misc_write(tmp);
84 }
85 
86 /*
87  * Sequencer registers.
88  */
89 unsigned char
90 vga_sr_read(unsigned char index)
91 {
92  outb(index, VGA_SR_INDEX);
93  return (inb(VGA_SR_VALUE));
94 }
95 
96 void
97 vga_sr_write(unsigned char index, unsigned char value)
98 {
99  outb(index, VGA_SR_INDEX);
101 }
102 
103 void
104 vga_sr_mask(unsigned char index, unsigned char value, unsigned char mask)
105 {
106  unsigned char tmp;
107 
108  tmp = vga_sr_read(index);
109  tmp &= ~mask;
110  tmp |= (value & mask);
111  vga_sr_write(index, tmp);
112 }
113 
114 /*
115  * CRTC registers.
116  */
117 unsigned char
118 vga_cr_read(unsigned char index)
119 {
120  outb(index, VGA_CR_INDEX);
121  return (inb(VGA_CR_VALUE));
122 }
123 
124 void
125 vga_cr_write(unsigned char index, unsigned char value)
126 {
127  outb(index, VGA_CR_INDEX);
129 }
130 
131 void
132 vga_cr_mask(unsigned char index, unsigned char value, unsigned char mask)
133 {
134  unsigned char tmp;
135 
136  tmp = vga_cr_read(index);
137  tmp &= ~mask;
138  tmp |= (value & mask);
139  vga_cr_write(index, tmp);
140 }
141 
142 /*
143  * Attribute registers.
144  */
145 unsigned char
146 vga_ar_read(unsigned char index)
147 {
148  unsigned char ret;
149 
150  (void) inb(VGA_STAT1);
151  outb(index, VGA_AR_INDEX);
152  ret = inb(VGA_AR_VALUE_READ);
153  (void) inb(VGA_STAT1);
154 
155  return ret;
156 }
157 
158 void
159 vga_ar_write(unsigned char index, unsigned char value)
160 {
161  (void) inb(VGA_STAT1);
162  outb(index, VGA_AR_INDEX);
164  (void) inb(VGA_STAT1);
165 }
166 
167 void
168 vga_ar_mask(unsigned char index, unsigned char value, unsigned char mask)
169 {
170  unsigned char tmp;
171 
172  tmp = vga_ar_read(index);
173  tmp &= ~mask;
174  tmp |= (value & mask);
175  vga_ar_write(index, tmp);
176 }
177 
178 /*
179  * Graphics registers.
180  */
181 unsigned char
182 vga_gr_read(unsigned char index)
183 {
184  outb(index, VGA_GR_INDEX);
185  return (inb(VGA_GR_VALUE));
186 }
187 
188 void
189 vga_gr_write(unsigned char index, unsigned char value)
190 {
191  outb(index, VGA_GR_INDEX);
193 }
194 
195 void
196 vga_gr_mask(unsigned char index, unsigned char value, unsigned char mask)
197 {
198  unsigned char tmp;
199 
200  tmp = vga_gr_read(index);
201  tmp &= ~mask;
202  tmp |= (value & mask);
203  vga_gr_write(index, tmp);
204 }
205 
206 /*
207  * DAC functions.
208  */
209 void
211 {
212  (void) inb(VGA_STAT1);
213  outb(0x00, VGA_AR_INDEX);
214  (void) inb(VGA_STAT1);
215 }
216 
217 void
219 {
220  (void) inb(VGA_STAT1);
221  outb(0x20, VGA_AR_INDEX);
222  (void) inb(VGA_STAT1);
223 }
224 
225 unsigned char
227 {
228  return inb(VGA_DAC_MASK);
229 }
230 
231 void
232 vga_dac_mask_write(unsigned char mask)
233 {
235 }
236 
237 void
239 {
241 }
242 
243 void
245 {
247 }
248 
249 unsigned char
251 {
252  return inb(VGA_DAC_DATA);
253 }
254 
255 void
256 vga_dac_data_write(unsigned char data)
257 {
258  outb(data, VGA_DAC_DATA);
259 }
pte_t value
Definition: mmu.c:91
u8 inb(u16 port)
void outb(u8 val, u16 port)
uint64_t address
Definition: fw_cfg_if.h:0
static const int mask[4]
Definition: gpio.c:308
void vga_dac_mask_write(unsigned char mask)
Definition: vga_io.c:232
void vga_gr_mask(unsigned char index, unsigned char value, unsigned char mask)
Definition: vga_io.c:196
void vga_ar_mask(unsigned char index, unsigned char value, unsigned char mask)
Definition: vga_io.c:168
unsigned char vga_dac_data_read(void)
Definition: vga_io.c:250
void vga_enable_mask(unsigned char value, unsigned char mask)
Definition: vga_io.c:50
#define VGA_DAC_MASK
Definition: vga_io.c:29
void vga_dac_data_write(unsigned char data)
Definition: vga_io.c:256
void vga_dac_read_address(unsigned char address)
Definition: vga_io.c:238
void vga_misc_write(unsigned char value)
Definition: vga_io.c:70
unsigned char vga_misc_read(void)
Definition: vga_io.c:64
void vga_palette_disable(void)
Definition: vga_io.c:218
#define VGA_SR_INDEX
Definition: vga_io.c:13
unsigned char vga_sr_read(unsigned char index)
Definition: vga_io.c:90
#define VGA_MISC_WRITE
Definition: vga_io.c:23
#define VGA_DAC_DATA
Definition: vga_io.c:32
void vga_gr_write(unsigned char index, unsigned char value)
Definition: vga_io.c:189
#define VGA_DAC_READ_ADDRESS
Definition: vga_io.c:30
#define VGA_MISC_READ
Definition: vga_io.c:24
void vga_cr_write(unsigned char index, unsigned char value)
Definition: vga_io.c:125
void vga_enable_write(unsigned char value)
Definition: vga_io.c:44
#define VGA_DAC_WRITE_ADDRESS
Definition: vga_io.c:31
unsigned char vga_cr_read(unsigned char index)
Definition: vga_io.c:118
void vga_cr_mask(unsigned char index, unsigned char value, unsigned char mask)
Definition: vga_io.c:132
#define VGA_CR_INDEX
Definition: vga_io.c:10
#define VGA_AR_VALUE_WRITE
Definition: vga_io.c:21
void vga_misc_mask(unsigned char value, unsigned char mask)
Definition: vga_io.c:76
unsigned char vga_dac_mask_read(void)
Definition: vga_io.c:226
#define VGA_GR_VALUE
Definition: vga_io.c:17
#define VGA_GR_INDEX
Definition: vga_io.c:16
void vga_ar_write(unsigned char index, unsigned char value)
Definition: vga_io.c:159
unsigned char vga_ar_read(unsigned char index)
Definition: vga_io.c:146
#define VGA_CR_VALUE
Definition: vga_io.c:11
#define VGA_AR_VALUE_READ
Definition: vga_io.c:20
#define VGA_SR_VALUE
Definition: vga_io.c:14
#define VGA_AR_INDEX
Definition: vga_io.c:19
void vga_palette_enable(void)
Definition: vga_io.c:210
#define VGA_ENABLE
Definition: vga_io.c:26
void vga_sr_mask(unsigned char index, unsigned char value, unsigned char mask)
Definition: vga_io.c:104
#define VGA_STAT1
Definition: vga_io.c:27
void vga_dac_write_address(unsigned char address)
Definition: vga_io.c:244
unsigned char vga_gr_read(unsigned char index)
Definition: vga_io.c:182
void vga_sr_write(unsigned char index, unsigned char value)
Definition: vga_io.c:97
unsigned char vga_enable_read(void)
Definition: vga_io.c:38
typedef void(X86APIP X86EMU_intrFuncs)(int num)