TT-System-Firmware APIs 19.13.99
Tenstorrent Firmware
Loading...
Searching...
No Matches
pldm_pdr.c File Reference
#include "pldm_pdr.h"
#include <zephyr/device.h>
#include <zephyr/drivers/sensor.h>
#include <zephyr/sys/byteorder.h>
#include <zephyr/sys/util.h>
#include <libpldm/edac.h>
#include <libpldm/platform.h>
#include <errno.h>
#include <string.h>
Include dependency graph for pldm_pdr.c:

Data Structures

struct  pldm_pdr_record_info
struct  pldm_pdr_provider_config
struct  pldm_pdr_provider_data

Macros

#define DT_DRV_COMPAT   tenstorrent_pldm_pdr
#define PLDM_PDR_TERMINUS_HANDLE   0x0001U
#define PLDM_PDR_RECORD_HANDLE   0x00000001U
#define PLDM_PDR_SENSOR_AUX_LANG   "en"
#define PLDM_PDR_NUMERIC_SENSOR_RECORD_WIRE_SIZE
#define APPEND(_expr)
#define PLDM_PDR_BASE_UNIT_FROM_CHANNEL_TYPE(channel_type)
#define PLDM_PDR_SENSOR_DESC_ENTRY(node_id)
#define PLDM_PDR_SENSOR_DESC_IF(node_id)
#define PLDM_PDR_SENSOR_COUNT_IF(node_id)
#define PLDM_PDR_SENSOR_COUNT(inst)
#define PLDM_PDR_SENSOR_AUX_COUNT_IF(node_id)
#define PLDM_PDR_AUX_COUNT(inst)
#define PLDM_PDR_RECORD_COUNT(inst)
#define PLDM_PDR_SENSOR_NUMERIC_SIZE_IF(node_id)
#define PLDM_PDR_AUX_NAME_RECORD_SIZE(name_literal)
#define PLDM_PDR_SENSOR_AUX_SIZE_IF(node_id)
#define PLDM_PDR_NUMERIC_RECORD_BYTES(inst)
#define PLDM_PDR_AUX_RECORD_BYTES(inst)
#define PLDM_PDR_REPO_SIZE(inst)
#define PLDM_PDR_PROVIDER_DEFINE(inst)

Functions

static int pldm_pdr_append_record (const struct pldm_pdr_provider_config *cfg, struct pldm_pdr_provider_data *data, uint32_t record_handle, const void *record_data, size_t record_len)
int pldm_pdr_update_tid_eid (const struct device *pdr_dev, uint8_t tid, uint8_t endpoint_id)
static size_t pldm_pdr_encode_utf16be_terminated (const char *src, uint8_t *dst, size_t dst_len)
static int pldm_pdr_buf_append_u8 (uint8_t **cursor, size_t *remaining, uint8_t value)
static int pldm_pdr_buf_append_u16 (uint8_t **cursor, size_t *remaining, uint16_t value)
static int pldm_pdr_buf_append_u32 (uint8_t **cursor, size_t *remaining, uint32_t value)
static int pldm_pdr_buf_append_s32 (uint8_t **cursor, size_t *remaining, int32_t value)
static int pldm_pdr_buf_append_f32 (uint8_t **cursor, size_t *remaining, real32_t value)
static int pldm_pdr_encode_numeric_sensor_record (const struct pldm_numeric_sensor_value_pdr *pdr, uint8_t *dst, size_t dst_len, size_t *record_len)
static int pldm_pdr_append_sensor_aux_name_record (const struct pldm_pdr_provider_config *cfg, struct pldm_pdr_provider_data *data, uint32_t record_handle, uint16_t sensor_id, const char *sensor_name)
int pldm_pdr_get_repository_info (const struct device *pdr_dev, struct pldm_pdr_repo_info *repo_info)
int pldm_pdr_find_record_index (const struct device *pdr_dev, uint32_t record_handle, uint32_t *record_index)
int pldm_pdr_get_record_at_index (const struct device *pdr_dev, uint32_t record_index, struct pldm_pdr_record_metadata *record_meta)
const struct pldm_pdr_numeric_sensor_descpldm_pdr_find_numeric_sensor_by_id (const struct device *pdr_dev, uint16_t sensor_id)
static int pldm_pdr_build_chunk (const struct device *pdr_dev, uint32_t record_index, size_t offset, const struct pldm_pdr_get_chunk_request *req, struct pldm_pdr_get_chunk_response *resp)
int pldm_pdr_get_chunk (const struct device *pdr_dev, const struct pldm_pdr_get_chunk_request *req, struct pldm_pdr_get_chunk_response *resp)
static int pldm_pdr_provider_init (const struct device *dev)

Macro Definition Documentation

◆ APPEND

#define APPEND ( _expr)
Value:
do { \
rc = (_expr); \
if (rc != 0) { \
return rc; \
} \
} while (false)

◆ DT_DRV_COMPAT

#define DT_DRV_COMPAT   tenstorrent_pldm_pdr

◆ PLDM_PDR_AUX_COUNT

#define PLDM_PDR_AUX_COUNT ( inst)
Value:
#define DT_FOREACH_CHILD_STATUS_OKAY(node_id, fn)
#define DT_DRV_INST(inst)
#define PLDM_PDR_SENSOR_AUX_COUNT_IF(node_id)
Definition pldm_pdr.c:708

◆ PLDM_PDR_AUX_NAME_RECORD_SIZE

#define PLDM_PDR_AUX_NAME_RECORD_SIZE ( name_literal)
Value:
((sizeof(struct pldm_sensor_auxiliary_names_pdr) - 1U) + \
(1U + sizeof(PLDM_PDR_SENSOR_AUX_LANG) + (2U * sizeof(name_literal))))
#define PLDM_PDR_SENSOR_AUX_LANG
Definition pldm_pdr.c:24

◆ PLDM_PDR_AUX_RECORD_BYTES

#define PLDM_PDR_AUX_RECORD_BYTES ( inst)
Value:
#define PLDM_PDR_SENSOR_AUX_SIZE_IF(node_id)
Definition pldm_pdr.c:727

◆ PLDM_PDR_BASE_UNIT_FROM_CHANNEL_TYPE

#define PLDM_PDR_BASE_UNIT_FROM_CHANNEL_TYPE ( channel_type)
Value:
(((channel_type) == SENSOR_CHAN_DIE_TEMP || \
(channel_type) == SENSOR_CHAN_AMBIENT_TEMP || \
(channel_type) == SENSOR_CHAN_GAUGE_TEMP) ? PLDM_SENSOR_UNIT_DEGRESS_C : \
((channel_type) == SENSOR_CHAN_VOLTAGE || \
(channel_type) == SENSOR_CHAN_VSHUNT || \
(channel_type) == SENSOR_CHAN_GAUGE_VOLTAGE) ? PLDM_SENSOR_UNIT_VOLTS : \
((channel_type) == SENSOR_CHAN_CURRENT || \
(channel_type) == SENSOR_CHAN_GAUGE_AVG_CURRENT || \
(channel_type) == SENSOR_CHAN_GAUGE_STDBY_CURRENT || \
(channel_type) == SENSOR_CHAN_GAUGE_MAX_LOAD_CURRENT) ? PLDM_SENSOR_UNIT_AMPS : \
((channel_type) == SENSOR_CHAN_POWER) ? PLDM_SENSOR_UNIT_WATTS : \
((channel_type) == SENSOR_CHAN_PRESS) ? PLDM_SENSOR_UNIT_KPA : \
((channel_type) == SENSOR_CHAN_HUMIDITY || \
(channel_type) == SENSOR_CHAN_GAUGE_STATE_OF_CHARGE) ? PLDM_SENSOR_UNIT_PERCENTAGE : \
((channel_type) == SENSOR_CHAN_AMBIENT_LIGHT || \
(channel_type) == SENSOR_CHAN_LIGHT || \
(channel_type) == SENSOR_CHAN_IR || \
(channel_type) == SENSOR_CHAN_RED || \
(channel_type) == SENSOR_CHAN_GREEN || \
(channel_type) == SENSOR_CHAN_BLUE) ? PLDM_SENSOR_UNIT_LUX : \
((channel_type) == SENSOR_CHAN_FREQUENCY) ? PLDM_SENSOR_UNIT_HERTZ : \
((channel_type) == SENSOR_CHAN_RPM) ? PLDM_SENSOR_UNIT_RPM : \
((channel_type) == SENSOR_CHAN_RESISTANCE || \
(channel_type) == SENSOR_CHAN_GAS_RES) ? PLDM_SENSOR_UNIT_OHMS : \
((channel_type) == SENSOR_CHAN_ALTITUDE || \
(channel_type) == SENSOR_CHAN_DISTANCE) ? PLDM_SENSOR_UNIT_METERS : \
((channel_type) == SENSOR_CHAN_CO2 || \
(channel_type) == SENSOR_CHAN_O2) ? PLDM_SENSOR_UNIT_PPM : \
PLDM_SENSOR_UNIT_NONE)
SENSOR_CHAN_DIE_TEMP
SENSOR_CHAN_PRESS
SENSOR_CHAN_O2
SENSOR_CHAN_CURRENT
SENSOR_CHAN_VSHUNT
SENSOR_CHAN_GREEN
SENSOR_CHAN_POWER
SENSOR_CHAN_RESISTANCE
SENSOR_CHAN_AMBIENT_LIGHT
SENSOR_CHAN_GAUGE_AVG_CURRENT
SENSOR_CHAN_FREQUENCY
SENSOR_CHAN_AMBIENT_TEMP
SENSOR_CHAN_GAUGE_STDBY_CURRENT
SENSOR_CHAN_GAUGE_MAX_LOAD_CURRENT
SENSOR_CHAN_RPM
SENSOR_CHAN_VOLTAGE
SENSOR_CHAN_BLUE
SENSOR_CHAN_LIGHT
SENSOR_CHAN_CO2
SENSOR_CHAN_GAUGE_STATE_OF_CHARGE
SENSOR_CHAN_GAUGE_TEMP
SENSOR_CHAN_GAUGE_VOLTAGE
SENSOR_CHAN_GAS_RES
SENSOR_CHAN_HUMIDITY
SENSOR_CHAN_DISTANCE
SENSOR_CHAN_IR
SENSOR_CHAN_RED
SENSOR_CHAN_ALTITUDE

◆ PLDM_PDR_NUMERIC_RECORD_BYTES

#define PLDM_PDR_NUMERIC_RECORD_BYTES ( inst)
Value:
#define PLDM_PDR_SENSOR_NUMERIC_SIZE_IF(node_id)
Definition pldm_pdr.c:719

◆ PLDM_PDR_NUMERIC_SENSOR_RECORD_WIRE_SIZE

#define PLDM_PDR_NUMERIC_SENSOR_RECORD_WIRE_SIZE
Value:
(PLDM_PDR_NUMERIC_SENSOR_PDR_FIXED_LENGTH + (3U * sizeof(uint32_t)) + \
(9U * sizeof(uint32_t)))
__UINT32_TYPE__ uint32_t

◆ PLDM_PDR_PROVIDER_DEFINE

#define PLDM_PDR_PROVIDER_DEFINE ( inst)
Value:
static const struct pldm_pdr_numeric_sensor_desc \
pldm_pdr_sensor_desc_##inst[MAX(1, PLDM_PDR_SENSOR_COUNT(inst))] = { \
DT_FOREACH_CHILD_STATUS_OKAY(DT_DRV_INST(inst), PLDM_PDR_SENSOR_DESC_IF)}; \
static struct pldm_pdr_record_info pldm_pdr_records_##inst[PLDM_PDR_RECORD_COUNT(inst)]; \
static uint8_t pldm_pdr_repo_##inst[PLDM_PDR_REPO_SIZE(inst)]; \
static struct pldm_pdr_provider_data pldm_pdr_data_##inst; \
static const struct pldm_pdr_provider_config pldm_pdr_cfg_##inst = { \
.sensors = pldm_pdr_sensor_desc_##inst, \
.sensor_count = PLDM_PDR_SENSOR_COUNT(inst), \
.pdr_records = pldm_pdr_records_##inst, \
.pdr_record_capacity = ARRAY_SIZE(pldm_pdr_records_##inst), \
.pdr_repo = pldm_pdr_repo_##inst, \
.pdr_repo_capacity = sizeof(pldm_pdr_repo_##inst), \
}; \
DEVICE_DT_INST_DEFINE(inst, pldm_pdr_provider_init, NULL, &pldm_pdr_data_##inst, \
&pldm_pdr_cfg_##inst, \
POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEVICE, NULL)
#define NULL
Definition avs.c:45
#define ARRAY_SIZE(array)
#define MAX(a, b)
static int pldm_pdr_provider_init(const struct device *dev)
Definition pldm_pdr.c:569
#define PLDM_PDR_REPO_SIZE(inst)
Definition pldm_pdr.c:741
#define PLDM_PDR_SENSOR_COUNT(inst)
Definition pldm_pdr.c:705
#define PLDM_PDR_RECORD_COUNT(inst)
Definition pldm_pdr.c:717
#define PLDM_PDR_SENSOR_DESC_IF(node_id)
Definition pldm_pdr.c:698
__UINT8_TYPE__ uint8_t
Definition pldm_pdr.h:69
Definition pldm_pdr.c:74
Definition pldm_pdr.c:83
Definition pldm_pdr.c:68

◆ PLDM_PDR_RECORD_COUNT

#define PLDM_PDR_RECORD_COUNT ( inst)
Value:
#define PLDM_PDR_AUX_COUNT(inst)
Definition pldm_pdr.c:714

◆ PLDM_PDR_RECORD_HANDLE

#define PLDM_PDR_RECORD_HANDLE   0x00000001U

◆ PLDM_PDR_REPO_SIZE

#define PLDM_PDR_REPO_SIZE ( inst)
Value:
(sizeof(struct pldm_terminus_locator_pdr) + PLDM_PDR_NUMERIC_RECORD_BYTES(inst) + \
#define PLDM_PDR_AUX_RECORD_BYTES(inst)
Definition pldm_pdr.c:738
#define PLDM_PDR_NUMERIC_RECORD_BYTES(inst)
Definition pldm_pdr.c:735

◆ PLDM_PDR_SENSOR_AUX_COUNT_IF

#define PLDM_PDR_SENSOR_AUX_COUNT_IF ( node_id)
Value:
DT_NODE_HAS_COMPAT(node_id, tenstorrent_pldm_numeric_sensor), \
(COND_CODE_1(DT_NODE_HAS_PROP(node_id, sensor_name), (1), (0))), \
(0))
#define DT_NODE_HAS_PROP(node_id, prop)
#define DT_NODE_HAS_COMPAT(node_id, compat)
#define COND_CODE_1(_flag, _if_1_code, _else_code)

◆ PLDM_PDR_SENSOR_AUX_LANG

#define PLDM_PDR_SENSOR_AUX_LANG   "en"

◆ PLDM_PDR_SENSOR_AUX_SIZE_IF

#define PLDM_PDR_SENSOR_AUX_SIZE_IF ( node_id)
Value:
DT_NODE_HAS_COMPAT(node_id, tenstorrent_pldm_numeric_sensor), \
(COND_CODE_1(DT_NODE_HAS_PROP(node_id, sensor_name), \
(PLDM_PDR_AUX_NAME_RECORD_SIZE(DT_PROP(node_id, sensor_name))), \
(0U))), \
(0U))
#define DT_PROP(node_id, prop)
#define PLDM_PDR_AUX_NAME_RECORD_SIZE(name_literal)
Definition pldm_pdr.c:723

◆ PLDM_PDR_SENSOR_COUNT

#define PLDM_PDR_SENSOR_COUNT ( inst)
Value:
#define PLDM_PDR_SENSOR_COUNT_IF(node_id)
Definition pldm_pdr.c:702

◆ PLDM_PDR_SENSOR_COUNT_IF

#define PLDM_PDR_SENSOR_COUNT_IF ( node_id)
Value:
+COND_CODE_1(DT_NODE_HAS_COMPAT(node_id, tenstorrent_pldm_numeric_sensor), (1), (0))

◆ PLDM_PDR_SENSOR_DESC_ENTRY

#define PLDM_PDR_SENSOR_DESC_ENTRY ( node_id)
Value:
{ \
.sensor = DEVICE_DT_GET(DT_PHANDLE(node_id, sensor)), \
.channel_type = DT_PROP(node_id, channel_type), \
.channel_index = DT_PROP(node_id, channel_index), \
.sensor_id = DT_PROP(node_id, sensor_id), \
.entity_type = DT_PROP_OR(node_id, entity_type, 135), \
.entity_instance = DT_PROP_OR(node_id, entity_instance, 1), \
.container_id = DT_PROP_OR(node_id, container_id, 0), \
.base_unit = COND_CODE_1(DT_NODE_HAS_PROP(node_id, base_unit), \
(DT_PROP(node_id, base_unit)), \
DT_PROP(node_id, channel_type)))), \
.unit_modifier = DT_PROP(node_id, unit_modifier), \
.aux_name = COND_CODE_1(DT_NODE_HAS_PROP(node_id, sensor_name), \
(DT_PROP(node_id, sensor_name)), (NULL)), \
},
#define DEVICE_DT_GET(node_id)
#define DT_PROP_OR(node_id, prop, default_value)
#define DT_PHANDLE(node_id, prop)
#define PLDM_PDR_BASE_UNIT_FROM_CHANNEL_TYPE(channel_type)
Definition pldm_pdr.c:36

◆ PLDM_PDR_SENSOR_DESC_IF

#define PLDM_PDR_SENSOR_DESC_IF ( node_id)
Value:
COND_CODE_1(DT_NODE_HAS_COMPAT(node_id, tenstorrent_pldm_numeric_sensor), \
#define PLDM_PDR_SENSOR_DESC_ENTRY(node_id)
Definition pldm_pdr.c:680

◆ PLDM_PDR_SENSOR_NUMERIC_SIZE_IF

#define PLDM_PDR_SENSOR_NUMERIC_SIZE_IF ( node_id)
Value:
+COND_CODE_1(DT_NODE_HAS_COMPAT(node_id, tenstorrent_pldm_numeric_sensor), \
#define PLDM_PDR_NUMERIC_SENSOR_RECORD_WIRE_SIZE
Definition pldm_pdr.c:25

◆ PLDM_PDR_TERMINUS_HANDLE

#define PLDM_PDR_TERMINUS_HANDLE   0x0001U

Function Documentation

◆ pldm_pdr_append_record()

int pldm_pdr_append_record ( const struct pldm_pdr_provider_config * cfg,
struct pldm_pdr_provider_data * data,
uint32_t record_handle,
const void * record_data,
size_t record_len )
static

◆ pldm_pdr_append_sensor_aux_name_record()

int pldm_pdr_append_sensor_aux_name_record ( const struct pldm_pdr_provider_config * cfg,
struct pldm_pdr_provider_data * data,
uint32_t record_handle,
uint16_t sensor_id,
const char * sensor_name )
static

◆ pldm_pdr_buf_append_f32()

int pldm_pdr_buf_append_f32 ( uint8_t ** cursor,
size_t * remaining,
real32_t value )
static

◆ pldm_pdr_buf_append_s32()

int pldm_pdr_buf_append_s32 ( uint8_t ** cursor,
size_t * remaining,
int32_t value )
static

◆ pldm_pdr_buf_append_u16()

int pldm_pdr_buf_append_u16 ( uint8_t ** cursor,
size_t * remaining,
uint16_t value )
static

◆ pldm_pdr_buf_append_u32()

int pldm_pdr_buf_append_u32 ( uint8_t ** cursor,
size_t * remaining,
uint32_t value )
static

◆ pldm_pdr_buf_append_u8()

int pldm_pdr_buf_append_u8 ( uint8_t ** cursor,
size_t * remaining,
uint8_t value )
static

◆ pldm_pdr_build_chunk()

int pldm_pdr_build_chunk ( const struct device * pdr_dev,
uint32_t record_index,
size_t offset,
const struct pldm_pdr_get_chunk_request * req,
struct pldm_pdr_get_chunk_response * resp )
static

◆ pldm_pdr_encode_numeric_sensor_record()

int pldm_pdr_encode_numeric_sensor_record ( const struct pldm_numeric_sensor_value_pdr * pdr,
uint8_t * dst,
size_t dst_len,
size_t * record_len )
static

◆ pldm_pdr_encode_utf16be_terminated()

size_t pldm_pdr_encode_utf16be_terminated ( const char * src,
uint8_t * dst,
size_t dst_len )
static

◆ pldm_pdr_find_numeric_sensor_by_id()

const struct pldm_pdr_numeric_sensor_desc * pldm_pdr_find_numeric_sensor_by_id ( const struct device * pdr_dev,
uint16_t sensor_id )

◆ pldm_pdr_find_record_index()

int pldm_pdr_find_record_index ( const struct device * pdr_dev,
uint32_t record_handle,
uint32_t * record_index )

◆ pldm_pdr_get_chunk()

int pldm_pdr_get_chunk ( const struct device * pdr_dev,
const struct pldm_pdr_get_chunk_request * req,
struct pldm_pdr_get_chunk_response * resp )

◆ pldm_pdr_get_record_at_index()

int pldm_pdr_get_record_at_index ( const struct device * pdr_dev,
uint32_t record_index,
struct pldm_pdr_record_metadata * record_meta )

◆ pldm_pdr_get_repository_info()

int pldm_pdr_get_repository_info ( const struct device * pdr_dev,
struct pldm_pdr_repo_info * repo_info )

◆ pldm_pdr_provider_init()

int pldm_pdr_provider_init ( const struct device * dev)
static

◆ pldm_pdr_update_tid_eid()

int pldm_pdr_update_tid_eid ( const struct device * pdr_dev,
uint8_t tid,
uint8_t endpoint_id )