MCPcopy Create free account
hub / github.com/ading2210/linuxpdf / kbd_write_command

Function kbd_write_command

tinyemu/pckbd.c:184–255  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

182}
183
184static void kbd_write_command(void *opaque, uint32_t addr, uint32_t val,
185 int size_log2)
186{
187 KBDState *s = opaque;
188
189#if defined(DEBUG_KBD)
190 printf("kbd: write cmd=0x%02x\n", val);
191#endif
192 switch(val) {
193 case KBD_CCMD_READ_MODE:
194 kbd_queue(s, s->mode, 1);
195 break;
196 case KBD_CCMD_WRITE_MODE:
197 case KBD_CCMD_WRITE_OBUF:
198 case KBD_CCMD_WRITE_AUX_OBUF:
199 case KBD_CCMD_WRITE_MOUSE:
200 case KBD_CCMD_WRITE_OUTPORT:
201 s->write_cmd = val;
202 break;
203 case KBD_CCMD_MOUSE_DISABLE:
204 s->mode |= KBD_MODE_DISABLE_MOUSE;
205 break;
206 case KBD_CCMD_MOUSE_ENABLE:
207 s->mode &= ~KBD_MODE_DISABLE_MOUSE;
208 break;
209 case KBD_CCMD_TEST_MOUSE:
210 kbd_queue(s, 0x00, 0);
211 break;
212 case KBD_CCMD_SELF_TEST:
213 s->status |= KBD_STAT_SELFTEST;
214 kbd_queue(s, 0x55, 0);
215 break;
216 case KBD_CCMD_KBD_TEST:
217 kbd_queue(s, 0x00, 0);
218 break;
219 case KBD_CCMD_KBD_DISABLE:
220 s->mode |= KBD_MODE_DISABLE_KBD;
221 kbd_update_irq(s);
222 break;
223 case KBD_CCMD_KBD_ENABLE:
224 s->mode &= ~KBD_MODE_DISABLE_KBD;
225 kbd_update_irq(s);
226 break;
227 case KBD_CCMD_READ_INPORT:
228 kbd_queue(s, 0x00, 0);
229 break;
230 case KBD_CCMD_READ_OUTPORT:
231 /* XXX: check that */
232 val = 0x01 | (ioport_get_a20() << 1);
233 if (s->status & KBD_STAT_OBF)
234 val |= 0x10;
235 if (s->status & KBD_STAT_MOUSE_OBF)
236 val |= 0x20;
237 kbd_queue(s, val, 0);
238 break;
239 case KBD_CCMD_ENABLE_A20:
240 ioport_set_a20(1);
241 break;

Callers

nothing calls this directly

Calls 5

kbd_queueFunction · 0.85
kbd_update_irqFunction · 0.85
ioport_get_a20Function · 0.85
ioport_set_a20Function · 0.85

Tested by

no test coverage detected