xref: /openbmc/libpldm/tests/msgbuf.hpp (revision 7a8d932bc3cd30a0869b2e5cfd38c1b87019cffb)
1*7a8d932bSJohn Chung /* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */
2*7a8d932bSJohn Chung #ifndef PLDM_MSGBUF_HPP
3*7a8d932bSJohn Chung #define PLDM_MSGBUF_HPP
4*7a8d932bSJohn Chung 
5*7a8d932bSJohn Chung #include <libpldm/compiler.h>
6*7a8d932bSJohn Chung 
7*7a8d932bSJohn Chung #include "msgbuf/core.h"
8*7a8d932bSJohn Chung 
9*7a8d932bSJohn Chung /*
10*7a8d932bSJohn Chung  * Use the C++ Function Overload to keep pldm_msgbuf related function consistent
11*7a8d932bSJohn Chung  * and to produce compile-time errors when the wrong pldm_msgbuf type is passed.
12*7a8d932bSJohn Chung  *
13*7a8d932bSJohn Chung  * Previously we cast away `const` in `pldm_msgbuf_init_error()`, which was a
14*7a8d932bSJohn Chung  * hack. Instead, introduce:
15*7a8d932bSJohn Chung  *   - pldm_msgbuf_ro: read-only buffer with a `const` cursor
16*7a8d932bSJohn Chung  *   - pldm_msgbuf_rw: read-write buffer with a non-const cursor
17*7a8d932bSJohn Chung  *
18*7a8d932bSJohn Chung  * `pldm_msgbuf_ro` is used by decode APIs to extract payloads into PLDM
19*7a8d932bSJohn Chung  * structures. `pldm_msgbuf_rw` is used by encode APIs to insert payloads from
20*7a8d932bSJohn Chung  * PLDM structures.
21*7a8d932bSJohn Chung  */
22*7a8d932bSJohn Chung 
23*7a8d932bSJohn Chung #include <cstdint>
24*7a8d932bSJohn Chung #include <cstdio>
25*7a8d932bSJohn Chung #include <type_traits>
26*7a8d932bSJohn Chung 
27*7a8d932bSJohn Chung // NOLINTBEGIN(bugprone-macro-parentheses)
28*7a8d932bSJohn Chung // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
29*7a8d932bSJohn Chung #define PLDM__MSGBUF_DEFINE_P(name, mode)                                      \
30*7a8d932bSJohn Chung     struct pldm_msgbuf_##mode _##name LIBPLDM_CC_CLEANUP(                      \
31*7a8d932bSJohn Chung         pldm__msgbuf_##mode##_cleanup) = {NULL, INTMAX_MIN};                   \
32*7a8d932bSJohn Chung     auto* name = &(_##name)
33*7a8d932bSJohn Chung // NOLINTEND(bugprone-macro-parentheses)
34*7a8d932bSJohn Chung 
35*7a8d932bSJohn Chung #define PLDM_MSGBUF_RO_DEFINE_P(name) PLDM__MSGBUF_DEFINE_P(name, ro)
36*7a8d932bSJohn Chung #define PLDM_MSGBUF_RW_DEFINE_P(name) PLDM__MSGBUF_DEFINE_P(name, rw)
37*7a8d932bSJohn Chung 
pldm_msgbuf_init_errno(struct pldm_msgbuf_ro * ctx,size_t minsize,const void * buf,size_t len)38*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_init_errno(struct pldm_msgbuf_ro* ctx,
39*7a8d932bSJohn Chung                                                     size_t minsize,
40*7a8d932bSJohn Chung                                                     const void* buf, size_t len)
41*7a8d932bSJohn Chung {
42*7a8d932bSJohn Chung     return pldm_msgbuf_ro_init_errno(ctx, minsize, buf, len);
43*7a8d932bSJohn Chung }
44*7a8d932bSJohn Chung 
pldm_msgbuf_init_errno(struct pldm_msgbuf_rw * ctx,size_t minsize,const void * buf,size_t len)45*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_init_errno(struct pldm_msgbuf_rw* ctx,
46*7a8d932bSJohn Chung                                                     size_t minsize,
47*7a8d932bSJohn Chung                                                     const void* buf, size_t len)
48*7a8d932bSJohn Chung {
49*7a8d932bSJohn Chung     return pldm_msgbuf_rw_init_errno(ctx, minsize, buf, len);
50*7a8d932bSJohn Chung }
51*7a8d932bSJohn Chung 
pldm_msgbuf_validate(struct pldm_msgbuf_ro * ctx)52*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_validate(struct pldm_msgbuf_ro* ctx)
53*7a8d932bSJohn Chung {
54*7a8d932bSJohn Chung     return pldm_msgbuf_ro_validate(ctx);
55*7a8d932bSJohn Chung }
56*7a8d932bSJohn Chung 
pldm_msgbuf_validate(struct pldm_msgbuf_rw * ctx)57*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_validate(struct pldm_msgbuf_rw* ctx)
58*7a8d932bSJohn Chung {
59*7a8d932bSJohn Chung     return pldm_msgbuf_rw_validate(ctx);
60*7a8d932bSJohn Chung }
61*7a8d932bSJohn Chung 
62*7a8d932bSJohn Chung // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
pldm__msgbuf_invalidate(struct pldm_msgbuf_ro * ctx)63*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm__msgbuf_invalidate(struct pldm_msgbuf_ro* ctx)
64*7a8d932bSJohn Chung {
65*7a8d932bSJohn Chung     return pldm__msgbuf_ro_invalidate(ctx);
66*7a8d932bSJohn Chung }
67*7a8d932bSJohn Chung 
68*7a8d932bSJohn Chung // NOLINTNEXTLINE(bugprone-reserved-identifier,cert-dcl37-c,cert-dcl51-cpp)
pldm__msgbuf_invalidate(struct pldm_msgbuf_rw * ctx)69*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm__msgbuf_invalidate(struct pldm_msgbuf_rw* ctx)
70*7a8d932bSJohn Chung {
71*7a8d932bSJohn Chung     return pldm__msgbuf_rw_invalidate(ctx);
72*7a8d932bSJohn Chung }
73*7a8d932bSJohn Chung 
pldm_msgbuf_consumed(struct pldm_msgbuf_ro * ctx)74*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_consumed(struct pldm_msgbuf_ro* ctx)
75*7a8d932bSJohn Chung {
76*7a8d932bSJohn Chung     return pldm_msgbuf_ro_consumed(ctx);
77*7a8d932bSJohn Chung }
78*7a8d932bSJohn Chung 
pldm_msgbuf_consumed(struct pldm_msgbuf_rw * ctx)79*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_consumed(struct pldm_msgbuf_rw* ctx)
80*7a8d932bSJohn Chung {
81*7a8d932bSJohn Chung     return pldm_msgbuf_rw_consumed(ctx);
82*7a8d932bSJohn Chung }
83*7a8d932bSJohn Chung 
pldm_msgbuf_discard(struct pldm_msgbuf_ro * ctx,int error)84*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_discard(struct pldm_msgbuf_ro* ctx,
85*7a8d932bSJohn Chung                                                  int error)
86*7a8d932bSJohn Chung {
87*7a8d932bSJohn Chung     return pldm_msgbuf_ro_discard(ctx, error);
88*7a8d932bSJohn Chung }
89*7a8d932bSJohn Chung 
pldm_msgbuf_discard(struct pldm_msgbuf_rw * ctx,int error)90*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_discard(struct pldm_msgbuf_rw* ctx,
91*7a8d932bSJohn Chung                                                  int error)
92*7a8d932bSJohn Chung {
93*7a8d932bSJohn Chung     return pldm_msgbuf_rw_discard(ctx, error);
94*7a8d932bSJohn Chung }
95*7a8d932bSJohn Chung 
pldm_msgbuf_complete(struct pldm_msgbuf_ro * ctx)96*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_complete(struct pldm_msgbuf_ro* ctx)
97*7a8d932bSJohn Chung {
98*7a8d932bSJohn Chung     return pldm_msgbuf_ro_complete(ctx);
99*7a8d932bSJohn Chung }
100*7a8d932bSJohn Chung 
pldm_msgbuf_complete(struct pldm_msgbuf_rw * ctx)101*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_complete(struct pldm_msgbuf_rw* ctx)
102*7a8d932bSJohn Chung {
103*7a8d932bSJohn Chung     return pldm_msgbuf_rw_complete(ctx);
104*7a8d932bSJohn Chung }
105*7a8d932bSJohn Chung 
106*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_complete_consumed(struct pldm_msgbuf_ro * ctx)107*7a8d932bSJohn Chung     pldm_msgbuf_complete_consumed(struct pldm_msgbuf_ro* ctx)
108*7a8d932bSJohn Chung {
109*7a8d932bSJohn Chung     return pldm_msgbuf_ro_complete_consumed(ctx);
110*7a8d932bSJohn Chung }
111*7a8d932bSJohn Chung 
112*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_complete_consumed(struct pldm_msgbuf_rw * ctx)113*7a8d932bSJohn Chung     pldm_msgbuf_complete_consumed(struct pldm_msgbuf_rw* ctx)
114*7a8d932bSJohn Chung {
115*7a8d932bSJohn Chung     return pldm_msgbuf_rw_complete_consumed(ctx);
116*7a8d932bSJohn Chung }
117*7a8d932bSJohn Chung 
118*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_span_required(struct pldm_msgbuf_ro * ctx,size_t required,const void ** cursor)119*7a8d932bSJohn Chung     pldm_msgbuf_span_required(struct pldm_msgbuf_ro* ctx, size_t required,
120*7a8d932bSJohn Chung                               const void** cursor)
121*7a8d932bSJohn Chung {
122*7a8d932bSJohn Chung     return pldm_msgbuf_ro_span_required(ctx, required, cursor);
123*7a8d932bSJohn Chung }
124*7a8d932bSJohn Chung 
125*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_span_required(struct pldm_msgbuf_rw * ctx,size_t required,void ** cursor)126*7a8d932bSJohn Chung     pldm_msgbuf_span_required(struct pldm_msgbuf_rw* ctx, size_t required,
127*7a8d932bSJohn Chung                               void** cursor)
128*7a8d932bSJohn Chung {
129*7a8d932bSJohn Chung     return pldm_msgbuf_rw_span_required(ctx, required, cursor);
130*7a8d932bSJohn Chung }
131*7a8d932bSJohn Chung 
132*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_span_string_ascii(struct pldm_msgbuf_rw * ctx,void ** cursor,size_t * length)133*7a8d932bSJohn Chung     pldm_msgbuf_span_string_ascii(struct pldm_msgbuf_rw* ctx, void** cursor,
134*7a8d932bSJohn Chung                                   size_t* length)
135*7a8d932bSJohn Chung {
136*7a8d932bSJohn Chung     return pldm_msgbuf_rw_span_string_ascii(ctx, cursor, length);
137*7a8d932bSJohn Chung }
138*7a8d932bSJohn Chung 
139*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_span_string_ascii(struct pldm_msgbuf_ro * ctx,const void ** cursor,size_t * length)140*7a8d932bSJohn Chung     pldm_msgbuf_span_string_ascii(struct pldm_msgbuf_ro* ctx,
141*7a8d932bSJohn Chung                                   const void** cursor, size_t* length)
142*7a8d932bSJohn Chung {
143*7a8d932bSJohn Chung     return pldm_msgbuf_ro_span_string_ascii(ctx, cursor, length);
144*7a8d932bSJohn Chung }
145*7a8d932bSJohn Chung 
pldm_msgbuf_span_string_utf16(pldm_msgbuf_ro * ctx,const void ** cursor,size_t * length)146*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_span_string_utf16(pldm_msgbuf_ro* ctx,
147*7a8d932bSJohn Chung                                                            const void** cursor,
148*7a8d932bSJohn Chung                                                            size_t* length)
149*7a8d932bSJohn Chung {
150*7a8d932bSJohn Chung     return pldm_msgbuf_ro_span_string_utf16(ctx, cursor, length);
151*7a8d932bSJohn Chung }
152*7a8d932bSJohn Chung 
pldm_msgbuf_span_string_utf16(pldm_msgbuf_rw * ctx,void ** cursor,size_t * length)153*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_span_string_utf16(pldm_msgbuf_rw* ctx,
154*7a8d932bSJohn Chung                                                            void** cursor,
155*7a8d932bSJohn Chung                                                            size_t* length)
156*7a8d932bSJohn Chung {
157*7a8d932bSJohn Chung     return pldm_msgbuf_rw_span_string_utf16(ctx, cursor, length);
158*7a8d932bSJohn Chung }
159*7a8d932bSJohn Chung 
160*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_span_remaining(struct pldm_msgbuf_rw * ctx,void ** cursor,size_t * len)161*7a8d932bSJohn Chung     pldm_msgbuf_span_remaining(struct pldm_msgbuf_rw* ctx, void** cursor,
162*7a8d932bSJohn Chung                                size_t* len)
163*7a8d932bSJohn Chung {
164*7a8d932bSJohn Chung     return pldm_msgbuf_rw_span_remaining(ctx, cursor, len);
165*7a8d932bSJohn Chung }
166*7a8d932bSJohn Chung 
167*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_span_remaining(struct pldm_msgbuf_ro * ctx,const void ** cursor,size_t * len)168*7a8d932bSJohn Chung     pldm_msgbuf_span_remaining(struct pldm_msgbuf_ro* ctx, const void** cursor,
169*7a8d932bSJohn Chung                                size_t* len)
170*7a8d932bSJohn Chung {
171*7a8d932bSJohn Chung     return pldm_msgbuf_ro_span_remaining(ctx, cursor, len);
172*7a8d932bSJohn Chung }
173*7a8d932bSJohn Chung 
pldm_msgbuf_span_until(struct pldm_msgbuf_ro * ctx,size_t trailer,const void ** cursor,size_t * length)174*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_span_until(struct pldm_msgbuf_ro* ctx,
175*7a8d932bSJohn Chung                                                     size_t trailer,
176*7a8d932bSJohn Chung                                                     const void** cursor,
177*7a8d932bSJohn Chung                                                     size_t* length)
178*7a8d932bSJohn Chung {
179*7a8d932bSJohn Chung     return pldm_msgbuf_ro_span_until(ctx, trailer, cursor, length);
180*7a8d932bSJohn Chung }
181*7a8d932bSJohn Chung 
pldm_msgbuf_span_until(struct pldm_msgbuf_rw * ctx,size_t trailer,void ** cursor,size_t * length)182*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int pldm_msgbuf_span_until(struct pldm_msgbuf_rw* ctx,
183*7a8d932bSJohn Chung                                                     size_t trailer,
184*7a8d932bSJohn Chung                                                     void** cursor,
185*7a8d932bSJohn Chung                                                     size_t* length)
186*7a8d932bSJohn Chung {
187*7a8d932bSJohn Chung     return pldm_msgbuf_rw_span_until(ctx, trailer, cursor, length);
188*7a8d932bSJohn Chung }
189*7a8d932bSJohn Chung 
190*7a8d932bSJohn Chung #define pldm_msgbuf_extract_typecheck(ty, fn, dst, ...)                        \
191*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_##ty<decltype(dst)>(__VA_ARGS__)
192*7a8d932bSJohn Chung 
193*7a8d932bSJohn Chung #define pldm_msgbuf_extract_uint8(ctx, dst)                                    \
194*7a8d932bSJohn Chung     pldm_msgbuf_extract_typecheck(uint8_t, pldm__msgbuf_extract_uint8, dst,    \
195*7a8d932bSJohn Chung                                   ctx, (void*)&(dst))
196*7a8d932bSJohn Chung 
197*7a8d932bSJohn Chung #define pldm_msgbuf_extract_int8(ctx, dst)                                     \
198*7a8d932bSJohn Chung     pldm_msgbuf_extract_typecheck(int8_t, pldm__msgbuf_extract_int8, dst, ctx, \
199*7a8d932bSJohn Chung                                   (void*)&(dst))
200*7a8d932bSJohn Chung 
201*7a8d932bSJohn Chung #define pldm_msgbuf_extract_uint16(ctx, dst)                                   \
202*7a8d932bSJohn Chung     pldm_msgbuf_extract_typecheck(uint16_t, pldm__msgbuf_extract_uint16, dst,  \
203*7a8d932bSJohn Chung                                   ctx, (void*)&(dst))
204*7a8d932bSJohn Chung 
205*7a8d932bSJohn Chung #define pldm_msgbuf_extract_int16(ctx, dst)                                    \
206*7a8d932bSJohn Chung     pldm_msgbuf_extract_typecheck(int16_t, pldm__msgbuf_extract_int16, dst,    \
207*7a8d932bSJohn Chung                                   ctx, (void*)&(dst))
208*7a8d932bSJohn Chung 
209*7a8d932bSJohn Chung #define pldm_msgbuf_extract_uint32(ctx, dst)                                   \
210*7a8d932bSJohn Chung     pldm_msgbuf_extract_typecheck(uint32_t, pldm__msgbuf_extract_uint32, dst,  \
211*7a8d932bSJohn Chung                                   ctx, (void*)&(dst))
212*7a8d932bSJohn Chung 
213*7a8d932bSJohn Chung #define pldm_msgbuf_extract_int32(ctx, dst)                                    \
214*7a8d932bSJohn Chung     pldm_msgbuf_extract_typecheck(int32_t, pldm__msgbuf_extract_int32, dst,    \
215*7a8d932bSJohn Chung                                   ctx, (void*)&(dst))
216*7a8d932bSJohn Chung 
217*7a8d932bSJohn Chung #define pldm_msgbuf_extract_real32(ctx, dst)                                   \
218*7a8d932bSJohn Chung     pldm_msgbuf_extract_typecheck(real32_t, pldm__msgbuf_extract_real32, dst,  \
219*7a8d932bSJohn Chung                                   ctx, (void*)&(dst))
220*7a8d932bSJohn Chung 
221*7a8d932bSJohn Chung template <typename T>
222*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_typecheck_uint8_t(struct pldm_msgbuf_ro * ctx,void * buf)223*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_uint8_t(struct pldm_msgbuf_ro* ctx, void* buf)
224*7a8d932bSJohn Chung {
225*7a8d932bSJohn Chung     static_assert(std::is_same<uint8_t, T>::value);
226*7a8d932bSJohn Chung     return pldm__msgbuf_extract_uint8(ctx, buf);
227*7a8d932bSJohn Chung }
228*7a8d932bSJohn Chung 
229*7a8d932bSJohn Chung template <typename T>
230*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_typecheck_int8_t(struct pldm_msgbuf_ro * ctx,void * buf)231*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_int8_t(struct pldm_msgbuf_ro* ctx, void* buf)
232*7a8d932bSJohn Chung {
233*7a8d932bSJohn Chung     static_assert(std::is_same<int8_t, T>::value);
234*7a8d932bSJohn Chung     return pldm__msgbuf_extract_int8(ctx, buf);
235*7a8d932bSJohn Chung }
236*7a8d932bSJohn Chung 
237*7a8d932bSJohn Chung template <typename T>
238*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_typecheck_uint16_t(struct pldm_msgbuf_ro * ctx,void * buf)239*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_uint16_t(struct pldm_msgbuf_ro* ctx, void* buf)
240*7a8d932bSJohn Chung {
241*7a8d932bSJohn Chung     static_assert(std::is_same<uint16_t, T>::value);
242*7a8d932bSJohn Chung     return pldm__msgbuf_extract_uint16(ctx, buf);
243*7a8d932bSJohn Chung }
244*7a8d932bSJohn Chung 
245*7a8d932bSJohn Chung template <typename T>
246*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_typecheck_int16_t(struct pldm_msgbuf_ro * ctx,void * buf)247*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_int16_t(struct pldm_msgbuf_ro* ctx, void* buf)
248*7a8d932bSJohn Chung {
249*7a8d932bSJohn Chung     static_assert(std::is_same<int16_t, T>::value);
250*7a8d932bSJohn Chung     return pldm__msgbuf_extract_int16(ctx, buf);
251*7a8d932bSJohn Chung }
252*7a8d932bSJohn Chung 
253*7a8d932bSJohn Chung template <typename T>
254*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_typecheck_uint32_t(struct pldm_msgbuf_ro * ctx,void * buf)255*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_uint32_t(struct pldm_msgbuf_ro* ctx, void* buf)
256*7a8d932bSJohn Chung {
257*7a8d932bSJohn Chung     static_assert(std::is_same<uint32_t, T>::value);
258*7a8d932bSJohn Chung     return pldm__msgbuf_extract_uint32(ctx, buf);
259*7a8d932bSJohn Chung }
260*7a8d932bSJohn Chung 
261*7a8d932bSJohn Chung template <typename T>
262*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_typecheck_int32_t(struct pldm_msgbuf_ro * ctx,void * buf)263*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_int32_t(struct pldm_msgbuf_ro* ctx, void* buf)
264*7a8d932bSJohn Chung {
265*7a8d932bSJohn Chung     static_assert(std::is_same<int32_t, T>::value);
266*7a8d932bSJohn Chung     return pldm__msgbuf_extract_int32(ctx, buf);
267*7a8d932bSJohn Chung }
268*7a8d932bSJohn Chung 
269*7a8d932bSJohn Chung template <typename T>
270*7a8d932bSJohn Chung LIBPLDM_CC_ALWAYS_INLINE int
pldm_msgbuf_typecheck_real32_t(struct pldm_msgbuf_ro * ctx,void * buf)271*7a8d932bSJohn Chung     pldm_msgbuf_typecheck_real32_t(struct pldm_msgbuf_ro* ctx, void* buf)
272*7a8d932bSJohn Chung {
273*7a8d932bSJohn Chung     static_assert(std::is_same<real32_t, T>::value);
274*7a8d932bSJohn Chung     return pldm__msgbuf_extract_real32(ctx, buf);
275*7a8d932bSJohn Chung }
276*7a8d932bSJohn Chung 
277*7a8d932bSJohn Chung #endif /* BUF_HPP */
278