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