- has_context = self.header.has_field('context')
- return '\n'.join([
- 'static void __attribute__((constructor)) __vapi_constructor_%s()'
- % self.name,
- '{',
- ' static const char name[] = "%s";' % self.name,
- ' static const char name_with_crc[] = "%s_%s";'
- % (self.name, self.crc[2:]),
- ' static vapi_message_desc_t %s = {' %
- self.get_c_metadata_struct_name(),
- ' name,',
- ' sizeof(name) - 1,',
- ' name_with_crc,',
- ' sizeof(name_with_crc) - 1,',
- ' true,' if has_context else ' false,',
- ' offsetof(%s, context),' % self.header.get_c_name()
- if has_context else ' 0,',
- (' offsetof(%s, payload),' % self.get_c_name())
- if self.has_payload() else ' INVALID_MSG_ID,',
- ' sizeof(%s),' % self.get_c_name(),
- ' (generic_swap_fn_t)%s,' % self.get_swap_to_be_func_name(),
- ' (generic_swap_fn_t)%s,' % self.get_swap_to_host_func_name(),
- ' INVALID_MSG_ID,',
- ' };',
- '',
- ' %s = vapi_register_msg(&%s);' %
- (self.get_msg_id_name(), self.get_c_metadata_struct_name()),
- ' VAPI_DBG("Assigned msg id %%d to %s", %s);' %
- (self.name, self.get_msg_id_name()),
- '}',
- ])
-
-
-vapi_send_with_control_ping = """
-static inline vapi_error_e
-vapi_send_with_control_ping (vapi_ctx_t ctx, void *msg, u32 context)
-{
- vapi_msg_control_ping *ping = vapi_alloc_control_ping (ctx);
- if (!ping)
- {
- return VAPI_ENOMEM;
- }
- ping->header.context = context;
- vapi_msg_control_ping_hton (ping);
- return vapi_send2 (ctx, msg, ping);
-}
-"""
+ has_context = self.header.has_field("context")
+ return "\n".join(
+ [
+ "static void __attribute__((constructor)) __vapi_constructor_%s()"
+ % self.name,
+ "{",
+ ' static const char name[] = "%s";' % self.name,
+ ' static const char name_with_crc[] = "%s_%s";'
+ % (self.name, self.crc[2:]),
+ " static vapi_message_desc_t %s = {"
+ % self.get_c_metadata_struct_name(),
+ " name,",
+ " sizeof(name) - 1,",
+ " name_with_crc,",
+ " sizeof(name_with_crc) - 1,",
+ " true," if has_context else " false,",
+ (
+ " offsetof(%s, context)," % self.header.get_c_name()
+ if has_context
+ else " 0,"
+ ),
+ (
+ (" offsetof(%s, payload)," % self.get_c_name())
+ if self.has_payload()
+ else " VAPI_INVALID_MSG_ID,"
+ ),
+ " (verify_msg_size_fn_t)%s," % self.get_verify_msg_size_func_name(),
+ " (generic_swap_fn_t)%s," % self.get_swap_to_be_func_name(),
+ " (generic_swap_fn_t)%s," % self.get_swap_to_host_func_name(),
+ " VAPI_INVALID_MSG_ID,",
+ " };",
+ "",
+ " %s = vapi_register_msg(&%s);"
+ % (self.get_msg_id_name(), self.get_c_metadata_struct_name()),
+ ' VAPI_DBG("Assigned msg id %%d to %s", %s);'
+ % (self.name, self.get_msg_id_name()),
+ "}",
+ ]
+ )
+
+
+def emit_definition(parser, json_file, emitted, o):
+ if o in emitted:
+ return
+ if o.name in ("msg_header1_t", "msg_header2_t"):
+ return
+ if hasattr(o, "depends"):
+ for x in o.depends:
+ emit_definition(parser, json_file, emitted, x)
+ if hasattr(o, "reply"):
+ emit_definition(parser, json_file, emitted, o.reply)
+ if hasattr(o, "stream_msg"):
+ emit_definition(parser, json_file, emitted, o.stream_msg)
+ if hasattr(o, "get_c_def"):
+ if (
+ o not in parser.enums_by_json[json_file]
+ and o not in parser.types_by_json[json_file]
+ and o not in parser.unions_by_json[json_file]
+ and o.name not in parser.messages_by_json[json_file]
+ and o not in parser.aliases_by_json[json_file]
+ ):
+ return
+ guard = "defined_%s" % o.get_c_name()
+ print("#ifndef %s" % guard)
+ print("#define %s" % guard)
+ print("%s" % o.get_c_def())
+ print("")
+ function_attrs = "static inline "
+ if o.name in parser.messages_by_json[json_file]:
+ if o.has_payload():
+ print("%s%s" % (function_attrs, o.get_swap_payload_to_be_func_def()))
+ print("")
+ print("%s%s" % (function_attrs, o.get_swap_payload_to_host_func_def()))
+ print("")
+ print("%s%s" % (function_attrs, o.get_swap_to_be_func_def()))
+ print("")
+ print("%s%s" % (function_attrs, o.get_swap_to_host_func_def()))
+ print("")
+ print("%s%s" % (function_attrs, o.get_calc_msg_size_func_def()))
+ print("")
+ print("%s%s" % (function_attrs, o.get_verify_msg_size_func_def()))
+ if not o.is_reply and not o.is_event and not o.is_stream:
+ print("")
+ print("%s%s" % (function_attrs, o.get_alloc_func_def()))
+ print("")
+ print("%s%s" % (function_attrs, o.get_op_func_def()))
+ print("")
+ print("%s" % o.get_c_constructor())
+ if (o.is_reply or o.is_event) and not o.is_stream:
+ print("")
+ print("%s%s;" % (function_attrs, o.get_event_cb_func_def()))
+ elif hasattr(o, "get_swap_to_be_func_def"):
+ print("%s%s" % (function_attrs, o.get_swap_to_be_func_def()))
+ print("")
+ print("%s%s" % (function_attrs, o.get_swap_to_host_func_def()))
+ print("#endif")
+ print("")
+ emitted.append(o)