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:
parent
895f54f487
commit
e9e279bb77
5 changed files with 177 additions and 2 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue