1*49148020SSam Ravnborg #ifndef __LINUX_FBIO_H 2*49148020SSam Ravnborg #define __LINUX_FBIO_H 3*49148020SSam Ravnborg 4*49148020SSam Ravnborg #include <linux/compiler.h> 5*49148020SSam Ravnborg #include <linux/types.h> 6*49148020SSam Ravnborg 7*49148020SSam Ravnborg /* Constants used for fbio SunOS compatibility */ 8*49148020SSam Ravnborg /* (C) 1996 Miguel de Icaza */ 9*49148020SSam Ravnborg 10*49148020SSam Ravnborg /* Frame buffer types */ 11*49148020SSam Ravnborg #define FBTYPE_NOTYPE -1 12*49148020SSam Ravnborg #define FBTYPE_SUN1BW 0 /* mono */ 13*49148020SSam Ravnborg #define FBTYPE_SUN1COLOR 1 14*49148020SSam Ravnborg #define FBTYPE_SUN2BW 2 15*49148020SSam Ravnborg #define FBTYPE_SUN2COLOR 3 16*49148020SSam Ravnborg #define FBTYPE_SUN2GP 4 17*49148020SSam Ravnborg #define FBTYPE_SUN5COLOR 5 18*49148020SSam Ravnborg #define FBTYPE_SUN3COLOR 6 19*49148020SSam Ravnborg #define FBTYPE_MEMCOLOR 7 20*49148020SSam Ravnborg #define FBTYPE_SUN4COLOR 8 21*49148020SSam Ravnborg 22*49148020SSam Ravnborg #define FBTYPE_NOTSUN1 9 23*49148020SSam Ravnborg #define FBTYPE_NOTSUN2 10 24*49148020SSam Ravnborg #define FBTYPE_NOTSUN3 11 25*49148020SSam Ravnborg 26*49148020SSam Ravnborg #define FBTYPE_SUNFAST_COLOR 12 /* cg6 */ 27*49148020SSam Ravnborg #define FBTYPE_SUNROP_COLOR 13 28*49148020SSam Ravnborg #define FBTYPE_SUNFB_VIDEO 14 29*49148020SSam Ravnborg #define FBTYPE_SUNGIFB 15 30*49148020SSam Ravnborg #define FBTYPE_SUNGPLAS 16 31*49148020SSam Ravnborg #define FBTYPE_SUNGP3 17 32*49148020SSam Ravnborg #define FBTYPE_SUNGT 18 33*49148020SSam Ravnborg #define FBTYPE_SUNLEO 19 /* zx Leo card */ 34*49148020SSam Ravnborg #define FBTYPE_MDICOLOR 20 /* cg14 */ 35*49148020SSam Ravnborg #define FBTYPE_TCXCOLOR 21 /* SUNW,tcx card */ 36*49148020SSam Ravnborg 37*49148020SSam Ravnborg #define FBTYPE_LASTPLUSONE 21 /* This is not last + 1 in fact... */ 38*49148020SSam Ravnborg 39*49148020SSam Ravnborg /* Does not seem to be listed in the Sun file either */ 40*49148020SSam Ravnborg #define FBTYPE_CREATOR 22 41*49148020SSam Ravnborg #define FBTYPE_PCI_IGA1682 23 42*49148020SSam Ravnborg #define FBTYPE_P9100COLOR 24 43*49148020SSam Ravnborg 44*49148020SSam Ravnborg #define FBTYPE_PCI_GENERIC 1000 45*49148020SSam Ravnborg #define FBTYPE_PCI_MACH64 1001 46*49148020SSam Ravnborg 47*49148020SSam Ravnborg /* fbio ioctls */ 48*49148020SSam Ravnborg /* Returned by FBIOGTYPE */ 49*49148020SSam Ravnborg struct fbtype { 50*49148020SSam Ravnborg int fb_type; /* fb type, see above */ 51*49148020SSam Ravnborg int fb_height; /* pixels */ 52*49148020SSam Ravnborg int fb_width; /* pixels */ 53*49148020SSam Ravnborg int fb_depth; 54*49148020SSam Ravnborg int fb_cmsize; /* color map entries */ 55*49148020SSam Ravnborg int fb_size; /* fb size in bytes */ 56*49148020SSam Ravnborg }; 57*49148020SSam Ravnborg #define FBIOGTYPE _IOR('F', 0, struct fbtype) 58*49148020SSam Ravnborg 59*49148020SSam Ravnborg struct fbcmap { 60*49148020SSam Ravnborg int index; /* first element (0 origin) */ 61*49148020SSam Ravnborg int count; 62*49148020SSam Ravnborg unsigned char __user *red; 63*49148020SSam Ravnborg unsigned char __user *green; 64*49148020SSam Ravnborg unsigned char __user *blue; 65*49148020SSam Ravnborg }; 66*49148020SSam Ravnborg 67*49148020SSam Ravnborg #ifdef __KERNEL__ 68*49148020SSam Ravnborg #define FBIOPUTCMAP_SPARC _IOW('F', 3, struct fbcmap) 69*49148020SSam Ravnborg #define FBIOGETCMAP_SPARC _IOW('F', 4, struct fbcmap) 70*49148020SSam Ravnborg #else 71*49148020SSam Ravnborg #define FBIOPUTCMAP _IOW('F', 3, struct fbcmap) 72*49148020SSam Ravnborg #define FBIOGETCMAP _IOW('F', 4, struct fbcmap) 73*49148020SSam Ravnborg #endif 74*49148020SSam Ravnborg 75*49148020SSam Ravnborg /* # of device specific values */ 76*49148020SSam Ravnborg #define FB_ATTR_NDEVSPECIFIC 8 77*49148020SSam Ravnborg /* # of possible emulations */ 78*49148020SSam Ravnborg #define FB_ATTR_NEMUTYPES 4 79*49148020SSam Ravnborg 80*49148020SSam Ravnborg struct fbsattr { 81*49148020SSam Ravnborg int flags; 82*49148020SSam Ravnborg int emu_type; /* -1 if none */ 83*49148020SSam Ravnborg int dev_specific[FB_ATTR_NDEVSPECIFIC]; 84*49148020SSam Ravnborg }; 85*49148020SSam Ravnborg 86*49148020SSam Ravnborg struct fbgattr { 87*49148020SSam Ravnborg int real_type; /* real frame buffer type */ 88*49148020SSam Ravnborg int owner; /* unknown */ 89*49148020SSam Ravnborg struct fbtype fbtype; /* real frame buffer fbtype */ 90*49148020SSam Ravnborg struct fbsattr sattr; 91*49148020SSam Ravnborg int emu_types[FB_ATTR_NEMUTYPES]; /* supported emulations */ 92*49148020SSam Ravnborg }; 93*49148020SSam Ravnborg #define FBIOSATTR _IOW('F', 5, struct fbgattr) /* Unsupported: */ 94*49148020SSam Ravnborg #define FBIOGATTR _IOR('F', 6, struct fbgattr) /* supported */ 95*49148020SSam Ravnborg 96*49148020SSam Ravnborg #define FBIOSVIDEO _IOW('F', 7, int) 97*49148020SSam Ravnborg #define FBIOGVIDEO _IOR('F', 8, int) 98*49148020SSam Ravnborg 99*49148020SSam Ravnborg struct fbcursor { 100*49148020SSam Ravnborg short set; /* what to set, choose from the list above */ 101*49148020SSam Ravnborg short enable; /* cursor on/off */ 102*49148020SSam Ravnborg struct fbcurpos pos; /* cursor position */ 103*49148020SSam Ravnborg struct fbcurpos hot; /* cursor hot spot */ 104*49148020SSam Ravnborg struct fbcmap cmap; /* color map info */ 105*49148020SSam Ravnborg struct fbcurpos size; /* cursor bit map size */ 106*49148020SSam Ravnborg char __user *image; /* cursor image bits */ 107*49148020SSam Ravnborg char __user *mask; /* cursor mask bits */ 108*49148020SSam Ravnborg }; 109*49148020SSam Ravnborg 110*49148020SSam Ravnborg /* set/get cursor attributes/shape */ 111*49148020SSam Ravnborg #define FBIOSCURSOR _IOW('F', 24, struct fbcursor) 112*49148020SSam Ravnborg #define FBIOGCURSOR _IOWR('F', 25, struct fbcursor) 113*49148020SSam Ravnborg 114*49148020SSam Ravnborg /* set/get cursor position */ 115*49148020SSam Ravnborg #define FBIOSCURPOS _IOW('F', 26, struct fbcurpos) 116*49148020SSam Ravnborg #define FBIOGCURPOS _IOW('F', 27, struct fbcurpos) 117*49148020SSam Ravnborg 118*49148020SSam Ravnborg /* get max cursor size */ 119*49148020SSam Ravnborg #define FBIOGCURMAX _IOR('F', 28, struct fbcurpos) 120*49148020SSam Ravnborg 121*49148020SSam Ravnborg /* wid manipulation */ 122*49148020SSam Ravnborg struct fb_wid_alloc { 123*49148020SSam Ravnborg #define FB_WID_SHARED_8 0 124*49148020SSam Ravnborg #define FB_WID_SHARED_24 1 125*49148020SSam Ravnborg #define FB_WID_DBL_8 2 126*49148020SSam Ravnborg #define FB_WID_DBL_24 3 127*49148020SSam Ravnborg __u32 wa_type; 128*49148020SSam Ravnborg __s32 wa_index; /* Set on return */ 129*49148020SSam Ravnborg __u32 wa_count; 130*49148020SSam Ravnborg }; 131*49148020SSam Ravnborg struct fb_wid_item { 132*49148020SSam Ravnborg __u32 wi_type; 133*49148020SSam Ravnborg __s32 wi_index; 134*49148020SSam Ravnborg __u32 wi_attrs; 135*49148020SSam Ravnborg __u32 wi_values[32]; 136*49148020SSam Ravnborg }; 137*49148020SSam Ravnborg struct fb_wid_list { 138*49148020SSam Ravnborg __u32 wl_flags; 139*49148020SSam Ravnborg __u32 wl_count; 140*49148020SSam Ravnborg struct fb_wid_item *wl_list; 141*49148020SSam Ravnborg }; 142*49148020SSam Ravnborg 143*49148020SSam Ravnborg #define FBIO_WID_ALLOC _IOWR('F', 30, struct fb_wid_alloc) 144*49148020SSam Ravnborg #define FBIO_WID_FREE _IOW('F', 31, struct fb_wid_alloc) 145*49148020SSam Ravnborg #define FBIO_WID_PUT _IOW('F', 32, struct fb_wid_list) 146*49148020SSam Ravnborg #define FBIO_WID_GET _IOWR('F', 33, struct fb_wid_list) 147*49148020SSam Ravnborg 148*49148020SSam Ravnborg /* Creator ioctls */ 149*49148020SSam Ravnborg #define FFB_IOCTL ('F'<<8) 150*49148020SSam Ravnborg #define FFB_SYS_INFO (FFB_IOCTL|80) 151*49148020SSam Ravnborg #define FFB_CLUTREAD (FFB_IOCTL|81) 152*49148020SSam Ravnborg #define FFB_CLUTPOST (FFB_IOCTL|82) 153*49148020SSam Ravnborg #define FFB_SETDIAGMODE (FFB_IOCTL|83) 154*49148020SSam Ravnborg #define FFB_GETMONITORID (FFB_IOCTL|84) 155*49148020SSam Ravnborg #define FFB_GETVIDEOMODE (FFB_IOCTL|85) 156*49148020SSam Ravnborg #define FFB_SETVIDEOMODE (FFB_IOCTL|86) 157*49148020SSam Ravnborg #define FFB_SETSERVER (FFB_IOCTL|87) 158*49148020SSam Ravnborg #define FFB_SETOVCTL (FFB_IOCTL|88) 159*49148020SSam Ravnborg #define FFB_GETOVCTL (FFB_IOCTL|89) 160*49148020SSam Ravnborg #define FFB_GETSAXNUM (FFB_IOCTL|90) 161*49148020SSam Ravnborg #define FFB_FBDEBUG (FFB_IOCTL|91) 162*49148020SSam Ravnborg 163*49148020SSam Ravnborg /* Cg14 ioctls */ 164*49148020SSam Ravnborg #define MDI_IOCTL ('M'<<8) 165*49148020SSam Ravnborg #define MDI_RESET (MDI_IOCTL|1) 166*49148020SSam Ravnborg #define MDI_GET_CFGINFO (MDI_IOCTL|2) 167*49148020SSam Ravnborg #define MDI_SET_PIXELMODE (MDI_IOCTL|3) 168*49148020SSam Ravnborg # define MDI_32_PIX 32 169*49148020SSam Ravnborg # define MDI_16_PIX 16 170*49148020SSam Ravnborg # define MDI_8_PIX 8 171*49148020SSam Ravnborg 172*49148020SSam Ravnborg struct mdi_cfginfo { 173*49148020SSam Ravnborg int mdi_ncluts; /* Number of implemented CLUTs in this MDI */ 174*49148020SSam Ravnborg int mdi_type; /* FBTYPE name */ 175*49148020SSam Ravnborg int mdi_height; /* height */ 176*49148020SSam Ravnborg int mdi_width; /* widht */ 177*49148020SSam Ravnborg int mdi_size; /* available ram */ 178*49148020SSam Ravnborg int mdi_mode; /* 8bpp, 16bpp or 32bpp */ 179*49148020SSam Ravnborg int mdi_pixfreq; /* pixel clock (from PROM) */ 180*49148020SSam Ravnborg }; 181*49148020SSam Ravnborg 182*49148020SSam Ravnborg /* SparcLinux specific ioctl for the MDI, should be replaced for 183*49148020SSam Ravnborg * the SET_XLUT/SET_CLUTn ioctls instead 184*49148020SSam Ravnborg */ 185*49148020SSam Ravnborg #define MDI_CLEAR_XLUT (MDI_IOCTL|9) 186*49148020SSam Ravnborg 187*49148020SSam Ravnborg /* leo & ffb ioctls */ 188*49148020SSam Ravnborg struct fb_clut_alloc { 189*49148020SSam Ravnborg __u32 clutid; /* Set on return */ 190*49148020SSam Ravnborg __u32 flag; 191*49148020SSam Ravnborg __u32 index; 192*49148020SSam Ravnborg }; 193*49148020SSam Ravnborg 194*49148020SSam Ravnborg struct fb_clut { 195*49148020SSam Ravnborg #define FB_CLUT_WAIT 0x00000001 /* Not yet implemented */ 196*49148020SSam Ravnborg __u32 flag; 197*49148020SSam Ravnborg __u32 clutid; 198*49148020SSam Ravnborg __u32 offset; 199*49148020SSam Ravnborg __u32 count; 200*49148020SSam Ravnborg char * red; 201*49148020SSam Ravnborg char * green; 202*49148020SSam Ravnborg char * blue; 203*49148020SSam Ravnborg }; 204*49148020SSam Ravnborg 205*49148020SSam Ravnborg struct fb_clut32 { 206*49148020SSam Ravnborg __u32 flag; 207*49148020SSam Ravnborg __u32 clutid; 208*49148020SSam Ravnborg __u32 offset; 209*49148020SSam Ravnborg __u32 count; 210*49148020SSam Ravnborg __u32 red; 211*49148020SSam Ravnborg __u32 green; 212*49148020SSam Ravnborg __u32 blue; 213*49148020SSam Ravnborg }; 214*49148020SSam Ravnborg 215*49148020SSam Ravnborg #define LEO_CLUTALLOC _IOWR('L', 53, struct fb_clut_alloc) 216*49148020SSam Ravnborg #define LEO_CLUTFREE _IOW('L', 54, struct fb_clut_alloc) 217*49148020SSam Ravnborg #define LEO_CLUTREAD _IOW('L', 55, struct fb_clut) 218*49148020SSam Ravnborg #define LEO_CLUTPOST _IOW('L', 56, struct fb_clut) 219*49148020SSam Ravnborg #define LEO_SETGAMMA _IOW('L', 68, int) /* Not yet implemented */ 220*49148020SSam Ravnborg #define LEO_GETGAMMA _IOR('L', 69, int) /* Not yet implemented */ 221*49148020SSam Ravnborg 222*49148020SSam Ravnborg #ifdef __KERNEL__ 223*49148020SSam Ravnborg /* Addresses on the fd of a cgsix that are mappable */ 224*49148020SSam Ravnborg #define CG6_FBC 0x70000000 225*49148020SSam Ravnborg #define CG6_TEC 0x70001000 226*49148020SSam Ravnborg #define CG6_BTREGS 0x70002000 227*49148020SSam Ravnborg #define CG6_FHC 0x70004000 228*49148020SSam Ravnborg #define CG6_THC 0x70005000 229*49148020SSam Ravnborg #define CG6_ROM 0x70006000 230*49148020SSam Ravnborg #define CG6_RAM 0x70016000 231*49148020SSam Ravnborg #define CG6_DHC 0x80000000 232*49148020SSam Ravnborg 233*49148020SSam Ravnborg #define CG3_MMAP_OFFSET 0x4000000 234*49148020SSam Ravnborg 235*49148020SSam Ravnborg /* Addresses on the fd of a tcx that are mappable */ 236*49148020SSam Ravnborg #define TCX_RAM8BIT 0x00000000 237*49148020SSam Ravnborg #define TCX_RAM24BIT 0x01000000 238*49148020SSam Ravnborg #define TCX_UNK3 0x10000000 239*49148020SSam Ravnborg #define TCX_UNK4 0x20000000 240*49148020SSam Ravnborg #define TCX_CONTROLPLANE 0x28000000 241*49148020SSam Ravnborg #define TCX_UNK6 0x30000000 242*49148020SSam Ravnborg #define TCX_UNK7 0x38000000 243*49148020SSam Ravnborg #define TCX_TEC 0x70000000 244*49148020SSam Ravnborg #define TCX_BTREGS 0x70002000 245*49148020SSam Ravnborg #define TCX_THC 0x70004000 246*49148020SSam Ravnborg #define TCX_DHC 0x70008000 247*49148020SSam Ravnborg #define TCX_ALT 0x7000a000 248*49148020SSam Ravnborg #define TCX_SYNC 0x7000e000 249*49148020SSam Ravnborg #define TCX_UNK2 0x70010000 250*49148020SSam Ravnborg 251*49148020SSam Ravnborg /* CG14 definitions */ 252*49148020SSam Ravnborg 253*49148020SSam Ravnborg /* Offsets into the OBIO space: */ 254*49148020SSam Ravnborg #define CG14_REGS 0 /* registers */ 255*49148020SSam Ravnborg #define CG14_CURSORREGS 0x1000 /* cursor registers */ 256*49148020SSam Ravnborg #define CG14_DACREGS 0x2000 /* DAC registers */ 257*49148020SSam Ravnborg #define CG14_XLUT 0x3000 /* X Look Up Table -- ??? */ 258*49148020SSam Ravnborg #define CG14_CLUT1 0x4000 /* Color Look Up Table */ 259*49148020SSam Ravnborg #define CG14_CLUT2 0x5000 /* Color Look Up Table */ 260*49148020SSam Ravnborg #define CG14_CLUT3 0x6000 /* Color Look Up Table */ 261*49148020SSam Ravnborg #define CG14_AUTO 0xf000 262*49148020SSam Ravnborg 263*49148020SSam Ravnborg #endif /* KERNEL */ 264*49148020SSam Ravnborg 265*49148020SSam Ravnborg /* These are exported to userland for applications to use */ 266*49148020SSam Ravnborg /* Mappable offsets for the cg14: control registers */ 267*49148020SSam Ravnborg #define MDI_DIRECT_MAP 0x10000000 268*49148020SSam Ravnborg #define MDI_CTLREG_MAP 0x20000000 269*49148020SSam Ravnborg #define MDI_CURSOR_MAP 0x30000000 270*49148020SSam Ravnborg #define MDI_SHDW_VRT_MAP 0x40000000 271*49148020SSam Ravnborg 272*49148020SSam Ravnborg /* Mappable offsets for the cg14: frame buffer resolutions */ 273*49148020SSam Ravnborg /* 32 bits */ 274*49148020SSam Ravnborg #define MDI_CHUNKY_XBGR_MAP 0x50000000 275*49148020SSam Ravnborg #define MDI_CHUNKY_BGR_MAP 0x60000000 276*49148020SSam Ravnborg 277*49148020SSam Ravnborg /* 16 bits */ 278*49148020SSam Ravnborg #define MDI_PLANAR_X16_MAP 0x70000000 279*49148020SSam Ravnborg #define MDI_PLANAR_C16_MAP 0x80000000 280*49148020SSam Ravnborg 281*49148020SSam Ravnborg /* 8 bit is done as CG3 MMAP offset */ 282*49148020SSam Ravnborg /* 32 bits, planar */ 283*49148020SSam Ravnborg #define MDI_PLANAR_X32_MAP 0x90000000 284*49148020SSam Ravnborg #define MDI_PLANAR_B32_MAP 0xa0000000 285*49148020SSam Ravnborg #define MDI_PLANAR_G32_MAP 0xb0000000 286*49148020SSam Ravnborg #define MDI_PLANAR_R32_MAP 0xc0000000 287*49148020SSam Ravnborg 288*49148020SSam Ravnborg /* Mappable offsets on leo */ 289*49148020SSam Ravnborg #define LEO_SS0_MAP 0x00000000 290*49148020SSam Ravnborg #define LEO_LC_SS0_USR_MAP 0x00800000 291*49148020SSam Ravnborg #define LEO_LD_SS0_MAP 0x00801000 292*49148020SSam Ravnborg #define LEO_LX_CURSOR_MAP 0x00802000 293*49148020SSam Ravnborg #define LEO_SS1_MAP 0x00803000 294*49148020SSam Ravnborg #define LEO_LC_SS1_USR_MAP 0x01003000 295*49148020SSam Ravnborg #define LEO_LD_SS1_MAP 0x01004000 296*49148020SSam Ravnborg #define LEO_UNK_MAP 0x01005000 297*49148020SSam Ravnborg #define LEO_LX_KRN_MAP 0x01006000 298*49148020SSam Ravnborg #define LEO_LC_SS0_KRN_MAP 0x01007000 299*49148020SSam Ravnborg #define LEO_LC_SS1_KRN_MAP 0x01008000 300*49148020SSam Ravnborg #define LEO_LD_GBL_MAP 0x01009000 301*49148020SSam Ravnborg #define LEO_UNK2_MAP 0x0100a000 302*49148020SSam Ravnborg 303*49148020SSam Ravnborg #ifdef __KERNEL__ 304*49148020SSam Ravnborg struct fbcmap32 { 305*49148020SSam Ravnborg int index; /* first element (0 origin) */ 306*49148020SSam Ravnborg int count; 307*49148020SSam Ravnborg u32 red; 308*49148020SSam Ravnborg u32 green; 309*49148020SSam Ravnborg u32 blue; 310*49148020SSam Ravnborg }; 311*49148020SSam Ravnborg 312*49148020SSam Ravnborg #define FBIOPUTCMAP32 _IOW('F', 3, struct fbcmap32) 313*49148020SSam Ravnborg #define FBIOGETCMAP32 _IOW('F', 4, struct fbcmap32) 314*49148020SSam Ravnborg 315*49148020SSam Ravnborg struct fbcursor32 { 316*49148020SSam Ravnborg short set; /* what to set, choose from the list above */ 317*49148020SSam Ravnborg short enable; /* cursor on/off */ 318*49148020SSam Ravnborg struct fbcurpos pos; /* cursor position */ 319*49148020SSam Ravnborg struct fbcurpos hot; /* cursor hot spot */ 320*49148020SSam Ravnborg struct fbcmap32 cmap; /* color map info */ 321*49148020SSam Ravnborg struct fbcurpos size; /* cursor bit map size */ 322*49148020SSam Ravnborg u32 image; /* cursor image bits */ 323*49148020SSam Ravnborg u32 mask; /* cursor mask bits */ 324*49148020SSam Ravnborg }; 325*49148020SSam Ravnborg 326*49148020SSam Ravnborg #define FBIOSCURSOR32 _IOW('F', 24, struct fbcursor32) 327*49148020SSam Ravnborg #define FBIOGCURSOR32 _IOW('F', 25, struct fbcursor32) 328*49148020SSam Ravnborg #endif 329*49148020SSam Ravnborg 330*49148020SSam Ravnborg #endif /* __LINUX_FBIO_H */ 331