root/drivers/staging/sm750fb/sm750.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ps_to_hz

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef LYNXDRV_H_
   3 #define LYNXDRV_H_
   4 
   5 #define FB_ACCEL_SMI 0xab
   6 
   7 #define MHZ(x) ((x) * 1000000)
   8 
   9 #define DEFAULT_SM750_CHIP_CLOCK        290
  10 #define DEFAULT_SM750LE_CHIP_CLOCK      333
  11 #ifndef SM750LE_REVISION_ID
  12 #define SM750LE_REVISION_ID ((unsigned char)0xfe)
  13 #endif
  14 
  15 enum sm750_pnltype {
  16         sm750_24TFT = 0,        /* 24bit tft */
  17         sm750_dualTFT = 2,      /* dual 18 bit tft */
  18         sm750_doubleTFT = 1,    /* 36 bit double pixel tft */
  19 };
  20 
  21 /* vga channel is not concerned  */
  22 enum sm750_dataflow {
  23         sm750_simul_pri,        /* primary => all head */
  24         sm750_simul_sec,        /* secondary => all head */
  25         sm750_dual_normal,      /* primary => panel head and secondary => crt */
  26         sm750_dual_swap,        /* primary => crt head and secondary => panel */
  27 };
  28 
  29 enum sm750_channel {
  30         sm750_primary = 0,
  31         /* enum value equal to the register filed data */
  32         sm750_secondary = 1,
  33 };
  34 
  35 enum sm750_path {
  36         sm750_panel = 1,
  37         sm750_crt = 2,
  38         sm750_pnc = 3,  /* panel and crt */
  39 };
  40 
  41 struct init_status {
  42         ushort powerMode;
  43         /* below three clocks are in unit of MHZ*/
  44         ushort chip_clk;
  45         ushort mem_clk;
  46         ushort master_clk;
  47         ushort setAllEngOff;
  48         ushort resetMemory;
  49 };
  50 
  51 struct lynx_accel {
  52         /* base virtual address of DPR registers */
  53         volatile unsigned char __iomem *dprBase;
  54         /* base virtual address of de data port */
  55         volatile unsigned char __iomem *dpPortBase;
  56 
  57         /* function pointers */
  58         void (*de_init)(struct lynx_accel *);
  59 
  60         int (*de_wait)(void);/* see if hardware ready to work */
  61 
  62         int (*de_fillrect)(struct lynx_accel *, u32, u32, u32, u32,
  63                                                 u32, u32, u32, u32, u32);
  64 
  65         int (*de_copyarea)(struct lynx_accel *, u32, u32, u32, u32,
  66                                                 u32, u32, u32, u32,
  67                                                 u32, u32, u32, u32);
  68 
  69         int (*de_imageblit)(struct lynx_accel *, const char *, u32, u32, u32, u32,
  70                                                                u32, u32, u32, u32,
  71                                                                u32, u32, u32, u32);
  72 
  73 };
  74 
  75 struct sm750_dev {
  76         /* common members */
  77         u16 devid;
  78         u8 revid;
  79         struct pci_dev *pdev;
  80         struct fb_info *fbinfo[2];
  81         struct lynx_accel accel;
  82         int accel_off;
  83         int fb_count;
  84         int mtrr_off;
  85         struct{
  86                 int vram;
  87         } mtrr;
  88         /* all smi graphic adaptor got below attributes */
  89         unsigned long vidmem_start;
  90         unsigned long vidreg_start;
  91         __u32 vidmem_size;
  92         __u32 vidreg_size;
  93         void __iomem *pvReg;
  94         unsigned char __iomem *pvMem;
  95         /* locks*/
  96         spinlock_t slock;
  97 
  98         struct init_status initParm;
  99         enum sm750_pnltype pnltype;
 100         enum sm750_dataflow dataflow;
 101         int nocrt;
 102 
 103         /*
 104          * 0: no hardware cursor
 105          * 1: primary crtc hw cursor enabled,
 106          * 2: secondary crtc hw cursor enabled
 107          * 3: both ctrc hw cursor enabled
 108          */
 109         int hwCursor;
 110 };
 111 
 112 struct lynx_cursor {
 113         /* cursor width ,height and size */
 114         int w;
 115         int h;
 116         int size;
 117         /* hardware limitation */
 118         int maxW;
 119         int maxH;
 120         /* base virtual address and offset  of cursor image */
 121         char __iomem *vstart;
 122         int offset;
 123         /* mmio addr of hw cursor */
 124         volatile char __iomem *mmio;
 125 };
 126 
 127 struct lynxfb_crtc {
 128         unsigned char __iomem *vCursor; /* virtual address of cursor */
 129         unsigned char __iomem *vScreen; /* virtual address of on_screen */
 130         int oCursor; /* cursor address offset in vidmem */
 131         int oScreen; /* onscreen address offset in vidmem */
 132         int channel;/* which channel this crtc stands for*/
 133         resource_size_t vidmem_size;/* this view's video memory max size */
 134 
 135         /* below attributes belong to info->fix, their value depends on specific adaptor*/
 136         u16 line_pad;/* padding information:0,1,2,4,8,16,... */
 137         u16 xpanstep;
 138         u16 ypanstep;
 139         u16 ywrapstep;
 140 
 141         void *priv;
 142 
 143         /* cursor information */
 144         struct lynx_cursor cursor;
 145 };
 146 
 147 struct lynxfb_output {
 148         int dpms;
 149         int paths;
 150         /*
 151          * which paths(s) this output stands for,for sm750:
 152          * paths=1:means output for panel paths
 153          * paths=2:means output for crt paths
 154          * paths=3:means output for both panel and crt paths
 155          */
 156 
 157         int *channel;
 158         /*
 159          * which channel these outputs linked with,for sm750:
 160          * *channel=0 means primary channel
 161          * *channel=1 means secondary channel
 162          * output->channel ==> &crtc->channel
 163          */
 164         void *priv;
 165 
 166         int (*proc_setBLANK)(struct lynxfb_output*, int);
 167 };
 168 
 169 struct lynxfb_par {
 170         /* either 0 or 1 for dual head adaptor,0 is the older one registered */
 171         int index;
 172         unsigned int pseudo_palette[256];
 173         struct lynxfb_crtc crtc;
 174         struct lynxfb_output output;
 175         struct fb_info *info;
 176         struct sm750_dev *dev;
 177 };
 178 
 179 static inline unsigned long ps_to_hz(unsigned int psvalue)
 180 {
 181         unsigned long long numerator = 1000 * 1000 * 1000 * 1000ULL;
 182         /* 10^12 / picosecond period gives frequency in Hz */
 183         do_div(numerator, psvalue);
 184         return (unsigned long)numerator;
 185 }
 186 
 187 int hw_sm750_map(struct sm750_dev *sm750_dev, struct pci_dev *pdev);
 188 int hw_sm750_inithw(struct sm750_dev *sm750_dev, struct pci_dev *pdev);
 189 void hw_sm750_initAccel(struct sm750_dev *sm750_dev);
 190 int hw_sm750_deWait(void);
 191 int hw_sm750le_deWait(void);
 192 
 193 int hw_sm750_output_setMode(struct lynxfb_output *output,
 194                             struct fb_var_screeninfo *var,
 195                             struct fb_fix_screeninfo *fix);
 196 
 197 int hw_sm750_crtc_checkMode(struct lynxfb_crtc *crtc,
 198                             struct fb_var_screeninfo *var);
 199 
 200 int hw_sm750_crtc_setMode(struct lynxfb_crtc *crtc,
 201                           struct fb_var_screeninfo *var,
 202                           struct fb_fix_screeninfo *fix);
 203 
 204 int hw_sm750_setColReg(struct lynxfb_crtc *crtc, ushort index,
 205                        ushort red, ushort green, ushort blue);
 206 
 207 int hw_sm750_setBLANK(struct lynxfb_output *output, int blank);
 208 int hw_sm750le_setBLANK(struct lynxfb_output *output, int blank);
 209 int hw_sm750_pan_display(struct lynxfb_crtc *crtc,
 210                          const struct fb_var_screeninfo *var,
 211                          const struct fb_info *info);
 212 
 213 #endif

/* [<][>][^][v][top][bottom][index][help] */