Skip to content
This repository has been archived by the owner on Jan 7, 2023. It is now read-only.

Commit

Permalink
Implement config parsing, and fix lwext4
Browse files Browse the repository at this point in the history
  • Loading branch information
luka177 committed Sep 25, 2021
1 parent 0584a7b commit 7f46bd0
Show file tree
Hide file tree
Showing 23 changed files with 958 additions and 46 deletions.
90 changes: 90 additions & 0 deletions Abm.dec
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,96 @@
PACKAGE_GUID = aba6ea83-69e9-4345-b074-01f3626b389f
PACKAGE_VERSION = 0.0.1

[Guids.common]
gQcomTokenSpaceGuid = { 0x882f8c2b, 0x9646, 0x435f, { 0x8d, 0xe5, 0xf2, 0x08, 0xff, 0x80, 0xc1, 0xbd } }
gEfiPartitionTypeGuid = { 0x6848de61, 0xeb61, 0x4def, { 0x9a, 0x8e, 0x38, 0x17, 0xcb, 0xeb, 0x8f, 0x1c } }
gEfiEmmcUserPartitionGuid = { 0xb615f1f5, 0x5088, 0x43cd, { 0x80, 0x9c, 0xa1, 0x6e, 0x52, 0x48, 0x7d, 0x00 } }
gEfiEmmcBootPartition1Guid = { 0x12c55b20, 0x25d3, 0x41c9, { 0x8e, 0x06, 0x28, 0x2d, 0x94, 0xc6, 0x76, 0xad } }
gEfiEmmcBootPartition2Guid = { 0x6b76a6db, 0x0257, 0x48a9, { 0xaa, 0x99, 0xf6, 0xb1, 0x65, 0x5f, 0x7b, 0x00 } }
gEfiEmmcRpmbPartitionGuid = { 0xc49551ea, 0xd6bc, 0x4966, { 0x94, 0x99, 0x87, 0x1e, 0x39, 0x31, 0x33, 0xcd } }
gEfiEmmcGppPartition1Guid = { 0xb9251ea5, 0x3462, 0x4807, { 0x86, 0xc6, 0x89, 0x48, 0xb1, 0xb3, 0x61, 0x63 } }
gEfiEmmcGppPartition2Guid = { 0x24f906cd, 0xee11, 0x43e1, { 0x84, 0x27, 0xdc, 0x7a, 0x36, 0xf4, 0xc0, 0x59 } }
gEfiEmmcGppPartition3Guid = { 0x5a5709a9, 0xac40, 0x4f72, { 0x88, 0x62, 0x5b, 0x01, 0x04, 0x16, 0x6e, 0x76 } }
gEfiEmmcGppPartition4Guid = { 0xa44e27c9, 0x258e, 0x406e, { 0xbf, 0x33, 0x77, 0xf5, 0xf2, 0x44, 0xc4, 0x87 } }
gEfiSdRemovableGuid = { 0xd1531d41, 0x3f80, 0x4091, { 0x8d, 0x0a, 0x54, 0x1f, 0x59, 0x23, 0x6d, 0x66 } }
gEfiUfsLU0Guid = { 0x860845c1, 0xbe09, 0x4355, { 0x8b, 0xc1, 0x30, 0xd6, 0x4f, 0xf8, 0xe6, 0x3a } }
gEfiUfsLU1Guid = { 0x8d90d477, 0x39a3, 0x4a38, { 0xab, 0x9e, 0x58, 0x6f, 0xf6, 0x9e, 0xd0, 0x51 } }
gEfiUfsLU2Guid = { 0xedf85868, 0x87ec, 0x4f77, { 0x9c, 0xda, 0x5f, 0x10, 0xdf, 0x2f, 0xe6, 0x01 } }
gEfiUfsLU3Guid = { 0x1ae69024, 0x8aeb, 0x4df8, { 0xbc, 0x98, 0x00, 0x32, 0xdb, 0xdf, 0x50, 0x24 } }
gEfiUfsLU4Guid = { 0xd33f1985, 0xf107, 0x4a85, { 0xbe, 0x38, 0x68, 0xdc, 0x7a, 0xd3, 0x2c, 0xea } }
gEfiUfsLU5Guid = { 0x4ba1d05f, 0x088e, 0x483f, { 0xa9, 0x7e, 0xb1, 0x9b, 0x9c, 0xcf, 0x59, 0xb0 } }
gEfiUfsLU6Guid = { 0x4acf98f6, 0x26fa, 0x44d2, { 0x81, 0x32, 0x28, 0x2f, 0x2d, 0x19, 0xa4, 0xc5 } }
gEfiUfsLU7Guid = { 0x8598155f, 0x34de, 0x415c, { 0x8b, 0x55, 0x84, 0x3e, 0x33, 0x22, 0xd3, 0x6f } }
gEfiUfsRPMBGuid = { 0x5397474e, 0xf75d, 0x44b3, { 0x8e, 0x57, 0xd9, 0x32, 0x4f, 0xcf, 0x6f, 0xe1 } }
gEfiNandUserPartitionGuid = { 0x03ef84a9, 0x60ce, 0x4371, { 0x97, 0xcf, 0x04, 0x84, 0x5a, 0x86, 0x5b, 0x79 } }

gEfiPlatPartitionTypeGuid = { 0x543c031a, 0x4cb6, 0x4897, { 0xbf, 0xfe, 0x4b, 0x48, 0x57, 0x68, 0xa8, 0xad } }
gQcomKeypadDeviceGuid = { 0xd7f58a0e, 0xbed2, 0x4b5a, { 0xbb, 0x43, 0x8a, 0xb2, 0x3d, 0xd0, 0xe2, 0xb0 } }
gEfiPlatformInfoGuid= { 0x3351baf7, 0x0820, 0x40df, { 0xb3, 0xfd, 0x4b, 0x7a, 0x3d, 0x43, 0x81, 0x88 } }
gEfiLogFSPartitionGuid = { 0xBC0330EB, 0x3410, 0x4951, { 0xA6, 0x17, 0x03, 0x89, 0x8D, 0xBE, 0x33, 0x72 } }
gEfiAblFvNameGuid= { 0x046fae99, 0xcf2e, 0x49ed, { 0xA6, 0xA8, 0xA1, 0x48, 0x8b, 0x7E, 0x80, 0xd3 } }
gEfiMiscPartitionGuid = { 0x82ACC91F, 0x357C, 0x4A68, { 0x9C, 0x8F, 0x68, 0x9E, 0x1B, 0x1A, 0x23, 0xA1 } }
gEfiBootImgPartitionGuid = { 0x20117f86, 0xe985, 0x4357, { 0xb9, 0xee, 0x37, 0x4b, 0xc1, 0xd8, 0x48, 0x7d } }
gEfiRecoveryImgPartitionGuid = { 0x9D72D4E4, 0x9958, 0x42DA, { 0xAC, 0x26, 0xBE, 0xA7, 0xA9, 0x0B, 0x04, 0x34 } }
gEfiSystemPartitionGuid = { 0x97D7B011, 0x54DA, 0x4835, { 0xB3, 0xC4, 0x91, 0x7A, 0xD6, 0xE7, 0x3D, 0x74 } }
gEfiVbmetaPartitionGuid = { 0x4b7a15d6, 0x322c, 0x42ac, { 0x81, 0x10, 0x88, 0xb7, 0xda, 0x0c, 0x5d, 0x77 } }
gEfiDtboPartitionGuid = { 0x24d0d418, 0xd31d, 0x4d8d, { 0xac, 0x2c, 0x4d, 0x43, 0x05, 0x18, 0x84, 0x50 } }
gEfiDipPartitionGuid = { 0x4114B077, 0x005D, 0x4E12, { 0xAC, 0x8C, 0xB4, 0x93, 0xBD, 0xA6, 0x84, 0xFB } }
gEfiMdtpPartitionGuid = { 0x3878408A, 0xE263, 0x4B67, { 0xB8, 0x78, 0x63, 0x40, 0xB3, 0x5B, 0x11, 0xE3 } }
gBlockIoRefreshGuid = { 0xb1eb3d10, 0x9d67, 0x40ca, { 0x95, 0x59, 0xf1, 0x48, 0x8b, 0x1b, 0x2d, 0xdb } }
gEfiRNGAlgRawGuid = { 0xe43176d7, 0xb6e8, 0x4827, { 0xb7, 0x84, 0x7f, 0xfd, 0xc4, 0xb6, 0x85, 0x61 } }

[Protocols]
# SCM
gQcomScmProtocolGuid = { 0x77ed108d, 0x8524, 0x4b8b, { 0x9d, 0x2e, 0x34, 0x98, 0x7a, 0xec, 0xb9, 0xc1 } }
# PlatformInfo
gEfiPlatformInfoProtocolGuid = { 0x157a5c45, 0x21b2, 0x43c5, { 0xba, 0x7c, 0x82, 0x2f, 0xee, 0x5f, 0xe5, 0x99 } }
# Sdcc Card Info
gEfiMemCardInfoProtocolGuid = { 0x85c1f7d2, 0xbce6, 0x4f31, { 0x8f, 0x4d, 0xd3, 0x7e, 0x03, 0xd0, 0x5e, 0xaa } }
# USB Function
gEfiUsbfnIoProtocolGuid = { 0x32d2963a, 0xfe5d, 0x4f30, { 0xb6, 0x33, 0x6e, 0x5d, 0xc5, 0x58, 0x3, 0xcc } }
# ChipInfo
gEfiChipInfoProtocolGuid = { 0xb0760469, 0x970c, 0x487a, { 0xa4, 0xb5, 0x28, 0xdb, 0x7b, 0x45, 0xce, 0xf1 } }
gEfiPartitionRecordGuid = { 0xfe2555be, 0xd716, 0x4686, { 0xb9, 0xd0, 0x79, 0xdb, 0x59, 0x21, 0xb7, 0x0d } }
# PMIC VERSION
gQcomPmicVersionProtocolGuid = { 0x4684800a, 0x2755, 0x4edc, { 0xb4, 0x43, 0x7f, 0x8c, 0xeb, 0x32, 0x39, 0xd3 } }
# Guid for Fastboot
gEfiUsbDeviceProtocolGuid = { 0xd9d9ce48, 0x44b8, 0x4f49, { 0x8e, 0x3e, 0x2a, 0x3b, 0x92, 0x7d, 0xc6, 0xc1 } }
#RAM Partitions Protocol
gEfiRamPartitionProtocolGuid = { 0x5172FFB5, 0x4253, 0x7D51, { 0xC6, 0x41, 0xA7, 0x01, 0xF9, 0x73, 0x10, 0x3C } }
#Erase Block Protocol
gEfiEraseBlockProtocolGuid = { 0x95A9A93E, 0xA86E, 0x4926, { 0xaa, 0xef, 0x99, 0x18, 0xe7, 0x72, 0xd9, 0x87 } }
# ResetReasonProtocol
gEfiResetReasonProtocolGuid = { 0xA022155A, 0x4828, 0x4535, { 0xA4, 0x99, 0x11, 0xF1, 0x52, 0x40, 0xB9, 0x1B } }
# Charger Detection Protocol
gChargerExProtocolGuid = { 0x6edc8a6d, 0x2663, 0x43cd, { 0x90, 0xff, 0x46, 0x21, 0xff, 0xd1, 0x0d, 0xf5 } }
# Pon Reason Protocol
gQcomPmicPonProtocolGuid = { 0x97044b58, 0xfea4, 0x4ad0, { 0x9d, 0xb, 0xe4, 0x17, 0xd6, 0xf, 0x11, 0xa1 }}
# Throttle limit Protocol
gEfiLimitsProtocolGuid = { 0x79d6c879, 0x725e, 0x489e, { 0xa0, 0xa9, 0x27, 0xef, 0xa5, 0xdf, 0xcb, 0x35 } }
# VerifiedBoot Protocol
gEfiQcomVerifiedBootProtocolGuid = { 0x8e5eff91, 0x21b6, 0x47d3, { 0xaf, 0x2b, 0xc1, 0x5a, 0x1, 0xe0, 0x20, 0xec } }
# Scm mode switch Protocol
gQcomScmModeSwithProtocolGuid = { 0xf57f73ed, 0x0afc, 0x4723, { 0x93, 0x74, 0x2c, 0xeb, 0xc0, 0x19, 0x8e, 0xf9 } }
# Qseecom Protocol
gQcomQseecomProtocolGuid = { 0xa74862ce, 0x680f, 0x4fe1, { 0xa3, 0x11, 0xdf, 0x41, 0xf4, 0x3, 0x3, 0x91 } }
# Mdtp Protocol
gQcomMdtpProtocolGuid = { 0x71746E63, 0x65F9, 0x41EC, { 0xAC, 0x08, 0xCD, 0xD1, 0xF2, 0xD0, 0x22, 0x98 } }
# Partition Type Protocol
gEfiPartitionTypeGuid = { 0x6848de61, 0xeb61, 0x4def, { 0x9a, 0x8e, 0x38, 0x17, 0xcb, 0xeb, 0x8f, 0x1c } }
# Sha256 Protocol
gEfiHashAlgorithmSha256Guid = { 0x51aa59de, 0xfdf2, 0x4ea3, {0xbc, 0x63, 0x87, 0x5f, 0xb7, 0x84, 0x2e, 0xe9 } }
#Nand Partition GUID Protocol
gEfiNandPartiGuidProtocolGuid = { 0xd68edce2, 0xa314, 0x457b, { 0x96, 0x2a, 0x1d, 0x99, 0xbb, 0xfc, 0xbb, 0xfb } }
# Rng Protocol guid
gQcomRngProtocolGuid = { 0x3152bca5, 0xeade, 0x433d, { 0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44 } }
#UBI flasher protocol Guid
gEfiUbiFlasherProtocolGuid = { 0xe3eef434, 0x22c9, 0xe33b, { 0x8f, 0x5d, 0x0e, 0x81, 0x68, 0x6a, 0x68, 0xcb } }

gEfiQcomASN1X509ProtocolGuid = { 0x408ec123, 0x134e, 0x4b80, { 0x91, 0x42, 0xb8, 0x9a, 0xe, 0x08, 0xf8, 0xb3 } }

gEfiQcomSecRSAProtocolGuid = { 0xeb7a442a, 0xcef4, 0x40a7, {0xa8, 0xae, 0x5a, 0x2e, 0x7f, 0x48, 0xe1, 0x72 } }

#[Includes]
# StdLib/Include
[Includes.common]
Expand Down
3 changes: 2 additions & 1 deletion Abm.dsc
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@
AbmLib|AbmPkg/Library/AbmLib/AbmLib.inf

lwext4Lib|AbmPkg/Library/lwext4Lib/lwext4Lib.inf

FastbootLib|QcomModulePkg/Library/FastbootLib/FastbootLib.inf

[LibraryClasses.AARCH64]
CompilerIntrinsicsLib|ArmPkg/Library/CompilerIntrinsicsLib/CompilerIntrinsicsLib.inf

Expand Down
2 changes: 1 addition & 1 deletion Include/Library/abm_base.h
Original file line number Diff line number Diff line change
@@ -1 +1 @@
void test_lvgl(EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable);
void test_lvgl (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable, EFI_BLOCK_IO_PROTOCOL *BlockIo);
21 changes: 5 additions & 16 deletions Include/ext4_debug.h
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ void ext4_dmask_clr(uint32_t m);
* @return debug mask*/
uint32_t ext4_dmask_get(void);

#if CONFIG_DEBUG_PRINTF

#include <stdio.h>

/**@brief Debug printf.*/
Expand All @@ -153,32 +153,21 @@ uint32_t ext4_dmask_get(void);
printf("l: %d ", __LINE__); \
} \
printf(__VA_ARGS__); \
fflush(stdout); \
} \
} while (0)
#else
#define ext4_dbg(m, ...) do { } while (0)
#endif


#if CONFIG_DEBUG_ASSERT
/**@brief Debug assertion.*/
#if CONFIG_HAVE_OWN_ASSERT
#include <stdio.h>

#define ext4_assert(_v) \
do { \
if (!(_v)) { \
printf("assertion failed:\nfile: %s\nline: %d\n", \
__FILE__, __LINE__); \
while (1) \
; \
} \
} while (0)
#define ext4_assert(_v)
#else
#define ext4_assert(_v) assert(_v)
#define ext4_assert(_v)
#endif
#else
#define ext4_assert(_v) ((void)(_v))
#define ext4_assert(_v)
#endif

#ifdef __cplusplus
Expand Down
15 changes: 15 additions & 0 deletions Include/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,21 @@
#define memset(s, c, n) SetMem((s), (UINTN)(n), (UINT8)(c))
#define memcpy(s1, s2, n) CopyMem((s1), (s2), (n))

static inline char *
strcat (char *dest, const char *src)
{
char *p = dest;
while (*p)
p++;
while ((*p = *src) != '\0')
{
p++;
src++;
}

return dest;
}

static inline char *strncpy(char *dest, const char *src, size_t n)
{
RETURN_STATUS Status = AsciiStrCpyS(dest, n, src);
Expand Down
31 changes: 31 additions & 0 deletions Library/AbmLib/AbmLib.inf
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,38 @@
BootLib
EfiFileLib
lwext4Lib
FastbootLib

[Protocols]
gEfiSimpleTextInProtocolGuid
gEfiDevicePathToTextProtocolGuid
gEfiSimpleTextOutProtocolGuid
gEfiBlockIoProtocolGuid
gEfiDiskIoProtocolGuid
gEfiPartitionRecordGuid
gEfiUsbDeviceProtocolGuid
gEfiUsbfnIoProtocolGuid
gEfiMemCardInfoProtocolGuid
gEfiEraseBlockProtocolGuid

[Guids]
gEfiUfsLU0Guid
gEfiUfsLU1Guid
gEfiUfsLU2Guid
gEfiUfsLU3Guid
gEfiUfsLU4Guid
gEfiUfsLU5Guid
gEfiUfsLU6Guid
gEfiUfsLU7Guid
gEfiBootImgPartitionGuid
gEfiRecoveryImgPartitionGuid
gQcomTokenSpaceGuid
gBlockIoRefreshGuid

[Sources.common]
abm_base.h
abm_base.c
abm_fs.h
abm_fs.c
config.c
fs_utils.c
45 changes: 39 additions & 6 deletions Library/AbmLib/abm_base.c
Original file line number Diff line number Diff line change
@@ -1,18 +1,42 @@
#include <Uefi.h>
#include <Protocol/GraphicsOutput.h>
#include <Library/UefiLib.h>
#include <Library/BaseLib.h>
#include <Library/BaseMemoryLib.h>
#include <Library/DebugLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PcdLib.h>
#include <Library/UefiApplicationEntryPoint.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Library/UefiRuntimeServicesTableLib.h>

//TODO: fix this include
#include <../Include/lvgl.h>
#include <../Include/lv_misc/lv_log.h>
#include <string.h>

#include <Protocol/BlockIo.h>
EFI_SYSTEM_TABLE *gST1;
EFI_BOOT_SERVICES *gBS1;
EFI_GRAPHICS_OUTPUT_PROTOCOL *mGop;
lv_disp_drv_t mDispDrv;
lv_indev_drv_t mFakeInputDrv;
lv_disp_t * disp;
bool abm_running=true;
#include <ext4.h>
#include "abm_fs.h"
#include <ext4_mkfs.h>
#include "config.h"

struct boot_entry *entry_list;

static struct ext4_mkfs_info info = {
.block_size = 4096,
.journal = false,
};
static int fs_type = F_SET_EXT2;
static struct ext4_fs fs;
static struct ext4_blockdev *bd;

static void event_handler(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_CLICKED) {
Expand Down Expand Up @@ -65,13 +89,22 @@ bool key_read(lv_indev_drv_t * drv, lv_indev_data_t*data)
//
EFI_STATUS
EFIAPI
test_lvgl (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)
test_lvgl (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable, EFI_BLOCK_IO_PROTOCOL *BlockIo)
{
gST1 = SystemTable;
gBS1 = gST1->BootServices;
gBS1->LocateProtocol(
&gEfiGraphicsOutputProtocolGuid, NULL, (VOID **)&mGop);

// Setup lwext4 lib, based on UEFI BlockIo protocol
uefi_dev_set(BlockIo);
bd = uefi_dev_get();
if (!bd) {
DebugAssert("abm_base.c", 92, "open_filedev: fail\n");
}

mount_meta(bd);
entry_list = parse_boot_entries(&entry_list);

// Prepare LittleVGL
lv_init();
Expand Down Expand Up @@ -104,11 +137,11 @@ test_lvgl (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable)

lv_obj_t * list_btn;
lv_obj_set_state(list1, LV_STATE_DEFAULT);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "Example 1");
lv_obj_set_event_cb(list_btn, event_handler);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "Example 2");
lv_obj_set_event_cb(list_btn, event_handler);
for(int i=0; i<get_entry_count(); i++){
list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, (entry_list+i)->title);
}
list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "Extras");
lv_obj_set_event_cb(list_btn, event_handler);
lv_list_set_anim_time(list1, 500);

while (abm_running) {
Expand Down
2 changes: 1 addition & 1 deletion Library/AbmLib/abm_base.h
Original file line number Diff line number Diff line change
@@ -1 +1 @@
void test_lvgl(IN EFI_SYSTEM_TABLE *SystemTable);
void test_lvgl (EFI_HANDLE ImageHandle, EFI_SYSTEM_TABLE *SystemTable, EFI_BLOCK_IO_PROTOCOL *BlockIo);
Loading

0 comments on commit 7f46bd0

Please sign in to comment.