static int vcons_ioctl(void *v, void *vs, u_long cmd, void *data, int flag, struct lwp *l) { struct vcons_data *vd = v; int error; switch (cmd) { case WSDISPLAYIO_GETWSCHAR: error = vcons_getwschar((struct vcons_screen *)vs, (struct wsdisplay_char *)data); break; case WSDISPLAYIO_PUTWSCHAR: error = vcons_putwschar((struct vcons_screen *)vs, (struct wsdisplay_char *)data); break; default: if (vd->ioctl != NULL) error = (*vd->ioctl)(v, vs, cmd, data, flag, l); else error = EPASSTHROUGH; } return error; }
static int vcons_ioctl(void *v, void *vs, u_long cmd, void *data, int flag, struct lwp *l) { struct vcons_data *vd = v; int error = 0; switch (cmd) { case WSDISPLAYIO_GETWSCHAR: error = vcons_getwschar((struct vcons_screen *)vs, (struct wsdisplay_char *)data); break; case WSDISPLAYIO_PUTWSCHAR: error = vcons_putwschar((struct vcons_screen *)vs, (struct wsdisplay_char *)data); break; case WSDISPLAYIO_SET_POLLING: { int poll = *(int *)data; /* first call the driver's ioctl handler */ if (vd->ioctl != NULL) error = (*vd->ioctl)(v, vs, cmd, data, flag, l); if (poll) { vcons_enable_polling(vd); vcons_hard_switch(LIST_FIRST(&vd->screens)); } else vcons_disable_polling(vd); } break; default: if (vd->ioctl != NULL) error = (*vd->ioctl)(v, vs, cmd, data, flag, l); else error = EPASSTHROUGH; } return error; }