]> git.proxmox.com Git - mirror_edk2.git/blame - ArmPlatformPkg/ArmRealViewEbPkg/Library/PL111LcdArmRealViewEbLib/PL111LcdArmRealViewEb.c
ArmPlatformPkg: Fix builds
[mirror_edk2.git] / ArmPlatformPkg / ArmRealViewEbPkg / Library / PL111LcdArmRealViewEbLib / PL111LcdArmRealViewEb.c
CommitLineData
9bc6ef02 1/** @file\r
2\r
3 Copyright (c) 2011, ARM Ltd. All rights reserved.<BR>\r
4 This program and the accompanying materials\r
5 are licensed and made available under the terms and conditions of the BSD License\r
6 which accompanies this distribution. The full text of the license may be found at\r
7 http://opensource.org/licenses/bsd-license.php\r
8\r
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12**/\r
13\r
14#include <PiDxe.h>\r
15\r
16#include <Library/LcdPlatformLib.h>\r
17#include <Library/IoLib.h>\r
18#include <Library/DebugLib.h>\r
19\r
20#include <Drivers/PL111Lcd.h>\r
21\r
22#include <ArmPlatform.h>\r
23\r
24typedef struct {\r
25 UINT32 Mode;\r
26 UINT32 HorizontalResolution;\r
27 UINT32 VerticalResolution;\r
28 LCD_BPP Bpp;\r
29 UINT32 ClcdClk;\r
30\r
31 UINT32 HSync;\r
32 UINT32 HBackPorch;\r
33 UINT32 HFrontPorch;\r
34 UINT32 VSync;\r
35 UINT32 VBackPorch;\r
36 UINT32 VFrontPorch;\r
37} CLCD_RESOLUTION;\r
38\r
39\r
40CLCD_RESOLUTION mResolutions[] = {\r
41 { // Mode 0 : VGA : 640 x 480 x 24 bpp\r
42 VGA, VGA_H_RES_PIXELS, VGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24, 0x2C77,\r
43 VGA_H_SYNC, VGA_H_BACK_PORCH, VGA_H_FRONT_PORCH,\r
44 VGA_V_SYNC, VGA_V_BACK_PORCH, VGA_V_FRONT_PORCH\r
45 },\r
46 { // Mode 1 : SVGA : 800 x 600 x 24 bpp\r
47 SVGA, SVGA_H_RES_PIXELS, SVGA_V_RES_PIXELS, LCD_BITS_PER_PIXEL_24, 0x2CAC,\r
48 SVGA_H_SYNC, SVGA_H_BACK_PORCH, SVGA_H_FRONT_PORCH,\r
49 SVGA_V_SYNC, SVGA_V_BACK_PORCH, SVGA_V_FRONT_PORCH\r
50 }\r
51};\r
52\r
53\r
54EFI_STATUS\r
55LcdPlatformInitializeDisplay (\r
56 VOID\r
57 )\r
58{\r
59 MmioWrite32(ARM_EB_SYS_CLCD_REG, 1);\r
60\r
61 return EFI_SUCCESS;\r
62}\r
63\r
64EFI_STATUS\r
65LcdPlatformGetVram (\r
66 OUT EFI_PHYSICAL_ADDRESS* VramBaseAddress,\r
67 OUT UINTN* VramSize\r
68 )\r
69{\r
70 *VramBaseAddress = PL111_CLCD_VRAM_BASE;\r
71 *VramSize = SIZE_8MB; //FIXME: Can this size change ?\r
72 return EFI_SUCCESS;\r
73}\r
74\r
75UINT32\r
76LcdPlatformGetMaxMode (\r
77 VOID\r
78 )\r
79{\r
80 return (sizeof(mResolutions) / sizeof(CLCD_RESOLUTION));\r
81}\r
82\r
83EFI_STATUS\r
84LcdPlatformSetMode (\r
85 IN UINT32 ModeNumber\r
86 )\r
87{\r
88 if (ModeNumber >= LcdPlatformGetMaxMode ()) {\r
89 return EFI_INVALID_PARAMETER;\r
90 }\r
91\r
92 MmioWrite32(ARM_EB_SYS_LOCK_REG,0x0000A05F);\r
93 MmioWrite32(ARM_EB_SYS_OSC4_REG,mResolutions[ModeNumber].ClcdClk);\r
94 MmioWrite32(ARM_EB_SYS_LOCK_REG,0x0);\r
95\r
96 return EFI_SUCCESS;\r
97}\r
98\r
99EFI_STATUS\r
100LcdPlatformQueryMode (\r
101 IN UINT32 ModeNumber,\r
102 OUT EFI_GRAPHICS_OUTPUT_MODE_INFORMATION *Info\r
103 )\r
104{\r
105 EFI_STATUS Status;\r
106\r
107 if (ModeNumber >= LcdPlatformGetMaxMode ()) {\r
108 return EFI_INVALID_PARAMETER;\r
109 }\r
110\r
111 Status = EFI_UNSUPPORTED;\r
112\r
113 Info->Version = 0;\r
114 Info->HorizontalResolution = mResolutions[ModeNumber].HorizontalResolution;\r
115 Info->VerticalResolution = mResolutions[ModeNumber].VerticalResolution;\r
116 Info->PixelsPerScanLine = mResolutions[ModeNumber].HorizontalResolution;\r
117\r
118 switch (mResolutions[ModeNumber].Bpp) {\r
119 case LCD_BITS_PER_PIXEL_24:\r
120 Info->PixelFormat = PixelRedGreenBlueReserved8BitPerColor;\r
121 Info->PixelInformation.RedMask = LCD_24BPP_RED_MASK;\r
122 Info->PixelInformation.GreenMask = LCD_24BPP_GREEN_MASK;\r
123 Info->PixelInformation.BlueMask = LCD_24BPP_BLUE_MASK;\r
124 Info->PixelInformation.ReservedMask = LCD_24BPP_RESERVED_MASK;\r
125 Status = EFI_SUCCESS;\r
126 break;\r
127\r
128 case LCD_BITS_PER_PIXEL_16_555:\r
129 Info->PixelFormat = PixelBitMask;\r
130 Info->PixelInformation.RedMask = LCD_16BPP_555_RED_MASK;\r
131 Info->PixelInformation.GreenMask = LCD_16BPP_555_GREEN_MASK;\r
132 Info->PixelInformation.BlueMask = LCD_16BPP_555_BLUE_MASK;\r
133 Info->PixelInformation.ReservedMask = LCD_16BPP_555_RESERVED_MASK;\r
134 Status = EFI_SUCCESS;\r
135 break;\r
136\r
137 case LCD_BITS_PER_PIXEL_16_565:\r
138 Info->PixelFormat = PixelBitMask;\r
139 Info->PixelInformation.RedMask = LCD_16BPP_565_RED_MASK;\r
140 Info->PixelInformation.GreenMask = LCD_16BPP_565_GREEN_MASK;\r
141 Info->PixelInformation.BlueMask = LCD_16BPP_565_BLUE_MASK;\r
142 Info->PixelInformation.ReservedMask = LCD_16BPP_565_RESERVED_MASK;\r
143 Status = EFI_SUCCESS;\r
144 break;\r
145\r
146 case LCD_BITS_PER_PIXEL_12_444:\r
147 Info->PixelFormat = PixelBitMask;\r
148 Info->PixelInformation.RedMask = LCD_12BPP_444_RED_MASK;\r
149 Info->PixelInformation.GreenMask = LCD_12BPP_444_GREEN_MASK;\r
150 Info->PixelInformation.BlueMask = LCD_12BPP_444_BLUE_MASK;\r
151 Info->PixelInformation.ReservedMask = LCD_12BPP_444_RESERVED_MASK;\r
152 Status = EFI_SUCCESS;\r
153 break;\r
154\r
155 case LCD_BITS_PER_PIXEL_8:\r
156 case LCD_BITS_PER_PIXEL_4:\r
157 case LCD_BITS_PER_PIXEL_2:\r
158 case LCD_BITS_PER_PIXEL_1:\r
159 default:\r
160 // These are not supported\r
161 break;\r
162 }\r
163\r
164 return Status;\r
165}\r
166\r
167EFI_STATUS\r
168LcdPlatformGetTimings (\r
169 IN UINT32 ModeNumber,\r
170 OUT UINT32* HRes,\r
171 OUT UINT32* HSync,\r
172 OUT UINT32* HBackPorch,\r
173 OUT UINT32* HFrontPorch,\r
174 OUT UINT32* VRes,\r
175 OUT UINT32* VSync,\r
176 OUT UINT32* VBackPorch,\r
177 OUT UINT32* VFrontPorch\r
178 )\r
179{\r
180 if (ModeNumber >= LcdPlatformGetMaxMode ()) {\r
181 return EFI_INVALID_PARAMETER;\r
182 }\r
183\r
184 *HRes = mResolutions[ModeNumber].HorizontalResolution;\r
185 *HSync = mResolutions[ModeNumber].HSync;\r
186 *HBackPorch = mResolutions[ModeNumber].HBackPorch;\r
187 *HFrontPorch = mResolutions[ModeNumber].HFrontPorch;\r
188 *VRes = mResolutions[ModeNumber].VerticalResolution;\r
189 *VSync = mResolutions[ModeNumber].VSync;\r
190 *VBackPorch = mResolutions[ModeNumber].VBackPorch;\r
191 *VFrontPorch = mResolutions[ModeNumber].VFrontPorch;\r
192\r
193 return EFI_SUCCESS;\r
194}\r
195\r
196EFI_STATUS\r
197LcdPlatformGetBpp (\r
198 IN UINT32 ModeNumber,\r
199 OUT LCD_BPP * Bpp\r
200 )\r
201{\r
202 if (ModeNumber >= LcdPlatformGetMaxMode ()) {\r
203 return EFI_INVALID_PARAMETER;\r
204 }\r
205\r
206 *Bpp = mResolutions[ModeNumber].Bpp;\r
207\r
208 return EFI_SUCCESS;\r
209}\r