fix formatting

This commit is contained in:
Markus Fröschle
2016-10-18 05:47:56 +00:00
parent 1a6d6c3375
commit 16229257fe
4 changed files with 347 additions and 320 deletions

View File

@@ -1,78 +1,86 @@
#ifndef _FB_H #ifndef _FB_H
#define _FB_H #define _FB_H
/* Definitions of frame buffers */ /* Definitions of frame buffers */
#define FB_MAJOR 29 #define FB_MAJOR 29
#define FB_MAX 32 /* sufficient for now */ #define FB_MAX 32 /* sufficient for now */
/* ioctls /* ioctls
0x46 is 'F' */ 0x46 is 'F' */
#define FBIOGET_VSCREENINFO 0x4600 #define FBIOGET_VSCREENINFO 0x4600
#define FBIOPUT_VSCREENINFO 0x4601 #define FBIOPUT_VSCREENINFO 0x4601
#define FBIOGET_FSCREENINFO 0x4602 #define FBIOGET_FSCREENINFO 0x4602
#define FBIOPAN_DISPLAY 0x4606 #define FBIOPAN_DISPLAY 0x4606
#define FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */ #define FBIOBLANK 0x4611 /* arg: 0 or vesa level + 1 */
#define FBIO_ALLOC 0x4613 #define FBIO_ALLOC 0x4613
#define FBIO_FREE 0x4614 #define FBIO_FREE 0x4614
/* picture format */ /* picture format */
#define PICT_FORMAT(bpp,type,a,r,g,b) (((bpp) << 24) | ((type) << 16) | ((a) << 12) | ((r) << 8) | ((g) << 4) | ((b))) #define PICT_FORMAT(bpp,type,a,r,g,b) (((bpp) << 24) | ((type) << 16) | ((a) << 12) | ((r) << 8) | ((g) << 4) | ((b)))
/* gray/color formats use a visual index instead of argb */ /* gray/color formats use a visual index instead of argb */
#define PICT_VISFORMAT(bpp,type,vi) (((bpp) << 24) | ((type) << 16) | ((vi))) #define PICT_VISFORMAT(bpp,type,vi) (((bpp) << 24) | ((type) << 16) | ((vi)))
#define PICT_FORMAT_BPP(f) (((f) >> 24) ) #define PICT_FORMAT_BPP(f) (((f) >> 24) )
#define PICT_FORMAT_TYPE(f) (((f) >> 16) & 0xff) #define PICT_FORMAT_TYPE(f) (((f) >> 16) & 0xff)
#define PICT_FORMAT_A(f) (((f) >> 12) & 0x0f) #define PICT_FORMAT_A(f) (((f) >> 12) & 0x0f)
#define PICT_FORMAT_R(f) (((f) >> 8) & 0x0f) #define PICT_FORMAT_R(f) (((f) >> 8) & 0x0f)
#define PICT_FORMAT_G(f) (((f) >> 4) & 0x0f) #define PICT_FORMAT_G(f) (((f) >> 4) & 0x0f)
#define PICT_FORMAT_B(f) (((f) ) & 0x0f) #define PICT_FORMAT_B(f) (((f) ) & 0x0f)
#define PICT_FORMAT_RGB(f) (((f) ) & 0xfff) #define PICT_FORMAT_RGB(f) (((f) ) & 0xfff)
#define PICT_FORMAT_VIS(f) (((f) ) & 0xffff) #define PICT_FORMAT_VIS(f) (((f) ) & 0xffff)
#define PICT_TYPE_OTHER 0
#define PICT_TYPE_A 1 #define PICT_TYPE_OTHER 0
#define PICT_TYPE_ARGB 2 #define PICT_TYPE_A 1
#define PICT_TYPE_ABGR 3 #define PICT_TYPE_ARGB 2
#define PICT_TYPE_COLOR 4 #define PICT_TYPE_ABGR 3
#define PICT_TYPE_GRAY 5 #define PICT_TYPE_COLOR 4
#define PICT_FORMAT_COLOR(f) (PICT_FORMAT_TYPE(f) & 2) #define PICT_TYPE_GRAY 5
#define PICT_FORMAT_COLOR(f) (PICT_FORMAT_TYPE(f) & 2)
/* 32bpp formats */ /* 32bpp formats */
#define PICT_a8r8g8b8 PICT_FORMAT(32,PICT_TYPE_ARGB,8,8,8,8) #define PICT_a8r8g8b8 PICT_FORMAT(32, PICT_TYPE_ARGB, 8, 8, 8, 8)
#define PICT_x8r8g8b8 PICT_FORMAT(32,PICT_TYPE_ARGB,0,8,8,8) #define PICT_x8r8g8b8 PICT_FORMAT(32, PICT_TYPE_ARGB, 0, 8, 8, 8)
#define PICT_a8b8g8r8 PICT_FORMAT(32,PICT_TYPE_ABGR,8,8,8,8) #define PICT_a8b8g8r8 PICT_FORMAT(32, PICT_TYPE_ABGR, 8, 8, 8, 8)
#define PICT_x8b8g8r8 PICT_FORMAT(32,PICT_TYPE_ABGR,0,8,8,8) #define PICT_x8b8g8r8 PICT_FORMAT(32, PICT_TYPE_ABGR, 0, 8, 8, 8)
/* 24bpp formats */ /* 24bpp formats */
#define PICT_r8g8b8 PICT_FORMAT(24,PICT_TYPE_ARGB,0,8,8,8) #define PICT_r8g8b8 PICT_FORMAT(24, PICT_TYPE_ARGB, 0, 8, 8, 8)
#define PICT_b8g8r8 PICT_FORMAT(24,PICT_TYPE_ABGR,0,8,8,8) #define PICT_b8g8r8 PICT_FORMAT(24, PICT_TYPE_ABGR, 0, 8, 8, 8)
/* 16bpp formats */ /* 16bpp formats */
#define PICT_r5g6b5 PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,6,5) #define PICT_r5g6b5 PICT_FORMAT(16, PICT_TYPE_ARGB, 0, 5, 6, 5)
#define PICT_b5g6r5 PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,6,5) #define PICT_b5g6r5 PICT_FORMAT(16, PICT_TYPE_ABGR, 0, 5, 6, 5)
#define PICT_a1r5g5b5 PICT_FORMAT(16,PICT_TYPE_ARGB,1,5,5,5) #define PICT_a1r5g5b5 PICT_FORMAT(16, PICT_TYPE_ARGB, 1, 5, 5, 5)
#define PICT_x1r5g5b5 PICT_FORMAT(16,PICT_TYPE_ARGB,0,5,5,5) #define PICT_x1r5g5b5 PICT_FORMAT(16, PICT_TYPE_ARGB, 0, 5, 5, 5)
#define PICT_a1b5g5r5 PICT_FORMAT(16,PICT_TYPE_ABGR,1,5,5,5) #define PICT_a1b5g5r5 PICT_FORMAT(16, PICT_TYPE_ABGR, 1, 5, 5, 5)
#define PICT_x1b5g5r5 PICT_FORMAT(16,PICT_TYPE_ABGR,0,5,5,5) #define PICT_x1b5g5r5 PICT_FORMAT(16, PICT_TYPE_ABGR, 0, 5, 5, 5)
#define PICT_a4r4g4b4 PICT_FORMAT(16,PICT_TYPE_ARGB,4,4,4,4) #define PICT_a4r4g4b4 PICT_FORMAT(16, PICT_TYPE_ARGB, 4, 4, 4, 4)
#define PICT_x4r4g4b4 PICT_FORMAT(16,PICT_TYPE_ARGB,4,4,4,4) #define PICT_x4r4g4b4 PICT_FORMAT(16, PICT_TYPE_ARGB, 4, 4, 4, 4)
#define PICT_a4b4g4r4 PICT_FORMAT(16,PICT_TYPE_ARGB,4,4,4,4) #define PICT_a4b4g4r4 PICT_FORMAT(16, PICT_TYPE_ARGB, 4, 4, 4, 4)
#define PICT_x4b4g4r4 PICT_FORMAT(16,PICT_TYPE_ARGB,4,4,4,4) #define PICT_x4b4g4r4 PICT_FORMAT(16, PICT_TYPE_ARGB, 4, 4, 4, 4)
/* 8bpp formats */ /* 8bpp formats */
#define PICT_a8 PICT_FORMAT(8,PICT_TYPE_A,8,0,0,0) #define PICT_a8 PICT_FORMAT(8, PICT_TYPE_A, 8, 0, 0, 0)
#define PICT_r3g3b2 PICT_FORMAT(8,PICT_TYPE_ARGB,0,3,3,2) #define PICT_r3g3b2 PICT_FORMAT(8, PICT_TYPE_ARGB, 0, 3, 3, 2)
#define PICT_b2g3r3 PICT_FORMAT(8,PICT_TYPE_ABGR,0,3,3,2) #define PICT_b2g3r3 PICT_FORMAT(8, PICT_TYPE_ABGR, 0, 3, 3, 2)
#define PICT_a2r2g2b2 PICT_FORMAT(8,PICT_TYPE_ARGB,2,2,2,2) #define PICT_a2r2g2b2 PICT_FORMAT(8, PICT_TYPE_ARGB, 2, 2, 2, 2)
#define PICT_a2b2g2r2 PICT_FORMAT(8,PICT_TYPE_ABGR,2,2,2,2) #define PICT_a2b2g2r2 PICT_FORMAT(8, PICT_TYPE_ABGR, 2, 2, 2, 2)
#define PICT_c8 PICT_FORMAT(8,PICT_TYPE_COLOR,0,0,0,0) #define PICT_c8 PICT_FORMAT(8, PICT_TYPE_COLOR, 0, 0, 0, 0)
#define PICT_g8 PICT_FORMAT(8,PICT_TYPE_GRAY,0,0,0,0) #define PICT_g8 PICT_FORMAT(8, PICT_TYPE_GRAY, 0, 0, 0, 0)
/* fVDI */ /* fVDI */
#define MODE_EMUL_MONO_FLAG 1 #define MODE_EMUL_MONO_FLAG 1
#define MODE_VESA_FLAG 2 /* for modedb.c */ #define MODE_VESA_FLAG 2 /* for modedb.c */
struct mode_option {
short used; /* Whether the mode option was used or not. */ struct mode_option
short width; {
short height; short used; /* Whether the mode option was used or not. */
short bpp; short width;
short freq; short height;
short flags; short bpp;
short freq;
short flags;
}; };
extern struct mode_option resolution; /* fVDI */ extern struct mode_option resolution; /* fVDI */
@@ -175,23 +183,23 @@ extern struct mode_option resolution; /* fVDI */
struct fb_fix_screeninfo struct fb_fix_screeninfo
{ {
char id[16]; /* identification string eg "TT Builtin" */ char id[16]; /* identification string eg "TT Builtin" */
unsigned long smem_start; /* Start of frame buffer mem */ unsigned long smem_start; /* Start of frame buffer mem */
/* (physical address) */ /* (physical address) */
unsigned long smem_len; /* Length of frame buffer mem */ unsigned long smem_len; /* Length of frame buffer mem */
unsigned long type; /* see FB_TYPE_* */ unsigned long type; /* see FB_TYPE_* */
unsigned long type_aux; /* Interleave for interleaved Planes */ unsigned long type_aux; /* Interleave for interleaved Planes */
unsigned long visual; /* see FB_VISUAL_* */ unsigned long visual; /* see FB_VISUAL_* */
unsigned short xpanstep; /* zero if no hardware panning */ unsigned short xpanstep; /* zero if no hardware panning */
unsigned short ypanstep; /* zero if no hardware panning */ unsigned short ypanstep; /* zero if no hardware panning */
unsigned short ywrapstep; /* zero if no hardware ywrap */ unsigned short ywrapstep; /* zero if no hardware ywrap */
unsigned long line_length; /* length of a line in bytes */ unsigned long line_length; /* length of a line in bytes */
unsigned long mmio_start; /* Start of Memory Mapped I/O */ unsigned long mmio_start; /* Start of Memory Mapped I/O */
/* (physical address) */ /* (physical address) */
unsigned long mmio_len; /* Length of Memory Mapped I/O */ unsigned long mmio_len; /* Length of Memory Mapped I/O */
unsigned long accel; /* Indicate to driver which */ unsigned long accel; /* Indicate to driver which */
/* specific chip/card we have */ /* specific chip/card we have */
unsigned short reserved[3]; /* Reserved for future compatibility */ unsigned short reserved[3]; /* Reserved for future compatibility */
}; };
/* Interpretation of offset for color fields: All offsets are from the right, /* Interpretation of offset for color fields: All offsets are from the right,
@@ -202,87 +210,87 @@ struct fb_fix_screeninfo
*/ */
struct fb_bitfield struct fb_bitfield
{ {
unsigned long offset; /* beginning of bitfield */ unsigned long offset; /* beginning of bitfield */
unsigned long length; /* length of bitfield */ unsigned long length; /* length of bitfield */
unsigned long msb_right; /* != 0 : Most significant bit is */ unsigned long msb_right; /* != 0 : Most significant bit is */
/* right */ /* right */
}; };
#define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */ #define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */
#define FB_ACTIVATE_NOW 0 /* set values immediately (or vbl)*/ #define FB_ACTIVATE_NOW 0 /* set values immediately (or vbl)*/
#define FB_ACTIVATE_NXTOPEN 1 /* activate on next open */ #define FB_ACTIVATE_NXTOPEN 1 /* activate on next open */
#define FB_ACTIVATE_TEST 2 /* don't set, round up impossible */ #define FB_ACTIVATE_TEST 2 /* don't set, round up impossible */
#define FB_ACTIVATE_MASK 15 #define FB_ACTIVATE_MASK 15
/* values */ /* values */
#define FB_ACTIVATE_VBL 16 /* activate values on next vbl */ #define FB_ACTIVATE_VBL 16 /* activate values on next vbl */
#define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */ #define FB_CHANGE_CMAP_VBL 32 /* change colormap on vbl */
#define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */ #define FB_ACTIVATE_ALL 64 /* change all VCs on this fb */
#define FB_ACTIVATE_FORCE 128 /* force apply even when no change*/ #define FB_ACTIVATE_FORCE 128 /* force apply even when no change*/
#define FB_ACTIVATE_INV_MODE 256 /* invalidate videomode */ #define FB_ACTIVATE_INV_MODE 256 /* invalidate videomode */
#define FB_ACCELF_TEXT 1 /* (OBSOLETE) see fb_info.flags and vc_mode */ #define FB_ACCELF_TEXT 1 /* (OBSOLETE) see fb_info.flags and vc_mode */
#define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */ #define FB_SYNC_HOR_HIGH_ACT 1 /* horizontal sync high active */
#define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */ #define FB_SYNC_VERT_HIGH_ACT 2 /* vertical sync high active */
#define FB_SYNC_EXT 4 /* external sync */ #define FB_SYNC_EXT 4 /* external sync */
#define FB_SYNC_COMP_HIGH_ACT 8 /* composite sync high active */ #define FB_SYNC_COMP_HIGH_ACT 8 /* composite sync high active */
#define FB_SYNC_BROADCAST 16 /* broadcast video timings */ #define FB_SYNC_BROADCAST 16 /* broadcast video timings */
/* vtotal = 144d/288n/576i => PAL */ /* vtotal = 144d/288n/576i => PAL */
/* vtotal = 121d/242n/484i => NTSC */ /* vtotal = 121d/242n/484i => NTSC */
#define FB_SYNC_ON_GREEN 32 /* sync on green */ #define FB_SYNC_ON_GREEN 32 /* sync on green */
#define FB_VMODE_NONINTERLACED 0 /* non interlaced */ #define FB_VMODE_NONINTERLACED 0 /* non interlaced */
#define FB_VMODE_INTERLACED 1 /* interlaced */ #define FB_VMODE_INTERLACED 1 /* interlaced */
#define FB_VMODE_DOUBLE 2 /* double scan */ #define FB_VMODE_DOUBLE 2 /* double scan */
#define FB_VMODE_MASK 255 #define FB_VMODE_MASK 255
#define FB_VMODE_YWRAP 256 /* ywrap instead of panning */ #define FB_VMODE_YWRAP 256 /* ywrap instead of panning */
#define FB_VMODE_SMOOTH_XPAN 512 /* smooth xpan possible (internally used) */ #define FB_VMODE_SMOOTH_XPAN 512 /* smooth xpan possible (internally used) */
#define FB_VMODE_CONUPDATE 512 /* don't update x/yoffset */ #define FB_VMODE_CONUPDATE 512 /* don't update x/yoffset */
#define PICOS2KHZ(a) (1000000000UL/(a)) #define PICOS2KHZ(a) (1000000000UL / (a))
#define KHZ2PICOS(a) (1000000000UL/(a)) #define KHZ2PICOS(a) (1000000000UL / (a))
struct fb_var_screeninfo struct fb_var_screeninfo
{ {
unsigned long xres; /* visible resolution */ unsigned long xres; /* visible resolution */
unsigned long yres; unsigned long yres;
unsigned long xres_virtual; /* virtual resolution */ unsigned long xres_virtual; /* virtual resolution */
unsigned long yres_virtual; unsigned long yres_virtual;
unsigned long xoffset; /* offset from virtual to visible */ unsigned long xoffset; /* offset from virtual to visible */
unsigned long yoffset; /* resolution */ unsigned long yoffset; /* resolution */
unsigned long bits_per_pixel; /* guess what */ unsigned long bits_per_pixel; /* guess what */
unsigned long grayscale; /* != 0 Graylevels instead of colors */ unsigned long grayscale; /* != 0 Graylevels instead of colors */
struct fb_bitfield red; /* bitfield in fb mem if true color, */ struct fb_bitfield red; /* bitfield in fb mem if true color, */
struct fb_bitfield green; /* else only length is significant */ struct fb_bitfield green; /* else only length is significant */
struct fb_bitfield blue; struct fb_bitfield blue;
struct fb_bitfield transp; /* transparency */ struct fb_bitfield transp; /* transparency */
unsigned long nonstd; /* != 0 Non standard pixel format */ unsigned long nonstd; /* != 0 Non standard pixel format */
unsigned long activate; /* see FB_ACTIVATE_* */ unsigned long activate; /* see FB_ACTIVATE_* */
unsigned long height; /* height of picture in mm */ unsigned long height; /* height of picture in mm */
unsigned long width; /* width of picture in mm */ unsigned long width; /* width of picture in mm */
unsigned long accel_flags; /* (OBSOLETE) see fb_info.flags */ unsigned long accel_flags; /* (OBSOLETE) see fb_info.flags */
/* Timing: All values in pixclocks, except pixclock (of course) */ /* Timing: All values in pixclocks, except pixclock (of course) */
unsigned long pixclock; /* pixel clock in ps (pico seconds) */ unsigned long pixclock; /* pixel clock in ps (pico seconds) */
unsigned long left_margin; /* time from sync to picture */ unsigned long left_margin; /* time from sync to picture */
unsigned long right_margin; /* time from picture to sync */ unsigned long right_margin; /* time from picture to sync */
unsigned long upper_margin; /* time from sync to picture */ unsigned long upper_margin; /* time from sync to picture */
unsigned long lower_margin; unsigned long lower_margin;
unsigned long hsync_len; /* length of horizontal sync */ unsigned long hsync_len; /* length of horizontal sync */
unsigned long vsync_len; /* length of vertical sync */ unsigned long vsync_len; /* length of vertical sync */
unsigned long sync; /* see FB_SYNC_* */ unsigned long sync; /* see FB_SYNC_* */
unsigned long vmode; /* see FB_VMODE_* */ unsigned long vmode; /* see FB_VMODE_* */
unsigned long rotate; /* angle we rotate counter clockwise */ unsigned long rotate; /* angle we rotate counter clockwise */
unsigned long refresh; unsigned long refresh;
unsigned long reserved[4]; /* Reserved for future compatibility */ unsigned long reserved[4]; /* Reserved for future compatibility */
}; };
/* VESA Blanking Levels */ /* VESA Blanking Levels */
@@ -291,36 +299,37 @@ struct fb_var_screeninfo
#define VESA_HSYNC_SUSPEND 2 #define VESA_HSYNC_SUSPEND 2
#define VESA_POWERDOWN 3 #define VESA_POWERDOWN 3
enum { enum
/* screen: unblanked, hsync: on, vsync: on */ {
FB_BLANK_UNBLANK = VESA_NO_BLANKING, /* screen: unblanked, hsync: on, vsync: on */
/* screen: blanked, hsync: on, vsync: on */ FB_BLANK_UNBLANK = VESA_NO_BLANKING,
FB_BLANK_NORMAL = VESA_NO_BLANKING + 1, /* screen: blanked, hsync: on, vsync: on */
/* screen: blanked, hsync: on, vsync: off */ FB_BLANK_NORMAL = VESA_NO_BLANKING + 1,
FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1, /* screen: blanked, hsync: on, vsync: off */
/* screen: blanked, hsync: off, vsync: on */ FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1,
FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1, /* screen: blanked, hsync: off, vsync: on */
/* screen: blanked, hsync: off, vsync: off */ FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1,
FB_BLANK_POWERDOWN = VESA_POWERDOWN + 1 /* screen: blanked, hsync: off, vsync: off */
FB_BLANK_POWERDOWN = VESA_POWERDOWN + 1
}; };
#define FB_VBLANK_VBLANKING 0x001 /* currently in a vertical blank */ #define FB_VBLANK_VBLANKING 0x001 /* currently in a vertical blank */
#define FB_VBLANK_HBLANKING 0x002 /* currently in a horizontal blank */ #define FB_VBLANK_HBLANKING 0x002 /* currently in a horizontal blank */
#define FB_VBLANK_HAVE_VBLANK 0x004 /* vertical blanks can be detected */ #define FB_VBLANK_HAVE_VBLANK 0x004 /* vertical blanks can be detected */
#define FB_VBLANK_HAVE_HBLANK 0x008 /* horizontal blanks can be detected */ #define FB_VBLANK_HAVE_HBLANK 0x008 /* horizontal blanks can be detected */
#define FB_VBLANK_HAVE_COUNT 0x010 /* global retrace counter is available */ #define FB_VBLANK_HAVE_COUNT 0x010 /* global retrace counter is available */
#define FB_VBLANK_HAVE_VCOUNT 0x020 /* the vcount field is valid */ #define FB_VBLANK_HAVE_VCOUNT 0x020 /* the vcount field is valid */
#define FB_VBLANK_HAVE_HCOUNT 0x040 /* the hcount field is valid */ #define FB_VBLANK_HAVE_HCOUNT 0x040 /* the hcount field is valid */
#define FB_VBLANK_VSYNCING 0x080 /* currently in a vsync */ #define FB_VBLANK_VSYNCING 0x080 /* currently in a vsync */
#define FB_VBLANK_HAVE_VSYNC 0x100 /* verical syncs can be detected */ #define FB_VBLANK_HAVE_VSYNC 0x100 /* verical syncs can be detected */
struct fb_vblank struct fb_vblank
{ {
unsigned long flags; /* FB_VBLANK flags */ unsigned long flags; /* FB_VBLANK flags */
unsigned long count; /* counter of retraces since boot */ unsigned long count; /* counter of retraces since boot */
unsigned long vcount; /* current scanline position */ unsigned long vcount; /* current scanline position */
unsigned long hcount; /* current scandot position */ unsigned long hcount; /* current scandot position */
unsigned long reserved[4]; /* reserved for future compatibility */ unsigned long reserved[4]; /* reserved for future compatibility */
}; };
struct vm_area_struct; struct vm_area_struct;
@@ -329,152 +338,153 @@ struct device;
struct file; struct file;
/* Definitions below are used in the parsed monitor specs */ /* Definitions below are used in the parsed monitor specs */
#define FB_DPMS_ACTIVE_OFF 1 #define FB_DPMS_ACTIVE_OFF 1
#define FB_DPMS_SUSPEND 2 #define FB_DPMS_SUSPEND 2
#define FB_DPMS_STANDBY 4 #define FB_DPMS_STANDBY 4
#define FB_DISP_DDI 1 #define FB_DISP_DDI 1
#define FB_DISP_ANA_700_300 2 #define FB_DISP_ANA_700_300 2
#define FB_DISP_ANA_714_286 4 #define FB_DISP_ANA_714_286 4
#define FB_DISP_ANA_1000_400 8 #define FB_DISP_ANA_1000_400 8
#define FB_DISP_ANA_700_000 16 #define FB_DISP_ANA_700_000 16
#define FB_DISP_MONO 32 #define FB_DISP_MONO 32
#define FB_DISP_RGB 64 #define FB_DISP_RGB 64
#define FB_DISP_MULTI 128 #define FB_DISP_MULTI 128
#define FB_DISP_UNKNOWN 256 #define FB_DISP_UNKNOWN 256
#define FB_SIGNAL_NONE 0 #define FB_SIGNAL_NONE 0
#define FB_SIGNAL_BLANK_BLANK 1 #define FB_SIGNAL_BLANK_BLANK 1
#define FB_SIGNAL_SEPARATE 2 #define FB_SIGNAL_SEPARATE 2
#define FB_SIGNAL_COMPOSITE 4 #define FB_SIGNAL_COMPOSITE 4
#define FB_SIGNAL_SYNC_ON_GREEN 8 #define FB_SIGNAL_SYNC_ON_GREEN 8
#define FB_SIGNAL_SERRATION_ON 16 #define FB_SIGNAL_SERRATION_ON 16
#define FB_MISC_PRIM_COLOR 1
#define FB_MISC_1ST_DETAIL 2 /* First Detailed Timing is preferred */
#define FB_MISC_PRIM_COLOR 1
#define FB_MISC_1ST_DETAIL 2 /* First Detailed Timing is preferred */
struct fb_chroma struct fb_chroma
{ {
unsigned long redx; /* in fraction of 1024 */ unsigned long redx; /* in fraction of 1024 */
unsigned long greenx; unsigned long greenx;
unsigned long bluex; unsigned long bluex;
unsigned long whitex; unsigned long whitex;
unsigned long redy; unsigned long redy;
unsigned long greeny; unsigned long greeny;
unsigned long bluey; unsigned long bluey;
unsigned long whitey; unsigned long whitey;
}; };
struct fb_monspecs struct fb_monspecs
{ {
struct fb_chroma chroma; struct fb_chroma chroma;
struct fb_videomode *modedb; /* mode database */ struct fb_videomode *modedb; /* mode database */
unsigned char manufacturer[4]; /* Manufacturer */ unsigned char manufacturer[4]; /* Manufacturer */
unsigned char monitor[14]; /* Monitor String */ unsigned char monitor[14]; /* Monitor String */
unsigned char serial_no[14]; /* Serial Number */ unsigned char serial_no[14]; /* Serial Number */
unsigned char ascii[14]; /* ? */ unsigned char ascii[14]; /* ? */
unsigned long modedb_len; /* mode database length */ unsigned long modedb_len; /* mode database length */
unsigned long model; /* Monitor Model */ unsigned long model; /* Monitor Model */
unsigned long serial; /* Serial Number - Integer */ unsigned long serial; /* Serial Number - Integer */
unsigned long year; /* Year manufactured */ unsigned long year; /* Year manufactured */
unsigned long week; /* Week Manufactured */ unsigned long week; /* Week Manufactured */
unsigned long hfmin; /* hfreq lower limit (Hz) */ unsigned long hfmin; /* hfreq lower limit (Hz) */
unsigned long hfmax; /* hfreq upper limit (Hz) */ unsigned long hfmax; /* hfreq upper limit (Hz) */
unsigned long dclkmin; /* pixelclock lower limit (Hz) */ unsigned long dclkmin; /* pixelclock lower limit (Hz) */
unsigned long dclkmax; /* pixelclock upper limit (Hz) */ unsigned long dclkmax; /* pixelclock upper limit (Hz) */
unsigned short input; /* display type - see FB_DISP_* */ unsigned short input; /* display type - see FB_DISP_* */
unsigned short dpms; /* DPMS support - see FB_DPMS_ */ unsigned short dpms; /* DPMS support - see FB_DPMS_ */
unsigned short signal; /* Signal Type - see FB_SIGNAL_* */ unsigned short signal; /* Signal Type - see FB_SIGNAL_* */
unsigned short vfmin; /* vfreq lower limit (Hz) */ unsigned short vfmin; /* vfreq lower limit (Hz) */
unsigned short vfmax; /* vfreq upper limit (Hz) */ unsigned short vfmax; /* vfreq upper limit (Hz) */
unsigned short gamma; /* Gamma - in fractions of 100 */ unsigned short gamma; /* Gamma - in fractions of 100 */
unsigned short gtf : 1; /* supports GTF */ unsigned short gtf : 1; /* supports GTF */
unsigned short misc; /* Misc flags - see FB_MISC_* */ unsigned short misc; /* Misc flags - see FB_MISC_* */
unsigned char version; /* EDID version... */ unsigned char version; /* EDID version... */
unsigned char revision; /* ...and revision */ unsigned char revision; /* ...and revision */
unsigned char max_x; /* Maximum horizontal size (cm) */ unsigned char max_x; /* Maximum horizontal size (cm) */
unsigned char max_y; /* Maximum vertical size (cm) */ unsigned char max_y; /* Maximum vertical size (cm) */
}; };
struct fb_ops struct fb_ops
{ {
/* checks var and eventually tweaks if to soomething supported, /* checks var and eventually tweaks if to something supported,
* DO NOT MODIFY PAR */ * DO NOT MODIFY PAR */
int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info); int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);
/* set the video mode according to info->var */ /* set the video mode according to info->var */
int (*fb_set_par)(struct fb_info *info); int (*fb_set_par)(struct fb_info *info);
/* set color register */ /* set color register */
int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green, int (*fb_setcolreg)(unsigned regno, unsigned red, unsigned green,
unsigned blue, unsigned transp, struct fb_info *info); unsigned blue, unsigned transp, struct fb_info *info);
/* pan display */ /* pan display */
int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info); int (*fb_pan_display)(struct fb_var_screeninfo *var, struct fb_info *info);
/* blank display */ /* blank display */
int (*fb_blank)(int blank, struct fb_info *info); int (*fb_blank)(int blank, struct fb_info *info);
/* wait for blit idle */ /* wait for blit idle */
int (*fb_sync)(struct fb_info *info); int (*fb_sync)(struct fb_info *info);
/* perform fb specific ioctl */ /* perform fb specific ioctl */
int (*fb_ioctl)(unsigned int cmd, unsigned long arg, struct fb_info *info); int (*fb_ioctl)(unsigned int cmd, unsigned long arg, struct fb_info *info);
/* Buildthe modedb for head 1 (head 2 will come later), check panel infos /* Buildthe modedb for head 1 (head 2 will come later), check panel infos
* from either BIOS or EDID, and pick up the default mode */ * from either BIOS or EDID, and pick up the default mode */
void (*fb_check_modes)(struct fb_info *info, struct mode_option *resolution); void (*fb_check_modes)(struct fb_info *info, struct mode_option *resolution);
/* Accel functions */ /* Accel functions */
#define DEGREES_0 0 #define DEGREES_0 0
#define DEGREES_90 1 #define DEGREES_90 1
#define DEGREES_180 2 #define DEGREES_180 2
#define DEGREES_270 3 #define DEGREES_270 3
#define OMIT_LAST 1 #define OMIT_LAST 1
void (*SetupForSolidFill)(struct fb_info *info, int color, int rop, unsigned int planemask); void (*SetupForSolidFill)(struct fb_info *info, int color, int rop, unsigned int planemask);
void (*SubsequentSolidFillRect)(struct fb_info *info, int x, int y, int w, int h); void (*SubsequentSolidFillRect)(struct fb_info *info, int x, int y, int w, int h);
void (*SetupForSolidLine)(struct fb_info *info, int color, int rop, unsigned int planemask); void (*SetupForSolidLine)(struct fb_info *info, int color, int rop, unsigned int planemask);
void (*SubsequentSolidHorVertLine)(struct fb_info *info, int x, int y, int len, int dir); void (*SubsequentSolidHorVertLine)(struct fb_info *info, int x, int y, int len, int dir);
void (*SubsequentSolidTwoPointLine)(struct fb_info *info, int xa, int ya, int xb, int yb, int flags); void (*SubsequentSolidTwoPointLine)(struct fb_info *info, int xa, int ya, int xb, int yb, int flags);
void (*SetupForDashedLine)(struct fb_info *info, int fg, int bg, int rop, unsigned int planemask, int length, unsigned char *pattern); void (*SetupForDashedLine)(struct fb_info *info, int fg, int bg, int rop, unsigned int planemask, int length, unsigned char *pattern);
void (*SubsequentDashedTwoPointLine)(struct fb_info *info, int xa, int ya, int xb, int yb, int flags, int phase); void (*SubsequentDashedTwoPointLine)(struct fb_info *info, int xa, int ya, int xb, int yb, int flags, int phase);
void (*SetupForScreenToScreenCopy)(struct fb_info *info, int xdir, int ydir, int rop, unsigned int planemask, int trans_color); void (*SetupForScreenToScreenCopy)(struct fb_info *info, int xdir, int ydir, int rop, unsigned int planemask, int trans_color);
void (*SubsequentScreenToScreenCopy)(struct fb_info *info, int xa, int ya, int xb, int yb, int w, int h); void (*SubsequentScreenToScreenCopy)(struct fb_info *info, int xa, int ya, int xb, int yb, int w, int h);
void (*ScreenToScreenCopy)(struct fb_info *info, int xa, int ya, int xb, int yb, int w, int h, int rop); void (*ScreenToScreenCopy)(struct fb_info *info, int xa, int ya, int xb, int yb, int w, int h, int rop);
void (*SetupForMono8x8PatternFill)(struct fb_info *info, int patternx, int patterny, int fg, int bg, int rop, unsigned int planemask); void (*SetupForMono8x8PatternFill)(struct fb_info *info, int patternx, int patterny, int fg, int bg, int rop, unsigned int planemask);
void (*SubsequentMono8x8PatternFillRect)(struct fb_info *info, int patternx, int patterny, int x, int y, int w, int h); void (*SubsequentMono8x8PatternFillRect)(struct fb_info *info, int patternx, int patterny, int x, int y, int w, int h);
void (*SetupForScanlineCPUToScreenColorExpandFill)(struct fb_info *info, int fg, int bg, int rop, unsigned int planemask); void (*SetupForScanlineCPUToScreenColorExpandFill)(struct fb_info *info, int fg, int bg, int rop, unsigned int planemask);
void (*SubsequentScanlineCPUToScreenColorExpandFill)(struct fb_info *info, int x, int y, int w, int h, int skipleft); void (*SubsequentScanlineCPUToScreenColorExpandFill)(struct fb_info *info, int x, int y, int w, int h, int skipleft);
void (*SubsequentScanline)(struct fb_info *info, unsigned long *buf); void (*SubsequentScanline)(struct fb_info *info, unsigned long *buf);
void (*SetupForScanlineImageWrite)(struct fb_info *info, int rop, unsigned int planemask, int trans_color, int bpp); void (*SetupForScanlineImageWrite)(struct fb_info *info, int rop, unsigned int planemask, int trans_color, int bpp);
void (*SubsequentScanlineImageWriteRect)(struct fb_info *info, int x, int y, int w, int h, int skipleft); void (*SubsequentScanlineImageWriteRect)(struct fb_info *info, int x, int y, int w, int h, int skipleft);
void (*SetClippingRectangle)(struct fb_info *info, int xa, int ya, int xb, int yb); void (*SetClippingRectangle)(struct fb_info *info, int xa, int ya, int xb, int yb);
void (*DisableClipping)(struct fb_info *info); void (*DisableClipping)(struct fb_info *info);
int (*SetupForCPUToScreenAlphaTexture)(struct fb_info *info, int (*SetupForCPUToScreenAlphaTexture)(struct fb_info *info,
int op, unsigned short red, unsigned short green, unsigned short blue, unsigned short alpha, unsigned long maskFormat, unsigned long dstFormat, unsigned char *alphaPtr, int alphaPitch, int width, int height, int flags); int op, unsigned short red, unsigned short green, unsigned short blue, unsigned short alpha, unsigned long maskFormat, unsigned long dstFormat, unsigned char *alphaPtr, int alphaPitch, int width, int height, int flags);
int (*SetupForCPUToScreenTexture)(struct fb_info *info, int op, unsigned long srcFormat, unsigned long dstFormat, unsigned char *texPtr, int texPitch, int width, int height, int flags); int (*SetupForCPUToScreenTexture)(struct fb_info *info, int op, unsigned long srcFormat, unsigned long dstFormat, unsigned char *texPtr, int texPitch, int width, int height, int flags);
void (*SubsequentCPUToScreenTexture)(struct fb_info *info, int dstx, int dsty, int srcx, int srcy, int width, int height); void (*SubsequentCPUToScreenTexture)(struct fb_info *info, int dstx, int dsty, int srcx, int srcy, int width, int height);
/* Cursor functions */ /* Cursor functions */
void (*SetCursorColors)(struct fb_info *info, int bg, int fg); void (*SetCursorColors)(struct fb_info *info, int bg, int fg);
void (*SetCursorPosition)(struct fb_info *info, int x, int y); void (*SetCursorPosition)(struct fb_info *info, int x, int y);
void (*LoadCursorImage)(struct fb_info *info, unsigned short *mask, unsigned short *data, int zoom); void (*LoadCursorImage)(struct fb_info *info, unsigned short *mask, unsigned short *data, int zoom);
void (*HideCursor)(struct fb_info *info); void (*HideCursor)(struct fb_info *info);
void (*ShowCursor)(struct fb_info *info); void (*ShowCursor)(struct fb_info *info);
long (*CursorInit)(struct fb_info *info); long (*CursorInit)(struct fb_info *info);
void (*WaitVbl)(struct fb_info *info); void (*WaitVbl)(struct fb_info *info);
}; };
struct fb_info struct fb_info
{ {
struct fb_var_screeninfo var; /* Current var */ struct fb_var_screeninfo var; /* Current var */
struct fb_fix_screeninfo fix; /* Current fix */ struct fb_fix_screeninfo fix; /* Current fix */
struct fb_monspecs monspecs; /* Current Monitor specs */ struct fb_monspecs monspecs; /* Current Monitor specs */
struct fb_videomode *mode; /* current mode */ struct fb_videomode *mode; /* current mode */
char *screen_base; /* Virtual address */ char *screen_base; /* Virtual address */
unsigned long screen_size; unsigned long screen_size;
char *ram_base; /* base vram */ char *ram_base; /* base vram */
unsigned long ram_size; /* vram size */ unsigned long ram_size; /* vram size */
char *screen_mono; char *screen_mono;
long update_mono; long update_mono;
struct fb_ops *fbops; struct fb_ops *fbops;
void *par; /* device dependent */ void *par; /* device dependent */
}; };
/* fbmem.c */ /* fbmem.c */
extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var); extern int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var);
extern int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var); extern int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var);
extern int fb_blank(struct fb_info *info, int blank); extern int fb_blank(struct fb_info *info, int blank);
extern int fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg); extern int fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg);
extern struct fb_info *framebuffer_alloc(unsigned long size); extern struct fb_info *framebuffer_alloc(unsigned long size);
@@ -510,32 +520,34 @@ extern int fb_validate_mode(const struct fb_var_screeninfo *var, struct fb_info
/* modedb.c */ /* modedb.c */
#define VESA_MODEDB_SIZE 34 #define VESA_MODEDB_SIZE 34
extern int fb_find_mode(struct fb_var_screeninfo *var, extern int fb_find_mode(struct fb_var_screeninfo *var,
struct fb_info *info, struct mode_option *resolution , struct fb_info *info, struct mode_option *resolution ,
const struct fb_videomode *db, unsigned int dbsize, const struct fb_videomode *db, unsigned int dbsize,
const struct fb_videomode *default_mode, unsigned int default_bpp); const struct fb_videomode *default_mode, unsigned int default_bpp);
extern void fb_var_to_videomode(struct fb_videomode *mode, struct fb_var_screeninfo *var); extern void fb_var_to_videomode(struct fb_videomode *mode, struct fb_var_screeninfo *var);
extern void fb_videomode_to_var(struct fb_var_screeninfo *var, struct fb_videomode *mode); extern void fb_videomode_to_var(struct fb_var_screeninfo *var, struct fb_videomode *mode);
extern int fb_mode_is_equal(struct fb_videomode *mode1, struct fb_videomode *mode2); extern int fb_mode_is_equal(struct fb_videomode *mode1, struct fb_videomode *mode2);
struct fb_videomode { struct fb_videomode
unsigned short refresh; /* optional */ {
unsigned short xres; unsigned short refresh; /* optional */
unsigned short yres; unsigned short xres;
unsigned long pixclock; unsigned short yres;
unsigned short left_margin; unsigned long pixclock;
unsigned short right_margin; unsigned short left_margin;
unsigned short upper_margin; unsigned short right_margin;
unsigned short lower_margin; unsigned short upper_margin;
unsigned short hsync_len; unsigned short lower_margin;
unsigned short vsync_len; unsigned short hsync_len;
unsigned short sync; unsigned short vsync_len;
unsigned short vmode; unsigned short sync;
unsigned short flag; unsigned short vmode;
unsigned short flag;
}; };
extern const struct fb_videomode vesa_modes[]; extern const struct fb_videomode vesa_modes[];
/* timer */
/* timer FIXME: doesn't really fit yet to Coldfire timings */
#if defined(MACHINE_FIREBEE) #if defined(MACHINE_FIREBEE)
#define US_TO_TIMER(a) (((a) * 256) / 5000) #define US_TO_TIMER(a) (((a) * 256) / 5000)

View File

@@ -1352,8 +1352,10 @@ static void radeon_timer_func(void)
struct fb_info *info = info_fb; struct fb_info *info = info_fb;
struct radeonfb_info *rinfo = info->par; struct radeonfb_info *rinfo = info->par;
struct fb_var_screeninfo var; struct fb_var_screeninfo var;
uint32_t x, y; uint32_t x;
int chg, disp; uint32_t y;
int chg;
int disp;
#ifdef FIXME_LATER #ifdef FIXME_LATER
static int32_t start_timer; static int32_t start_timer;
@@ -1380,19 +1382,21 @@ static void radeon_timer_func(void)
if ((info->screen_mono != NULL) && info->update_mono) if ((info->screen_mono != NULL) && info->update_mono)
{ {
int32_t foreground = 255, background = 0; int32_t foreground = 255;
uint8_t *src_buf = (uint8_t *)info->screen_mono; int32_t background = 0;
int skipleft = ((int)src_buf & 3) << 3; uint8_t *src_buf = (uint8_t *) info->screen_mono;
int skipleft = ((int) src_buf & 3) << 3;
int dst_x = 0; int dst_x = 0;
int w = (int)info->var.xres_virtual; int w = (int) info->var.xres_virtual;
int h = (int)info->var.yres_virtual; int h = (int) info->var.yres_virtual;
// info->fbops->SetClippingRectangle(info,0,0,w-1,h-1); // info->fbops->SetClippingRectangle(info,0,0,w-1,h-1);
src_buf = (uint8_t*)((int32_t)src_buf & ~3);
dst_x -= (int32_t)skipleft; src_buf = (uint8_t*) ((int32_t) src_buf & ~3);
w += (int32_t)skipleft; dst_x -= (int32_t) skipleft;
info->fbops->SetupForScanlineCPUToScreenColorExpandFill(info,(int)foreground,(int)background,3,0xffffffff); w += (int32_t) skipleft;
info->fbops->SubsequentScanlineCPUToScreenColorExpandFill(info,(int)dst_x,0,w,h,skipleft); info->fbops->SetupForScanlineCPUToScreenColorExpandFill(info, (int) foreground, (int) background, 3, 0xffffffff);
info->fbops->SubsequentScanlineCPUToScreenColorExpandFill(info, (int) dst_x, 0, w, h, skipleft);
while (--h >= 0) while (--h >= 0)
{ {

View File

@@ -428,6 +428,7 @@ static void radeon_var_to_panel_info(struct radeonfb_info *rinfo, struct fb_var_
rinfo->panel_info.hAct_high = (var->sync & FB_SYNC_HOR_HIGH_ACT) != 0; rinfo->panel_info.hAct_high = (var->sync & FB_SYNC_HOR_HIGH_ACT) != 0;
rinfo->panel_info.vAct_high = (var->sync & FB_SYNC_VERT_HIGH_ACT) != 0; rinfo->panel_info.vAct_high = (var->sync & FB_SYNC_VERT_HIGH_ACT) != 0;
rinfo->panel_info.valid = 1; rinfo->panel_info.valid = 1;
/* /*
* We use a default of 200ms for the panel power delay, * We use a default of 200ms for the panel power delay,
* I need to have a real schedule() instead of mdelay's in the panel code. * I need to have a real schedule() instead of mdelay's in the panel code.
@@ -577,7 +578,9 @@ void radeon_check_modes(struct radeonfb_info *rinfo, struct mode_option *resolut
has_default_mode = 1; has_default_mode = 1;
radeon_var_to_panel_info(rinfo, &info->var); radeon_var_to_panel_info(rinfo, &info->var);
} }
pickup_default: pickup_default:
/* /*
* Apply passed-in mode option if any * Apply passed-in mode option if any
*/ */
@@ -587,6 +590,7 @@ pickup_default:
info->monspecs.modedb_len, NULL, (resolution->bpp >= 8) ? (unsigned int)resolution->bpp : 8) != 0) info->monspecs.modedb_len, NULL, (resolution->bpp >= 8) ? (unsigned int)resolution->bpp : 8) != 0)
has_default_mode = 1; has_default_mode = 1;
} }
/* /*
* Still no mode, let's pick up a default from the db * Still no mode, let's pick up a default from the db
*/ */

View File

@@ -17,36 +17,24 @@
#include "fb.h" #include "fb.h"
#include "radeonfb.h" #include "radeonfb.h"
#include "driver_mem.h" #include "driver_mem.h"
#include "bas_string.h"
#define DBG_FBMEM // #define DEBUG
#ifdef DBG_FBMEM #include "debug.h"
#define dbg(format, arg...) do { xprintf("DEBUG: " format, ##arg); } while (0)
#else
#define dbg(format, arg...) do { ; } while (0)
#endif /* DBG_FBMEM */
long mem_cmp(char *p1, char *p2, long size)
{
while(size--)
{
if (*p1++ != *p2++)
return(1);
}
return(0);
}
/* /*
* Frame buffer device initialization and setup routines * Frame buffer device initialization and setup routines
*/ */
#define FBPIXMAPSIZE (1024 * 8)
int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var) int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var)
{ {
int xoffset = var->xoffset; int xoffset = var->xoffset;
int yoffset = var->yoffset; int yoffset = var->yoffset;
int err; int err;
// DPRINT("fb_pan_display\r\n");
dbg("\r\n");
if ((xoffset < 0) || (yoffset < 0) if ((xoffset < 0) || (yoffset < 0)
|| ((xoffset + info->var.xres) > info->var.xres_virtual)) || ((xoffset + info->var.xres) > info->var.xres_virtual))
return -1; //-EINVAL; return -1; //-EINVAL;
@@ -64,15 +52,23 @@ int fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var)
int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var) int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
{ {
int err; int err;
// DPRINT("fb_set_var\r\n");
dbg("\r\n");
if (var->activate & FB_ACTIVATE_INV_MODE) if (var->activate & FB_ACTIVATE_INV_MODE)
{
/* return 1 if equal */ /* return 1 if equal */
return(!mem_cmp((char *)&info->var, (char *)var, sizeof(struct fb_var_screeninfo))); return !memcmp((char *) &info->var, (char *) var, sizeof(struct fb_var_screeninfo));
}
if ((var->activate & FB_ACTIVATE_FORCE) if ((var->activate & FB_ACTIVATE_FORCE)
|| mem_cmp((char *)&info->var, (char *)var, sizeof(struct fb_var_screeninfo))) || memcmp((char *) &info->var, (char *) var, sizeof(struct fb_var_screeninfo)))
{ {
if ((err = info->fbops->fb_check_var(var, info))) if ((err = info->fbops->fb_check_var(var, info)))
{
return err; return err;
}
if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) if ((var->activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW)
{ {
memcpy(&info->var, var, sizeof(struct fb_var_screeninfo)); memcpy(&info->var, var, sizeof(struct fb_var_screeninfo));
@@ -80,12 +76,13 @@ int fb_set_var(struct fb_info *info, struct fb_var_screeninfo *var)
fb_pan_display(info, &info->var); fb_pan_display(info, &info->var);
} }
} }
return 0; return 0;
} }
int fb_blank(struct fb_info *info, int blank) int fb_blank(struct fb_info *info, int blank)
{ {
dbg("fb_blank\r\n"); dbg("\r\n");
if (blank > FB_BLANK_POWERDOWN) if (blank > FB_BLANK_POWERDOWN)
blank = FB_BLANK_POWERDOWN; blank = FB_BLANK_POWERDOWN;
return(info->fbops->fb_blank(blank, info)); return(info->fbops->fb_blank(blank, info));
@@ -98,11 +95,13 @@ int fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
void *argp = (void *) arg; void *argp = (void *) arg;
int i; int i;
dbg("\r\n");
switch(cmd) switch(cmd)
{ {
case FBIOGET_VSCREENINFO: case FBIOGET_VSCREENINFO:
memcpy(argp, &info->var, sizeof(var)); memcpy(argp, &info->var, sizeof(var));
return 0; return 0;
case FBIOPUT_VSCREENINFO: case FBIOPUT_VSCREENINFO:
memcpy(&var, argp, sizeof(var)); memcpy(&var, argp, sizeof(var));
i = fb_set_var(info, &var); i = fb_set_var(info, &var);
@@ -110,9 +109,11 @@ int fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
return i; return i;
memcpy(argp, &var, sizeof(var)); memcpy(argp, &var, sizeof(var));
return 0; return 0;
case FBIOGET_FSCREENINFO: case FBIOGET_FSCREENINFO:
memcpy(argp, &info->fix, sizeof(fix)); memcpy(argp, &info->fix, sizeof(fix));
return 0; return 0;
case FBIOPAN_DISPLAY: case FBIOPAN_DISPLAY:
memcpy(&var, argp, sizeof(var)); memcpy(&var, argp, sizeof(var));
i = fb_pan_display(info, &var); i = fb_pan_display(info, &var);
@@ -120,13 +121,17 @@ int fb_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
return i; return i;
memcpy(argp, &var, sizeof(var)); memcpy(argp, &var, sizeof(var));
return 0; return 0;
case FBIOBLANK: case FBIOBLANK:
i = fb_blank(info, arg); i = fb_blank(info, arg);
return i; return i;
case FBIO_ALLOC: case FBIO_ALLOC:
return(offscreen_alloc(info,(long)arg)); return(offscreen_alloc(info,(long)arg));
case FBIO_FREE: case FBIO_FREE:
return(offscreen_free(info,(long)arg)); return(offscreen_free(info,(long)arg));
default: default:
return(info->fbops->fb_ioctl(cmd, arg, info)); return(info->fbops->fb_ioctl(cmd, arg, info));
} }
@@ -155,6 +160,7 @@ struct fb_info *framebuffer_alloc(unsigned long size)
*/ */
extern struct fb_info *info_fb; extern struct fb_info *info_fb;
dbg("\r\n");
return info_fb; return info_fb;
} }
@@ -169,6 +175,7 @@ struct fb_info *framebuffer_alloc(unsigned long size)
*/ */
void framebuffer_release(struct fb_info *info) void framebuffer_release(struct fb_info *info)
{ {
dbg("\r\n");
driver_mem_free(info->par); driver_mem_free(info->par);
} }