From 426a368a8790b0561ef81bbd076fcc9c5e7e5ac1 Mon Sep 17 00:00:00 2001 From: Oleksandr Shulzhenko Date: Tue, 10 May 2022 17:27:02 +0200 Subject: i3c: mctp: Extend MCTP o. I3C driver with the TX/RX functions Extend the driver with the functionality necessary to send and receive MCTP over I3C packets by another component in kernel: - i3c_mctp_client concept needed to implement packet queue so that the driver can manage and classify packets for several clients respectively; - the function that provides MCTP target EID; - the functions to alloc and free mctp_i3c_packet; - the functions to send and receive MCTP packets over I3C. Signed-off-by: Oleksandr Shulzhenko --- include/linux/i3c/mctp/i3c-mctp.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 include/linux/i3c/mctp/i3c-mctp.h (limited to 'include') diff --git a/include/linux/i3c/mctp/i3c-mctp.h b/include/linux/i3c/mctp/i3c-mctp.h new file mode 100644 index 000000000000..72f6fae922b5 --- /dev/null +++ b/include/linux/i3c/mctp/i3c-mctp.h @@ -0,0 +1,38 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2022 Intel Corporation.*/ + +#ifndef I3C_MCTP_H +#define I3C_MCTP_H + +#define I3C_MCTP_PACKET_SIZE 68 +#define I3C_MCTP_PAYLOAD_SIZE 64 +#define I3C_MCTP_HDR_SIZE 4 + +struct i3c_mctp_client; + +struct mctp_protocol_hdr { + u8 ver; + u8 dest; + u8 src; + u8 flags_seq_tag; +} __packed; + +struct i3c_mctp_packet_data { + u8 protocol_hdr[I3C_MCTP_HDR_SIZE]; + u8 payload[I3C_MCTP_PAYLOAD_SIZE]; +}; + +struct i3c_mctp_packet { + struct i3c_mctp_packet_data data; + u32 size; +}; + +void *i3c_mctp_packet_alloc(gfp_t flags); +void i3c_mctp_packet_free(void *packet); + +int i3c_mctp_get_eid(struct i3c_mctp_client *client, u8 domain_id, u8 *eid); +int i3c_mctp_send_packet(struct i3c_device *i3c, struct i3c_mctp_packet *tx_packet); +struct i3c_mctp_packet *i3c_mctp_receive_packet(struct i3c_mctp_client *client, + unsigned long timeout); + +#endif /* I3C_MCTP_H */ -- cgit v1.2.3