include/linux/fb.h
struct fb_info {
int node; /* node成员域标示了特定的FrameBuffer,
* 实际上也就是一个FrameBuffer设备的次设备号
*/
int flags;
struct fb_var_screeninfo var; /* LCD可变参数结构体 */
struct fb_fix_screeninfo fix; /* LCD固定参数结构体 */
struct fb_monspecs monspecs; /* LCD显示器标准 */
struct work_struct queue; /* 帧缓冲事件队列 */
struct fb_pixmap pixmap; /* 图像硬件mapper(Image hardware mapper) */
struct fb_pixmap sprite; /* 光标硬件mapper(Cursor hardware mapper) */
struct fb_cmap cmap; /* 当前颜色表(Current cmap) */
struct list_head modelist; /* mode list */
struct fb_videomode *mode; /* 当前的显示模式(current mode) */
#ifdef CONFIG_FB_BACKLIGHT /* assigned backlight device */
/* set before framebuffer registration,
* remove after unregister
*/
struct backlight_device *bl_dev; /* 对应的背光设备 */
struct mutex bl_curve_mutex;
u8 bl_curve[FB_BACKLIGHT_LEVELS]; /* 背光调整(Backlight level curve) */
#endif
#ifdef CONFIG_FB_DEFERRED_IO /* 延迟IO */
struct delayed_work deferred_work;
struct fb_deferred_io *fbdefio;
#endif
struct fb_ops *fbops; /* 对底层硬件操作的函数指针 */
struct device *device; /* This is the parent */
struct device *dev; /* This is this fb device */
int class_flag; /* private sysfs flags */
#ifdef CONFIG_FB_TILEBLITTING
struct fb_tile_ops *tileops; /* Tile Blitting(blit -- Bit-Block Image Transfer) */
#endif
char __iomem *screen_base; /* 虚拟基地址(Virtual address) */
unsigned long screen_size; /* LCD IO映射的虚拟内存大小(Amount of ioremapped VRAM or 0) */
void *pseudo_palette; /* 伪16色颜色表(Fake palette of 16 colors) */
#define FBINFO_STATE_RUNNING 0
#define FBINFO_STATE_SUSPENDED 1
u32 state; /* LCD硬件状态,如运行和挂起(Hardware state i.e suspend) */
void *fbcon_par; /* fbcon use-only private area */
/* From here on everything is device dependent */
void *par;
};/* struct fb_info */
struct fb_var_screeninfo {
__u32 xres; /* 可见屏幕一行的像素点数(visible resolution) */
__u32 yres; /* 可见屏幕一列的像素点数 */
__u32 xres_virtual; /* 虚拟屏幕一行的像素点数(virtual resolution) */
__u32 yres_virtual; /* 虚拟屏幕一列的像素点数 */
__u32 xoffset; /* 虚拟到可见屏幕之间的行偏移(offset from virtual to visible) */
__u32 yoffset; /* 虚拟到可见屏幕之间的列偏移 */
__u32 bits_per_pixel; /* 每个像素的位数即BPP */
__u32 grayscale; /* 非0时,指的是灰度(!= 0 Graylevels instead of colors) */
struct fb_bitfield red; /* bitfield in fb mem if true color,
* else only length is significant
*/
struct fb_bitfield green; /* fb缓存的G位域 */
struct fb_bitfield blue; /* fb缓存的B位域 */
struct fb_bitfield transp; /* 透明度(transparency )*/
__u32 nonstd; /* 非0,非标准像素格式(!= 0 Non standard pixel format) */
__u32 activate; /* see FB_ACTIVATE_* */
__u32 height; /* 图像高度(height of picture in mm)*/
__u32 width; /* 图像宽度(width of picture in mm)*/
__u32 accel_flags; /* (OBSOLETE) see fb_info.flags */
/* Timing: All values in pixclocks, except pixclock (of course) */
/* 定时:除了pixclock本身外,其他的都以像素时钟为单位 */
__u32 pixclock; /* 像素时钟,皮秒(pixel clock in ps (pico seconds)) */
__u32 left_margin; /* 行切换,从同步到绘图之间的延迟(time from sync to picture)*/
__u32 right_margin; /* 行切换,从绘图到同步之间的延迟(time from picture to sync)*/
__u32 upper_margin; /* 帧切换,从同步到绘图之间的延迟(time from sync to picture)*/
__u32 lower_margin; /* 帧切换,从绘图到同步之间的延迟(time from picture to sync)*/
__u32 hsync_len; /* 水平同步的长度(length of horizontal sync)*/
__u32 vsync_len; /* 垂直同步的长度(length of vertical sync)*/
__u32 sync; /* see FB_SYNC_* */
__u32 vmode; /* see FB_VMODE_* */
__u32 rotate; /* angle we rotate counter clockwise */
__u32 reserved[5]; /* 保留(Reserved for future compatibility)*/
};/* struct fb_var_screeninfo */
/* Interpretation of offset for color fields: All offsets are from the right,
* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
* can use the offset as right argument to <<). A pixel afterwards is a bit
* stream and is written to video memory as that unmodified. This implies
* big-endian byte order if bits_per_pixel is greater than 8.
*/
struct fb_bitfield {
__u32 offset; /* beginning of bitfield */
__u32 length; /* length of bitfield */
__u32 msb_right; /* != 0 : Most significant bit is right */
};
struct fb_fix_screeninfo {
char id[16]; /* 字符串形式的标示符(identification string eg "TT Builtin")*/
unsigned long smem_start; /* fb缓存的起始位置(Start of frame buffer mem)*/
/* (physical address) */
__u32 smem_len; /* fb缓存的长度(Length of frame buffer mem)*/
__u32 type; /* see FB_TYPE_* */
__u32 type_aux; /* 分界(Interleave for interleaved Planes)*/
__u32 visual; /* see FB_VISUAL_* */
__u16 xpanstep; /* 如果没有硬件panning,就赋值为0(zero if no hardware panning)*/
__u16 ypanstep; /* 如果没有硬件panning,就赋值为0(zero if no hardware panning)*/
__u16 ywrapstep; /* 如果没有硬件ywrap,就赋值为0(zero if no hardware ywrap)*/
__u32 line_length; /* 一行的字节数(length of a line in bytes)*/
unsigned long mmio_start; /* 内存映射IO的起始位置(Start of Memory Mapped I/O)*/
/* (physical address) */
__u32 mmio_len; /* 内存映射IO的长度(Length of Memory Mapped I/O)*/
__u32 accel; /* Indicate to driver which */
/* specific chip/card we have */
__u16 reserved[3]; /* Reserved for future compatibility */
};/* struct fb_fix_screeninfo */
struct fb_monspecs {
struct fb_chroma chroma;
struct fb_videomode *modedb; /* mode database */
__u8 manufacturer[4]; /* Manufacturer */
__u8 monitor[14]; /* Monitor String */
__u8 serial_no[14]; /* Serial Number */
__u8 ascii[14]; /* ? */
__u32 modedb_len; /* mode database length */
__u32 model; /* Monitor Model */
__u32 serial; /* Serial Number - Integer */
__u32 year; /* Year manufactured */
__u32 week; /* Week Manufactured */
__u32 hfmin; /* hfreq lower limit (Hz) */
__u32 hfmax; /* hfreq upper limit (Hz) */
__u32 dclkmin; /* pixelclock lower limit (Hz) */
__u32 dclkmax; /* pixelclock upper limit (Hz) */
__u16 input; /* display type - see FB_DISP_* */
__u16 dpms; /* DPMS support - see FB_DPMS_ */
__u16 signal; /* Signal Type - see FB_SIGNAL_* */
__u16 vfmin; /* vfreq lower limit (Hz) */
__u16 vfmax; /* vfreq upper limit (Hz) */
__u16 gamma; /* Gamma - in fractions of 100 */
__u16 gtf : 1; /* supports GTF */
__u16 misc; /* Misc flags - see FB_MISC_* */
__u8 version; /* EDID version... */
__u8 revision; /* ...and revision */
__u8 max_x; /* Maximum horizontal size (cm) */
__u8 max_y; /* Maximum vertical size (cm) */
};/* struct fb_monspecs */
struct fb_pixmap {
u8 *addr; /* pointer to memory */
u32 size; /* size of buffer in bytes */
u32 offset; /* current offset to buffer */
u32 buf_align; /* byte alignment of each bitmap */
u32 scan_align; /* alignment per scanline */
u32 access_align; /* alignment per read/write (bits) */
u32 flags; /* see FB_PIXMAP_* */
u32 blit_x; /* supported bit block dimensions (1-32)*/
u32 blit_y; /* Format: blit_x = 1 << (width - 1) */
/* blit_y = 1 << (height - 1) */
/* if 0, will be set to 0xffffffff (all)*/
/* access methods */
void (*writeio)(struct fb_info *info, void __iomem *dst, void *src, unsigned int size);
void (*readio) (struct fb_info *info, void *dst, void __iomem *src, unsigned int size);
};/* struct fb_pixmap */
struct fb_cmap {
__u32 start; /* First entry */
__u32 len; /* Number of entries */
__u16 *red; /* Red values */
__u16 *green;
__u16 *blue;
__u16 *transp; /* transparency, can be NULL */
};
struct fb_videomode {
const char *name; /* optional */
u32 refresh; /* optional */
u32 xres;
u32 yres;
u32 pixclock;
u32 left_margin;
u32 right_margin;
u32 upper_margin;
u32 lower_margin;
u32 hsync_len;
u32 vsync_len;
u32 sync;
u32 vmode;
u32 flag;
};
struct backlight_device {
/* Backlight properties */
struct backlight_properties props;
/* Serialise access to update_status method */
struct mutex update_lock;
/* This protects the 'ops' field. If 'ops' is NULL, the driver that
registered this device has been unloaded, and if class_get_devdata()
points to something in the body of that driver, it is also invalid. */
struct mutex ops_lock;
struct backlight_ops *ops;
/* The framebuffer notifier block */
struct notifier_block fb_notif;
struct device dev;
};
struct mutex {
/* 1: unlocked, 0: locked, negative: locked, possible waiters */
atomic_t count;
spinlock_t wait_lock;
struct list_head wait_list;
#ifdef CONFIG_DEBUG_MUTEXES
struct thread_info *owner;
const char *name;
void *magic;
#endif
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lockdep_map dep_map;
#endif
};
/*
* Frame buffer operations
*
* LOCKING NOTE: those functions must _ALL_ be called with the console
* semaphore held, this is the only suitable locking mechanism we have
* in 2.6. Some may be called at interrupt time at this point though.
*/
struct fb_ops {
/* open/release and usage marking */
struct module *owner;
int (*fb_open)(struct fb_info *info, int user);
int (*fb_release)(struct fb_info *info, int user);
/* For framebuffers with strange non linear layouts(布局,结构) or that do not
* work with normal memory mapped access
*/
ssize_t (*fb_read)(struct fb_info *info, char __user *buf, size_t count, loff_t *ppos);
ssize_t (*fb_write)(struct fb_info *info, const char __user *buf, size_t count, loff_t *ppos);
/* checks var and eventually tweaks(调整) it to something supported,
* DO NOT MODIFY PAR */
int (*fb_check_var)(struct fb_var_screeninfo *var, struct fb_info *info);
/* set the video mode according to info->var */
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);
/* set color registers in batch(批量) */
int (*fb_setcmap)(struct fb_cmap *cmap, 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, struct fb_info *info);
/* Draws a rectangle */
void (*fb_fillrect) (struct fb_info *info, const struct fb_fillrect *rect);
/* Copy data from area to another */
void (*fb_copyarea) (struct fb_info *info, const struct fb_copyarea *region);
/* Draws a image to the display */
void (*fb_imageblit) (struct fb_info *info, const struct fb_image *image);
/* Draws cursor */
int (*fb_cursor) (struct fb_info *info, struct fb_cursor *cursor);
/* Rotates the display */
void (*fb_rotate)(struct fb_info *info, int angle);
/* wait for blit(位块传送) idle, optional */
int (*fb_sync)(struct fb_info *info);
/* perform fb specific ioctl (optional) */
int (*fb_ioctl)(struct fb_info *info, unsigned int cmd,
unsigned long arg);
/* Handle 32bit compat(兼容) ioctl (optional) */
int (*fb_compat_ioctl)(struct fb_info *info, unsigned cmd,
unsigned long arg);
/* perform fb specific mmap */
int (*fb_mmap)(struct fb_info *info, struct vm_area_struct *vma);
/* save current hardware state */
void (*fb_save_state)(struct fb_info *info);
/* restore saved state */
void (*fb_restore_state)(struct fb_info *info);
/* get capability given var */
void (*fb_get_caps)(struct fb_info *info, struct fb_blit_caps *caps,
struct fb_var_screeninfo *var);
};/* struct fb_ops */
drivers/vedio/s3c2410fb.h
struct pxafb_info {
struct fb_info fb;
struct device *dev;
u_int max_bpp;
u_int max_xres;
u_int max_yres;
/*
* These are the addresses we mapped
* the framebuffer memory region to.
*/
/* raw memory addresses */
dma_addr_t map_dma; /* physical */
u_char * map_cpu; /* virtual */
u_int map_size;
/* addresses of pieces placed in raw buffer */
u_char * screen_cpu; /* virtual address of frame buffer */
dma_addr_t screen_dma; /* physical address of frame buffer */
u16 * palette_cpu; /* virtual address of palette memory */
dma_addr_t palette_dma; /* physical address of palette memory */
u_int palette_size;
/* DMA descriptors */
dma_addr_t dmadesc_fblow_dma;
dma_addr_t dmadesc_fbhigh_dma;
dma_addr_t dmadesc_palette_dma;
u_int cmap_inverse:1,
cmap_static:1,
unused:30;
volatile u_char state;
volatile u_char task_state;
struct semaphore ctrlr_sem;
wait_queue_head_t ctrlr_wait;
struct work_struct task;
struct pxafb_lcd_reg reg;
#ifdef CONFIG_CPU_FREQ
struct notifier_block freq_transition;
struct notifier_block freq_policy;
#endif
};/* struct pxafb_info */
/* Shadows for LCD controller registers */
struct pxafb_lcd_reg {
unsigned long lcdcon1;
unsigned long lcdcon2;
unsigned long lcdcon3;
unsigned long lcdcon4;
unsigned long lcdcon5;
unsigned long lcdsaddr1;
unsigned long lcdsaddr2;
unsigned long lcdsaddr3;
};
struct pxafb_mach_info {
u_long pixclock;
u_short xres;
u_short yres;
u_char bpp;
u_char hsync_len;
u_char left_margin;
u_char right_margin;
u_char vsync_len;
u_char upper_margin;
u_char lower_margin;
u_char sync;
u_int cmap_greyscale:1,
cmap_inverse:1,
cmap_static:1,
unused:29;
struct pxafb_lcd_reg reg;
void (*pxafb_backlight_power)(int);
void (*pxafb_lcd_power)(int);
};/* struct pxafb_mach_info */