TT-System-Firmware APIs 19.15.99
Tenstorrent Firmware
Loading...
Searching...
No Matches
pldm_oem_handler.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2026 Tenstorrent AI ULC
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_MISC_PLDM_OEM_HANDLER_H_
8#define ZEPHYR_INCLUDE_DRIVERS_MISC_PLDM_OEM_HANDLER_H_
9
10#include <errno.h>
11#include <stddef.h>
12#include <stdint.h>
13
14#include <zephyr/device.h>
15#include <libpldm/base.h>
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
22#define PLDM_OEM_TYPE 0x3FU
23
31__subsystem struct pldm_oem_handler_driver_api {
39 const ver32_t *(*get_versions)(const struct device *dev, size_t *versions_size);
40
47 const bitfield8_t *(*get_commands)(const struct device *dev);
48
60 int (*build_response)(const struct device *dev, const struct pldm_header_info *req_hdr,
61 const struct pldm_msg *req_msg, size_t req_payload_len,
62 struct pldm_msg *resp_msg, size_t *resp_pldm_len);
63};
64
65static inline const ver32_t *pldm_oem_handler_get_versions(const struct device *dev,
66 size_t *versions_size)
67{
68 if (!device_is_ready(dev)) {
69 return NULL;
70 }
71
72 const struct pldm_oem_handler_driver_api *api = DEVICE_API_GET(pldm_oem_handler, dev);
73
74 if (api->get_versions == NULL) {
75 return NULL;
76 }
77
78 return api->get_versions(dev, versions_size);
79}
80
81static inline const bitfield8_t *pldm_oem_handler_get_commands(const struct device *dev)
82{
83 if (!device_is_ready(dev)) {
84 return NULL;
85 }
86
87 const struct pldm_oem_handler_driver_api *api = DEVICE_API_GET(pldm_oem_handler, dev);
88
89 if (api->get_commands == NULL) {
90 return NULL;
91 }
92
93 return api->get_commands(dev);
94}
95
96static inline int pldm_oem_handler_build_response(const struct device *dev,
97 const struct pldm_header_info *req_hdr,
98 const struct pldm_msg *req_msg,
99 size_t req_payload_len, struct pldm_msg *resp_msg,
100 size_t *resp_pldm_len)
101{
102 if (!device_is_ready(dev)) {
103 return -ENODEV;
104 }
105
106 const struct pldm_oem_handler_driver_api *api = DEVICE_API_GET(pldm_oem_handler, dev);
107
108 if (api->build_response == NULL) {
109 return -ENOSYS;
110 }
111
112 return api->build_response(dev, req_hdr, req_msg, req_payload_len, resp_msg, resp_pldm_len);
113}
114
115#ifdef __cplusplus
116}
117#endif
118
119#endif /* ZEPHYR_INCLUDE_DRIVERS_MISC_PLDM_OEM_HANDLER_H_ */
#define NULL
Definition avs.c:45
#define DEVICE_API_GET(_class, _dev)
bool device_is_ready(const struct device *dev)
#define ENOSYS
#define ENODEV
static const ver32_t * pldm_oem_handler_get_versions(const struct device *dev, size_t *versions_size)
Definition pldm_oem_handler.h:65
static const bitfield8_t * pldm_oem_handler_get_commands(const struct device *dev)
Definition pldm_oem_handler.h:81
static int pldm_oem_handler_build_response(const struct device *dev, const struct pldm_header_info *req_hdr, const struct pldm_msg *req_msg, size_t req_payload_len, struct pldm_msg *resp_msg, size_t *resp_pldm_len)
Definition pldm_oem_handler.h:96
Driver API for PLDM OEM command handlers.
Definition pldm_oem_handler.h:31
const ver32_t *(* get_versions)(const struct device *dev, size_t *versions_size)
Definition pldm_oem_handler.h:39
int(* build_response)(const struct device *dev, const struct pldm_header_info *req_hdr, const struct pldm_msg *req_msg, size_t req_payload_len, struct pldm_msg *resp_msg, size_t *resp_pldm_len)
Definition pldm_oem_handler.h:60
const bitfield8_t *(* get_commands)(const struct device *dev)
Definition pldm_oem_handler.h:47