void *ps2_mouse_init(void (*update_irq)(void *, int), void *update_arg) { PS2MouseState *s = (PS2MouseState *)qemu_mallocz(sizeof(PS2MouseState)); s->common.update_irq = update_irq; s->common.update_arg = update_arg; ps2_reset(&s->common); register_savevm("ps2mouse", 0, 2, ps2_mouse_save, ps2_mouse_load, s); qemu_add_mouse_event_handler(ps2_mouse_event, s, 0, "QEMU PS/2 Mouse"); qemu_register_reset(ps2_reset, &s->common); return s; }
void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg) { PS2KbdState *s = (PS2KbdState *)qemu_mallocz(sizeof(PS2KbdState)); s->common.update_irq = update_irq; s->common.update_arg = update_arg; ps2_reset(&s->common); register_savevm("ps2kbd", 0, 2, ps2_kbd_save, ps2_kbd_load, s); qemu_add_kbd_event_handler(ps2_put_keycode, s); qemu_register_reset(ps2_reset, &s->common); return s; }
void init_ps2_int() { // Enregistrement des interrupt du core dans le controlleur d'interrupt XIntc_RegisterHandler(XPAR_INTC_0_BASEADDR, XPAR_XPS_INTC_0_PS2CORE_0_PS2_INTERRUPT_INTR, (XInterruptHandler)ps2_event_handler, (void*)0); // Initialisation des interrupt dans le core. ps2_reset((void*)XPAR_PS2CORE_0_BASEADDR); ps2_set_enable_interrupts((void*) XPAR_PS2CORE_0_BASEADDR, 1); ps2_set_enable_rx_full_intr((void*) XPAR_PS2CORE_0_BASEADDR, 1); }
void *ps2_kbd_init(void (*update_irq)(void *, int), void *update_arg) { PS2KbdState *s = (PS2KbdState *)qemu_mallocz(sizeof(PS2KbdState)); s->common.update_irq = update_irq; s->common.update_arg = update_arg; s->scancode_set = 2; ps2_reset(&s->common); register_savevm("ps2kbd", 0, 3, ps2_kbd_save, ps2_kbd_load, s); gui_register_dev_key_callback(ps2_put_keycode, s); qemu_register_reset(ps2_reset, &s->common); return s; }
Hint ps2_create( ps2_t *ps2, ps2_config_t *config ) { ps2->reset = (Hubyte*)(config->base + PS2_RESET); ps2->status = (Hubyte*)(config->base + PS2_STATUS); ps2->send = (Hubyte*)(config->base + PS2_SEND); ps2->recv = (Hubyte*)(config->base + PS2_RECV); ps2->intr = (Hubyte*)(config->base + PS2_INTERRUPTS); ps2->clear = (Hubyte*)(config->base + PS2_CLEAR); ps2->enable = (Hubyte*)(config->base + PS2_ENABLE); ps2->disable = (Hubyte*)(config->base + PS2_DISABLE); ps2_reset( ps2 ); return SUCCESS; }