mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-25 22:35:42 +00:00
FDT wrappers: add functions for read/write bytes
This patch adds 'fdtw_read_bytes' and 'fdtw_write_inplace_bytes' functions for read/write array of bytes from/to a given property. It also adds 'fdt_setprop_inplace_namelen_partial' to jmptbl.i files for builds with USE_ROMLIB=1 option. Change-Id: Ied7b5c8b38a0e21d508aa7bcf5893e656028b14d Signed-off-by: Alexei Fedorov <Alexei.Fedorov@arm.com>
This commit is contained in:
parent
91ff490d75
commit
0a2ab6e635
5 changed files with 89 additions and 5 deletions
common
include/common
lib/romlib
plat/arm/board
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -102,6 +102,41 @@ int fdtw_read_array(const void *dtb, int node, const char *prop,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read bytes from a given property of the given node. Any number of
|
||||
* bytes of the property can be read. The fdt pointer is updated.
|
||||
* Returns 0 on success, and -1 on error.
|
||||
*/
|
||||
int fdtw_read_bytes(const void *dtb, int node, const char *prop,
|
||||
unsigned int length, void *value)
|
||||
{
|
||||
const void *ptr;
|
||||
int value_len;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(prop != NULL);
|
||||
assert(value != NULL);
|
||||
assert(node >= 0);
|
||||
|
||||
/* Access property and obtain its length (in bytes) */
|
||||
ptr = fdt_getprop_namelen(dtb, node, prop, (int)strlen(prop),
|
||||
&value_len);
|
||||
if (ptr == NULL) {
|
||||
WARN("Couldn't find property %s in dtb\n", prop);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Verify that property length is not less than number of bytes */
|
||||
if ((unsigned int)value_len < length) {
|
||||
WARN("Property length mismatch\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
(void)memcpy(value, ptr, length);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read string from a given property of the given node. Up to 'size - 1'
|
||||
* characters are read, and a NUL terminator is added. Returns 0 on success,
|
||||
|
@ -167,3 +202,45 @@ int fdtw_write_inplace_cells(void *dtb, int node, const char *prop,
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Write bytes in place to a given property of the given node.
|
||||
* Any number of bytes of the property can be written.
|
||||
* Returns 0 on success, and < 0 on error.
|
||||
*/
|
||||
int fdtw_write_inplace_bytes(void *dtb, int node, const char *prop,
|
||||
unsigned int length, const void *data)
|
||||
{
|
||||
const void *ptr;
|
||||
int namelen, value_len, err;
|
||||
|
||||
assert(dtb != NULL);
|
||||
assert(prop != NULL);
|
||||
assert(data != NULL);
|
||||
assert(node >= 0);
|
||||
|
||||
namelen = (int)strlen(prop);
|
||||
|
||||
/* Access property and obtain its length in bytes */
|
||||
ptr = fdt_getprop_namelen(dtb, node, prop, namelen, &value_len);
|
||||
if (ptr == NULL) {
|
||||
WARN("Couldn't find property %s in dtb\n", prop);
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Verify that property length is not less than number of bytes */
|
||||
if ((unsigned int)value_len < length) {
|
||||
WARN("Property length mismatch\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* Set property value in place */
|
||||
err = fdt_setprop_inplace_namelen_partial(dtb, node, prop,
|
||||
namelen, 0,
|
||||
data, (int)length);
|
||||
if (err != 0) {
|
||||
WARN("Set property %s failed with error %d\n", prop, err);
|
||||
}
|
||||
|
||||
return err;
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -20,5 +20,9 @@ int fdtw_read_string(const void *dtb, int node, const char *prop,
|
|||
char *str, size_t size);
|
||||
int fdtw_write_inplace_cells(void *dtb, int node, const char *prop,
|
||||
unsigned int cells, void *value);
|
||||
int fdtw_read_bytes(const void *dtb, int node, const char *prop,
|
||||
unsigned int length, void *value);
|
||||
int fdtw_write_inplace_bytes(void *dtb, int node, const char *prop,
|
||||
unsigned int length, const void *data);
|
||||
|
||||
#endif /* FDT_WRAPPERS_H */
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
|
||||
# Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
@ -17,6 +17,7 @@ fdt fdt_getprop_namelen
|
|||
fdt fdt_setprop_inplace
|
||||
fdt fdt_check_header
|
||||
fdt fdt_node_offset_by_compatible
|
||||
fdt fdt_setprop_inplace_namelen_partial
|
||||
mbedtls mbedtls_asn1_get_alg
|
||||
mbedtls mbedtls_asn1_get_alg_null
|
||||
mbedtls mbedtls_asn1_get_bitstring_null
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
||||
# Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
@ -19,6 +19,7 @@ fdt fdt_getprop_namelen
|
|||
fdt fdt_setprop_inplace
|
||||
fdt fdt_check_header
|
||||
fdt fdt_node_offset_by_compatible
|
||||
fdt fdt_setprop_inplace_namelen_partial
|
||||
mbedtls mbedtls_asn1_get_alg
|
||||
mbedtls mbedtls_asn1_get_alg_null
|
||||
mbedtls mbedtls_asn1_get_bitstring_null
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.
|
||||
# Copyright (c) 2018-2020, ARM Limited and Contributors. All rights reserved.
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
@ -19,6 +19,7 @@ fdt fdt_getprop_namelen
|
|||
fdt fdt_setprop_inplace
|
||||
fdt fdt_check_header
|
||||
fdt fdt_node_offset_by_compatible
|
||||
fdt fdt_setprop_inplace_namelen_partial
|
||||
mbedtls mbedtls_asn1_get_alg
|
||||
mbedtls mbedtls_asn1_get_alg_null
|
||||
mbedtls mbedtls_asn1_get_bitstring_null
|
||||
|
|
Loading…
Add table
Reference in a new issue