home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / video / uvesafb.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  3.7 KB  |  194 lines

  1. #ifndef _UVESAFB_H
  2. #define _UVESAFB_H
  3.  
  4. struct v86_regs {
  5.     __u32 ebx;
  6.     __u32 ecx;
  7.     __u32 edx;
  8.     __u32 esi;
  9.     __u32 edi;
  10.     __u32 ebp;
  11.     __u32 eax;
  12.     __u32 eip;
  13.     __u32 eflags;
  14.     __u32 esp;
  15.     __u16 cs;
  16.     __u16 ss;
  17.     __u16 es;
  18.     __u16 ds;
  19.     __u16 fs;
  20.     __u16 gs;
  21. };
  22.  
  23. /* Task flags */
  24. #define TF_VBEIB    0x01
  25. #define TF_BUF_ESDI    0x02
  26. #define TF_BUF_ESBX    0x04
  27. #define TF_BUF_RET    0x08
  28. #define TF_EXIT        0x10
  29.  
  30. struct uvesafb_task {
  31.     __u8 flags;
  32.     int buf_len;
  33.     struct v86_regs regs;
  34. };
  35.  
  36. /* Constants for the capabilities field
  37.  * in vbe_ib */
  38. #define VBE_CAP_CAN_SWITCH_DAC    0x01
  39. #define VBE_CAP_VGACOMPAT    0x02
  40.  
  41. /* The VBE Info Block */
  42. struct vbe_ib {
  43.     char  vbe_signature[4];
  44.     __u16 vbe_version;
  45.     __u32 oem_string_ptr;
  46.     __u32 capabilities;
  47.     __u32 mode_list_ptr;
  48.     __u16 total_memory;
  49.     __u16 oem_software_rev;
  50.     __u32 oem_vendor_name_ptr;
  51.     __u32 oem_product_name_ptr;
  52.     __u32 oem_product_rev_ptr;
  53.     __u8  reserved[222];
  54.     char  oem_data[256];
  55.     char  misc_data[512];
  56. } __attribute__ ((packed));
  57.  
  58. #ifdef __KERNEL__
  59.  
  60. /* VBE CRTC Info Block */
  61. struct vbe_crtc_ib {
  62.     u16 horiz_total;
  63.     u16 horiz_start;
  64.     u16 horiz_end;
  65.     u16 vert_total;
  66.     u16 vert_start;
  67.     u16 vert_end;
  68.     u8  flags;
  69.     u32 pixel_clock;
  70.     u16 refresh_rate;
  71.     u8  reserved[40];
  72. } __attribute__ ((packed));
  73.  
  74. #define VBE_MODE_VGACOMPAT    0x20
  75. #define VBE_MODE_COLOR        0x08
  76. #define VBE_MODE_SUPPORTEDHW    0x01
  77. #define VBE_MODE_GRAPHICS    0x10
  78. #define VBE_MODE_LFB        0x80
  79.  
  80. #define VBE_MODE_MASK        (VBE_MODE_COLOR | VBE_MODE_SUPPORTEDHW | \
  81.                 VBE_MODE_GRAPHICS | VBE_MODE_LFB)
  82.  
  83. /* VBE Mode Info Block */
  84. struct vbe_mode_ib {
  85.     /* for all VBE revisions */
  86.     u16 mode_attr;
  87.     u8  winA_attr;
  88.     u8  winB_attr;
  89.     u16 win_granularity;
  90.     u16 win_size;
  91.     u16 winA_seg;
  92.     u16 winB_seg;
  93.     u32 win_func_ptr;
  94.     u16 bytes_per_scan_line;
  95.  
  96.     /* for VBE 1.2+ */
  97.     u16 x_res;
  98.     u16 y_res;
  99.     u8  x_char_size;
  100.     u8  y_char_size;
  101.     u8  planes;
  102.     u8  bits_per_pixel;
  103.     u8  banks;
  104.     u8  memory_model;
  105.     u8  bank_size;
  106.     u8  image_pages;
  107.     u8  reserved1;
  108.  
  109.     /* Direct color fields for direct/6 and YUV/7 memory models. */
  110.     /* Offsets are bit positions of lsb in the mask. */
  111.     u8  red_len;
  112.     u8  red_off;
  113.     u8  green_len;
  114.     u8  green_off;
  115.     u8  blue_len;
  116.     u8  blue_off;
  117.     u8  rsvd_len;
  118.     u8  rsvd_off;
  119.     u8  direct_color_info;    /* direct color mode attributes */
  120.  
  121.     /* for VBE 2.0+ */
  122.     u32 phys_base_ptr;
  123.     u8  reserved2[6];
  124.  
  125.     /* for VBE 3.0+ */
  126.     u16 lin_bytes_per_scan_line;
  127.     u8  bnk_image_pages;
  128.     u8  lin_image_pages;
  129.     u8  lin_red_len;
  130.     u8  lin_red_off;
  131.     u8  lin_green_len;
  132.     u8  lin_green_off;
  133.     u8  lin_blue_len;
  134.     u8  lin_blue_off;
  135.     u8  lin_rsvd_len;
  136.     u8  lin_rsvd_off;
  137.     u32 max_pixel_clock;
  138.     u16 mode_id;
  139.     u8  depth;
  140. } __attribute__ ((packed));
  141.  
  142. #define UVESAFB_DEFAULT_MODE "640x480-16"
  143.  
  144. /* How long to wait for a reply from userspace [ms] */
  145. #define UVESAFB_TIMEOUT 5000
  146.  
  147. /* Max number of concurrent tasks */
  148. #define UVESAFB_TASKS_MAX 16
  149.  
  150. #define dac_reg    (0x3c8)
  151. #define dac_val    (0x3c9)
  152.  
  153. struct uvesafb_pal_entry {
  154.     u_char blue, green, red, pad;
  155. } __attribute__ ((packed));
  156.  
  157. struct uvesafb_ktask {
  158.     struct uvesafb_task t;
  159.     void *buf;
  160.     struct completion *done;
  161.     u32 ack;
  162. };
  163.  
  164. static int uvesafb_exec(struct uvesafb_ktask *tsk);
  165.  
  166. #define UVESAFB_EXACT_RES    1
  167. #define UVESAFB_EXACT_DEPTH    2
  168.  
  169. struct uvesafb_par {
  170.     struct vbe_ib vbe_ib;        /* VBE Info Block */
  171.     struct vbe_mode_ib *vbe_modes;    /* list of supported VBE modes */
  172.     int vbe_modes_cnt;
  173.  
  174.     u8 nocrtc;
  175.     u8 ypan;            /* 0 - nothing, 1 - ypan, 2 - ywrap */
  176.     u8 pmi_setpal;            /* PMI for palette changes */
  177.     u16 *pmi_base;            /* protected mode interface location */
  178.     void *pmi_start;
  179.     void *pmi_pal;
  180.     u8 *vbe_state_orig;        /*
  181.                      * original hardware state, before the
  182.                      * driver was loaded
  183.                      */
  184.     u8 *vbe_state_saved;        /* state saved by fb_save_state */
  185.     int vbe_state_size;
  186.     atomic_t ref_count;
  187.  
  188.     int mode_idx;
  189.     struct vbe_crtc_ib crtc;
  190. };
  191.  
  192. #endif /* __KERNEL__ */
  193. #endif /* _UVESAFB_H */
  194.