162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright 1998-2008 VIA Technologies, Inc. All Rights Reserved.
462306a36Sopenharmony_ci * Copyright 2001-2008 S3 Graphics, Inc. All Rights Reserved.
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __VIAFBDEV_H__
962306a36Sopenharmony_ci#define __VIAFBDEV_H__
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/proc_fs.h>
1262306a36Sopenharmony_ci#include <linux/fb.h>
1362306a36Sopenharmony_ci#include <linux/spinlock.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#include "via_aux.h"
1662306a36Sopenharmony_ci#include "ioctl.h"
1762306a36Sopenharmony_ci#include "share.h"
1862306a36Sopenharmony_ci#include "chip.h"
1962306a36Sopenharmony_ci#include "hw.h"
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define VERSION_MAJOR       2
2262306a36Sopenharmony_ci#define VERSION_KERNEL      6	/* For kernel 2.6 */
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ci#define VERSION_OS          0	/* 0: for 32 bits OS, 1: for 64 bits OS */
2562306a36Sopenharmony_ci#define VERSION_MINOR       4
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#define VIAFB_NUM_I2C		5
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct viafb_shared {
3062306a36Sopenharmony_ci	u32 iga1_devices;
3162306a36Sopenharmony_ci	u32 iga2_devices;
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ci	struct proc_dir_entry *proc_entry;	/*viafb proc entry */
3462306a36Sopenharmony_ci	struct proc_dir_entry *iga1_proc_entry;
3562306a36Sopenharmony_ci	struct proc_dir_entry *iga2_proc_entry;
3662306a36Sopenharmony_ci	struct viafb_dev *vdev;			/* Global dev info */
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci	/* I2C busses that may have auxiliary devices */
3962306a36Sopenharmony_ci	struct via_aux_bus *i2c_26;
4062306a36Sopenharmony_ci	struct via_aux_bus *i2c_31;
4162306a36Sopenharmony_ci	struct via_aux_bus *i2c_2C;
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci	/* All the information will be needed to set engine */
4462306a36Sopenharmony_ci	struct tmds_setting_information tmds_setting_info;
4562306a36Sopenharmony_ci	struct lvds_setting_information lvds_setting_info;
4662306a36Sopenharmony_ci	struct lvds_setting_information lvds_setting_info2;
4762306a36Sopenharmony_ci	struct chip_information chip_info;
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	/* hardware acceleration stuff */
5062306a36Sopenharmony_ci	u32 cursor_vram_addr;
5162306a36Sopenharmony_ci	u32 vq_vram_addr;	/* virtual queue address in video ram */
5262306a36Sopenharmony_ci	int (*hw_bitblt)(void __iomem *engine, u8 op, u32 width, u32 height,
5362306a36Sopenharmony_ci		u8 dst_bpp, u32 dst_addr, u32 dst_pitch, u32 dst_x, u32 dst_y,
5462306a36Sopenharmony_ci		u32 *src_mem, u32 src_addr, u32 src_pitch, u32 src_x, u32 src_y,
5562306a36Sopenharmony_ci		u32 fg_color, u32 bg_color, u8 fill_rop);
5662306a36Sopenharmony_ci};
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_cistruct viafb_par {
5962306a36Sopenharmony_ci	u8 depth;
6062306a36Sopenharmony_ci	u32 vram_addr;
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci	unsigned int fbmem;	/*framebuffer physical memory address */
6362306a36Sopenharmony_ci	unsigned int memsize;	/*size of fbmem */
6462306a36Sopenharmony_ci	u32 fbmem_free;		/* Free FB memory */
6562306a36Sopenharmony_ci	u32 fbmem_used;		/* Use FB memory size */
6662306a36Sopenharmony_ci	u32 iga_path;
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci	struct viafb_shared *shared;
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci	/* All the information will be needed to set engine */
7162306a36Sopenharmony_ci	/* depreciated, use the ones in shared directly */
7262306a36Sopenharmony_ci	struct tmds_setting_information *tmds_setting_info;
7362306a36Sopenharmony_ci	struct lvds_setting_information *lvds_setting_info;
7462306a36Sopenharmony_ci	struct lvds_setting_information *lvds_setting_info2;
7562306a36Sopenharmony_ci	struct chip_information *chip_info;
7662306a36Sopenharmony_ci};
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ciextern int viafb_SAMM_ON;
7962306a36Sopenharmony_ciextern int viafb_dual_fb;
8062306a36Sopenharmony_ciextern int viafb_LCD2_ON;
8162306a36Sopenharmony_ciextern int viafb_LCD_ON;
8262306a36Sopenharmony_ciextern int viafb_DVI_ON;
8362306a36Sopenharmony_ciextern int viafb_hotplug;
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_ciu8 viafb_gpio_i2c_read_lvds(struct lvds_setting_information
8662306a36Sopenharmony_ci	*plvds_setting_info, struct lvds_chip_information
8762306a36Sopenharmony_ci	*plvds_chip_info, u8 index);
8862306a36Sopenharmony_civoid viafb_gpio_i2c_write_mask_lvds(struct lvds_setting_information
8962306a36Sopenharmony_ci			      *plvds_setting_info, struct lvds_chip_information
9062306a36Sopenharmony_ci			      *plvds_chip_info, struct IODATA io_data);
9162306a36Sopenharmony_ciint via_fb_pci_probe(struct viafb_dev *vdev);
9262306a36Sopenharmony_civoid via_fb_pci_remove(struct pci_dev *pdev);
9362306a36Sopenharmony_ci/* Temporary */
9462306a36Sopenharmony_ciint viafb_init(void);
9562306a36Sopenharmony_civoid viafb_exit(void);
9662306a36Sopenharmony_ci#endif /* __VIAFBDEV_H__ */
97