| 
     
      
      
      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.  |