Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/drivers/crypto/cavium/cpt/request_manager.h
26285 views
1
/* SPDX-License-Identifier: GPL-2.0-only */
2
/*
3
* Copyright (C) 2016 Cavium, Inc.
4
*/
5
6
#ifndef __REQUEST_MANAGER_H
7
#define __REQUEST_MANAGER_H
8
9
#include "cpt_common.h"
10
11
#define TIME_IN_RESET_COUNT 5
12
#define COMPLETION_CODE_SIZE 8
13
#define COMPLETION_CODE_INIT 0
14
#define PENDING_THOLD 100
15
#define MAX_SG_IN_CNT 12
16
#define MAX_SG_OUT_CNT 13
17
#define SG_LIST_HDR_SIZE 8
18
#define MAX_BUF_CNT 16
19
20
union ctrl_info {
21
u32 flags;
22
struct {
23
#if defined(__BIG_ENDIAN_BITFIELD)
24
u32 reserved0:26;
25
u32 grp:3; /* Group bits */
26
u32 dma_mode:2; /* DMA mode */
27
u32 se_req:1;/* To SE core */
28
#else
29
u32 se_req:1; /* To SE core */
30
u32 dma_mode:2; /* DMA mode */
31
u32 grp:3; /* Group bits */
32
u32 reserved0:26;
33
#endif
34
} s;
35
};
36
37
union opcode_info {
38
u16 flags;
39
struct {
40
u8 major;
41
u8 minor;
42
} s;
43
};
44
45
struct cptvf_request {
46
union opcode_info opcode;
47
u16 param1;
48
u16 param2;
49
u16 dlen;
50
};
51
52
struct buf_ptr {
53
u8 *vptr;
54
dma_addr_t dma_addr;
55
u16 size;
56
};
57
58
struct cpt_request_info {
59
u8 incnt; /* Number of input buffers */
60
u8 outcnt; /* Number of output buffers */
61
u16 rlen; /* Output length */
62
union ctrl_info ctrl; /* User control information */
63
struct cptvf_request req; /* Request Information (Core specific) */
64
65
bool may_sleep;
66
67
struct buf_ptr in[MAX_BUF_CNT];
68
struct buf_ptr out[MAX_BUF_CNT];
69
70
void (*callback)(int, void *); /* Kernel ASYNC request callabck */
71
void *callback_arg; /* Kernel ASYNC request callabck arg */
72
};
73
74
struct sglist_component {
75
union {
76
u64 len;
77
struct {
78
__be16 len0;
79
__be16 len1;
80
__be16 len2;
81
__be16 len3;
82
} s;
83
} u;
84
__be64 ptr0;
85
__be64 ptr1;
86
__be64 ptr2;
87
__be64 ptr3;
88
};
89
90
struct cpt_info_buffer {
91
struct cpt_vf *cptvf;
92
unsigned long time_in;
93
u8 extra_time;
94
95
struct cpt_request_info *req;
96
dma_addr_t dptr_baddr;
97
u32 dlen;
98
dma_addr_t rptr_baddr;
99
dma_addr_t comp_baddr;
100
u8 *in_buffer;
101
u8 *out_buffer;
102
u8 *gather_components;
103
u8 *scatter_components;
104
105
struct pending_entry *pentry;
106
volatile u64 *completion_addr;
107
volatile u64 *alternate_caddr;
108
};
109
110
/*
111
* CPT_INST_S software command definitions
112
* Words EI (0-3)
113
*/
114
union vq_cmd_word0 {
115
u64 u64;
116
struct {
117
__be16 opcode;
118
__be16 param1;
119
__be16 param2;
120
__be16 dlen;
121
} s;
122
};
123
124
union vq_cmd_word3 {
125
u64 u64;
126
struct {
127
#if defined(__BIG_ENDIAN_BITFIELD)
128
u64 grp:3;
129
u64 cptr:61;
130
#else
131
u64 cptr:61;
132
u64 grp:3;
133
#endif
134
} s;
135
};
136
137
struct cpt_vq_command {
138
union vq_cmd_word0 cmd;
139
u64 dptr;
140
u64 rptr;
141
union vq_cmd_word3 cptr;
142
};
143
144
void vq_post_process(struct cpt_vf *cptvf, u32 qno);
145
int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req);
146
#endif /* __REQUEST_MANAGER_H */
147
148