static int vcons_show_screen(void *v, void *cookie, int waitok, void (*cb)(void *, int, int), void *cb_arg) { struct vcons_data *vd = v; struct vcons_screen *scr; scr = cookie; if (scr == vd->active) return 0; vd->wanted = scr; vd->switch_cb = cb; vd->switch_cb_arg = cb_arg; #ifdef VCONS_SWITCH_ASYNC wakeup(&vd->start_drawing); return EAGAIN; #else if (cb) { callout_schedule(&vd->switch_callout, 0); return EAGAIN; } vcons_do_switch(vd); return 0; #endif }
static int vcons_show_screen(void *v, void *cookie, int waitok, void (*cb)(void *, int, int), void *cb_arg) { struct vcons_data *vd = v; struct vcons_screen *scr; scr = cookie; if (scr == vd->active) return 0; vd->wanted = scr; vd->switch_cb = cb; vd->switch_cb_arg = cb_arg; if (cb) { callout_schedule(&vd->switch_callout, 0); return EAGAIN; } vcons_do_switch(vd); return 0; }