xref: /reactos/drivers/base/bootvid/arm/arm.h (revision 11345aed)
1 
2 #pragma once
3 
4 extern PUSHORT VgaArmBase;
5 
6 #define LCDTIMING0_PPL(x)       ((((x) / 16 - 1) & 0x3f) << 2)
7 #define LCDTIMING1_LPP(x)       (((x) & 0x3ff) - 1)
8 #define LCDCONTROL_LCDPWR       (1 << 11)
9 #define LCDCONTROL_LCDEN        (1)
10 #define LCDCONTROL_LCDBPP(x)    (((x) & 7) << 1)
11 #define LCDCONTROL_LCDTFT       (1 << 5)
12 
13 #define PL110_LCDTIMING0    (PVOID)0xE0020000
14 #define PL110_LCDTIMING1    (PVOID)0xE0020004
15 #define PL110_LCDTIMING2    (PVOID)0xE0020008
16 #define PL110_LCDUPBASE     (PVOID)0xE0020010
17 #define PL110_LCDLPBASE     (PVOID)0xE0020014
18 #define PL110_LCDCONTROL    (PVOID)0xE0020018
19 
20 #define READ_REGISTER_ULONG(r) (*(volatile ULONG * const)(r))
21 #define WRITE_REGISTER_ULONG(r, v) (*(volatile ULONG *)(r) = (v))
22 
23 #define READ_REGISTER_USHORT(r) (*(volatile USHORT * const)(r))
24 #define WRITE_REGISTER_USHORT(r, v) (*(volatile USHORT *)(r) = (v))
25 
26 FORCEINLINE
27 USHORT
28 VidpBuildColor(
29     _In_ UCHAR Color)
30 {
31     UCHAR Red, Green, Blue;
32 
33     /* Extract color components */
34     Red   = GetRValue(DefaultPalette[Color]) >> 3;
35     Green = GetGValue(DefaultPalette[Color]) >> 3;
36     Blue  = GetBValue(DefaultPalette[Color]) >> 3;
37 
38     /* Build the 16-bit color mask */
39     return ((Red & 0x1F) << 11) | ((Green & 0x1F) << 6) | ((Blue & 0x1F));
40 }
41 
42 VOID
43 NTAPI
44 InitPaletteWithTable(
45     _In_ PULONG Table,
46     _In_ ULONG Count);
47 
48 FORCEINLINE
49 VOID
50 SetPixel(
51     _In_ ULONG Left,
52     _In_ ULONG Top,
53     _In_ UCHAR Color)
54 {
55     PUSHORT PixelPosition;
56 
57     /* Calculate the pixel position */
58     PixelPosition = &VgaArmBase[Left + (Top * SCREEN_WIDTH)];
59 
60     /* Set our color */
61     WRITE_REGISTER_USHORT(PixelPosition, VidpBuildColor(Color));
62 }
63 
64 VOID
65 NTAPI
66 PreserveRow(
67     _In_ ULONG CurrentTop,
68     _In_ ULONG TopDelta,
69     _In_ BOOLEAN Restore);
70 
71 VOID
72 NTAPI
73 DoScroll(
74     _In_ ULONG Scroll);
75 
76 VOID
77 NTAPI
78 DisplayCharacter(
79     _In_ CHAR Character,
80     _In_ ULONG Left,
81     _In_ ULONG Top,
82     _In_ ULONG TextColor,
83     _In_ ULONG BackColor);
84