s3c2410 framebuffer 设备驱动 相关结构体


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 */




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值