diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2016-12-15 18:13:41 -0800 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2016-12-15 18:13:41 -0800 | 
| commit | ed3c5a0be38c180ab0899a0f52719e81f36b87a1 (patch) | |
| tree | 684eb66d1e8513b4584c680e157f3887c04c58ba /include | |
| parent | 66d466722c39f663b2bbeb44ba4f9419a548fa23 (diff) | |
| parent | 6bdf1e0efb04a1716373646cb6f35b73addca492 (diff) | |
Merge tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost
Pull virtio updates from Michael Tsirkin:
 "virtio, vhost: new device, fixes, speedups
  This includes the new virtio crypto device, and fixes all over the
  place. In particular enabling endian-ness checks for sparse builds
  found some bugs which this fixes. And it appears that everyone is in
  agreement that disabling endian-ness sparse checks shouldn't be
  necessary any longer.
  So this enables them for everyone, and drops the __CHECK_ENDIAN__ and
  __bitwise__ APIs.
  IRQ handling in virtio has been refactored somewhat, the larger switch
  to IRQ_SHARED will have to wait as it proved too aggressive"
* tag 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mst/vhost: (34 commits)
  Makefile: drop -D__CHECK_ENDIAN__ from cflags
  fs/logfs: drop __CHECK_ENDIAN__
  Documentation/sparse: drop __CHECK_ENDIAN__
  linux: drop __bitwise__ everywhere
  checkpatch: replace __bitwise__ with __bitwise
  Documentation/sparse: drop __bitwise__
  tools: enable endian checks for all sparse builds
  linux/types.h: enable endian checks for all sparse builds
  virtio_mmio: Set dev.release() to avoid warning
  vhost: remove unused feature bit
  virtio_ring: fix description of virtqueue_get_buf
  vhost/scsi: Remove unused but set variable
  tools/virtio: use {READ,WRITE}_ONCE() in uaccess.h
  vringh: kill off ACCESS_ONCE()
  tools/virtio: fix READ_ONCE()
  crypto: add virtio-crypto driver
  vhost: cache used event for better performance
  vsock: lookup and setup guest_cid inside vhost_vsock_lock
  virtio_pci: split vp_try_to_find_vqs into INTx and MSI-X variants
  virtio_pci: merge vp_free_vectors into vp_del_vqs
  ...
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/mmzone.h | 2 | ||||
| -rw-r--r-- | include/linux/serial_core.h | 4 | ||||
| -rw-r--r-- | include/linux/types.h | 4 | ||||
| -rw-r--r-- | include/scsi/iscsi_proto.h | 2 | ||||
| -rw-r--r-- | include/target/target_core_base.h | 2 | ||||
| -rw-r--r-- | include/uapi/linux/Kbuild | 1 | ||||
| -rw-r--r-- | include/uapi/linux/types.h | 4 | ||||
| -rw-r--r-- | include/uapi/linux/vhost.h | 2 | ||||
| -rw-r--r-- | include/uapi/linux/virtio_crypto.h | 450 | ||||
| -rw-r--r-- | include/uapi/linux/virtio_ids.h | 1 | ||||
| -rw-r--r-- | include/uapi/linux/virtio_types.h | 6 | 
11 files changed, 462 insertions, 16 deletions
| diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h index 0f088f3a2fed..36d9896fbc1e 100644 --- a/include/linux/mmzone.h +++ b/include/linux/mmzone.h @@ -246,7 +246,7 @@ struct lruvec {  #define ISOLATE_UNEVICTABLE	((__force isolate_mode_t)0x8)  /* LRU Isolation modes. */ -typedef unsigned __bitwise__ isolate_mode_t; +typedef unsigned __bitwise isolate_mode_t;  enum zone_watermarks {  	WMARK_MIN, diff --git a/include/linux/serial_core.h b/include/linux/serial_core.h index 5d494888a612..5def8e830fb0 100644 --- a/include/linux/serial_core.h +++ b/include/linux/serial_core.h @@ -111,8 +111,8 @@ struct uart_icount {  	__u32	buf_overrun;  }; -typedef unsigned int __bitwise__ upf_t; -typedef unsigned int __bitwise__ upstat_t; +typedef unsigned int __bitwise upf_t; +typedef unsigned int __bitwise upstat_t;  struct uart_port {  	spinlock_t		lock;			/* port lock */ diff --git a/include/linux/types.h b/include/linux/types.h index baf718324f4a..d501ad3ba247 100644 --- a/include/linux/types.h +++ b/include/linux/types.h @@ -154,8 +154,8 @@ typedef u64 dma_addr_t;  typedef u32 dma_addr_t;  #endif -typedef unsigned __bitwise__ gfp_t; -typedef unsigned __bitwise__ fmode_t; +typedef unsigned __bitwise gfp_t; +typedef unsigned __bitwise fmode_t;  #ifdef CONFIG_PHYS_ADDR_T_64BIT  typedef u64 phys_addr_t; diff --git a/include/scsi/iscsi_proto.h b/include/scsi/iscsi_proto.h index c1260d80ef30..df156f1d50b2 100644 --- a/include/scsi/iscsi_proto.h +++ b/include/scsi/iscsi_proto.h @@ -74,7 +74,7 @@ static inline int iscsi_sna_gte(u32 n1, u32 n2)  #define zero_data(p) {p[0]=0;p[1]=0;p[2]=0;}  /* initiator tags; opaque for target */ -typedef uint32_t __bitwise__ itt_t; +typedef uint32_t __bitwise itt_t;  /* below makes sense only for initiator that created this tag */  #define build_itt(itt, age) ((__force itt_t)\  	((itt) | ((age) << ISCSI_AGE_SHIFT))) diff --git a/include/target/target_core_base.h b/include/target/target_core_base.h index c2119008990a..00558287936d 100644 --- a/include/target/target_core_base.h +++ b/include/target/target_core_base.h @@ -149,7 +149,7 @@ enum se_cmd_flags_table {   * Used by transport_send_check_condition_and_sense()   * to signal which ASC/ASCQ sense payload should be built.   */ -typedef unsigned __bitwise__ sense_reason_t; +typedef unsigned __bitwise sense_reason_t;  enum tcm_sense_reason_table {  #define R(x)	(__force sense_reason_t )(x) diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild index bc2ef9fef7c8..a26c5c76ab62 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild @@ -462,6 +462,7 @@ header-y += virtio_rng.h  header-y += virtio_scsi.h  header-y += virtio_types.h  header-y += virtio_vsock.h +header-y += virtio_crypto.h  header-y += vm_sockets.h  header-y += vt.h  header-y += vtpm_proxy.h diff --git a/include/uapi/linux/types.h b/include/uapi/linux/types.h index acf0979b790a..41e5914f0a8e 100644 --- a/include/uapi/linux/types.h +++ b/include/uapi/linux/types.h @@ -23,11 +23,7 @@  #else  #define __bitwise__  #endif -#ifdef __CHECK_ENDIAN__  #define __bitwise __bitwise__ -#else -#define __bitwise -#endif  typedef __u16 __bitwise __le16;  typedef __u16 __bitwise __be16; diff --git a/include/uapi/linux/vhost.h b/include/uapi/linux/vhost.h index 56b7ab584cc0..60180c0b5dc6 100644 --- a/include/uapi/linux/vhost.h +++ b/include/uapi/linux/vhost.h @@ -172,8 +172,6 @@ struct vhost_memory {  #define VHOST_F_LOG_ALL 26  /* vhost-net should add virtio_net_hdr for RX, and strip for TX packets. */  #define VHOST_NET_F_VIRTIO_NET_HDR 27 -/* Vhost have device IOTLB */ -#define VHOST_F_DEVICE_IOTLB 63  /* VHOST_SCSI specific definitions */ diff --git a/include/uapi/linux/virtio_crypto.h b/include/uapi/linux/virtio_crypto.h new file mode 100644 index 000000000000..50cdc8aebfcf --- /dev/null +++ b/include/uapi/linux/virtio_crypto.h @@ -0,0 +1,450 @@ +#ifndef _VIRTIO_CRYPTO_H +#define _VIRTIO_CRYPTO_H +/* This header is BSD licensed so anyone can use the definitions to implement + * compatible drivers/servers. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of IBM nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL IBM OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ +#include <linux/types.h> +#include <linux/virtio_types.h> +#include <linux/virtio_ids.h> +#include <linux/virtio_config.h> + + +#define VIRTIO_CRYPTO_SERVICE_CIPHER 0 +#define VIRTIO_CRYPTO_SERVICE_HASH   1 +#define VIRTIO_CRYPTO_SERVICE_MAC    2 +#define VIRTIO_CRYPTO_SERVICE_AEAD   3 + +#define VIRTIO_CRYPTO_OPCODE(service, op)   (((service) << 8) | (op)) + +struct virtio_crypto_ctrl_header { +#define VIRTIO_CRYPTO_CIPHER_CREATE_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x02) +#define VIRTIO_CRYPTO_CIPHER_DESTROY_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x03) +#define VIRTIO_CRYPTO_HASH_CREATE_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x02) +#define VIRTIO_CRYPTO_HASH_DESTROY_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x03) +#define VIRTIO_CRYPTO_MAC_CREATE_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x02) +#define VIRTIO_CRYPTO_MAC_DESTROY_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x03) +#define VIRTIO_CRYPTO_AEAD_CREATE_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x02) +#define VIRTIO_CRYPTO_AEAD_DESTROY_SESSION \ +	   VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x03) +	__le32 opcode; +	__le32 algo; +	__le32 flag; +	/* data virtqueue id */ +	__le32 queue_id; +}; + +struct virtio_crypto_cipher_session_para { +#define VIRTIO_CRYPTO_NO_CIPHER                 0 +#define VIRTIO_CRYPTO_CIPHER_ARC4               1 +#define VIRTIO_CRYPTO_CIPHER_AES_ECB            2 +#define VIRTIO_CRYPTO_CIPHER_AES_CBC            3 +#define VIRTIO_CRYPTO_CIPHER_AES_CTR            4 +#define VIRTIO_CRYPTO_CIPHER_DES_ECB            5 +#define VIRTIO_CRYPTO_CIPHER_DES_CBC            6 +#define VIRTIO_CRYPTO_CIPHER_3DES_ECB           7 +#define VIRTIO_CRYPTO_CIPHER_3DES_CBC           8 +#define VIRTIO_CRYPTO_CIPHER_3DES_CTR           9 +#define VIRTIO_CRYPTO_CIPHER_KASUMI_F8          10 +#define VIRTIO_CRYPTO_CIPHER_SNOW3G_UEA2        11 +#define VIRTIO_CRYPTO_CIPHER_AES_F8             12 +#define VIRTIO_CRYPTO_CIPHER_AES_XTS            13 +#define VIRTIO_CRYPTO_CIPHER_ZUC_EEA3           14 +	__le32 algo; +	/* length of key */ +	__le32 keylen; + +#define VIRTIO_CRYPTO_OP_ENCRYPT  1 +#define VIRTIO_CRYPTO_OP_DECRYPT  2 +	/* encrypt or decrypt */ +	__le32 op; +	__le32 padding; +}; + +struct virtio_crypto_session_input { +	/* Device-writable part */ +	__le64 session_id; +	__le32 status; +	__le32 padding; +}; + +struct virtio_crypto_cipher_session_req { +	struct virtio_crypto_cipher_session_para para; +	__u8 padding[32]; +}; + +struct virtio_crypto_hash_session_para { +#define VIRTIO_CRYPTO_NO_HASH            0 +#define VIRTIO_CRYPTO_HASH_MD5           1 +#define VIRTIO_CRYPTO_HASH_SHA1          2 +#define VIRTIO_CRYPTO_HASH_SHA_224       3 +#define VIRTIO_CRYPTO_HASH_SHA_256       4 +#define VIRTIO_CRYPTO_HASH_SHA_384       5 +#define VIRTIO_CRYPTO_HASH_SHA_512       6 +#define VIRTIO_CRYPTO_HASH_SHA3_224      7 +#define VIRTIO_CRYPTO_HASH_SHA3_256      8 +#define VIRTIO_CRYPTO_HASH_SHA3_384      9 +#define VIRTIO_CRYPTO_HASH_SHA3_512      10 +#define VIRTIO_CRYPTO_HASH_SHA3_SHAKE128      11 +#define VIRTIO_CRYPTO_HASH_SHA3_SHAKE256      12 +	__le32 algo; +	/* hash result length */ +	__le32 hash_result_len; +	__u8 padding[8]; +}; + +struct virtio_crypto_hash_create_session_req { +	struct virtio_crypto_hash_session_para para; +	__u8 padding[40]; +}; + +struct virtio_crypto_mac_session_para { +#define VIRTIO_CRYPTO_NO_MAC                       0 +#define VIRTIO_CRYPTO_MAC_HMAC_MD5                 1 +#define VIRTIO_CRYPTO_MAC_HMAC_SHA1                2 +#define VIRTIO_CRYPTO_MAC_HMAC_SHA_224             3 +#define VIRTIO_CRYPTO_MAC_HMAC_SHA_256             4 +#define VIRTIO_CRYPTO_MAC_HMAC_SHA_384             5 +#define VIRTIO_CRYPTO_MAC_HMAC_SHA_512             6 +#define VIRTIO_CRYPTO_MAC_CMAC_3DES                25 +#define VIRTIO_CRYPTO_MAC_CMAC_AES                 26 +#define VIRTIO_CRYPTO_MAC_KASUMI_F9                27 +#define VIRTIO_CRYPTO_MAC_SNOW3G_UIA2              28 +#define VIRTIO_CRYPTO_MAC_GMAC_AES                 41 +#define VIRTIO_CRYPTO_MAC_GMAC_TWOFISH             42 +#define VIRTIO_CRYPTO_MAC_CBCMAC_AES               49 +#define VIRTIO_CRYPTO_MAC_CBCMAC_KASUMI_F9         50 +#define VIRTIO_CRYPTO_MAC_XCBC_AES                 53 +	__le32 algo; +	/* hash result length */ +	__le32 hash_result_len; +	/* length of authenticated key */ +	__le32 auth_key_len; +	__le32 padding; +}; + +struct virtio_crypto_mac_create_session_req { +	struct virtio_crypto_mac_session_para para; +	__u8 padding[40]; +}; + +struct virtio_crypto_aead_session_para { +#define VIRTIO_CRYPTO_NO_AEAD     0 +#define VIRTIO_CRYPTO_AEAD_GCM    1 +#define VIRTIO_CRYPTO_AEAD_CCM    2 +#define VIRTIO_CRYPTO_AEAD_CHACHA20_POLY1305  3 +	__le32 algo; +	/* length of key */ +	__le32 key_len; +	/* hash result length */ +	__le32 hash_result_len; +	/* length of the additional authenticated data (AAD) in bytes */ +	__le32 aad_len; +	/* encrypt or decrypt, See above VIRTIO_CRYPTO_OP_* */ +	__le32 op; +	__le32 padding; +}; + +struct virtio_crypto_aead_create_session_req { +	struct virtio_crypto_aead_session_para para; +	__u8 padding[32]; +}; + +struct virtio_crypto_alg_chain_session_para { +#define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER  1 +#define VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH  2 +	__le32 alg_chain_order; +/* Plain hash */ +#define VIRTIO_CRYPTO_SYM_HASH_MODE_PLAIN    1 +/* Authenticated hash (mac) */ +#define VIRTIO_CRYPTO_SYM_HASH_MODE_AUTH     2 +/* Nested hash */ +#define VIRTIO_CRYPTO_SYM_HASH_MODE_NESTED   3 +	__le32 hash_mode; +	struct virtio_crypto_cipher_session_para cipher_param; +	union { +		struct virtio_crypto_hash_session_para hash_param; +		struct virtio_crypto_mac_session_para mac_param; +		__u8 padding[16]; +	} u; +	/* length of the additional authenticated data (AAD) in bytes */ +	__le32 aad_len; +	__le32 padding; +}; + +struct virtio_crypto_alg_chain_session_req { +	struct virtio_crypto_alg_chain_session_para para; +}; + +struct virtio_crypto_sym_create_session_req { +	union { +		struct virtio_crypto_cipher_session_req cipher; +		struct virtio_crypto_alg_chain_session_req chain; +		__u8 padding[48]; +	} u; + +	/* Device-readable part */ + +/* No operation */ +#define VIRTIO_CRYPTO_SYM_OP_NONE  0 +/* Cipher only operation on the data */ +#define VIRTIO_CRYPTO_SYM_OP_CIPHER  1 +/* + * Chain any cipher with any hash or mac operation. The order + * depends on the value of alg_chain_order param + */ +#define VIRTIO_CRYPTO_SYM_OP_ALGORITHM_CHAINING  2 +	__le32 op_type; +	__le32 padding; +}; + +struct virtio_crypto_destroy_session_req { +	/* Device-readable part */ +	__le64  session_id; +	__u8 padding[48]; +}; + +/* The request of the control virtqueue's packet */ +struct virtio_crypto_op_ctrl_req { +	struct virtio_crypto_ctrl_header header; + +	union { +		struct virtio_crypto_sym_create_session_req +			sym_create_session; +		struct virtio_crypto_hash_create_session_req +			hash_create_session; +		struct virtio_crypto_mac_create_session_req +			mac_create_session; +		struct virtio_crypto_aead_create_session_req +			aead_create_session; +		struct virtio_crypto_destroy_session_req +			destroy_session; +		__u8 padding[56]; +	} u; +}; + +struct virtio_crypto_op_header { +#define VIRTIO_CRYPTO_CIPHER_ENCRYPT \ +	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x00) +#define VIRTIO_CRYPTO_CIPHER_DECRYPT \ +	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_CIPHER, 0x01) +#define VIRTIO_CRYPTO_HASH \ +	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_HASH, 0x00) +#define VIRTIO_CRYPTO_MAC \ +	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_MAC, 0x00) +#define VIRTIO_CRYPTO_AEAD_ENCRYPT \ +	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x00) +#define VIRTIO_CRYPTO_AEAD_DECRYPT \ +	VIRTIO_CRYPTO_OPCODE(VIRTIO_CRYPTO_SERVICE_AEAD, 0x01) +	__le32 opcode; +	/* algo should be service-specific algorithms */ +	__le32 algo; +	/* session_id should be service-specific algorithms */ +	__le64 session_id; +	/* control flag to control the request */ +	__le32 flag; +	__le32 padding; +}; + +struct virtio_crypto_cipher_para { +	/* +	 * Byte Length of valid IV/Counter +	 * +	 * For block ciphers in CBC or F8 mode, or for Kasumi in F8 mode, or for +	 *   SNOW3G in UEA2 mode, this is the length of the IV (which +	 *   must be the same as the block length of the cipher). +	 * For block ciphers in CTR mode, this is the length of the counter +	 *   (which must be the same as the block length of the cipher). +	 * For AES-XTS, this is the 128bit tweak, i, from IEEE Std 1619-2007. +	 * +	 * The IV/Counter will be updated after every partial cryptographic +	 * operation. +	 */ +	__le32 iv_len; +	/* length of source data */ +	__le32 src_data_len; +	/* length of dst data */ +	__le32 dst_data_len; +	__le32 padding; +}; + +struct virtio_crypto_hash_para { +	/* length of source data */ +	__le32 src_data_len; +	/* hash result length */ +	__le32 hash_result_len; +}; + +struct virtio_crypto_mac_para { +	struct virtio_crypto_hash_para hash; +}; + +struct virtio_crypto_aead_para { +	/* +	 * Byte Length of valid IV data pointed to by the below iv_addr +	 * parameter. +	 * +	 * For GCM mode, this is either 12 (for 96-bit IVs) or 16, in which +	 *   case iv_addr points to J0. +	 * For CCM mode, this is the length of the nonce, which can be in the +	 *   range 7 to 13 inclusive. +	 */ +	__le32 iv_len; +	/* length of additional auth data */ +	__le32 aad_len; +	/* length of source data */ +	__le32 src_data_len; +	/* length of dst data */ +	__le32 dst_data_len; +}; + +struct virtio_crypto_cipher_data_req { +	/* Device-readable part */ +	struct virtio_crypto_cipher_para para; +	__u8 padding[24]; +}; + +struct virtio_crypto_hash_data_req { +	/* Device-readable part */ +	struct virtio_crypto_hash_para para; +	__u8 padding[40]; +}; + +struct virtio_crypto_mac_data_req { +	/* Device-readable part */ +	struct virtio_crypto_mac_para para; +	__u8 padding[40]; +}; + +struct virtio_crypto_alg_chain_data_para { +	__le32 iv_len; +	/* Length of source data */ +	__le32 src_data_len; +	/* Length of destination data */ +	__le32 dst_data_len; +	/* Starting point for cipher processing in source data */ +	__le32 cipher_start_src_offset; +	/* Length of the source data that the cipher will be computed on */ +	__le32 len_to_cipher; +	/* Starting point for hash processing in source data */ +	__le32 hash_start_src_offset; +	/* Length of the source data that the hash will be computed on */ +	__le32 len_to_hash; +	/* Length of the additional auth data */ +	__le32 aad_len; +	/* Length of the hash result */ +	__le32 hash_result_len; +	__le32 reserved; +}; + +struct virtio_crypto_alg_chain_data_req { +	/* Device-readable part */ +	struct virtio_crypto_alg_chain_data_para para; +}; + +struct virtio_crypto_sym_data_req { +	union { +		struct virtio_crypto_cipher_data_req cipher; +		struct virtio_crypto_alg_chain_data_req chain; +		__u8 padding[40]; +	} u; + +	/* See above VIRTIO_CRYPTO_SYM_OP_* */ +	__le32 op_type; +	__le32 padding; +}; + +struct virtio_crypto_aead_data_req { +	/* Device-readable part */ +	struct virtio_crypto_aead_para para; +	__u8 padding[32]; +}; + +/* The request of the data virtqueue's packet */ +struct virtio_crypto_op_data_req { +	struct virtio_crypto_op_header header; + +	union { +		struct virtio_crypto_sym_data_req  sym_req; +		struct virtio_crypto_hash_data_req hash_req; +		struct virtio_crypto_mac_data_req mac_req; +		struct virtio_crypto_aead_data_req aead_req; +		__u8 padding[48]; +	} u; +}; + +#define VIRTIO_CRYPTO_OK        0 +#define VIRTIO_CRYPTO_ERR       1 +#define VIRTIO_CRYPTO_BADMSG    2 +#define VIRTIO_CRYPTO_NOTSUPP   3 +#define VIRTIO_CRYPTO_INVSESS   4 /* Invalid session id */ + +/* The accelerator hardware is ready */ +#define VIRTIO_CRYPTO_S_HW_READY  (1 << 0) + +struct virtio_crypto_config { +	/* See VIRTIO_CRYPTO_OP_* above */ +	__u32  status; + +	/* +	 * Maximum number of data queue +	 */ +	__u32  max_dataqueues; + +	/* +	 * Specifies the services mask which the device support, +	 * see VIRTIO_CRYPTO_SERVICE_* above +	 */ +	__u32 crypto_services; + +	/* Detailed algorithms mask */ +	__u32 cipher_algo_l; +	__u32 cipher_algo_h; +	__u32 hash_algo; +	__u32 mac_algo_l; +	__u32 mac_algo_h; +	__u32 aead_algo; +	/* Maximum length of cipher key */ +	__u32 max_cipher_key_len; +	/* Maximum length of authenticated key */ +	__u32 max_auth_key_len; +	__u32 reserve; +	/* Maximum size of each crypto request's content */ +	__u64 max_size; +}; + +struct virtio_crypto_inhdr { +	/* See VIRTIO_CRYPTO_* above */ +	__u8 status; +}; +#endif diff --git a/include/uapi/linux/virtio_ids.h b/include/uapi/linux/virtio_ids.h index 3228d582234a..6d5c3b2d4f4d 100644 --- a/include/uapi/linux/virtio_ids.h +++ b/include/uapi/linux/virtio_ids.h @@ -42,5 +42,6 @@  #define VIRTIO_ID_GPU          16 /* virtio GPU */  #define VIRTIO_ID_INPUT        18 /* virtio input */  #define VIRTIO_ID_VSOCK        19 /* virtio vsock transport */ +#define VIRTIO_ID_CRYPTO       20 /* virtio crypto */  #endif /* _LINUX_VIRTIO_IDS_H */ diff --git a/include/uapi/linux/virtio_types.h b/include/uapi/linux/virtio_types.h index e845e8c4cbee..55c3b738722c 100644 --- a/include/uapi/linux/virtio_types.h +++ b/include/uapi/linux/virtio_types.h @@ -39,8 +39,8 @@   * - __le{16,32,64} for standard-compliant virtio devices   */ -typedef __u16 __bitwise__ __virtio16; -typedef __u32 __bitwise__ __virtio32; -typedef __u64 __bitwise__ __virtio64; +typedef __u16 __bitwise __virtio16; +typedef __u32 __bitwise __virtio32; +typedef __u64 __bitwise __virtio64;  #endif /* _UAPI_LINUX_VIRTIO_TYPES_H */ | 
