svga.h revision e2fade2c146ec718796049104b45267ddbfdf7a1
1a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#ifndef _LINUX_SVGA_H 2a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#define _LINUX_SVGA_H 3a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 4a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#include <linux/pci.h> 5a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#include <video/vga.h> 6a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 7a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek/* Terminator for register set */ 8a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 9a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#define VGA_REGSET_END_VAL 0xFF 10a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#define VGA_REGSET_END {VGA_REGSET_END_VAL, 0, 0} 11a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 12a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekstruct vga_regset { 13a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u8 regnum; 14a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u8 lowbit; 15a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u8 highbit; 16a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek}; 17a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 18a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek/* ------------------------------------------------------------------------- */ 19a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 20a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#define SVGA_FORMAT_END_VAL 0xFFFF 21a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#define SVGA_FORMAT_END {SVGA_FORMAT_END_VAL, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, {0, 0, 0}, 0, 0, 0, 0, 0, 0} 22a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 23a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekstruct svga_fb_format { 24a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek /* var part */ 25a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 bits_per_pixel; 26a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek struct fb_bitfield red; 27a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek struct fb_bitfield green; 28a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek struct fb_bitfield blue; 29a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek struct fb_bitfield transp; 30a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 nonstd; 31a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek /* fix part */ 32a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 type; 33a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 type_aux; 34a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 visual; 35a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 xpanstep; 36a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 xresstep; 37a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek}; 38a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 39a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekstruct svga_timing_regs { 40a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *h_total_regs; 41a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *h_display_regs; 42a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *h_blank_start_regs; 43a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *h_blank_end_regs; 44a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *h_sync_start_regs; 45a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *h_sync_end_regs; 46a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 47a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *v_total_regs; 48a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *v_display_regs; 49a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *v_blank_start_regs; 50a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *v_blank_end_regs; 51a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *v_sync_start_regs; 52a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek const struct vga_regset *v_sync_end_regs; 53a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek}; 54a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 55a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekstruct svga_pll { 56a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u16 m_min; 57a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u16 m_max; 58a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u16 n_min; 59a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u16 n_max; 60a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u16 r_min; 61a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u16 r_max; /* r_max < 32 */ 62a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 f_vco_min; 63a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 f_vco_max; 64a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u32 f_base; 65a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek}; 66a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 67a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 68a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek/* Write a value to the attribute register */ 69a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 70f6b0cc477de99fe715f1071b13ab822daed9a34fDavid Millerstatic inline void svga_wattr(void __iomem *regbase, u8 index, u8 data) 71a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek{ 72f6b0cc477de99fe715f1071b13ab822daed9a34fDavid Miller vga_r(regbase, VGA_IS1_RC); 73f6b0cc477de99fe715f1071b13ab822daed9a34fDavid Miller vga_w(regbase, VGA_ATT_IW, index); 74f6b0cc477de99fe715f1071b13ab822daed9a34fDavid Miller vga_w(regbase, VGA_ATT_W, data); 75a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek} 76a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 77a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek/* Write a value to a sequence register with a mask */ 78a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 79a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekstatic inline void svga_wseq_mask(u8 index, u8 data, u8 mask) 80a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek{ 81a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek vga_wseq(NULL, index, (data & mask) | (vga_rseq(NULL, index) & ~mask)); 82a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek} 83a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 84a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek/* Write a value to a CRT register with a mask */ 85a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 86a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekstatic inline void svga_wcrt_mask(u8 index, u8 data, u8 mask) 87a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek{ 88a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek vga_wcrt(NULL, index, (data & mask) | (vga_rcrt(NULL, index) & ~mask)); 89a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek} 90a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 91a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekstatic inline int svga_primary_device(struct pci_dev *dev) 92a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek{ 93a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek u16 flags; 94a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek pci_read_config_word(dev, PCI_COMMAND, &flags); 95a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek return (flags & PCI_COMMAND_IO); 96a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek} 97a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 98a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 9921da386d0e4c55f6f7482b4637532b942e22b70aDavid Millervoid svga_wcrt_multi(void __iomem *regbase, const struct vga_regset *regset, u32 value); 100dc6aff3a5d3e4f565cb07cd5f3b6983850971da7David Millervoid svga_wseq_multi(void __iomem *regbase, const struct vga_regset *regset, u32 value); 101a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 102e2fade2c146ec718796049104b45267ddbfdf7a1David Millervoid svga_set_default_gfx_regs(void __iomem *regbase); 103a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_set_default_atc_regs(void); 104a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_set_default_seq_regs(void); 105a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_set_default_crt_regs(void); 106a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_set_textmode_vga_regs(void); 107a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 108a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_settile(struct fb_info *info, struct fb_tilemap *map); 109a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_tilecopy(struct fb_info *info, struct fb_tilearea *area); 110a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_tilefill(struct fb_info *info, struct fb_tilerect *rect); 111a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_tileblit(struct fb_info *info, struct fb_tileblit *blit); 112a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_tilecursor(struct fb_info *info, struct fb_tilecursor *cursor); 11334ed25f50b347c7e1ff78f9308e025ddd57c2f20Ondrej Zajicekint svga_get_tilemax(struct fb_info *info); 1145a87ede94595f58934000e26e8b13398e63868b5Antonino A. Daplasvoid svga_get_caps(struct fb_info *info, struct fb_blit_caps *caps, 1155a87ede94595f58934000e26e8b13398e63868b5Antonino A. Daplas struct fb_var_screeninfo *var); 116a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 117a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekint svga_compute_pll(const struct svga_pll *pll, u32 f_wanted, u16 *m, u16 *n, u16 *r, int node); 118a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekint svga_check_timings(const struct svga_timing_regs *tm, struct fb_var_screeninfo *var, int node); 119a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekvoid svga_set_timings(const struct svga_timing_regs *tm, struct fb_var_screeninfo *var, u32 hmul, u32 hdiv, u32 vmul, u32 vdiv, u32 hborder, int node); 120a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 121a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicekint svga_match_format(const struct svga_fb_format *frm, struct fb_var_screeninfo *var, struct fb_fix_screeninfo *fix); 122a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 123a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek#endif /* _LINUX_SVGA_H */ 124a268422de8bf1b4c0cb97987b6c329c9f6a3da4bOndrej Zajicek 125