Index: sys/dev/vt/hw/fb/vt_fb.c =================================================================== --- sys/dev/vt/hw/fb/vt_fb.c +++ sys/dev/vt/hw/fb/vt_fb.c @@ -121,6 +121,11 @@ vd->vd_driver->vd_blank(vd, TC_BLACK); break; + case FBIO_GETRGBOFFS: + memcpy((struct fb_rgboffs *)data, &info->fb_rgboffs, + sizeof(struct fb_rgboffs)); + break; + default: error = ENOIOCTL; break; Index: sys/dev/vt/hw/ofwfb/ofwfb.c =================================================================== --- sys/dev/vt/hw/ofwfb/ofwfb.c +++ sys/dev/vt/hw/ofwfb/ofwfb.c @@ -301,7 +301,7 @@ ofwfb_initialize(struct vt_device *vd) { struct ofwfb_softc *sc = vd->vd_softc; - int i, err; + int i, err, r, g, b; cell_t retval; sc->fb.fb_cmsize = 16; @@ -358,19 +358,21 @@ TUNABLE_INT_FETCH("hw.ofwfb.argb32_pixel", &sc->argb); if (sc->endian_flip) { if (sc->argb) - vt_generate_cons_palette(sc->fb.fb_cmap, - COLOR_FORMAT_RGB, 255, 8, 255, 16, 255, 24); + r = 8, g = 16, b = 24; else - vt_generate_cons_palette(sc->fb.fb_cmap, - COLOR_FORMAT_RGB, 255, 24, 255, 16, 255, 8); + r = 24, g = 16, b = 8; } else { if (sc->argb) - vt_generate_cons_palette(sc->fb.fb_cmap, - COLOR_FORMAT_RGB, 255, 16, 255, 8, 255, 0); + r = 16, g = 8, b = 0; else - vt_generate_cons_palette(sc->fb.fb_cmap, - COLOR_FORMAT_RGB, 255, 0, 255, 8, 255, 16); + r = 0, g = 8, b = 16; } + vt_generate_cons_palette(sc->fb.fb_cmap, + COLOR_FORMAT_RGB, 255, r, 255, g, 255, b); + + sc->fb.fb_rgboffs.red = r; + sc->fb.fb_rgboffs.green = g; + sc->fb.fb_rgboffs.blue = b; break; default: Index: sys/dev/vt/vt_core.c =================================================================== --- sys/dev/vt/vt_core.c +++ sys/dev/vt/vt_core.c @@ -2511,6 +2511,7 @@ case FBIO_GETDISPSTART: /* get display start address */ case FBIO_GETLINEWIDTH: /* get scan line width in bytes */ case FBIO_BLANK: /* blank display */ + case FBIO_GETRGBOFFS: /* get RGB offsets */ if (vd->vd_driver->vd_fb_ioctl) return (vd->vd_driver->vd_fb_ioctl(vd, cmd, data, td)); break; Index: sys/sys/fbio.h =================================================================== --- sys/sys/fbio.h +++ sys/sys/fbio.h @@ -110,6 +110,15 @@ #define FBTYPE_GET_BPP(_fb) ((_fb)->fb_bpp) #define FBTYPE_GET_BYTESPP(_fb) ((_fb)->fb_bpp / 8) +/* + * RGB offsets as returned by FBIO_GETRGBOFFS. + */ +struct fb_rgboffs { + int red; + int green; + int blue; +}; + #ifdef _KERNEL struct fb_info; @@ -148,6 +157,8 @@ int fb_stride; int fb_bpp; /* bits per pixel */ uint32_t fb_cmap[16]; + + struct fb_rgboffs fb_rgboffs; /* RGB offsets */ }; int fbd_list(void); @@ -619,4 +630,7 @@ #define FBIO_BLANK _IOW('F', 115, int) +/* get RGB offsets */ +#define FBIO_GETRGBOFFS _IOR('F', 116, struct fb_rgboffs) + #endif /* !_SYS_FBIO_H_ */