mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 20:37:27 +00:00
c3e2567384
This patch is a completly rewritten 2D engine. The engine is no longer in a default state but reinitialized every time to allow usage for both framebuffers regardless of their settings. The whole engine handling is concentrated in a big function which takes 16 parameters. Although the number of parameters is worryingly it is good to have a single funtion to deal with this stuff as it allows to easily support different engines and avoids some code duplication. On the way support for the new 2D engine in VX800 was added. As the with less code duplication but it is probably better to duplicate the code as this way is easier to walk if VIA ever decides to release a new engine which changes anything the driver touches. The engine support for VX800 gives a notable boost in speed. There are no known regressions but as this patch changes paths I do neither have the hardware nor documentation to check and has the possibility to put the system in a critical state heavy testing is appreciated. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: Scott Fang <ScottFang@viatech.com.cn> Cc: Joseph Chan <JosephChan@via.com.tw> Cc: Harald Welte <laforge@gnumonks.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
111 lines
3.7 KiB
C
111 lines
3.7 KiB
C
/*
|
|
* Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
|
|
* Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public
|
|
* License as published by the Free Software Foundation;
|
|
* either version 2, or (at your option) any later version.
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTIES OR REPRESENTATIONS; without even
|
|
* the implied warranty of MERCHANTABILITY or FITNESS FOR
|
|
* A PARTICULAR PURPOSE.See the GNU General Public License
|
|
* for more details.
|
|
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc.,
|
|
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
*/
|
|
|
|
#ifndef __VIAFBDEV_H__
|
|
#define __VIAFBDEV_H__
|
|
|
|
#include <linux/proc_fs.h>
|
|
#include <linux/fb.h>
|
|
|
|
#include "ioctl.h"
|
|
#include "share.h"
|
|
#include "chip.h"
|
|
#include "hw.h"
|
|
#include "via_i2c.h"
|
|
|
|
#define VERSION_MAJOR 2
|
|
#define VERSION_KERNEL 6 /* For kernel 2.6 */
|
|
|
|
#define VERSION_OS 0 /* 0: for 32 bits OS, 1: for 64 bits OS */
|
|
#define VERSION_MINOR 4
|
|
|
|
struct viafb_shared {
|
|
struct proc_dir_entry *proc_entry; /*viafb proc entry */
|
|
|
|
/* I2C stuff */
|
|
struct via_i2c_stuff i2c_stuff;
|
|
|
|
/* All the information will be needed to set engine */
|
|
struct tmds_setting_information tmds_setting_info;
|
|
struct crt_setting_information crt_setting_info;
|
|
struct lvds_setting_information lvds_setting_info;
|
|
struct lvds_setting_information lvds_setting_info2;
|
|
struct chip_information chip_info;
|
|
|
|
/* hardware acceleration stuff */
|
|
int (*hw_bitblt)(void __iomem *engine, u8 op, u32 width, u32 height,
|
|
u8 dst_bpp, u32 dst_addr, u32 dst_pitch, u32 dst_x, u32 dst_y,
|
|
u32 *src_mem, u32 src_addr, u32 src_pitch, u32 src_x, u32 src_y,
|
|
u32 fg_color, u32 bg_color, u8 fill_rop);
|
|
};
|
|
|
|
struct viafb_par {
|
|
u8 depth;
|
|
u32 vram_addr;
|
|
void __iomem *io_virt; /*iospace virtual memory address */
|
|
unsigned int fbmem; /*framebuffer physical memory address */
|
|
unsigned int memsize; /*size of fbmem */
|
|
u32 fbmem_free; /* Free FB memory */
|
|
u32 fbmem_used; /* Use FB memory size */
|
|
u32 cursor_start; /* Cursor Start Address */
|
|
u32 VQ_start; /* Virtual Queue Start Address */
|
|
u32 VQ_end; /* Virtual Queue End Address */
|
|
u32 iga_path;
|
|
|
|
struct viafb_shared *shared;
|
|
|
|
/* All the information will be needed to set engine */
|
|
/* depreciated, use the ones in shared directly */
|
|
struct tmds_setting_information *tmds_setting_info;
|
|
struct crt_setting_information *crt_setting_info;
|
|
struct lvds_setting_information *lvds_setting_info;
|
|
struct lvds_setting_information *lvds_setting_info2;
|
|
struct chip_information *chip_info;
|
|
};
|
|
|
|
extern unsigned int viafb_second_virtual_yres;
|
|
extern unsigned int viafb_second_virtual_xres;
|
|
extern unsigned int viafb_second_offset;
|
|
extern int viafb_second_size;
|
|
extern int viafb_SAMM_ON;
|
|
extern int viafb_dual_fb;
|
|
extern int viafb_LCD2_ON;
|
|
extern int viafb_LCD_ON;
|
|
extern int viafb_DVI_ON;
|
|
extern int viafb_accel;
|
|
extern int viafb_hotplug;
|
|
extern int viafb_memsize;
|
|
|
|
extern int strict_strtoul(const char *cp, unsigned int base,
|
|
unsigned long *res);
|
|
|
|
void viafb_memory_pitch_patch(struct fb_info *info);
|
|
void viafb_fill_var_timing_info(struct fb_var_screeninfo *var, int refresh,
|
|
int mode_index);
|
|
int viafb_get_mode_index(int hres, int vres);
|
|
u8 viafb_gpio_i2c_read_lvds(struct lvds_setting_information
|
|
*plvds_setting_info, struct lvds_chip_information
|
|
*plvds_chip_info, u8 index);
|
|
void viafb_gpio_i2c_write_mask_lvds(struct lvds_setting_information
|
|
*plvds_setting_info, struct lvds_chip_information
|
|
*plvds_chip_info, struct IODATA io_data);
|
|
#endif /* __VIAFBDEV_H__ */
|