0001
0002 #ifndef __MB862XX_H__
0003 #define __MB862XX_H__
0004
0005 struct mb862xx_l1_cfg {
0006 unsigned short sx;
0007 unsigned short sy;
0008 unsigned short sw;
0009 unsigned short sh;
0010 unsigned short dx;
0011 unsigned short dy;
0012 unsigned short dw;
0013 unsigned short dh;
0014 int mirror;
0015 };
0016
0017 #define MB862XX_BASE 'M'
0018 #define MB862XX_L1_GET_CFG _IOR(MB862XX_BASE, 0, struct mb862xx_l1_cfg*)
0019 #define MB862XX_L1_SET_CFG _IOW(MB862XX_BASE, 1, struct mb862xx_l1_cfg*)
0020 #define MB862XX_L1_ENABLE _IOW(MB862XX_BASE, 2, int)
0021 #define MB862XX_L1_CAP_CTL _IOW(MB862XX_BASE, 3, int)
0022
0023 #ifdef __KERNEL__
0024
0025 #define PCI_VENDOR_ID_FUJITSU_LIMITED 0x10cf
0026 #define PCI_DEVICE_ID_FUJITSU_CORALP 0x2019
0027 #define PCI_DEVICE_ID_FUJITSU_CORALPA 0x201e
0028 #define PCI_DEVICE_ID_FUJITSU_CARMINE 0x202b
0029
0030 #define GC_MMR_CORALP_EVB_VAL 0x11d7fa13
0031
0032 enum gdctype {
0033 BT_NONE,
0034 BT_LIME,
0035 BT_MINT,
0036 BT_CORAL,
0037 BT_CORALP,
0038 BT_CARMINE,
0039 };
0040
0041 struct mb862xx_gc_mode {
0042 struct fb_videomode def_mode;
0043 unsigned int def_bpp;
0044 unsigned long max_vram;
0045 unsigned long ccf;
0046 unsigned long mmr;
0047 };
0048
0049
0050 struct mb862xxfb_par {
0051 struct fb_info *info;
0052 struct device *dev;
0053 struct pci_dev *pdev;
0054 struct resource *res;
0055
0056 resource_size_t fb_base_phys;
0057 resource_size_t mmio_base_phys;
0058 void __iomem *fb_base;
0059 void __iomem *mmio_base;
0060 size_t mapped_vram;
0061 size_t mmio_len;
0062 unsigned long cap_buf;
0063 size_t cap_len;
0064
0065 void __iomem *host;
0066 void __iomem *i2c;
0067 void __iomem *disp;
0068 void __iomem *disp1;
0069 void __iomem *cap;
0070 void __iomem *cap1;
0071 void __iomem *draw;
0072 void __iomem *geo;
0073 void __iomem *pio;
0074 void __iomem *ctrl;
0075 void __iomem *dram_ctrl;
0076 void __iomem *wrback;
0077
0078 unsigned int irq;
0079 unsigned int type;
0080 unsigned int refclk;
0081 struct mb862xx_gc_mode *gc_mode;
0082 int pre_init;
0083 struct i2c_adapter *adap;
0084 int i2c_rs;
0085
0086 struct mb862xx_l1_cfg l1_cfg;
0087 int l1_stride;
0088
0089 u32 pseudo_palette[16];
0090 };
0091
0092 extern void mb862xxfb_init_accel(struct fb_info *info, struct fb_ops *fbops, int xres);
0093 #ifdef CONFIG_FB_MB862XX_I2C
0094 extern int mb862xx_i2c_init(struct mb862xxfb_par *par);
0095 extern void mb862xx_i2c_exit(struct mb862xxfb_par *par);
0096 #else
0097 static inline int mb862xx_i2c_init(struct mb862xxfb_par *par) { return 0; }
0098 static inline void mb862xx_i2c_exit(struct mb862xxfb_par *par) { }
0099 #endif
0100
0101 #if defined(CONFIG_FB_MB862XX_LIME) && defined(CONFIG_FB_MB862XX_PCI_GDC)
0102 #error "Select Lime GDC or CoralP/Carmine support, but not both together"
0103 #endif
0104 #if defined(CONFIG_FB_MB862XX_LIME)
0105 #define gdc_read __raw_readl
0106 #define gdc_write __raw_writel
0107 #else
0108 #define gdc_read readl
0109 #define gdc_write writel
0110 #endif
0111
0112 #define inreg(type, off) \
0113 gdc_read((par->type + (off)))
0114
0115 #define outreg(type, off, val) \
0116 gdc_write((val), (par->type + (off)))
0117
0118 #define pack(a, b) (((a) << 16) | (b))
0119
0120 #endif
0121
0122 #endif