OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
LoaderEntry.c File Reference
#include "LinuxBootInternal.h"
#include <Uefi.h>
#include <Library/BaseLib.h>
#include <Library/DevicePathLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/OcBootManagementLib.h>
#include <Library/OcDebugLogLib.h>
#include <Library/OcFileLib.h>
#include <Library/OcFlexArrayLib.h>
#include <Library/OcStringLib.h>
#include <Library/PrintLib.h>
#include <Library/SortLib.h>
#include <Library/UefiBootServicesTableLib.h>
#include <Protocol/OcBootEntry.h>

Go to the source code of this file.

Macros

#define ROOT_DIR   L"\\"
 
#define BOOT_DIR   L"\\boot"
 
#define OSTREE_DIR   L"\\ostree"
 
#define LOADER_ENTRIES_DIR   L"loader\\entries"
 
#define GRUB2_GRUB_CFG   L"grub2\\grub.cfg"
 
#define GRUB2_GRUBENV   L"grub2\\grubenv"
 
#define GRUB2_GRUBENV_SIZE   SIZE_1KB
 
#define BLSPEC_SUFFIX_CONF   L".conf"
 
#define BLSPEC_PREFIX_AUTO   L"auto-"
 
#define MAX_LOADER_ENTRY_NAME_LEN   (127)
 
#define MAX_LOADER_ENTRY_FILE_INFO_SIZE
 
#define MAX_LOADER_ENTRY_FILE_SIZE   SIZE_4KB
 

Typedefs

typedef enum ENTRY_PARSE_STATE_ ENTRY_PARSE_STATE
 

Enumerations

enum  ENTRY_PARSE_STATE_ {
  ENTRY_LEADING_SPACE , ENTRY_COMMENT , ENTRY_KEY , ENTRY_KEY_VALUE_SPACE ,
  ENTRY_VALUE
}
 

Functions

STATIC CHAR8 * ExtractVariantFrom (IN CHAR8 *String)
 
STATIC EFI_STATUS GetLoaderEntryLine (IN CONST CHAR16 *FileName, IN OUT CHAR8 *Content, IN OUT UINTN *Pos, OUT CHAR8 **Key, OUT CHAR8 **Value)
 
LOADER_ENTRYInternalAllocateLoaderEntry (VOID)
 
VOID InternalFreeLoaderEntry (LOADER_ENTRY *Entry)
 
STATIC EFI_STATUS EntryCopySingleValue (IN CONST BOOLEAN Grub2, IN OUT CHAR8 **Target, IN CONST CHAR8 *Value)
 
STATIC EFI_STATUS EntryCopyMultipleValue (IN CONST BOOLEAN Grub2, IN OC_FLEX_ARRAY *Array, IN CONST CHAR8 *Value)
 
EFI_STATUS InternalProcessLoaderEntryFile (IN CONST CHAR16 *FileName, IN OUT CHAR8 *Content, OUT LOADER_ENTRY *Entry, IN CONST BOOLEAN Grub2)
 
STATIC EFI_STATUS ExpandReplaceOptions (IN OUT LOADER_ENTRY *Entry)
 
STATIC EFI_STATUS ExpandInitrds (IN OUT LOADER_ENTRY *Entry)
 
STATIC EFI_STATUS DoFilterLoaderEntry (EFI_FILE_HANDLE Directory, EFI_FILE_INFO *FileInfo, UINTN FileInfoSize, VOID *Context OPTIONAL)
 
EFI_STATUS InternalIdVersionFromFileName (IN OUT LOADER_ENTRY *Entry, IN CHAR16 *FileName)
 
STATIC EFI_STATUS FindLoaderFile (IN CONST EFI_FILE_HANDLE Directory, IN CONST CHAR16 *DirName, IN OUT CHAR8 **FileName)
 
STATIC BOOLEAN HasRootOption (IN OC_FLEX_ARRAY *Options)
 
STATIC BOOLEAN HasOstreeDir (EFI_FILE_HANDLE Directory)
 
STATIC EFI_STATUS DoProcessLoaderEntry (EFI_FILE_HANDLE Directory, EFI_FILE_INFO *FileInfo, UINTN FileInfoSize, VOID *Context OPTIONAL)
 
STATIC EFI_STATUS ProcessLoaderEntry (EFI_FILE_HANDLE Directory, EFI_FILE_INFO *FileInfo, UINTN FileInfoSize, VOID *Context OPTIONAL)
 
STATIC EFI_STATUS FixTuneDVars (VOID)
 
STATIC EFI_STATUS ScanLoaderEntriesAtDirectory (IN EFI_FILE_PROTOCOL *RootDirectory, IN CHAR16 *DirName, OUT OC_PICKER_ENTRY **Entries, OUT UINTN *NumEntries)
 
STATIC EFI_STATUS DoScanLoaderEntries (IN EFI_FILE_PROTOCOL *Directory, IN CHAR16 *DirName, OUT OC_PICKER_ENTRY **Entries, OUT UINTN *NumEntries)
 
EFI_STATUS InternalScanLoaderEntries (IN EFI_FILE_PROTOCOL *RootDirectory, OUT OC_PICKER_ENTRY **Entries, OUT UINTN *NumEntries)
 
STATIC EFI_STATUS DoConvertLoaderEntriesToBootEntries (OUT OC_PICKER_ENTRY **Entries, OUT UINTN *NumEntries)
 
STATIC EFI_STATUS AppendVersion (LOADER_ENTRY *Entry)
 
STATIC EFI_STATUS AppendVersions (VOID)
 
STATIC EFI_STATUS DisambiguateDuplicates (VOID)
 
STATIC EFI_STATUS EntryApplyDefaults (IN EFI_FILE_PROTOCOL *RootDirectory, IN LOADER_ENTRY *Entry)
 
STATIC EFI_STATUS ApplyDefaults (IN EFI_FILE_PROTOCOL *RootDirectory)
 
EFI_STATUS InternalConvertLoaderEntriesToBootEntries (IN EFI_FILE_PROTOCOL *RootDirectory, OUT OC_PICKER_ENTRY **Entries, OUT UINTN *NumEntries)
 

Variables

STATIC CHAR8 * mTuneDVars []
 
STATIC BOOLEAN mIsGrub2
 
STATIC CHAR8 * mLinuxVariants []
 

Detailed Description

Boot Loader Spec / Grub2 blscfg module loader entry parser.

Copyright (c) 2021, Mike Beaton. All rights reserved.
SPDX-License-Identifier: BSD-3-Clause

Definition in file LoaderEntry.c.

Macro Definition Documentation

◆ BLSPEC_PREFIX_AUTO

#define BLSPEC_PREFIX_AUTO   L"auto-"

Definition at line 59 of file LoaderEntry.c.

◆ BLSPEC_SUFFIX_CONF

#define BLSPEC_SUFFIX_CONF   L".conf"

Definition at line 58 of file LoaderEntry.c.

◆ BOOT_DIR

#define BOOT_DIR   L"\\boot"

Definition at line 43 of file LoaderEntry.c.

◆ GRUB2_GRUB_CFG

#define GRUB2_GRUB_CFG   L"grub2\\grub.cfg"

Definition at line 54 of file LoaderEntry.c.

◆ GRUB2_GRUBENV

#define GRUB2_GRUBENV   L"grub2\\grubenv"

Definition at line 55 of file LoaderEntry.c.

◆ GRUB2_GRUBENV_SIZE

#define GRUB2_GRUBENV_SIZE   SIZE_1KB

Definition at line 56 of file LoaderEntry.c.

◆ LOADER_ENTRIES_DIR

#define LOADER_ENTRIES_DIR   L"loader\\entries"

Definition at line 53 of file LoaderEntry.c.

◆ MAX_LOADER_ENTRY_FILE_INFO_SIZE

#define MAX_LOADER_ENTRY_FILE_INFO_SIZE
Value:
( \
SIZE_OF_EFI_FILE_INFO + \
)
#define MAX_LOADER_ENTRY_NAME_LEN
Definition LoaderEntry.c:68
#define BLSPEC_SUFFIX_CONF
Definition LoaderEntry.c:58
#define L_STR_LEN(String)
Definition OcStringLib.h:26

Definition at line 69 of file LoaderEntry.c.

◆ MAX_LOADER_ENTRY_FILE_SIZE

#define MAX_LOADER_ENTRY_FILE_SIZE   SIZE_4KB

Definition at line 78 of file LoaderEntry.c.

◆ MAX_LOADER_ENTRY_NAME_LEN

#define MAX_LOADER_ENTRY_NAME_LEN   (127)

Definition at line 68 of file LoaderEntry.c.

◆ OSTREE_DIR

#define OSTREE_DIR   L"\\ostree"

Definition at line 47 of file LoaderEntry.c.

◆ ROOT_DIR

#define ROOT_DIR   L"\\"

Definition at line 37 of file LoaderEntry.c.

Typedef Documentation

◆ ENTRY_PARSE_STATE

Enumeration Type Documentation

◆ ENTRY_PARSE_STATE_

Enumerator
ENTRY_LEADING_SPACE 
ENTRY_COMMENT 
ENTRY_KEY 
ENTRY_KEY_VALUE_SPACE 
ENTRY_VALUE 

Definition at line 91 of file LoaderEntry.c.

Function Documentation

◆ AppendVersion()

STATIC EFI_STATUS AppendVersion ( LOADER_ENTRY * Entry)

Definition at line 1337 of file LoaderEntry.c.

◆ AppendVersions()

STATIC EFI_STATUS AppendVersions ( VOID )

Definition at line 1364 of file LoaderEntry.c.

◆ ApplyDefaults()

STATIC EFI_STATUS ApplyDefaults ( IN EFI_FILE_PROTOCOL * RootDirectory)

Definition at line 1481 of file LoaderEntry.c.

◆ DisambiguateDuplicates()

STATIC EFI_STATUS DisambiguateDuplicates ( VOID )

Definition at line 1390 of file LoaderEntry.c.

◆ DoConvertLoaderEntriesToBootEntries()

STATIC EFI_STATUS DoConvertLoaderEntriesToBootEntries ( OUT OC_PICKER_ENTRY ** Entries,
OUT UINTN * NumEntries )

Definition at line 1167 of file LoaderEntry.c.

◆ DoFilterLoaderEntry()

STATIC EFI_STATUS DoFilterLoaderEntry ( EFI_FILE_HANDLE Directory,
EFI_FILE_INFO * FileInfo,
UINTN FileInfoSize,
VOID *Context OPTIONAL )

Definition at line 554 of file LoaderEntry.c.

◆ DoProcessLoaderEntry()

STATIC EFI_STATUS DoProcessLoaderEntry ( EFI_FILE_HANDLE Directory,
EFI_FILE_INFO * FileInfo,
UINTN FileInfoSize,
VOID *Context OPTIONAL )

Definition at line 816 of file LoaderEntry.c.

◆ DoScanLoaderEntries()

STATIC EFI_STATUS DoScanLoaderEntries ( IN EFI_FILE_PROTOCOL * Directory,
IN CHAR16 * DirName,
OUT OC_PICKER_ENTRY ** Entries,
OUT UINTN * NumEntries )

Definition at line 1122 of file LoaderEntry.c.

◆ EntryApplyDefaults()

STATIC EFI_STATUS EntryApplyDefaults ( IN EFI_FILE_PROTOCOL * RootDirectory,
IN LOADER_ENTRY * Entry )

Definition at line 1434 of file LoaderEntry.c.

◆ EntryCopyMultipleValue()

STATIC EFI_STATUS EntryCopyMultipleValue ( IN CONST BOOLEAN Grub2,
IN OC_FLEX_ARRAY * Array,
IN CONST CHAR8 * Value )

Definition at line 358 of file LoaderEntry.c.

◆ EntryCopySingleValue()

STATIC EFI_STATUS EntryCopySingleValue ( IN CONST BOOLEAN Grub2,
IN OUT CHAR8 ** Target,
IN CONST CHAR8 * Value )

Definition at line 336 of file LoaderEntry.c.

◆ ExpandInitrds()

STATIC EFI_STATUS ExpandInitrds ( IN OUT LOADER_ENTRY * Entry)

Definition at line 496 of file LoaderEntry.c.

◆ ExpandReplaceOptions()

STATIC EFI_STATUS ExpandReplaceOptions ( IN OUT LOADER_ENTRY * Entry)

Definition at line 441 of file LoaderEntry.c.

◆ ExtractVariantFrom()

STATIC CHAR8 * ExtractVariantFrom ( IN CHAR8 * String)

Definition at line 139 of file LoaderEntry.c.

◆ FindLoaderFile()

STATIC EFI_STATUS FindLoaderFile ( IN CONST EFI_FILE_HANDLE Directory,
IN CONST CHAR16 * DirName,
IN OUT CHAR8 ** FileName )

Definition at line 678 of file LoaderEntry.c.

◆ FixTuneDVars()

STATIC EFI_STATUS FixTuneDVars ( VOID )

Definition at line 972 of file LoaderEntry.c.

◆ GetLoaderEntryLine()

STATIC EFI_STATUS GetLoaderEntryLine ( IN CONST CHAR16 * FileName,
IN OUT CHAR8 * Content,
IN OUT UINTN * Pos,
OUT CHAR8 ** Key,
OUT CHAR8 ** Value )

Definition at line 163 of file LoaderEntry.c.

◆ HasOstreeDir()

STATIC BOOLEAN HasOstreeDir ( EFI_FILE_HANDLE Directory)

Definition at line 792 of file LoaderEntry.c.

◆ HasRootOption()

STATIC BOOLEAN HasRootOption ( IN OC_FLEX_ARRAY * Options)

Definition at line 744 of file LoaderEntry.c.

◆ InternalAllocateLoaderEntry()

LOADER_ENTRY * InternalAllocateLoaderEntry ( VOID )

Definition at line 273 of file LoaderEntry.c.

◆ InternalConvertLoaderEntriesToBootEntries()

EFI_STATUS InternalConvertLoaderEntriesToBootEntries ( IN EFI_FILE_PROTOCOL * RootDirectory,
OUT OC_PICKER_ENTRY ** Entries,
OUT UINTN * NumEntries )

Definition at line 1507 of file LoaderEntry.c.

◆ InternalFreeLoaderEntry()

VOID InternalFreeLoaderEntry ( LOADER_ENTRY * Entry)

Definition at line 301 of file LoaderEntry.c.

◆ InternalIdVersionFromFileName()

EFI_STATUS InternalIdVersionFromFileName ( IN OUT LOADER_ENTRY * Entry,
IN CHAR16 * FileName )

Definition at line 593 of file LoaderEntry.c.

◆ InternalProcessLoaderEntryFile()

EFI_STATUS InternalProcessLoaderEntryFile ( IN CONST CHAR16 * FileName,
IN OUT CHAR8 * Content,
OUT LOADER_ENTRY * Entry,
IN CONST BOOLEAN Grub2 )

Definition at line 384 of file LoaderEntry.c.

◆ InternalScanLoaderEntries()

EFI_STATUS InternalScanLoaderEntries ( IN EFI_FILE_PROTOCOL * RootDirectory,
OUT OC_PICKER_ENTRY ** Entries,
OUT UINTN * NumEntries )

Definition at line 1144 of file LoaderEntry.c.

◆ ProcessLoaderEntry()

STATIC EFI_STATUS ProcessLoaderEntry ( EFI_FILE_HANDLE Directory,
EFI_FILE_INFO * FileInfo,
UINTN FileInfoSize,
VOID *Context OPTIONAL )

Definition at line 942 of file LoaderEntry.c.

◆ ScanLoaderEntriesAtDirectory()

STATIC EFI_STATUS ScanLoaderEntriesAtDirectory ( IN EFI_FILE_PROTOCOL * RootDirectory,
IN CHAR16 * DirName,
OUT OC_PICKER_ENTRY ** Entries,
OUT UINTN * NumEntries )

Definition at line 996 of file LoaderEntry.c.

Variable Documentation

◆ mIsGrub2

STATIC BOOLEAN mIsGrub2

Definition at line 86 of file LoaderEntry.c.

◆ mLinuxVariants

STATIC CHAR8* mLinuxVariants[]
Initial value:
= {
"Arch",
"Astra",
"CentOS",
"Debian",
"Deepin",
"elementaryOS",
"Endless",
"Gentoo",
"Fedora",
"KDEneon",
"Kali",
"Mageia",
"Manjaro",
"Mint",
"openSUSE",
"Oracle",
"PopOS",
"RHEL",
"Rocky",
"Solus",
"Lubuntu",
"UbuntuMATE",
"Xubuntu",
"Ubuntu",
"Void",
"Zorin",
"MX"
}

Definition at line 107 of file LoaderEntry.c.

◆ mTuneDVars

STATIC CHAR8* mTuneDVars[]
Initial value:
= {
"tuned_params",
"tuned_initrd"
}

Definition at line 29 of file LoaderEntry.c.