Re: [PATCH v4] i2c: virtio: add a virtio i2c frontend driver
From: Jie Deng <hidden>
Date: 2021-02-26 02:47:15
Also in:
linux-i2c, lkml
On 2021/2/25 15:21, Viresh Kumar wrote:
On 12-10-20, 09:55, Jie Deng wrote:quoted
Add an I2C bus driver for virtio para-virtualization. The controller can be emulated by the backend driver in any device model software by following the virtio protocol. This driver communicates with the backend driver through a virtio I2C message structure which includes following parts: - Header: i2c_msg addr, flags, len. - Data buffer: the pointer to the I2C msg data. - Status: the processing result from the backend. People may implement different backend drivers to emulate different controllers according to their needs. A backend example can be found in the device model of the open source project ACRN. For more information, please refer to https://projectacrn.org.diff --git a/include/uapi/linux/virtio_i2c.h b/include/uapi/linux/virtio_i2c.h new file mode 100644 index 0000000..7413e45 --- /dev/null +++ b/include/uapi/linux/virtio_i2c.h@@ -0,0 +1,31 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later OR BSD-3-Clause */ +/* + * Definitions for virtio I2C Adpter + * + * Copyright (c) 2020 Intel Corporation. All rights reserved. + */ + +#ifndef _UAPI_LINUX_VIRTIO_I2C_H +#define _UAPI_LINUX_VIRTIO_I2C_H + +#include <linux/types.h> +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> + +/** + * struct virtio_i2c_hdr - the virtio I2C message header structure + * @addr: i2c_msg addr, the slave address + * @flags: i2c_msg flags + * @len: i2c_msg len + */ +struct virtio_i2c_hdr { + __le16 addr; + __le16 flags; + __le16 len; +};Hi Jie, I am a bit confused about the header and the format in which data is being processed here. When I look at the specification present here: https://lists.oasis-open.org/archives/virtio-comment/202009/msg00021.html it talks about struct virtio_i2c_out_hdr { le16 addr; le16 padding; le32 flags; }; struct virtio_i2c_in_hdr { u8 status; }; struct virtio_i2c_req { struct virtio_i2c_out_hdr out_hdr; u8 write_buf []; u8 read_buf []; struct virtio_i2c_in_hdr in_hdr; }; while what we have above is completely different. What am I missing ?
This v4 was the old version before the specification was acked by the virtio tc. Following is the latest specification. https://raw.githubusercontent.com/oasis-tcs/virtio-spec/master/virtio-i2c.tex I will send the v5 since the host/guest ABI changes. Thanks. _______________________________________________ Virtualization mailing list Virtualization@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/virtualization