Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/crypto/cavium/cpt/cptvf_algs.h
26285 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) 2016 Cavium, Inc.
4
*/
5
6
#ifndef _CPTVF_ALGS_H_
7
#define _CPTVF_ALGS_H_
8
9
#include "request_manager.h"
10
11
#define MAX_DEVICES 16
12
#define MAJOR_OP_FC 0x33
13
#define MAX_ENC_KEY_SIZE 32
14
#define MAX_HASH_KEY_SIZE 64
15
#define MAX_KEY_SIZE (MAX_ENC_KEY_SIZE + MAX_HASH_KEY_SIZE)
16
#define CONTROL_WORD_LEN 8
17
#define KEY2_OFFSET 48
18
19
#define DMA_MODE_FLAG(dma_mode) \
20
(((dma_mode) == DMA_GATHER_SCATTER) ? (1 << 7) : 0)
21
22
enum req_type {
23
AE_CORE_REQ,
24
SE_CORE_REQ,
25
};
26
27
enum cipher_type {
28
DES3_CBC = 0x1,
29
DES3_ECB = 0x2,
30
AES_CBC = 0x3,
31
AES_ECB = 0x4,
32
AES_CFB = 0x5,
33
AES_CTR = 0x6,
34
AES_GCM = 0x7,
35
AES_XTS = 0x8
36
};
37
38
enum aes_type {
39
AES_128_BIT = 0x1,
40
AES_192_BIT = 0x2,
41
AES_256_BIT = 0x3
42
};
43
44
union encr_ctrl {
45
u64 flags;
46
struct {
47
#if defined(__BIG_ENDIAN_BITFIELD)
48
u64 enc_cipher:4;
49
u64 reserved1:1;
50
u64 aes_key:2;
51
u64 iv_source:1;
52
u64 hash_type:4;
53
u64 reserved2:3;
54
u64 auth_input_type:1;
55
u64 mac_len:8;
56
u64 reserved3:8;
57
u64 encr_offset:16;
58
u64 iv_offset:8;
59
u64 auth_offset:8;
60
#else
61
u64 auth_offset:8;
62
u64 iv_offset:8;
63
u64 encr_offset:16;
64
u64 reserved3:8;
65
u64 mac_len:8;
66
u64 auth_input_type:1;
67
u64 reserved2:3;
68
u64 hash_type:4;
69
u64 iv_source:1;
70
u64 aes_key:2;
71
u64 reserved1:1;
72
u64 enc_cipher:4;
73
#endif
74
} e;
75
};
76
77
struct cvm_cipher {
78
const char *name;
79
u8 value;
80
};
81
82
struct enc_context {
83
union encr_ctrl enc_ctrl;
84
u8 encr_key[32];
85
u8 encr_iv[16];
86
};
87
88
struct fchmac_context {
89
u8 ipad[64];
90
u8 opad[64]; /* or OPAD */
91
};
92
93
struct fc_context {
94
struct enc_context enc;
95
struct fchmac_context hmac;
96
};
97
98
struct cvm_enc_ctx {
99
u32 key_len;
100
u8 enc_key[MAX_KEY_SIZE];
101
u8 cipher_type:4;
102
u8 key_type:2;
103
};
104
105
struct cvm_des3_ctx {
106
u32 key_len;
107
u8 des3_key[MAX_KEY_SIZE];
108
};
109
110
struct cvm_req_ctx {
111
struct cpt_request_info cpt_req;
112
u64 control_word;
113
struct fc_context fctx;
114
};
115
116
int cptvf_do_request(void *cptvf, struct cpt_request_info *req);
117
#endif /*_CPTVF_ALGS_H_*/
118
119