screen.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. /*
  2. * This file is part of the UCB release of Plan 9. It is subject to the license
  3. * terms in the LICENSE file found in the top-level directory of this
  4. * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No
  5. * part of the UCB release of Plan 9, including this file, may be copied,
  6. * modified, propagated, or distributed except according to the terms contained
  7. * in the LICENSE file.
  8. */
  9. typedef struct Cursor Cursor;
  10. typedef struct Cursorinfo Cursorinfo;
  11. struct Cursorinfo {
  12. Cursor c;
  13. Lock l;
  14. };
  15. /* devmouse.c */
  16. extern void mousetrack(int, int, int, int);
  17. extern Point mousexy(void);
  18. extern void mouseaccelerate(int);
  19. extern int m3mouseputc(Queue*, int);
  20. extern int m5mouseputc(Queue*, int);
  21. extern int mouseputc(Queue*, int);
  22. extern Cursorinfo cursor;
  23. extern Cursor arrow;
  24. /*
  25. * Generic VGA registers.
  26. */
  27. enum {
  28. MiscW = 0x03C2, /* Miscellaneous Output (W) */
  29. MiscR = 0x03CC, /* Miscellaneous Output (R) */
  30. Status0 = 0x03C2, /* Input status 0 (R) */
  31. Status1 = 0x03DA, /* Input Status 1 (R) */
  32. FeatureR = 0x03CA, /* Feature Control (R) */
  33. FeatureW = 0x03DA, /* Feature Control (W) */
  34. Seqx = 0x03C4, /* Sequencer Index, Data at Seqx+1 */
  35. Crtx = 0x03D4, /* CRT Controller Index, Data at Crtx+1 */
  36. Grx = 0x03CE, /* Graphics Controller Index, Data at Grx+1 */
  37. Attrx = 0x03C0, /* Attribute Controller Index and Data */
  38. PaddrW = 0x03C8, /* Palette Address Register, write */
  39. Pdata = 0x03C9, /* Palette Data Register */
  40. Pixmask = 0x03C6, /* Pixel Mask Register */
  41. PaddrR = 0x03C7, /* Palette Address Register, read */
  42. Pstatus = 0x03C7, /* DAC Status (RO) */
  43. Pcolours = 256, /* Palette */
  44. Pred = 0,
  45. Pgreen = 1,
  46. Pblue = 2,
  47. Pblack = 0x00,
  48. Pwhite = 0xFF,
  49. };
  50. #define VGAMEM() 0xA0000
  51. #define vgai(port) inb(port)
  52. #define vgao(port, data) outb(port, data)
  53. extern int vgaxi(int32_t, unsigned char);
  54. extern int vgaxo(int32_t, unsigned char, unsigned char);
  55. /*
  56. */
  57. typedef struct VGAdev VGAdev;
  58. typedef struct VGAcur VGAcur;
  59. typedef struct VGAscr VGAscr;
  60. struct VGAdev {
  61. char* name;
  62. void (*enable)(VGAscr*);
  63. void (*disable)(VGAscr*);
  64. void (*page)(VGAscr*, int);
  65. void (*linear)(VGAscr*, int, int);
  66. void (*drawinit)(VGAscr*);
  67. int (*fill)(VGAscr*, Rectangle, uint32_t);
  68. void (*ovlctl)(VGAscr*, Chan*, void*, int);
  69. int (*ovlwrite)(VGAscr*, void*, int, int64_t);
  70. void (*flush)(VGAscr*, Rectangle);
  71. };
  72. struct VGAcur {
  73. char* name;
  74. void (*enable)(VGAscr*);
  75. void (*disable)(VGAscr*);
  76. void (*load)(VGAscr*, Cursor*);
  77. int (*move)(VGAscr*, Point);
  78. int doespanning;
  79. };
  80. /*
  81. */
  82. struct VGAscr {
  83. Lock devlock;
  84. VGAdev* dev;
  85. Pcidev* pci;
  86. VGAcur* cur;
  87. uint32_t storage;
  88. Cursor Cursor;
  89. int useflush;
  90. uint32_t paddr; /* frame buffer */
  91. void* vaddr;
  92. int apsize;
  93. uint32_t io; /* device specific registers */
  94. uint32_t *mmio;
  95. uint32_t colormap[Pcolours][3];
  96. int palettedepth;
  97. Memimage* gscreen;
  98. Memdata* gscreendata;
  99. Memsubfont* memdefont;
  100. int (*fill)(VGAscr*, Rectangle, uint32_t);
  101. int (*scroll)(VGAscr*, Rectangle, Rectangle);
  102. void (*blank)(VGAscr*, int);
  103. uint32_t id; /* internal identifier for driver use */
  104. int isblank;
  105. int overlayinit;
  106. };
  107. extern VGAscr vgascreen[];
  108. enum {
  109. Backgnd = 0, /* black */
  110. };
  111. /* mouse.c */
  112. extern void mousectl(Cmdbuf*);
  113. extern void mouseresize(void);
  114. /* screen.c */
  115. extern int hwaccel; /* use hw acceleration; default on */
  116. extern int hwblank; /* use hw blanking; default on */
  117. extern int panning; /* use virtual screen panning; default off */
  118. extern void addvgaseg(char*, uint32_t, uint32_t);
  119. extern unsigned char* attachscreen(Rectangle*, uint32_t*, int*, int*, int*);
  120. extern void flushmemscreen(Rectangle);
  121. extern int cursoron(int);
  122. extern void cursoroff(int);
  123. extern void setcursor(Cursor*);
  124. extern int screensize(int, int, int, uint32_t);
  125. extern int screenaperture(int, int);
  126. extern Rectangle physgscreenr; /* actual monitor size */
  127. extern void blankscreen(int);
  128. extern VGAcur swcursor;
  129. extern void swcursorinit(void);
  130. extern void swcursorhide(void);
  131. extern void swcursoravoid(Rectangle);
  132. extern void swcursorunhide(void);
  133. /* devdraw.c */
  134. extern void deletescreenimage(void);
  135. extern void resetscreenimage(void);
  136. extern int drawhasclients(void);
  137. extern uint32_t blanktime;
  138. extern void setscreenimageclipr(Rectangle);
  139. extern void drawflush(void);
  140. extern int drawidletime(void);
  141. extern QLock drawlock;
  142. /* vga.c */
  143. extern void vgascreenwin(VGAscr*);
  144. extern void vgaimageinit(uint32_t);
  145. extern void vgalinearpciid(VGAscr*, int, int);
  146. extern void vgalinearpci(VGAscr*);
  147. extern void vgalinearaddr(VGAscr*, uint32_t, int);
  148. extern void drawblankscreen(int);
  149. extern void vgablank(VGAscr*, int);
  150. extern Lock vgascreenlock;
  151. #define ishwimage(i) (vgascreen[0].gscreendata && (i)->data->bdata == vgascreen[0].gscreendata->bdata)