screen.h 4.2 KB

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