int topcat_ioctl(void *v, u_long cmd, caddr_t data, int flags, struct proc *p) { struct diofb *fb = v; struct wsdisplay_fbinfo *wdf; u_int i; switch (cmd) { case WSDISPLAYIO_GTYPE: *(u_int *)data = WSDISPLAY_TYPE_TOPCAT; break; case WSDISPLAYIO_SMODE: fb->mapmode = *(u_int *)data; if (fb->mapmode == WSDISPLAYIO_MODE_EMUL) { topcat_restore(fb); for (i = 0; i <= fb->planemask; i++) topcat_setcolor(fb, i); } break; case WSDISPLAYIO_GINFO: wdf = (void *)data; wdf->width = fb->ri.ri_width; wdf->height = fb->ri.ri_height; wdf->depth = fb->ri.ri_depth; wdf->cmsize = 1 << fb->planes; break; case WSDISPLAYIO_LINEBYTES: *(u_int *)data = fb->ri.ri_stride; break; case WSDISPLAYIO_GETCMAP: return (diofb_getcmap(fb, (struct wsdisplay_cmap *)data)); case WSDISPLAYIO_PUTCMAP: return (topcat_setcmap(fb, (struct wsdisplay_cmap *)data)); case WSDISPLAYIO_GVIDEO: case WSDISPLAYIO_SVIDEO: break; default: return (-1); } return (0); }
int gbox_ioctl(void *v, void *vs, u_long cmd, void *data, int flags, struct lwp *l) { struct diofb *fb = v; struct wsdisplay_fbinfo *wdf; u_int i; switch (cmd) { case WSDISPLAYIO_GTYPE: *(u_int *)data = WSDISPLAY_TYPE_GBOX; return 0; case WSDISPLAYIO_SMODE: fb->mapmode = *(u_int *)data; if (fb->mapmode == WSDISPLAYIO_MODE_EMUL) { gbox_restore(fb); for (i = 0; i <= fb->planemask; i++) gbox_setcolor(fb, i); } return 0; case WSDISPLAYIO_GINFO: wdf = (void *)data; wdf->width = fb->ri.ri_width; wdf->height = fb->ri.ri_height; wdf->depth = fb->ri.ri_depth; wdf->cmsize = 1 << fb->planes; return 0; case WSDISPLAYIO_LINEBYTES: *(u_int *)data = fb->ri.ri_stride; return 0; case WSDISPLAYIO_GETCMAP: return diofb_getcmap(fb, (struct wsdisplay_cmap *)data); case WSDISPLAYIO_PUTCMAP: return gbox_setcmap(fb, (struct wsdisplay_cmap *)data); case WSDISPLAYIO_GVIDEO: case WSDISPLAYIO_SVIDEO: return EPASSTHROUGH; } return EPASSTHROUGH; }