📄 sis_main.h
字号:
{"1280x960x32", 0x7E, 1280, 960, 32, 1, 160, 60}, /* TW */ {"1280x1024x8", 0x3A, 1280, 1024, 8, 2, 160, 64}, {"1280x1024x16", 0x4D, 1280, 1024, 16, 2, 160, 64}, {"1280x1024x24", 0x65, 1280, 1024, 32, 2, 160, 64}, /* TW */ {"1280x1024x32", 0x65, 1280, 1024, 32, 2, 160, 64}, {"1600x1200x8", 0x3C, 1600, 1200, 8, 1, 200, 75}, {"1600x1200x16", 0x3D, 1600, 1200, 16, 1, 200, 75}, {"1600x1200x24", 0x66, 1600, 1200, 32, 1, 200, 75}, /* TW */ {"1600x1200x32", 0x66, 1600, 1200, 32, 1, 200, 75}, {"1920x1440x8", 0x68, 1920, 1440, 8, 1, 240, 75}, {"1920x1440x16", 0x69, 1920, 1440, 16, 1, 240, 75}, {"1920x1440x24", 0x6B, 1920, 1440, 32, 1, 240, 75}, /* TW */ {"1920x1440x32", 0x6B, 1920, 1440, 32, 1, 240, 75}, {"\0", 0x00, 0, 0, 0, 0, 0, 0}};static const struct _sis_crt2type { char name[6]; int type_no;} sis_crt2type[] = { {"NONE", 0}, {"LCD", DISPTYPE_LCD}, {"TV", DISPTYPE_TV}, {"VGA", DISPTYPE_CRT2}, {"none", 0}, /* TW: make it fool-proof */ {"lcd", DISPTYPE_LCD}, {"tv", DISPTYPE_TV}, {"vga", DISPTYPE_CRT2}, {"\0", -1}};static const struct _sis_queuemode { char name[6]; int type_no;} sis_queuemode[] = { {"AGP", AGP_CMD_QUEUE}, {"VRAM", VM_CMD_QUEUE}, {"MMIO", MMIO_CMD}, {"agp", AGP_CMD_QUEUE}, {"vram", VM_CMD_QUEUE}, {"mmio", MMIO_CMD}, {"\0", -1}};static struct _sis_vrate { u16 idx; u16 xres; u16 yres; u16 refresh;} sisfb_vrate[] = { {1, 640, 480, 60}, {2, 640, 480, 72}, {3, 640, 480, 75}, {4, 640, 480, 85}, {5, 640, 480, 100}, {6, 640, 480, 120}, {7, 640, 480, 160}, {8, 640, 480, 200}, {1, 720, 480, 60}, {1, 720, 576, 50}, {1, 800, 600, 56}, {2, 800, 600, 60}, {3, 800, 600, 72}, {4, 800, 600, 75}, {5, 800, 600, 85}, {6, 800, 600, 100}, {7, 800, 600, 120}, {8, 800, 600, 160}, {1, 1024, 768, 43}, {2, 1024, 768, 60}, {3, 1024, 768, 70}, {4, 1024, 768, 75}, {5, 1024, 768, 85}, {6, 1024, 768, 100}, {7, 1024, 768, 120}, {1, 1280, 1024, 43}, {2, 1280, 1024, 60}, {3, 1280, 1024, 75}, {4, 1280, 1024, 85}, /* TW: Values for 1280x960 guessed */ {1, 1280, 960, 43}, /* {1, 1280, 960, 60}, */ {1, 1600, 1200, 60}, {2, 1600, 1200, 65}, {3, 1600, 1200, 70}, {4, 1600, 1200, 75}, {5, 1600, 1200, 85}, {1, 1920, 1440, 60}, {0, 0, 0, 0}};/* Offscreen layout */typedef struct _SIS_GLYINFO { unsigned char ch; int fontwidth; int fontheight; u8 gmask[72]; int ngmask;} SIS_GLYINFO;typedef 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;// Eden Chenstatic 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;//~Eden Chen/* ---------------------- Routine Prototype ------------------------- *//* Interface used by the world */int sisfb_setup(char *options);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 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_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg, int con, struct fb_info *info);/* Interface to the low level console driver */int sisfb_init(void);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);/* hardware access routines */void sisfb_set_reg1(u16 port, u16 index, u16 data);void sisfb_set_reg3(u16 port, u16 data);void sisfb_set_reg4(u16 port, unsigned long data);u8 sisfb_get_reg1(u16 port, u16 index);u8 sisfb_get_reg2(u16 port);u32 sisfb_get_reg3(u16 port);// Eden Chen//void sisfb_clear_DAC(u16 port);//void sisfb_clear_buffer(PHW_DEVICE_EXTENSION psishw_ext);// ~Eden Chen/* Internal routines */static void sisfb_search_mode(const char *name);static void sisfb_validate_mode(void);static u8 sisfb_search_refresh_rate(unsigned int rate);static int sis_getcolreg(unsigned regno, unsigned *red, unsigned *green, unsigned *blue, unsigned *transp, struct fb_info *fb_info);static int sis_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_set_disp(int con, struct fb_var_screeninfo *var);static void sisfb_do_install_cmap(int con, struct fb_info *info);/* Chip-dependent Routines */#ifdef CONFIG_FB_SIS_300static int sisfb_get_dram_size_300(void);//extern BOOLEAN SiSInit300(PHW_DEVICE_EXTENSION HwDeviceExtension);static void sisfb_detect_VB_connect_300(void);static void sisfb_get_VB_type_300(void);static int sisfb_has_VB_300(void);//extern BOOLEAN SiSSetMode(PHW_DEVICE_EXTENSION HwDeviceExtension,USHORT ModeNo);#endif#ifdef CONFIG_FB_SIS_315static int sisfb_get_dram_size_315(void);//extern BOOLEAN SiSInit310(PHW_DEVICE_EXTENSION HwDeviceExtension);static void sisfb_detect_VB_connect_315(void);static void sisfb_get_VB_type_315(void);static int sisfb_has_VB_315(void);//extern BOOLEAN SiSSetMode310(PHW_DEVICE_EXTENSION HwDeviceExtension, USHORT ModeNo);#endif/* SetMode routines */// Eden Chenextern BOOLEAN SiSSetMode(PSIS_HW_DEVICE_INFO HwDeviceExtension, USHORT ModeNo);extern BOOLEAN SiSInit(PSIS_HW_DEVICE_INFO HwDeviceExtension);extern void SetEnableDstn(void);// ~Eden Chenextern void SiSRegInit(USHORT BaseAddr);extern USHORT SiS_GetCH7005(USHORT tempbx);extern void SiS_SetCH7005(USHORT tempbx);extern void SiS_SetCHTVRegANDOR(USHORT tempax,USHORT tempbh);static void sisfb_pre_setmode(void);static void sisfb_post_setmode(void);static void sisfb_crtc_to_var(struct fb_var_screeninfo *var);/* Export functions */static void sis_get_glyph(SIS_GLYINFO *gly);void sis_dispinfo(struct ap_data *rec);void sis_malloc(struct sis_memreq *req);void sis_free(unsigned long base);/* 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);/* 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);#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -