add ioctl(WSDISPLAYIO_GET_FBINFO)
This commit is contained in:
parent
c510eba682
commit
719e71a847
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: wsconsio.h,v 1.106 2013/01/21 14:15:03 macallan Exp $ */
|
||||
/* $NetBSD: wsconsio.h,v 1.107 2013/01/31 10:57:30 macallan Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved.
|
||||
|
@ -603,4 +603,51 @@ struct wsdisplayio_edid_info {
|
|||
#define WSDISPLAYIO_SET_POLLING _IOW('W', 103, int)
|
||||
#define WSDISPLAYIOMGWEHITANDKILLEDASKUNK WSDISPLAYIO_SET_POLLING
|
||||
|
||||
/*
|
||||
* this is supposed to replace WSDISPLAYIO_GINFO, WSDISPLAYIO_GTYPE,
|
||||
* WSDISPLAYIO_LINEBYTES etc.
|
||||
*/
|
||||
|
||||
/* format type - colour index, 'true' colour etc. */
|
||||
#define WSFB_RGB 0
|
||||
#define WSFB_CI 1 /* colour indexed, see subtype */
|
||||
#define WSFB_GREYSCALE 2
|
||||
#define WSFB_YUV 3
|
||||
|
||||
struct wsdisplayio_fbinfo {
|
||||
uint64_t fbi_fbsize; /* framebuffer size in bytes */
|
||||
uint64_t fbi_fboffset; /* start of visible fb, in bytes */
|
||||
uint32_t fbi_width; /* in pixels */
|
||||
uint32_t fbi_height; /* in lines */
|
||||
uint32_t fbi_stride; /* in bytes */
|
||||
uint32_t fbi_bitsperpixel;
|
||||
uint32_t fbi_pixeltype; /* see above */
|
||||
union _fbi_subtype {
|
||||
struct _fbi_rgbmasks {
|
||||
/* offsets from the right, size in bits */
|
||||
uint32_t red_offset;
|
||||
uint32_t red_size;
|
||||
uint32_t green_offset;
|
||||
uint32_t green_size;
|
||||
uint32_t blue_offset;
|
||||
uint32_t blue_size;
|
||||
uint32_t alpha_offset;
|
||||
uint32_t alpha_size;
|
||||
} fbi_rgbmasks;
|
||||
struct _fbi_cmapinfo {
|
||||
uint32_t cmap_entries;
|
||||
} fbi_cmapinfo;
|
||||
/*
|
||||
* TODO:
|
||||
* add parameter blocks for greyscale, yuv etc.
|
||||
*/
|
||||
} fbi_subtype;
|
||||
uint32_t fbi_flags;
|
||||
};
|
||||
|
||||
/* fbi_flags */
|
||||
#define WSFB_VRAM_IS_RAM 1 /* hint for wsfb - don't shadow */
|
||||
|
||||
#define WSDISPLAYIO_GET_FBINFO _IOWR('W', 104, struct wsdisplayio_fbinfo)
|
||||
|
||||
#endif /* _DEV_WSCONS_WSCONSIO_H_ */
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/* $NetBSD: wsdisplay_util.c,v 1.1 2011/06/29 03:09:37 macallan Exp $ */
|
||||
/* $NetBSD: wsdisplay_util.c,v 1.2 2013/01/31 10:57:31 macallan Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 2009 Michael Lorenz
|
||||
* Copyright (c) 2011 Michael Lorenz
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
|
@ -27,6 +27,7 @@
|
|||
*/
|
||||
|
||||
/* some utility functions for use with wsdisplay */
|
||||
|
||||
#include <sys/param.h>
|
||||
#include <sys/stdint.h>
|
||||
#include <sys/systm.h>
|
||||
|
@ -35,6 +36,7 @@
|
|||
#include <dev/cons.h>
|
||||
|
||||
#include <dev/wscons/wsdisplayvar.h>
|
||||
#include <dev/rasops/rasops.h>
|
||||
#include <dev/wscons/wsconsio.h>
|
||||
|
||||
int
|
||||
|
@ -57,3 +59,31 @@ wsdisplayio_get_edid(device_t dev, struct wsdisplayio_edid_info *d)
|
|||
}
|
||||
return ENODEV;
|
||||
}
|
||||
|
||||
/* convenience function to fill in stuff from rasops_info */
|
||||
int
|
||||
wsdisplayio_get_fbinfo(struct rasops_info *ri, struct wsdisplayio_fbinfo *fbi)
|
||||
{
|
||||
fbi->fbi_width = ri->ri_width;
|
||||
fbi->fbi_height = ri->ri_height;
|
||||
fbi->fbi_stride = ri->ri_stride;
|
||||
fbi->fbi_bitsperpixel = ri->ri_depth;
|
||||
if (ri->ri_depth > 8) {
|
||||
fbi->fbi_pixeltype = WSFB_RGB;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.red_offset = ri->ri_rpos;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.red_size = ri->ri_rnum;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.green_offset = ri->ri_gpos;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.green_size = ri->ri_gnum;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.blue_offset = ri->ri_bpos;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.blue_size = ri->ri_bnum;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.alpha_offset = 0;
|
||||
fbi->fbi_subtype.fbi_rgbmasks.alpha_size = 0;
|
||||
} else {
|
||||
fbi->fbi_pixeltype = WSFB_CI;
|
||||
fbi->fbi_subtype.fbi_cmapinfo.cmap_entries = 1 << ri->ri_depth;
|
||||
}
|
||||
fbi->fbi_flags = 0;
|
||||
fbi->fbi_fbsize = ri->ri_stride * ri->ri_height;
|
||||
fbi->fbi_fboffset = 0;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: wsdisplayvar.h,v 1.49 2011/06/29 03:11:59 macallan Exp $ */
|
||||
/* $NetBSD: wsdisplayvar.h,v 1.50 2013/01/31 10:57:30 macallan Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1996, 1997 Christopher G. Demetriou. All rights reserved.
|
||||
|
@ -207,6 +207,10 @@ int wsdisplay_cfg_ioctl(struct wsdisplay_softc *, u_long, void *,
|
|||
struct wsdisplayio_edid_info;
|
||||
int wsdisplayio_get_edid(device_t, struct wsdisplayio_edid_info *);
|
||||
|
||||
struct wsdisplayio_fbinfo;
|
||||
struct rasops_info;
|
||||
int wsdisplayio_get_fbinfo(struct rasops_info *, struct wsdisplayio_fbinfo *);
|
||||
|
||||
#ifdef WSDISPLAY_SCROLLSUPPORT
|
||||
void wsdisplay_scroll(void *, int);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue