/** * fit_conf_get_node - get node offset for configuration of a given unit name * @fit: pointer to the FIT format image header * @conf_uname: configuration node unit name * * fit_conf_get_node() finds a configuration (withing the '/configurations' * parant node) of a provided unit name. If configuration is found its node * offset is returned to the caller. * * When NULL is provided in second argument fit_conf_get_node() will search * for a default configuration node instead. Default configuration node unit * name is retrived from FIT_DEFAULT_PROP property of the '/configurations' * node. * * returns: * configuration node offset when found (>=0) * negative number on failure (FDT_ERR_* code) */ int fit_conf_get_node(const void *fit, const char *conf_uname) { int noffset, confs_noffset; int len; confs_noffset = fdt_path_offset(fit, FIT_CONFS_PATH); if (confs_noffset < 0) { debug("Can't find configurations parent node '%s' (%s)\n", FIT_CONFS_PATH, fdt_strerror(confs_noffset)); return confs_noffset; } if (conf_uname == NULL) { /* get configuration unit name from the default property */ debug("No configuration specified, trying default...\n"); conf_uname = (char *)fdt_getprop(fit, confs_noffset, FIT_DEFAULT_PROP, &len); if (conf_uname == NULL) { fit_get_debug(fit, confs_noffset, FIT_DEFAULT_PROP, len); return len; } debug("Found default configuration: '%s'\n", conf_uname); } noffset = fdt_subnode_offset(fit, confs_noffset, conf_uname); if (noffset < 0) { debug("Can't get node offset for configuration unit name: '%s' (%s)\n", conf_uname, fdt_strerror(noffset)); } return noffset; }
static int fit_image_get_address(const void *fit, int noffset, char *name, ulong *load) { int len, cell_len; const fdt32_t *cell; uint64_t load64 = 0; cell = fdt_getprop(fit, noffset, name, &len); if (cell == NULL) { fit_get_debug(fit, noffset, name, len); return -1; } if (len > sizeof(ulong)) { printf("Unsupported %s address size\n", name); return -1; } cell_len = len >> 2; /* Use load64 to avoid compiling warning for 32-bit target */ while (cell_len--) { load64 = (load64 << 32) | uimage_to_cpu(*cell); cell++; } *load = (ulong)load64; return 0; }
/** * fit_image_hash_get_algo - get hash algorithm name * @fit: pointer to the FIT format image header * @noffset: hash node offset * @algo: double pointer to char, will hold pointer to the algorithm name * * fit_image_hash_get_algo() finds hash algorithm property in a given hash node. * If the property is found its data start address is returned to the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_hash_get_algo(const void *fit, int noffset, char **algo) { int len; *algo = (char *)fdt_getprop(fit, noffset, FIT_ALGO_PROP, &len); if (*algo == NULL) { fit_get_debug(fit, noffset, FIT_ALGO_PROP, len); return -1; } return 0; }
/** * fit_get_desc - get node description property * @fit: pointer to the FIT format image header * @noffset: node offset * @desc: double pointer to the char, will hold pointer to the descrption * * fit_get_desc() reads description property from a given node, if * description is found pointer to it is returened in third call argument. * * returns: * 0, on success * -1, on failure */ int fit_get_desc(const void *fit, int noffset, char **desc) { int len; *desc = (char *)fdt_getprop(fit, noffset, FIT_DESC_PROP, &len); if (*desc == NULL) { fit_get_debug(fit, noffset, FIT_DESC_PROP, len); return -1; } return 0; }
/** * fit_image_get_entry() - get entry point address property * @fit: pointer to the FIT format image header * @noffset: component image node offset * @entry: pointer to the uint32_t, will hold entry point address * * This gets the entry point address property for a given component image * node. * * fit_image_get_entry() finds entry point address property in a given * component image node. If the property is found, its value is returned * to the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_get_entry(const void *fit, int noffset, ulong *entry) { int len; const uint32_t *data; data = fdt_getprop(fit, noffset, FIT_ENTRY_PROP, &len); if (data == NULL) { fit_get_debug(fit, noffset, FIT_ENTRY_PROP, len); return -1; } *entry = uimage_to_cpu(*data); return 0; }
/** * fit_image_get_load() - get load addr property for given component image node * @fit: pointer to the FIT format image header * @noffset: component image node offset * @load: pointer to the uint32_t, will hold load address * * fit_image_get_load() finds load address property in a given component * image node. If the property is found, its value is returned to the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_get_load(const void *fit, int noffset, ulong *load) { int len; const uint32_t *data; data = fdt_getprop(fit, noffset, FIT_LOAD_PROP, &len); if (data == NULL) { fit_get_debug(fit, noffset, FIT_LOAD_PROP, len); return -1; } *load = uimage_to_cpu(*data); return 0; }
/** * fit_image_hash_get_value - get hash value and length * @fit: pointer to the FIT format image header * @noffset: hash node offset * @value: double pointer to uint8_t, will hold address of a hash value data * @value_len: pointer to an int, will hold hash data length * * fit_image_hash_get_value() finds hash value property in a given hash node. * If the property is found its data start address and size are returned to * the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value, int *value_len) { int len; *value = (uint8_t *)fdt_getprop(fit, noffset, FIT_VALUE_PROP, &len); if (*value == NULL) { fit_get_debug(fit, noffset, FIT_VALUE_PROP, len); *value_len = 0; return -1; } *value_len = len; return 0; }
/** * fit_image_get_data - get data property and its size for a given component image node * @fit: pointer to the FIT format image header * @noffset: component image node offset * @data: double pointer to void, will hold data property's data address * @size: pointer to size_t, will hold data property's data size * * fit_image_get_data() finds data property in a given component image node. * If the property is found its data start address and size are returned to * the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_get_data(const void *fit, int noffset, const void **data, size_t *size) { int len; *data = fdt_getprop(fit, noffset, FIT_DATA_PROP, &len); if (*data == NULL) { fit_get_debug(fit, noffset, FIT_DATA_PROP, len); *size = 0; return -1; } *size = len; return 0; }
/** * fit_image_get_comp - get comp id for a given component image node * @fit: pointer to the FIT format image header * @noffset: component image node offset * @comp: pointer to the uint8_t, will hold comp numeric id * * fit_image_get_comp() finds comp property in a given component image node. * If the property is found, its (string) value is translated to the numeric * id which is returned to the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_get_comp(const void *fit, int noffset, uint8_t *comp) { int len; const void *data; /* Get compression name from property data */ data = fdt_getprop(fit, noffset, FIT_COMP_PROP, &len); if (data == NULL) { fit_get_debug(fit, noffset, FIT_COMP_PROP, len); *comp = -1; return -1; } /* Translate compression name to id */ *comp = genimg_get_comp_id(data); return 0; }
/** * fit_image_get_type - get type id for a given component image node * @fit: pointer to the FIT format image header * @noffset: component image node offset * @type: pointer to the uint8_t, will hold type numeric id * * fit_image_get_type() finds type property in a given component image node. * If the property is found, its (string) value is translated to the numeric * id which is returned to the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_get_type(const void *fit, int noffset, uint8_t *type) { int len; const void *data; /* Get image type name from property data */ data = fdt_getprop(fit, noffset, FIT_TYPE_PROP, &len); if (data == NULL) { fit_get_debug(fit, noffset, FIT_TYPE_PROP, len); *type = -1; return -1; } /* Translate image type name to id */ *type = genimg_get_type_id(data); return 0; }
/** * fit_image_get_arch - get arch id for a given component image node * @fit: pointer to the FIT format image header * @noffset: component image node offset * @arch: pointer to the uint8_t, will hold arch numeric id * * fit_image_get_arch() finds arch property in a given component image node. * If the property is found, its (string) value is translated to the numeric * id which is returned to the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_get_arch(const void *fit, int noffset, uint8_t *arch) { int len; const void *data; /* Get architecture name from property data */ data = fdt_getprop(fit, noffset, FIT_ARCH_PROP, &len); if (data == NULL) { fit_get_debug(fit, noffset, FIT_ARCH_PROP, len); *arch = -1; return -1; } /* Translate architecture name to id */ *arch = genimg_get_arch_id(data); return 0; }
/** * fit_image_get_os - get os id for a given component image node * @fit: pointer to the FIT format image header * @noffset: component image node offset * @os: pointer to the uint8_t, will hold os numeric id * * fit_image_get_os() finds os property in a given component image node. * If the property is found, its (string) value is translated to the numeric * id which is returned to the caller. * * returns: * 0, on success * -1, on failure */ int fit_image_get_os(const void *fit, int noffset, uint8_t *os) { int len; const void *data; /* Get OS name from property data */ data = fdt_getprop(fit, noffset, FIT_OS_PROP, &len); if (data == NULL) { fit_get_debug(fit, noffset, FIT_OS_PROP, len); *os = -1; return -1; } /* Translate OS name to id */ *os = genimg_get_os_id(data); return 0; }
/** * fit_get_timestamp - get node timestamp property * @fit: pointer to the FIT format image header * @noffset: node offset * @timestamp: pointer to the time_t, will hold read timestamp * * fit_get_timestamp() reads timestamp poperty from given node, if timestamp * is found and has a correct size its value is retured in third call * argument. * * returns: * 0, on success * -1, on property read failure * -2, on wrong timestamp size */ int fit_get_timestamp(const void *fit, int noffset, time_t *timestamp) { int len; const void *data; data = fdt_getprop(fit, noffset, FIT_TIMESTAMP_PROP, &len); if (data == NULL) { fit_get_debug(fit, noffset, FIT_TIMESTAMP_PROP, len); return -1; } if (len != sizeof(uint32_t)) { debug("FIT timestamp with incorrect size of (%u)\n", len); return -2; } *timestamp = uimage_to_cpu(*((uint32_t *)data)); return 0; }