Skip to content

Commit a13b46e

Browse files
committed
new icon for Sequoia
Signed-off-by: Slice <sergey.slice@gmail.com>
1 parent 46f5f12 commit a13b46e

9 files changed

Lines changed: 2065 additions & 933 deletions

File tree

Clover.dsc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,7 @@
738738
#BiosVideoAuto/BiosVideo.inf
739739
LegacyBios/VideoDxe/VideoDxe.inf
740740
LegacyBios/VideoDxe/VideoDxe2.inf
741+
GopHandoffPkg/GopHandoff.inf
741742

742743
# IDE/AHCI Support
743744
!ifdef USE_BIOS_BLOCKIO

CloverPackage/CloverV2/themespkg/cesium/theme.svg

Lines changed: 117 additions & 36 deletions
Loading

GopHandoffPkg/Common/GopFramebufferProtocol.c

Lines changed: 171 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,9 @@ GopFramebufferStatus gopfb_validate(
323323
}
324324

325325
if (((handoff->flags & ~GOPFB_KNOWN_FLAGS) != GOPFB_U32_C(0)) ||
326-
((handoff->flags & GOPFB_FLAG_READY_TO_BOOT) == GOPFB_U32_C(0)) ||
326+
((handoff->flags & GOPFB_CAPTURE_PHASE_FLAGS) == GOPFB_U32_C(0)) ||
327+
((handoff->flags & GOPFB_CAPTURE_PHASE_FLAGS) ==
328+
GOPFB_CAPTURE_PHASE_FLAGS) ||
327329
((handoff->flags & GOPFB_FLAG_MODE_REAPPLIED) == GOPFB_U32_C(0))) {
328330
return GOPFB_STATUS_BAD_FLAGS;
329331
}
@@ -411,6 +413,157 @@ const char *gopfb_status_string(GopFramebufferStatus status) {
411413
}
412414
}
413415

416+
void gopfb_initialize_pci_info(GopFramebufferPciInfo *pciInfo) {
417+
GopFbSize index;
418+
GopFbUint8 *bytes;
419+
420+
if (pciInfo == NULL) {
421+
return;
422+
}
423+
424+
bytes = (GopFbUint8 *)pciInfo;
425+
for (index = 0U; index < sizeof(*pciInfo); ++index) {
426+
bytes[index] = GOPFB_U8_C(0);
427+
}
428+
429+
pciInfo->magic = GOPFB_PCI_INFO_MAGIC;
430+
pciInfo->version = GOPFB_PCI_INFO_VERSION;
431+
pciInfo->headerSize =
432+
(GopFbUint16)GOPFB_OFFSET_OF(GopFramebufferPciInfo, reserved);
433+
pciInfo->totalSize = (GopFbUint32)sizeof(*pciInfo);
434+
pciInfo->barIndex = GOPFB_PCI_INVALID_BAR_INDEX;
435+
}
436+
437+
void gopfb_finalize_pci_info(GopFramebufferPciInfo *pciInfo) {
438+
if (pciInfo == NULL) {
439+
return;
440+
}
441+
442+
pciInfo->crc32 = gopfb_crc32(
443+
pciInfo,
444+
GOPFB_OFFSET_OF(GopFramebufferPciInfo, crc32));
445+
}
446+
447+
GopFramebufferPciInfoStatus gopfb_validate_pci_info(
448+
const GopFramebufferPciInfo *pciInfo) {
449+
GopFbSize index;
450+
451+
if (pciInfo == NULL) {
452+
return GOPFB_PCI_STATUS_NULL;
453+
}
454+
if (pciInfo->magic != GOPFB_PCI_INFO_MAGIC) {
455+
return GOPFB_PCI_STATUS_BAD_MAGIC;
456+
}
457+
if (pciInfo->version != GOPFB_PCI_INFO_VERSION) {
458+
return GOPFB_PCI_STATUS_BAD_VERSION;
459+
}
460+
if ((pciInfo->headerSize !=
461+
(GopFbUint16)GOPFB_OFFSET_OF(GopFramebufferPciInfo, reserved)) ||
462+
(pciInfo->totalSize != (GopFbUint32)sizeof(*pciInfo))) {
463+
return GOPFB_PCI_STATUS_BAD_STRUCTURE_SIZE;
464+
}
465+
for (index = 0U;
466+
index < (sizeof(pciInfo->reserved) / sizeof(pciInfo->reserved[0]));
467+
++index) {
468+
if (pciInfo->reserved[index] != GOPFB_U32_C(0)) {
469+
return GOPFB_PCI_STATUS_RESERVED_NOT_ZERO;
470+
}
471+
}
472+
if (pciInfo->crc32 !=
473+
gopfb_crc32(
474+
pciInfo,
475+
GOPFB_OFFSET_OF(GopFramebufferPciInfo, crc32))) {
476+
return GOPFB_PCI_STATUS_BAD_CHECKSUM;
477+
}
478+
if ((pciInfo->flags & ~GOPFB_PCI_KNOWN_FLAGS) != GOPFB_U32_C(0)) {
479+
return GOPFB_PCI_STATUS_BAD_FLAGS;
480+
}
481+
482+
if ((pciInfo->flags & GOPFB_PCI_FLAG_LOCATION_VALID) != GOPFB_U32_C(0)) {
483+
if ((pciInfo->segment > GOPFB_U32_C(0xFFFF)) ||
484+
(pciInfo->bus > GOPFB_U32_C(0xFF)) ||
485+
(pciInfo->device > GOPFB_U32_C(0x1F)) ||
486+
(pciInfo->function > GOPFB_U32_C(0x07))) {
487+
return GOPFB_PCI_STATUS_BAD_LOCATION;
488+
}
489+
} else if ((pciInfo->segment != GOPFB_U32_C(0)) ||
490+
(pciInfo->bus != GOPFB_U32_C(0)) ||
491+
(pciInfo->device != GOPFB_U32_C(0)) ||
492+
(pciInfo->function != GOPFB_U32_C(0))) {
493+
return GOPFB_PCI_STATUS_BAD_LOCATION;
494+
}
495+
496+
if ((pciInfo->flags & GOPFB_PCI_FLAG_IDENTITY_VALID) != GOPFB_U32_C(0)) {
497+
if ((pciInfo->vendorId == GOPFB_U32_C(0)) ||
498+
(pciInfo->vendorId > GOPFB_U32_C(0xFFFF)) ||
499+
(pciInfo->vendorId == GOPFB_U32_C(0xFFFF)) ||
500+
(pciInfo->deviceId > GOPFB_U32_C(0xFFFF)) ||
501+
(pciInfo->deviceId == GOPFB_U32_C(0xFFFF))) {
502+
return GOPFB_PCI_STATUS_BAD_IDENTITY;
503+
}
504+
} else if ((pciInfo->vendorId != GOPFB_U32_C(0)) ||
505+
(pciInfo->deviceId != GOPFB_U32_C(0))) {
506+
return GOPFB_PCI_STATUS_BAD_IDENTITY;
507+
}
508+
509+
if ((pciInfo->flags & GOPFB_PCI_FLAG_CLASS_VALID) != GOPFB_U32_C(0)) {
510+
if ((pciInfo->classCode == GOPFB_U32_C(0)) ||
511+
(pciInfo->classCode > GOPFB_U32_C(0x00FFFFFF))) {
512+
return GOPFB_PCI_STATUS_BAD_CLASS;
513+
}
514+
} else if (pciInfo->classCode != GOPFB_U32_C(0)) {
515+
return GOPFB_PCI_STATUS_BAD_CLASS;
516+
}
517+
518+
if ((pciInfo->flags & GOPFB_PCI_FLAG_BAR_VALID) != GOPFB_U32_C(0)) {
519+
if ((pciInfo->barIndex > GOPFB_U32_C(5)) ||
520+
(pciInfo->barBase == GOPFB_U64_C(0)) ||
521+
(pciInfo->barSize == GOPFB_U64_C(0)) ||
522+
(pciInfo->barBase > (GOPFB_U64_MAX - pciInfo->barSize)) ||
523+
(pciInfo->framebufferOffset >= pciInfo->barSize)) {
524+
return GOPFB_PCI_STATUS_BAD_BAR;
525+
}
526+
} else if ((pciInfo->barIndex != GOPFB_PCI_INVALID_BAR_INDEX) ||
527+
(pciInfo->barBase != GOPFB_U64_C(0)) ||
528+
(pciInfo->barSize != GOPFB_U64_C(0)) ||
529+
(pciInfo->framebufferOffset != GOPFB_U64_C(0))) {
530+
return GOPFB_PCI_STATUS_BAD_BAR;
531+
}
532+
533+
return GOPFB_PCI_STATUS_OK;
534+
}
535+
536+
const char *gopfb_pci_status_string(GopFramebufferPciInfoStatus status) {
537+
switch (status) {
538+
case GOPFB_PCI_STATUS_OK:
539+
return "ok";
540+
case GOPFB_PCI_STATUS_NULL:
541+
return "null input";
542+
case GOPFB_PCI_STATUS_BAD_MAGIC:
543+
return "bad magic";
544+
case GOPFB_PCI_STATUS_BAD_VERSION:
545+
return "unsupported version";
546+
case GOPFB_PCI_STATUS_BAD_STRUCTURE_SIZE:
547+
return "bad structure size";
548+
case GOPFB_PCI_STATUS_RESERVED_NOT_ZERO:
549+
return "reserved field is not zero";
550+
case GOPFB_PCI_STATUS_BAD_CHECKSUM:
551+
return "bad checksum";
552+
case GOPFB_PCI_STATUS_BAD_FLAGS:
553+
return "bad flags";
554+
case GOPFB_PCI_STATUS_BAD_LOCATION:
555+
return "bad PCI location";
556+
case GOPFB_PCI_STATUS_BAD_IDENTITY:
557+
return "bad PCI identity";
558+
case GOPFB_PCI_STATUS_BAD_CLASS:
559+
return "bad PCI class code";
560+
case GOPFB_PCI_STATUS_BAD_BAR:
561+
return "bad PCI BAR metadata";
562+
default:
563+
return "unknown PCI info status";
564+
}
565+
}
566+
414567
GopFramebufferEdidStatus gopfb_validate_edid(
415568
const GopFbUint8 *edid,
416569
GopFbSize edidSize) {
@@ -429,6 +582,7 @@ GopFramebufferEdidStatus gopfb_validate_edid(
429582

430583
if ((edid == NULL) ||
431584
(edidSize < (GopFbSize)GOPFB_EDID_BLOCK_SIZE) ||
585+
(edidSize > (GopFbSize)GOPFB_EDID_MAX_SIZE) ||
432586
((edidSize % (GopFbSize)GOPFB_EDID_BLOCK_SIZE) != 0U)) {
433587
return GOPFB_EDID_STATUS_BAD_SIZE;
434588
}
@@ -537,7 +691,6 @@ GopFramebufferDisplayInfoStatus gopfb_validate_display_info(
537691
GopFbSize expectedEdidOffset;
538692
GopFbSize expectedTotalSize;
539693
GopFbSize index;
540-
GopFbSize otherIndex;
541694
GopFramebufferEdidStatus edidStatus;
542695

543696
if (modes != NULL) {
@@ -592,6 +745,10 @@ GopFramebufferDisplayInfoStatus gopfb_validate_display_info(
592745
return GOPFB_DISPLAY_STATUS_BAD_FLAGS;
593746
}
594747

748+
if (header->modeCount > GOPFB_MODE_CATALOG_MAX_COUNT) {
749+
return GOPFB_DISPLAY_STATUS_TOO_MANY_MODES;
750+
}
751+
595752
if ((header->modeCount == GOPFB_U32_C(0)) ||
596753
!gopfb_size_multiply(
597754
(GopFbSize)header->modeCount,
@@ -626,13 +783,16 @@ GopFramebufferDisplayInfoStatus gopfb_validate_display_info(
626783
return GOPFB_DISPLAY_STATUS_INVALID_MODE;
627784
}
628785

629-
for (otherIndex = index + 1U;
630-
otherIndex < (GopFbSize)header->modeCount;
631-
++otherIndex) {
632-
if (modeArray[index].modeNumber ==
633-
modeArray[otherIndex].modeNumber) {
786+
if (index != 0U) {
787+
const GopFbUint32 previousModeNumber =
788+
modeArray[index - 1U].modeNumber;
789+
790+
if (previousModeNumber == modeArray[index].modeNumber) {
634791
return GOPFB_DISPLAY_STATUS_DUPLICATE_MODE_NUMBER;
635792
}
793+
if (previousModeNumber > modeArray[index].modeNumber) {
794+
return GOPFB_DISPLAY_STATUS_NON_CANONICAL_MODE_ORDER;
795+
}
636796
}
637797
}
638798

@@ -682,10 +842,14 @@ const char *gopfb_display_status_string(
682842
return "bad flags";
683843
case GOPFB_DISPLAY_STATUS_BAD_LAYOUT:
684844
return "bad variable layout";
845+
case GOPFB_DISPLAY_STATUS_TOO_MANY_MODES:
846+
return "mode catalog exceeds defensive limit";
685847
case GOPFB_DISPLAY_STATUS_BAD_CURRENT_MODE:
686848
return "bad current mode index";
687849
case GOPFB_DISPLAY_STATUS_DUPLICATE_MODE_NUMBER:
688850
return "duplicate mode number";
851+
case GOPFB_DISPLAY_STATUS_NON_CANONICAL_MODE_ORDER:
852+
return "mode numbers are not strictly increasing";
689853
case GOPFB_DISPLAY_STATUS_INVALID_MODE:
690854
return "invalid mode descriptor";
691855
case GOPFB_DISPLAY_STATUS_INVALID_EDID:

GopHandoffPkg/Common/GopFramebufferProtocol.h

Lines changed: 76 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,13 @@ extern "C" {
4949
#define GOPFB_FLAG_READY_TO_BOOT GOPFB_U32_C(0x00000002)
5050
#define GOPFB_FLAG_MODE_REAPPLIED GOPFB_U32_C(0x00000004)
5151
#define GOPFB_FLAG_MODE_REQUEST_APPLIED GOPFB_U32_C(0x00000008)
52+
#define GOPFB_FLAG_EARLY_CAPTURE GOPFB_U32_C(0x00000010)
53+
#define GOPFB_CAPTURE_PHASE_FLAGS \
54+
(GOPFB_FLAG_READY_TO_BOOT | GOPFB_FLAG_EARLY_CAPTURE)
5255
#define GOPFB_KNOWN_FLAGS \
5356
(GOPFB_FLAG_CONSOLE_OUT | GOPFB_FLAG_READY_TO_BOOT | \
54-
GOPFB_FLAG_MODE_REAPPLIED | GOPFB_FLAG_MODE_REQUEST_APPLIED)
57+
GOPFB_FLAG_MODE_REAPPLIED | GOPFB_FLAG_MODE_REQUEST_APPLIED | \
58+
GOPFB_FLAG_EARLY_CAPTURE)
5559

5660
#define GOPFB_PIXEL_RED_GREEN_BLUE_RESERVED_8 GOPFB_U32_C(0)
5761
#define GOPFB_PIXEL_BLUE_GREEN_RED_RESERVED_8 GOPFB_U32_C(1)
@@ -82,6 +86,38 @@ typedef struct GopFramebufferHandoff {
8286
GopFbUint32 crc32;
8387
} GopFramebufferHandoff;
8488

89+
#define GOPFB_PCI_INFO_MAGIC GOPFB_U32_C(0x47504349) /* GPCI */
90+
#define GOPFB_PCI_INFO_VERSION GOPFB_U16_C(1)
91+
#define GOPFB_PCI_FLAG_LOCATION_VALID GOPFB_U32_C(0x00000001)
92+
#define GOPFB_PCI_FLAG_IDENTITY_VALID GOPFB_U32_C(0x00000002)
93+
#define GOPFB_PCI_FLAG_CLASS_VALID GOPFB_U32_C(0x00000004)
94+
#define GOPFB_PCI_FLAG_BAR_VALID GOPFB_U32_C(0x00000008)
95+
#define GOPFB_PCI_KNOWN_FLAGS \
96+
(GOPFB_PCI_FLAG_LOCATION_VALID | GOPFB_PCI_FLAG_IDENTITY_VALID | \
97+
GOPFB_PCI_FLAG_CLASS_VALID | GOPFB_PCI_FLAG_BAR_VALID)
98+
#define GOPFB_PCI_INVALID_BAR_INDEX GOPFB_U32_C(0xFFFFFFFF)
99+
100+
typedef struct GopFramebufferPciInfo {
101+
GopFbUint32 magic;
102+
GopFbUint16 version;
103+
GopFbUint16 headerSize;
104+
GopFbUint32 totalSize;
105+
GopFbUint32 flags;
106+
GopFbUint32 segment;
107+
GopFbUint32 bus;
108+
GopFbUint32 device;
109+
GopFbUint32 function;
110+
GopFbUint32 vendorId;
111+
GopFbUint32 deviceId;
112+
GopFbUint32 classCode;
113+
GopFbUint32 barIndex;
114+
GopFbUint64 barBase;
115+
GopFbUint64 barSize;
116+
GopFbUint64 framebufferOffset;
117+
GopFbUint32 reserved[3];
118+
GopFbUint32 crc32;
119+
} GopFramebufferPciInfo;
120+
85121
#define GOPFB_DISPLAY_INFO_MAGIC GOPFB_U32_C(0x47444946) /* GDIF */
86122
#define GOPFB_DISPLAY_INFO_VERSION GOPFB_U16_C(1)
87123
#define GOPFB_DISPLAY_FLAG_EDID_ACTIVE GOPFB_U32_C(0x00000001)
@@ -90,6 +126,10 @@ typedef struct GopFramebufferHandoff {
90126
(GOPFB_DISPLAY_FLAG_EDID_ACTIVE | GOPFB_DISPLAY_FLAG_EDID_DISCOVERED)
91127
#define GOPFB_INVALID_MODE_INDEX GOPFB_U32_MAX
92128
#define GOPFB_EDID_BLOCK_SIZE GOPFB_U32_C(128)
129+
#define GOPFB_EDID_MAX_BLOCK_COUNT GOPFB_U32_C(256)
130+
#define GOPFB_EDID_MAX_SIZE \
131+
(GOPFB_EDID_BLOCK_SIZE * GOPFB_EDID_MAX_BLOCK_COUNT)
132+
#define GOPFB_MODE_CATALOG_MAX_COUNT GOPFB_U32_C(4096)
93133

94134
typedef struct GopFramebufferModeDescriptor {
95135
GopFbUint32 modeNumber;
@@ -143,6 +183,10 @@ STATIC_ASSERT(sizeof(GopFramebufferHandoff) == 96U,
143183
"GopFramebufferHandoff ABI size changed");
144184
STATIC_ASSERT(GOPFB_OFFSET_OF(GopFramebufferHandoff, crc32) == 92U,
145185
"GopFramebufferHandoff checksum offset changed");
186+
STATIC_ASSERT(sizeof(GopFramebufferPciInfo) == 88U,
187+
"GopFramebufferPciInfo ABI size changed");
188+
STATIC_ASSERT(GOPFB_OFFSET_OF(GopFramebufferPciInfo, crc32) == 84U,
189+
"GopFramebufferPciInfo checksum offset changed");
146190
STATIC_ASSERT(sizeof(GopFramebufferModeDescriptor) == 40U,
147191
"GopFramebufferModeDescriptor ABI size changed");
148192
STATIC_ASSERT(sizeof(GopFramebufferDisplayInfoHeader) == 64U,
@@ -158,6 +202,10 @@ static_assert(sizeof(GopFramebufferHandoff) == 96U,
158202
"GopFramebufferHandoff ABI size changed");
159203
static_assert(GOPFB_OFFSET_OF(GopFramebufferHandoff, crc32) == 92U,
160204
"GopFramebufferHandoff checksum offset changed");
205+
static_assert(sizeof(GopFramebufferPciInfo) == 88U,
206+
"GopFramebufferPciInfo ABI size changed");
207+
static_assert(GOPFB_OFFSET_OF(GopFramebufferPciInfo, crc32) == 84U,
208+
"GopFramebufferPciInfo checksum offset changed");
161209
static_assert(sizeof(GopFramebufferModeDescriptor) == 40U,
162210
"GopFramebufferModeDescriptor ABI size changed");
163211
static_assert(sizeof(GopFramebufferDisplayInfoHeader) == 64U,
@@ -173,6 +221,10 @@ _Static_assert(sizeof(GopFramebufferHandoff) == 96U,
173221
"GopFramebufferHandoff ABI size changed");
174222
_Static_assert(GOPFB_OFFSET_OF(GopFramebufferHandoff, crc32) == 92U,
175223
"GopFramebufferHandoff checksum offset changed");
224+
_Static_assert(sizeof(GopFramebufferPciInfo) == 88U,
225+
"GopFramebufferPciInfo ABI size changed");
226+
_Static_assert(GOPFB_OFFSET_OF(GopFramebufferPciInfo, crc32) == 84U,
227+
"GopFramebufferPciInfo checksum offset changed");
176228
_Static_assert(sizeof(GopFramebufferModeDescriptor) == 40U,
177229
"GopFramebufferModeDescriptor ABI size changed");
178230
_Static_assert(sizeof(GopFramebufferDisplayInfoHeader) == 64U,
@@ -204,6 +256,21 @@ typedef enum GopFramebufferStatus {
204256
GOPFB_STATUS_FRAMEBUFFER_TOO_SMALL
205257
} GopFramebufferStatus;
206258

259+
typedef enum GopFramebufferPciInfoStatus {
260+
GOPFB_PCI_STATUS_OK = 0,
261+
GOPFB_PCI_STATUS_NULL,
262+
GOPFB_PCI_STATUS_BAD_MAGIC,
263+
GOPFB_PCI_STATUS_BAD_VERSION,
264+
GOPFB_PCI_STATUS_BAD_STRUCTURE_SIZE,
265+
GOPFB_PCI_STATUS_RESERVED_NOT_ZERO,
266+
GOPFB_PCI_STATUS_BAD_CHECKSUM,
267+
GOPFB_PCI_STATUS_BAD_FLAGS,
268+
GOPFB_PCI_STATUS_BAD_LOCATION,
269+
GOPFB_PCI_STATUS_BAD_IDENTITY,
270+
GOPFB_PCI_STATUS_BAD_CLASS,
271+
GOPFB_PCI_STATUS_BAD_BAR
272+
} GopFramebufferPciInfoStatus;
273+
207274
typedef enum GopFramebufferEdidStatus {
208275
GOPFB_EDID_STATUS_OK = 0,
209276
GOPFB_EDID_STATUS_ABSENT,
@@ -223,8 +290,10 @@ typedef enum GopFramebufferDisplayInfoStatus {
223290
GOPFB_DISPLAY_STATUS_BAD_CHECKSUM,
224291
GOPFB_DISPLAY_STATUS_BAD_FLAGS,
225292
GOPFB_DISPLAY_STATUS_BAD_LAYOUT,
293+
GOPFB_DISPLAY_STATUS_TOO_MANY_MODES,
226294
GOPFB_DISPLAY_STATUS_BAD_CURRENT_MODE,
227295
GOPFB_DISPLAY_STATUS_DUPLICATE_MODE_NUMBER,
296+
GOPFB_DISPLAY_STATUS_NON_CANONICAL_MODE_ORDER,
228297
GOPFB_DISPLAY_STATUS_INVALID_MODE,
229298
GOPFB_DISPLAY_STATUS_INVALID_EDID
230299
} GopFramebufferDisplayInfoStatus;
@@ -257,6 +326,12 @@ int gopfb_build_pixel_encoding(
257326
GopFbSize encodingSize);
258327
const char *gopfb_status_string(GopFramebufferStatus status);
259328

329+
void gopfb_initialize_pci_info(GopFramebufferPciInfo *pciInfo);
330+
void gopfb_finalize_pci_info(GopFramebufferPciInfo *pciInfo);
331+
GopFramebufferPciInfoStatus gopfb_validate_pci_info(
332+
const GopFramebufferPciInfo *pciInfo);
333+
const char *gopfb_pci_status_string(GopFramebufferPciInfoStatus status);
334+
260335
GopFramebufferEdidStatus gopfb_validate_edid(const GopFbUint8 *edid,
261336
GopFbSize edidSize);
262337
const char *gopfb_edid_status_string(GopFramebufferEdidStatus status);

0 commit comments

Comments
 (0)