147 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (C) 2016 Cavium, Inc.4 */5 6#ifndef __REQUEST_MANAGER_H7#define __REQUEST_MANAGER_H8 9#include "cpt_common.h"10 11#define TIME_IN_RESET_COUNT 512#define COMPLETION_CODE_SIZE 813#define COMPLETION_CODE_INIT 014#define PENDING_THOLD 10015#define MAX_SG_IN_CNT 1216#define MAX_SG_OUT_CNT 1317#define SG_LIST_HDR_SIZE 818#define MAX_BUF_CNT 1619 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#else29 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#endif34 } 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 definitions112 * 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#else131 u64 cptr:61;132 u64 grp:3;133#endif134 } 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 */147