1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-25 19:27:44 +00:00

LibDeviceTree: Add walk_device_tree and use it to dump structured data

We can use this simple parser and its callbacks to implement more
complex parsing in later commits.
This commit is contained in:
Andrew Kaster 2023-02-12 15:51:04 -07:00 committed by Linus Groh
parent 895f54f487
commit e9e279bb77
5 changed files with 177 additions and 2 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2021, Andrew Kaster <akaster@serenityos.org>
* Copyright (c) 2021-2023, Andrew Kaster <akaster@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
@ -7,6 +7,10 @@
#pragma once
#include <AK/Endian.h>
#include <AK/Error.h>
#include <AK/Function.h>
#include <AK/IterationDecision.h>
#include <AK/StringView.h>
#include <AK/Types.h>
namespace DeviceTree {
@ -37,4 +41,23 @@ struct FlattenedDeviceTreeReserveEntry {
};
static_assert(sizeof(FlattenedDeviceTreeReserveEntry) == 16, "FDT Memory Reservation entry size must match specification");
// https://devicetree-specification.readthedocs.io/en/v0.3/flattened-format.html#lexical-structure
enum FlattenedDeviceTreeTokenType : u32 {
BeginNode = 1,
EndNode = 2,
Property = 3,
NoOp = 4,
End = 9
};
struct DeviceTreeCallbacks {
Function<ErrorOr<IterationDecision>(StringView)> on_node_begin;
Function<ErrorOr<IterationDecision>(StringView)> on_node_end;
Function<ErrorOr<IterationDecision>(StringView, ReadonlyBytes)> on_property;
Function<ErrorOr<IterationDecision>()> on_noop;
Function<ErrorOr<void>()> on_end;
};
ErrorOr<void> walk_device_tree(FlattenedDeviceTreeHeader const&, ReadonlyBytes raw_device_tree, DeviceTreeCallbacks);
} // namespace DeviceTree