57 lines
2.0 KiB
C++
57 lines
2.0 KiB
C++
/*
|
|
* Copyright (C) 2009,2013 Apple, Inc. All rights reserved.
|
|
*
|
|
* This document is the property of Apple Inc.
|
|
* It is considered confidential and proprietary.
|
|
*
|
|
* This document may not be reproduced or transmitted in any form,
|
|
* in whole or in part, without the express written permission of
|
|
* Apple Inc.
|
|
*/
|
|
|
|
#ifndef DEVICE_TREE_PATCHER_H
|
|
#define DEVICE_TREE_PATCHER_H 1
|
|
|
|
#include <stdint.h>
|
|
|
|
// Helper for patching a device tree. Beware that this modifies
|
|
// globals (e.g gDeviceTree) as a side-effect of its methods.
|
|
class DeviceTreePatcher {
|
|
public:
|
|
DeviceTreePatcher(char *base, size_t devtree_size);
|
|
|
|
// Use one of the reserved chosen/memory-map nodes to record the location
|
|
// of a loaded or allocated memory section. Returns true on success, or
|
|
// false if this fails to claim an unused reserved node.
|
|
bool AllocateMemoryRange(const char *name, uint64_t pmaddr, uint64_t size);
|
|
|
|
// Set an integer property. Returns true on success, or false if the
|
|
// property cannot be found, or the value is too large to fit.
|
|
bool SetPropertyInt(const char *node, const char *property, uint64_t value);
|
|
|
|
// Set an integer property. Returns true on success, or false if the
|
|
// property cannot be found, or the value is too large to fit.
|
|
bool SetPropertyTwoQuads(const char *node, const char *property, uint64_t *value);
|
|
|
|
// Set a string property. Returns true on success, or false if the
|
|
// property cannot be found, or the value is too large to fit.
|
|
bool SetPropertyString(const char *node, const char *property, const char *s);
|
|
|
|
uint32_t GetNumAddressCells(const char *node_name);
|
|
|
|
private:
|
|
// Get a pointer to the storage area for a property. Returns true
|
|
// and fills in 'data' and 'size' if found. Returns false and does
|
|
// not modify the return arguments if not found.
|
|
bool GetPropertyBuffer(const char *node_name,
|
|
const char *property_name,
|
|
void **data,
|
|
uint32_t *size);
|
|
|
|
char *_base;
|
|
size_t _treesize;
|
|
uint32_t _alloc_idx;
|
|
};
|
|
|
|
#endif // DEVICE_TREE_PATCHER_H
|