From: Petr V. <VAN...@vc...> - 2001-11-28 19:29:47
|
[trimmed linux-kernel, as it has big traffic even without my stupid questions...] On 28 Nov 01 at 10:50, James Simmons wrote: > > 1) Universal cursor api. This allows the fbcon layer to not be required > hooks to program the cursor for every type of card avaliable. This > allows a seperation of fbdev and fbcon. > +struct fbcursor { > + __u16 set; /* what to set */ > + __u16 enable;/* cursor on/off */ > + struct fbcurpos pos;/* cursor position */ > + struct fbcurpos hot;/* cursor hot spot */ > + struct fb_cmap cmap;/* color map info */ > + struct fbcurpos size;/* cursor bit map size */ > + char *image;/* cursor image bits */ > + char *mask;/* cursor mask bits */ > +}; Any details about contents of image and mask? Or is it just monochromatic 1bpp image? There is hardware which can do 16color hardware cursors (+ transparent+inverse). And if it is 1bpp image, is it 0/1/transparent/invert (XGA), or transp./transp./0/1 (X)? Thanks, Petr Vandrovec van...@vc... |
From: Petr V. <VAN...@vc...> - 2001-11-29 17:59:08
|
On 29 Nov 01 at 9:35, James Simmons wrote: > +struct fbcursor { > + __u16 set; /* what to set */ > + __u16 enable;/* cursor on/off */ > + struct fbcurpos pos;/* cursor position */ > + struct fbcurpos hot;/* cursor hot spot */ > + struct fb_cmap cmap;/* color map info */ From what you wrote I assume that cmap.start must be 0 and cmap.len some length, and it must be always set, as otherwise it is impossible to guess image/mask depth from it. > + struct fbcurpos size;/* cursor bit map size */ > + char *image;/* cursor image bits */ > + char *mask;/* cursor mask bits */ And maybe it is better to go with Geert idea? Remove mask, and make image just really use cmap - if cmap entry is 100% transparent, it is like that bit(mask) == 1, and add one more field for inverted cmap entry. As no driver can use image/mask immediately anyway, there is no big problem. I hope that mask/image format is going to be specified somewhere more exactly - like whether each image/mask line consist of non-fractional number of bytes, what happens if cmap has 8 entries and other legal, but hard to implement, features... Petr Vandrovec van...@vc... |
From: James S. <jsi...@tr...> - 2001-11-29 18:08:22
|
> >From what you wrote I assume that cmap.start must be 0 and cmap.len > some length, and it must be always set, as otherwise it is impossible > to guess image/mask depth from it. [snip]... I figured the cursor stuff would be something to work out more. I shamefully stoled it from the sun fb implementation. I have another patch patch for fb.h which removes the cursor stuff until we work something out. Geert if I have your blessing on this I like to send it off to Linus. --- linux-2.5.0/include/linux/fb.h Wed Nov 28 16:43:10 2001 +++ linux/include/linux/fb.h Thu Nov 29 11:02:26 2001 @@ -241,6 +241,39 @@ __u32 reserved[4]; /* reserved for future compatibility */ }; +/* Internal HW accel */ +#define ROP_COPY 0 +#define ROP_XOR 1 + +struct fb_copyarea { + __u32 sx; /* screen-relative */ + __u32 sy; + __u32 width; + __u32 height; + __u32 dx; + __u32 dy; +}; + +struct fb_fillrect { + __u32 dx; /* screen-relative */ + __u32 dy; + __u32 width; + __u32 height; + __u32 color; + __u32 rop; +}; + +struct fb_image { + __u32 width; /* Size of image */ + __u32 height; + __u16 dx; /* Where to place image */ + __u16 dy; + __u32 fg_color; /* Only used when a mono bitmap */ + __u32 bg_color; + __u8 depth; /* Dpeth of the image */ + char *data; /* Pointer to image data */ +}; + #ifdef __KERNEL__ #if 1 /* to go away in 2.5.0 */ @@ -250,10 +283,10 @@ #endif #include <linux/fs.h> +#include <linux/poll.h> #include <linux/init.h> #include <linux/devfs_fs_kernel.h> - struct fb_info; struct fb_info_gen; struct vm_area_struct; @@ -283,9 +316,25 @@ /* set colormap */ int (*fb_set_cmap)(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info); - /* pan display (optional) */ - int (*fb_pan_display)(struct fb_var_screeninfo *var, int con, - struct fb_info *info); + /* checks var and creates a par based on it */ + int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info); + /* set the video mode according to par */ + int (*fb_set_par)(struct fb_info *info); + /* set color register */ + int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green, + unsigned blue, unsigned transp, struct fb_info *info); + /* blank display */ + int (*fb_blank)(int blank, struct fb_info *info); + /* pan display */ + int (*fb_pan_display)(struct fb_var_screeninfo *var, int con, struct fb_info *info); + /* draws a rectangle */ + void (*fb_fillrect)(struct fb_info *p, struct fb_fillrect *rect); + /* Copy data from area to another */ + void (*fb_copyarea)(struct fb_info *p, struct fb_copyarea *region); + /* Draws a image to the display */ + void (*fb_imageblit)(struct fb_info *p, struct fb_image *image); + /* perform polling on fb device */ + int (*fb_poll)(struct fb_info *info, poll_table *wait); /* perform fb specific ioctl (optional) */ int (*fb_ioctl)(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg, int con, struct fb_info *info); @@ -309,6 +358,7 @@ char *screen_base; /* Virtual address */ struct display *disp; /* initial display variable */ struct vc_data *display_fg; /* Console visible on this display */ + int currcon; /* Current VC. */ char fontname[40]; /* default font name */ devfs_handle_t devfs_handle; /* Devfs handle for new name */ devfs_handle_t devfs_lhandle; /* Devfs handle for compat. symlink */ @@ -387,6 +437,9 @@ struct fb_info *info); extern int fbgen_pan_display(struct fb_var_screeninfo *var, int con, struct fb_info *info); +extern void cfb_fillrect(struct fb_info *p, struct fb_fillrect *rect); +extern void cfb_copyarea(struct fb_info *p, struct fb_copyarea *region); +extern void cfb_imageblit(struct fb_info *p, struct fb_image *image); /* * Helper functions @@ -400,6 +453,7 @@ extern int fbgen_switch(int con, struct fb_info *info); extern void fbgen_blank(int blank, struct fb_info *info); +extern void fbgen2_set_disp(int con, struct fb_info *info); /* drivers/video/fbmem.c */ extern int register_framebuffer(struct fb_info *fb_info); |
From: Geert U. <ge...@li...> - 2001-11-30 08:45:53
|
On Thu, 29 Nov 2001, James Simmons wrote: > > >From what you wrote I assume that cmap.start must be 0 and cmap.len > > some length, and it must be always set, as otherwise it is impossible > > to guess image/mask depth from it. > > [snip]... > > I figured the cursor stuff would be something to work out more. I > shamefully stoled it from the sun fb implementation. I have another patch > patch for fb.h which removes the cursor stuff until we work something out. > > > Geert if I have your blessing on this I like to send it off to Linus. You have ;-) Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li... In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds |
From: James S. <jsi...@tr...> - 2001-11-28 19:55:27
|
> > +struct fbcursor { > > + __u16 set; /* what to set */ > > + __u16 enable;/* cursor on/off */ > > + struct fbcurpos pos;/* cursor position */ > > + struct fbcurpos hot;/* cursor hot spot */ > > + struct fb_cmap cmap;/* color map info */ > > + struct fbcurpos size;/* cursor bit map size */ > > + char *image;/* cursor image bits */ > > + char *mask;/* cursor mask bits */ > > +}; > > Any details about contents of image and mask? Depends on what color depth you use for the cursor. > Or is it just monochromatic > 1bpp image? There is hardware which can do 16color hardware cursors (+ > transparent+inverse). I know. That is why we have a colormap for the cursor. This allows for much more for the cursor than a mono color map. > And if it is 1bpp image, is it 0/1/transparent/invert (XGA), or > transp./transp./0/1 (X)? Should be able to support that as well. I haven't added any flags for that. Hm. |
From: Geert U. <ge...@li...> - 2001-11-29 07:52:20
|
On Wed, 28 Nov 2001, James Simmons wrote: > > > +struct fbcursor { > > > + __u16 set; /* what to set */ > > > + __u16 enable;/* cursor on/off */ > > > + struct fbcurpos pos;/* cursor position */ > > > + struct fbcurpos hot;/* cursor hot spot */ > > > + struct fb_cmap cmap;/* color map info */ > > > + struct fbcurpos size;/* cursor bit map size */ > > > + char *image;/* cursor image bits */ > > > + char *mask;/* cursor mask bits */ > > > +}; > > > > Any details about contents of image and mask? > > Depends on what color depth you use for the cursor. > > > Or is it just monochromatic > > 1bpp image? There is hardware which can do 16color hardware cursors (+ > > transparent+inverse). > > I know. That is why we have a colormap for the cursor. This allows for > much more for the cursor than a mono color map. > > > And if it is 1bpp image, is it 0/1/transparent/invert (XGA), or > > transp./transp./0/1 (X)? > > Should be able to support that as well. I haven't added any flags for > that. Hm. Just add a field to contain the color index for an inverting color (e.g. 3 for XGA) or -1 if not supported. For transparency, use the alpha in the cmap. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- ge...@li... In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds |
From: James S. <jsi...@tr...> - 2001-11-29 18:24:44
|
> > Should be able to support that as well. I haven't added any flags for > > that. Hm. > > Just add a field to contain the color index for an inverting color (e.g. 3 for > XGA) or -1 if not supported. > > For transparency, use the alpha in the cmap. Okay. I guess we have to work the cursor stuff out more. |