📄 sis_main.h
字号:
u8 gmask[72]; int ngmask;} SIS_GLYINFO;#endiftypedef struct _SIS_OH { struct _SIS_OH *poh_next; struct _SIS_OH *poh_prev; unsigned long offset; unsigned long size;} SIS_OH;typedef struct _SIS_OHALLOC { struct _SIS_OHALLOC *poha_next; SIS_OH aoh[1];} SIS_OHALLOC;typedef struct _SIS_HEAP { SIS_OH oh_free; SIS_OH oh_used; SIS_OH *poh_freelist; SIS_OHALLOC *poha_chain; unsigned long max_freesize;} SIS_HEAP;static unsigned long sisfb_hwcursor_vbase;static unsigned long sisfb_heap_start;static unsigned long sisfb_heap_end;static unsigned long sisfb_heap_size;static SIS_HEAP sisfb_heap;static const struct _sis_TV_filter { u8 filter[9][4];} sis_TV_filter[] = { { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_0 */ {0x00,0xE0,0x10,0x60}, {0x00,0xEE,0x10,0x44}, {0x00,0xF4,0x10,0x38}, {0xF8,0xF4,0x18,0x38}, {0xFC,0xFB,0x14,0x2A}, {0x00,0x00,0x10,0x20}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_1 */ {0x00,0xE0,0x10,0x60}, {0x00,0xEE,0x10,0x44}, {0x00,0xF4,0x10,0x38}, {0xF8,0xF4,0x18,0x38}, {0xFC,0xFB,0x14,0x2A}, {0x00,0x00,0x10,0x20}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_2 */ {0xF5,0xEE,0x1B,0x44}, {0xF8,0xF4,0x18,0x38}, {0xEB,0x04,0x25,0x18}, {0xF1,0x05,0x1F,0x16}, {0xF6,0x06,0x1A,0x14}, {0xFA,0x06,0x16,0x14}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_3 */ {0xF1,0x04,0x1F,0x18}, {0xEE,0x0D,0x22,0x06}, {0xF7,0x06,0x19,0x14}, {0xF4,0x0B,0x1C,0x0A}, {0xFA,0x07,0x16,0x12}, {0xF9,0x0A,0x17,0x0C}, {0x00,0x07,0x10,0x12}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_4 */ {0x00,0xE0,0x10,0x60}, {0x00,0xEE,0x10,0x44}, {0x00,0xF4,0x10,0x38}, {0xF8,0xF4,0x18,0x38}, {0xFC,0xFB,0x14,0x2A}, {0x00,0x00,0x10,0x20}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_5 */ {0xF5,0xEE,0x1B,0x44}, {0xF8,0xF4,0x18,0x38}, {0xEB,0x04,0x25,0x18}, {0xF1,0x05,0x1F,0x16}, {0xF6,0x06,0x1A,0x14}, {0xFA,0x06,0x16,0x14}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_6 */ {0xEB,0x04,0x25,0x18}, {0xE7,0x0E,0x29,0x04}, {0xEE,0x0C,0x22,0x08}, {0xF6,0x0B,0x1A,0x0A}, {0xF9,0x0A,0x17,0x0C}, {0xFC,0x0A,0x14,0x0C}, {0x00,0x08,0x10,0x10}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* NTSCFilter_7 */ {0xEC,0x02,0x24,0x1C}, {0xF2,0x04,0x1E,0x18}, {0xEB,0x15,0x25,0xF6}, {0xF4,0x10,0x1C,0x00}, {0xF8,0x0F,0x18,0x02}, {0x00,0x04,0x10,0x18}, {0x01,0x06,0x0F,0x14}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_0 */ {0x00,0xE0,0x10,0x60}, {0x00,0xEE,0x10,0x44}, {0x00,0xF4,0x10,0x38}, {0xF8,0xF4,0x18,0x38}, {0xFC,0xFB,0x14,0x2A}, {0x00,0x00,0x10,0x20}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_1 */ {0x00,0xE0,0x10,0x60}, {0x00,0xEE,0x10,0x44}, {0x00,0xF4,0x10,0x38}, {0xF8,0xF4,0x18,0x38}, {0xFC,0xFB,0x14,0x2A}, {0x00,0x00,0x10,0x20}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_2 */ {0xF5,0xEE,0x1B,0x44}, {0xF8,0xF4,0x18,0x38}, {0xF1,0xF7,0x01,0x32}, {0xF5,0xFB,0x1B,0x2A}, {0xF9,0xFF,0x17,0x22}, {0xFB,0x01,0x15,0x1E}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_3 */ {0xF5,0xFB,0x1B,0x2A}, {0xEE,0xFE,0x22,0x24}, {0xF3,0x00,0x1D,0x20}, {0xF9,0x03,0x17,0x1A}, {0xFB,0x02,0x14,0x1E}, {0xFB,0x04,0x15,0x18}, {0x00,0x06,0x10,0x14}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_4 */ {0x00,0xE0,0x10,0x60}, {0x00,0xEE,0x10,0x44}, {0x00,0xF4,0x10,0x38}, {0xF8,0xF4,0x18,0x38}, {0xFC,0xFB,0x14,0x2A}, {0x00,0x00,0x10,0x20}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_5 */ {0xF5,0xEE,0x1B,0x44}, {0xF8,0xF4,0x18,0x38}, {0xF1,0xF7,0x1F,0x32}, {0xF5,0xFB,0x1B,0x2A}, {0xF9,0xFF,0x17,0x22}, {0xFB,0x01,0x15,0x1E}, {0x00,0x04,0x10,0x18}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_6 */ {0xF5,0xEE,0x1B,0x2A}, {0xEE,0xFE,0x22,0x24}, {0xF3,0x00,0x1D,0x20}, {0xF9,0x03,0x17,0x1A}, {0xFB,0x02,0x14,0x1E}, {0xFB,0x04,0x15,0x18}, {0x00,0x06,0x10,0x14}, {0xFF,0xFF,0xFF,0xFF} }}, { {{0x00,0x00,0x00,0x40}, /* PALFilter_7 */ {0xF5,0xEE,0x1B,0x44}, {0xF8,0xF4,0x18,0x38}, {0xFC,0xFB,0x14,0x2A}, {0xEB,0x05,0x25,0x16}, {0xF1,0x05,0x1F,0x16}, {0xFA,0x07,0x16,0x12}, {0x00,0x07,0x10,0x12}, {0xFF,0xFF,0xFF,0xFF} }}};static int filter = -1;static unsigned char filter_tb;/* ---------------------- Prototypes ------------------------- *//* Interface used by the world */#ifndef MODULEint sisfb_setup(char *options);#endif/* Interface to the low level console driver */int sisfb_init(void);/* fbdev routines */#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0)static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info);static int sisfb_get_var(struct fb_var_screeninfo *var, int con, struct fb_info *info);static int sisfb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info);static void sisfb_crtc_to_var(struct fb_var_screeninfo *var); static int sisfb_get_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info);static int sisfb_set_cmap(struct fb_cmap *cmap, int kspc, int con, struct fb_info *info); static int sisfb_update_var(int con, struct fb_info *info);static int sisfb_switch(int con, struct fb_info *info);static void sisfb_blank(int blank, struct fb_info *info);static void sisfb_set_disp(int con, struct fb_var_screeninfo *var, struct fb_info *info);static int sis_getcolreg(unsigned regno, unsigned *red, unsigned *green, unsigned *blue, unsigned *transp, struct fb_info *fb_info);static void sisfb_do_install_cmap(int con, struct fb_info *info);static void sis_get_glyph(struct fb_info *info, SIS_GLYINFO *gly);static int sisfb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma); static int sisfb_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg, int con, struct fb_info *info); #endif #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)static int sisfb_set_par(struct fb_info *info);static int sisfb_blank(int blank, struct fb_info *info); static int sisfb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma); extern void fbcon_sis_fillrect(struct fb_info *info, const struct fb_fillrect *rect);extern void fbcon_sis_copyarea(struct fb_info *info, const struct fb_copyarea *area);extern int fbcon_sis_sync(struct fb_info *info);static int sisfb_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg, struct fb_info *info);extern int sisfb_mode_rate_to_dclock(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, unsigned char modeno, unsigned char rateindex); extern int sisfb_mode_rate_to_ddata(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, unsigned char modeno, unsigned char rateindex, unsigned int *left_margin, unsigned int *right_margin, unsigned int *upper_margin, unsigned int *lower_margin, unsigned int *hsync_len, unsigned int *vsync_len, unsigned int *sync, unsigned int *vmode); #endif static int sisfb_get_fix(struct fb_fix_screeninfo *fix, int con, struct fb_info *info);/* Internal 2D accelerator functions */extern int sisfb_initaccel(void);extern void sisfb_syncaccel(void);/* Internal general routines */static void sisfb_search_mode(const char *name);static int sisfb_validate_mode(int modeindex, unsigned long vbflags);static u8 sisfb_search_refresh_rate(unsigned int rate, int index);static int sisfb_setcolreg(unsigned regno, unsigned red, unsigned green, unsigned blue, unsigned transp, struct fb_info *fb_info);static int sisfb_do_set_var(struct fb_var_screeninfo *var, int isactive, struct fb_info *info);static void sisfb_pre_setmode(void);static void sisfb_post_setmode(void);static char * sis_find_rom(void);static BOOLEAN sisfb_CheckVBRetrace(void);static BOOLEAN sisfbcheckvretracecrt2(void);static BOOLEAN sisfbcheckvretracecrt1(void);static BOOLEAN sisfb_bridgeisslave(void);static void sisfb_detect_VB_connect(void);static void sisfb_get_VB_type(void);/* SiS-specific Export functions */void sis_dispinfo(struct ap_data *rec);void sis_malloc(struct sis_memreq *req);void sis_free(unsigned long base);/* Internal hardware access routines */void sisfb_set_reg4(u16 port, unsigned long data);u32 sisfb_get_reg3(u16 port);/* Chipset-dependent internal routines */#ifdef CONFIG_FB_SIS_300static int sisfb_get_dram_size_300(void);#endif#ifdef CONFIG_FB_SIS_315static int sisfb_get_dram_size_315(void);#endif/* Internal heap routines */static int sisfb_heap_init(void);static SIS_OH *sisfb_poh_new_node(void);static SIS_OH *sisfb_poh_allocate(unsigned long size);static void sisfb_delete_node(SIS_OH *poh);static void sisfb_insert_node(SIS_OH *pohList, SIS_OH *poh);static SIS_OH *sisfb_poh_free(unsigned long base);static void sisfb_free_node(SIS_OH *poh);/* Internal routines to access PCI configuration space */BOOLEAN sisfb_query_VGA_config_space(PSIS_HW_DEVICE_INFO psishw_ext, unsigned long offset, unsigned long set, unsigned long *value);BOOLEAN sisfb_query_north_bridge_space(PSIS_HW_DEVICE_INFO psishw_ext, unsigned long offset, unsigned long set, unsigned long *value);/* Routines from init.c/init301.c */extern void SiSRegInit(SiS_Private *SiS_Pr, USHORT BaseAddr);extern BOOLEAN SiSInit(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension);extern BOOLEAN SiSSetMode(SiS_Private *SiS_Pr, PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT ModeNo);extern void SiS_SetEnableDstn(SiS_Private *SiS_Pr);extern void SiS_LongWait(SiS_Private *SiS_Pr);/* Chrontel TV functions */extern USHORT SiS_GetCH700x(SiS_Private *SiS_Pr, USHORT tempbx);extern void SiS_SetCH700x(SiS_Private *SiS_Pr, USHORT tempbx);extern USHORT SiS_GetCH701x(SiS_Private *SiS_Pr, USHORT tempbx);extern void SiS_SetCH701x(SiS_Private *SiS_Pr, USHORT tempbx);extern void SiS_SetCH70xxANDOR(SiS_Private *SiS_Pr, USHORT tempax,USHORT tempbh);extern void SiS_DDC2Delay(SiS_Private *SiS_Pr, USHORT delaytime);/* Sensing routines */void SiS_Sense30x(void);int SISDoSense(int tempbl, int tempbh, int tempcl, int tempch);void SiS_SenseCh(void); #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -