1
2
3
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;
26 u32 dma_mode:2;
27 u32 se_req:1;
28 #else
29 u32 se_req:1;
30 u32 dma_mode:2;
31 u32 grp:3;
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;
60 u8 outcnt;
61 u16 rlen;
62 union ctrl_info ctrl;
63 struct cptvf_request req;
64
65 struct buf_ptr in[MAX_BUF_CNT];
66 struct buf_ptr out[MAX_BUF_CNT];
67
68 void (*callback)(int, void *);
69 void *callback_arg;
70 };
71
72 struct sglist_component {
73 union {
74 u64 len;
75 struct {
76 u16 len0;
77 u16 len1;
78 u16 len2;
79 u16 len3;
80 } s;
81 } u;
82 u64 ptr0;
83 u64 ptr1;
84 u64 ptr2;
85 u64 ptr3;
86 };
87
88 struct cpt_info_buffer {
89 struct cpt_vf *cptvf;
90 unsigned long time_in;
91 u8 extra_time;
92
93 struct cpt_request_info *req;
94 dma_addr_t dptr_baddr;
95 u32 dlen;
96 dma_addr_t rptr_baddr;
97 dma_addr_t comp_baddr;
98 u8 *in_buffer;
99 u8 *out_buffer;
100 u8 *gather_components;
101 u8 *scatter_components;
102
103 struct pending_entry *pentry;
104 volatile u64 *completion_addr;
105 volatile u64 *alternate_caddr;
106 };
107
108
109
110
111
112 union vq_cmd_word0 {
113 u64 u64;
114 struct {
115 u16 opcode;
116 u16 param1;
117 u16 param2;
118 u16 dlen;
119 } s;
120 };
121
122 union vq_cmd_word3 {
123 u64 u64;
124 struct {
125 #if defined(__BIG_ENDIAN_BITFIELD)
126 u64 grp:3;
127 u64 cptr:61;
128 #else
129 u64 cptr:61;
130 u64 grp:3;
131 #endif
132 } s;
133 };
134
135 struct cpt_vq_command {
136 union vq_cmd_word0 cmd;
137 u64 dptr;
138 u64 rptr;
139 union vq_cmd_word3 cptr;
140 };
141
142 void vq_post_process(struct cpt_vf *cptvf, u32 qno);
143 int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req);
144 #endif