neofb.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:6k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * linux/drivers/video/neofb.h -- NeoMagic Framebuffer Driver
  3.  *
  4.  * Copyright (c) 2001  Denis Oliver Kropp <dok@convergence.de>
  5.  *
  6.  * This file is subject to the terms and conditions of the GNU General
  7.  * Public License.  See the file COPYING in the main directory of this
  8.  * archive for more details.
  9.  */
  10. #ifdef NEOFB_DEBUG
  11. # define DBG(x) printk (KERN_DEBUG "neofb: %sn", (x));
  12. #else
  13. # define DBG(x)
  14. #endif
  15. #define PCI_CHIP_NM2070 0x0001
  16. #define PCI_CHIP_NM2090 0x0002
  17. #define PCI_CHIP_NM2093 0x0003
  18. #define PCI_CHIP_NM2097 0x0083
  19. #define PCI_CHIP_NM2160 0x0004
  20. #define PCI_CHIP_NM2200 0x0005
  21. #define PCI_CHIP_NM2230 0x0025
  22. #define PCI_CHIP_NM2360 0x0006
  23. #define PCI_CHIP_NM2380 0x0016
  24. struct xtimings {
  25.   unsigned int pixclock;
  26.   unsigned int HDisplay;
  27.   unsigned int HSyncStart;
  28.   unsigned int HSyncEnd;
  29.   unsigned int HTotal;
  30.   unsigned int VDisplay;
  31.   unsigned int VSyncStart;
  32.   unsigned int VSyncEnd;
  33.   unsigned int VTotal;
  34.   unsigned int sync;
  35.   int        dblscan;
  36.   int        interlaced;
  37. };
  38. /* --------------------------------------------------------------------- */
  39. typedef volatile struct {
  40.   __u32 bltStat;
  41.   __u32 bltCntl;
  42.   __u32 xpColor;
  43.   __u32 fgColor;
  44.   __u32 bgColor;
  45.   __u32 pitch;
  46.   __u32 clipLT;
  47.   __u32 clipRB;
  48.   __u32 srcBitOffset;
  49.   __u32 srcStart;
  50.   __u32 reserved0;
  51.   __u32 dstStart;
  52.   __u32 xyExt;
  53.   __u32 reserved1[19];
  54.   __u32 pageCntl;
  55.   __u32 pageBase;
  56.   __u32 postBase;
  57.   __u32 postPtr;
  58.   __u32 dataPtr;
  59. } Neo2200;
  60. #define NR_PALETTE 256
  61. #define MMIO_SIZE 0x200000
  62. #define NEO_EXT_CR_MAX 0x85
  63. #define NEO_EXT_GR_MAX 0xC7
  64. struct neofb_par {
  65.   int depth;
  66.   unsigned char MiscOutReg;     /* Misc */
  67.   unsigned char CRTC[25];       /* Crtc Controller */
  68.   unsigned char Sequencer[5];   /* Video Sequencer */
  69.   unsigned char Graphics[9];    /* Video Graphics */
  70.   unsigned char Attribute[21];  /* Video Atribute */
  71.   unsigned char GeneralLockReg;
  72.   unsigned char ExtCRTDispAddr;
  73.   unsigned char ExtCRTOffset;
  74.   unsigned char SysIfaceCntl1;
  75.   unsigned char SysIfaceCntl2;
  76.   unsigned char ExtColorModeSelect;
  77.   unsigned char biosMode;
  78.   unsigned char PanelDispCntlReg1;
  79.   unsigned char PanelDispCntlReg2;
  80.   unsigned char PanelDispCntlReg3;
  81.   unsigned char PanelVertCenterReg1;
  82.   unsigned char PanelVertCenterReg2;
  83.   unsigned char PanelVertCenterReg3;
  84.   unsigned char PanelVertCenterReg4;
  85.   unsigned char PanelVertCenterReg5;
  86.   unsigned char PanelHorizCenterReg1;
  87.   unsigned char PanelHorizCenterReg2;
  88.   unsigned char PanelHorizCenterReg3;
  89.   unsigned char PanelHorizCenterReg4;
  90.   unsigned char PanelHorizCenterReg5;
  91.   int           ProgramVCLK;
  92.   unsigned char VCLK3NumeratorLow;
  93.   unsigned char VCLK3NumeratorHigh;
  94.   unsigned char VCLK3Denominator;
  95.   unsigned char VerticalExt;
  96. };
  97. struct neofb_info {
  98.   struct fb_info  fb;
  99.   struct display_switch *dispsw;
  100.   struct pci_dev *pcidev;
  101.   int   currcon;
  102.   int   accel;
  103.   char *name;
  104.   struct {
  105.     u8    *vbase;
  106.     u32    pbase;
  107.     u32    len;
  108. #ifdef CONFIG_MTRR
  109.     int    mtrr;
  110. #endif
  111.   } video;
  112.   struct {
  113.     u8    *vbase;
  114.     u32    pbase;
  115.     u32    len;
  116.   } mmio;
  117.   Neo2200 *neo2200;
  118.   /* Panels size */
  119.   int NeoPanelWidth;
  120.   int NeoPanelHeight;
  121.   int maxClock;
  122.   int pci_burst;
  123.   int lcd_stretch;
  124.   int internal_display;
  125.   int external_display;
  126.   struct {
  127.     u16 red, green, blue, transp;
  128.   } palette[NR_PALETTE];
  129. };
  130. typedef struct {
  131.     int x_res;
  132.     int y_res;
  133.     int mode;
  134. } biosMode;
  135. /* vga IO functions */
  136. static inline u8 VGArCR (u8 index)
  137. {
  138.   outb (index, 0x3d4);
  139.   return inb (0x3d5);
  140. }
  141. static inline void VGAwCR (u8 index, u8 val)
  142. {
  143.   outb (index, 0x3d4);
  144.   outb (val, 0x3d5);
  145. }
  146. static inline u8 VGArGR (u8 index)
  147. {
  148.   outb (index, 0x3ce);
  149.   return inb (0x3cf);
  150. }
  151. static inline void VGAwGR (u8 index, u8 val)
  152. {
  153.   outb (index, 0x3ce);
  154.   outb (val, 0x3cf);
  155. }
  156. static inline u8 VGArSEQ (u8 index)
  157. {
  158.   outb (index, 0x3c4);
  159.   return inb (0x3c5);
  160. }
  161. static inline void VGAwSEQ (u8 index, u8 val)
  162. {
  163.   outb (index, 0x3c4);
  164.   outb (val, 0x3c5);
  165. }
  166. static int paletteEnabled = 0;
  167. static inline void VGAenablePalette (void)
  168. {
  169.   u8 tmp;
  170.   tmp = inb (0x3da);
  171.   outb (0x00, 0x3c0);
  172.   paletteEnabled = 1;
  173. }
  174. static inline void VGAdisablePalette (void)
  175. {
  176.   u8 tmp;
  177.   tmp = inb (0x3da);
  178.   outb (0x20, 0x3c0);
  179.   paletteEnabled = 0;
  180. }
  181. static inline void VGAwATTR (u8 index, u8 value)
  182. {
  183.   u8 tmp;
  184.   if (paletteEnabled)
  185.     index &= ~0x20;
  186.   else
  187.     index |= 0x20;
  188.   tmp = inb (0x3da);
  189.   outb (index, 0x3c0);
  190.   outb (value, 0x3c0);
  191. }
  192. static inline void VGAwMISC (u8 value)
  193. {
  194.   outb (value, 0x3c2);
  195. }
  196. #define NEO_BS0_BLT_BUSY        0x00000001
  197. #define NEO_BS0_FIFO_AVAIL      0x00000002
  198. #define NEO_BS0_FIFO_PEND       0x00000004
  199. #define NEO_BC0_DST_Y_DEC       0x00000001
  200. #define NEO_BC0_X_DEC           0x00000002
  201. #define NEO_BC0_SRC_TRANS       0x00000004
  202. #define NEO_BC0_SRC_IS_FG       0x00000008
  203. #define NEO_BC0_SRC_Y_DEC       0x00000010
  204. #define NEO_BC0_FILL_PAT        0x00000020
  205. #define NEO_BC0_SRC_MONO        0x00000040
  206. #define NEO_BC0_SYS_TO_VID      0x00000080
  207. #define NEO_BC1_DEPTH8          0x00000100
  208. #define NEO_BC1_DEPTH16         0x00000200
  209. #define NEO_BC1_X_320           0x00000400
  210. #define NEO_BC1_X_640           0x00000800
  211. #define NEO_BC1_X_800           0x00000c00
  212. #define NEO_BC1_X_1024          0x00001000
  213. #define NEO_BC1_X_1152          0x00001400
  214. #define NEO_BC1_X_1280          0x00001800
  215. #define NEO_BC1_X_1600          0x00001c00
  216. #define NEO_BC1_DST_TRANS       0x00002000
  217. #define NEO_BC1_MSTR_BLT        0x00004000
  218. #define NEO_BC1_FILTER_Z        0x00008000
  219. #define NEO_BC2_WR_TR_DST       0x00800000
  220. #define NEO_BC3_SRC_XY_ADDR     0x01000000
  221. #define NEO_BC3_DST_XY_ADDR     0x02000000
  222. #define NEO_BC3_CLIP_ON         0x04000000
  223. #define NEO_BC3_FIFO_EN         0x08000000
  224. #define NEO_BC3_BLT_ON_ADDR     0x10000000
  225. #define NEO_BC3_SKIP_MAPPING    0x80000000
  226. #define NEO_MODE1_DEPTH8        0x0100
  227. #define NEO_MODE1_DEPTH16       0x0200
  228. #define NEO_MODE1_DEPTH24       0x0300
  229. #define NEO_MODE1_X_320         0x0400
  230. #define NEO_MODE1_X_640         0x0800
  231. #define NEO_MODE1_X_800         0x0c00
  232. #define NEO_MODE1_X_1024        0x1000
  233. #define NEO_MODE1_X_1152        0x1400
  234. #define NEO_MODE1_X_1280        0x1800
  235. #define NEO_MODE1_X_1600        0x1c00
  236. #define NEO_MODE1_BLT_ON_ADDR   0x2000