request_manager.h (2616B)
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 20union 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 37union opcode_info { 38 u16 flags; 39 struct { 40 u8 major; 41 u8 minor; 42 } s; 43}; 44 45struct cptvf_request { 46 union opcode_info opcode; 47 u16 param1; 48 u16 param2; 49 u16 dlen; 50}; 51 52struct buf_ptr { 53 u8 *vptr; 54 dma_addr_t dma_addr; 55 u16 size; 56}; 57 58struct 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 74struct 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 90struct 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 */ 114union vq_cmd_word0 { 115 u64 u64; 116 struct { 117 __be16 opcode; 118 __be16 param1; 119 __be16 param2; 120 __be16 dlen; 121 } s; 122}; 123 124union 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 137struct cpt_vq_command { 138 union vq_cmd_word0 cmd; 139 u64 dptr; 140 u64 rptr; 141 union vq_cmd_word3 cptr; 142}; 143 144void vq_post_process(struct cpt_vf *cptvf, u32 qno); 145int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req); 146#endif /* __REQUEST_MANAGER_H */