diff options
Diffstat (limited to 'sys-utils/lscpu-api.h')
| -rw-r--r-- | sys-utils/lscpu-api.h | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/sys-utils/lscpu-api.h b/sys-utils/lscpu-api.h index 9bbd18d243..1d979e787d 100644 --- a/sys-utils/lscpu-api.h +++ b/sys-utils/lscpu-api.h @@ -191,9 +191,50 @@ int lscpu_add_cpu(struct lscpu_cxt *cxt, struct lscpu_cputype *ct); int lscpu_cpus_apply_type(struct lscpu_cxt *cxt, struct lscpu_cputype *type); +void lscpu_decode_arm(struct lscpu_cxt *cxt); + struct lscpu_cxt *lscpu_new_context(void); void lscpu_free_context(struct lscpu_cxt *cxt); int lookup(char *line, char *pattern, char **value); +/* + * Firmware stuff + */ +#define _PATH_SYS_DMI_TYPE4 "/sys/firmware/dmi/entries/4-0/raw" +#define _PATH_SYS_DMI "/sys/firmware/dmi/tables/DMI" + +struct lscpu_dmi_header +{ + uint8_t type; + uint8_t length; + uint16_t handle; + uint8_t *data; +}; + +static inline void to_dmi_header(struct lscpu_dmi_header *h, uint8_t *data) +{ + h->type = data[0]; + h->length = data[1]; + memcpy(&h->handle, data + 2, sizeof(h->handle)); + h->data = data; +} + +static inline char *dmi_string(const struct lscpu_dmi_header *dm, uint8_t s) +{ + char *bp = (char *)dm->data; + + if (!s || !bp) + return NULL; + + bp += dm->length; + while (s > 1 && *bp) { + bp += strlen(bp); + bp++; + s--; + } + + return !*bp ? NULL : bp; +} + #endif /* LSCPU_API_H */ |
