#include "bootspec-fundamental.h"
#include "console.h"
#include "devicetree.h"
-#include "disk.h"
#include "drivers.h"
#include "efivars-fundamental.h"
#include "graphics.h"
0;
_cleanup_free_ char16_t *infostr = NULL, *typestr = NULL;
- char16_t uuid[37];
assert(loaded_image);
efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderImageIdentifier", loaded_image_path, 0);
/* export the device path this image is started from */
- if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS)
+ _cleanup_free_ char16_t *uuid = disk_get_part_uuid(loaded_image->DeviceHandle);
+ if (uuid)
efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", uuid, 0);
}
+++ /dev/null
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-
-#include "disk.h"
-#include "proto/device-path.h"
-#include "util.h"
-
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, char16_t uuid[static 37]) {
- EFI_STATUS err;
- EFI_DEVICE_PATH *dp;
-
- /* export the device path this image is started from */
-
- if (!handle)
- return EFI_NOT_FOUND;
-
- err = BS->HandleProtocol(handle, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &dp);
- if (err != EFI_SUCCESS)
- return err;
-
- for (; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
- if (DevicePathType(dp) != MEDIA_DEVICE_PATH)
- continue;
- if (DevicePathSubType(dp) != MEDIA_HARDDRIVE_DP)
- continue;
-
- /* The HD device path may be misaligned. */
- HARDDRIVE_DEVICE_PATH hd;
- memcpy(&hd, dp, MIN(sizeof(hd), (size_t) DevicePathNodeLength(dp)));
-
- if (hd.SignatureType != SIGNATURE_TYPE_GUID)
- continue;
-
- _cleanup_free_ char16_t *tmp = xasprintf(
- "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
- hd.Signature[3],
- hd.Signature[2],
- hd.Signature[1],
- hd.Signature[0],
-
- hd.Signature[5],
- hd.Signature[4],
- hd.Signature[7],
- hd.Signature[6],
-
- hd.Signature[8],
- hd.Signature[9],
- hd.Signature[10],
- hd.Signature[11],
- hd.Signature[12],
- hd.Signature[13],
- hd.Signature[14],
- hd.Signature[15]);
- strcpy16(uuid, tmp);
- return EFI_SUCCESS;
- }
-
- return EFI_NOT_FOUND;
-}
+++ /dev/null
-/* SPDX-License-Identifier: LGPL-2.1-or-later */
-#pragma once
-
-#include "efi.h"
-
-EFI_STATUS disk_get_part_uuid(EFI_HANDLE *handle, char16_t uuid[static 37]);
'console.h',
'cpio.h',
'devicetree.h',
- 'disk.h',
'drivers.h',
'efi-string.h',
'efi.h',
'console.c',
'devicetree.c',
'drivers.c',
- 'disk.c',
'efi-string.c',
'graphics.c',
'initrd.c',
*ret_root_dir = root_dir;
return EFI_SUCCESS;
}
+
+char16_t *disk_get_part_uuid(EFI_HANDLE *handle) {
+ EFI_STATUS err;
+ EFI_DEVICE_PATH *dp;
+
+ /* export the device path this image is started from */
+
+ if (!handle)
+ return NULL;
+
+ err = BS->HandleProtocol(handle, MAKE_GUID_PTR(EFI_DEVICE_PATH_PROTOCOL), (void **) &dp);
+ if (err != EFI_SUCCESS)
+ return NULL;
+
+ for (; !IsDevicePathEnd(dp); dp = NextDevicePathNode(dp)) {
+ if (DevicePathType(dp) != MEDIA_DEVICE_PATH)
+ continue;
+ if (DevicePathSubType(dp) != MEDIA_HARDDRIVE_DP)
+ continue;
+
+ /* The HD device path may be misaligned. */
+ HARDDRIVE_DEVICE_PATH hd;
+ memcpy(&hd, dp, MIN(sizeof(hd), (size_t) DevicePathNodeLength(dp)));
+
+ if (hd.SignatureType != SIGNATURE_TYPE_GUID)
+ continue;
+
+ return xasprintf(
+ "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+ hd.Signature[3],
+ hd.Signature[2],
+ hd.Signature[1],
+ hd.Signature[0],
+
+ hd.Signature[5],
+ hd.Signature[4],
+ hd.Signature[7],
+ hd.Signature[6],
+
+ hd.Signature[8],
+ hd.Signature[9],
+ hd.Signature[10],
+ hd.Signature[11],
+ hd.Signature[12],
+ hd.Signature[13],
+ hd.Signature[14],
+ hd.Signature[15]);
+ }
+
+ return NULL;
+}
{ 0xc12a7328, 0xf81f, 0x11d2, { 0xba, 0x4b, 0x00, 0xa0, 0xc9, 0x3e, 0xc9, 0x3b } }
EFI_STATUS partition_open(const EFI_GUID *type, EFI_HANDLE *device, EFI_HANDLE *ret_device, EFI_FILE **ret_root_dir);
+char16_t *disk_get_part_uuid(EFI_HANDLE *handle);
#include "cpio.h"
#include "devicetree.h"
-#include "disk.h"
#include "graphics.h"
#include "linux.h"
#include "measure.h"
EFI_STUB_FEATURE_RANDOM_SEED | /* We pass a random seed to the kernel */
0;
- char16_t uuid[37];
-
assert(loaded_image);
/* Export the device path this image is started from, if it's not set yet */
- if (efivar_get_raw(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", NULL, NULL) != EFI_SUCCESS)
- if (disk_get_part_uuid(loaded_image->DeviceHandle, uuid) == EFI_SUCCESS)
+ if (efivar_get_raw(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", NULL, NULL) != EFI_SUCCESS) {
+ _cleanup_free_ char16_t *uuid = disk_get_part_uuid(loaded_image->DeviceHandle);
+ if (uuid)
efivar_set(MAKE_GUID_PTR(LOADER), u"LoaderDevicePartUUID", uuid, 0);
+ }
/* If LoaderImageIdentifier is not set, assume the image with this stub was loaded directly from the
* UEFI firmware without any boot loader, and hence set the LoaderImageIdentifier ourselves. Note