Path: blob/master/drivers/crypto/cavium/cpt/request_manager.h
26285 views
/* SPDX-License-Identifier: GPL-2.0-only */1/*2* Copyright (C) 2016 Cavium, Inc.3*/45#ifndef __REQUEST_MANAGER_H6#define __REQUEST_MANAGER_H78#include "cpt_common.h"910#define TIME_IN_RESET_COUNT 511#define COMPLETION_CODE_SIZE 812#define COMPLETION_CODE_INIT 013#define PENDING_THOLD 10014#define MAX_SG_IN_CNT 1215#define MAX_SG_OUT_CNT 1316#define SG_LIST_HDR_SIZE 817#define MAX_BUF_CNT 161819union ctrl_info {20u32 flags;21struct {22#if defined(__BIG_ENDIAN_BITFIELD)23u32 reserved0:26;24u32 grp:3; /* Group bits */25u32 dma_mode:2; /* DMA mode */26u32 se_req:1;/* To SE core */27#else28u32 se_req:1; /* To SE core */29u32 dma_mode:2; /* DMA mode */30u32 grp:3; /* Group bits */31u32 reserved0:26;32#endif33} s;34};3536union opcode_info {37u16 flags;38struct {39u8 major;40u8 minor;41} s;42};4344struct cptvf_request {45union opcode_info opcode;46u16 param1;47u16 param2;48u16 dlen;49};5051struct buf_ptr {52u8 *vptr;53dma_addr_t dma_addr;54u16 size;55};5657struct cpt_request_info {58u8 incnt; /* Number of input buffers */59u8 outcnt; /* Number of output buffers */60u16 rlen; /* Output length */61union ctrl_info ctrl; /* User control information */62struct cptvf_request req; /* Request Information (Core specific) */6364bool may_sleep;6566struct buf_ptr in[MAX_BUF_CNT];67struct buf_ptr out[MAX_BUF_CNT];6869void (*callback)(int, void *); /* Kernel ASYNC request callabck */70void *callback_arg; /* Kernel ASYNC request callabck arg */71};7273struct sglist_component {74union {75u64 len;76struct {77__be16 len0;78__be16 len1;79__be16 len2;80__be16 len3;81} s;82} u;83__be64 ptr0;84__be64 ptr1;85__be64 ptr2;86__be64 ptr3;87};8889struct cpt_info_buffer {90struct cpt_vf *cptvf;91unsigned long time_in;92u8 extra_time;9394struct cpt_request_info *req;95dma_addr_t dptr_baddr;96u32 dlen;97dma_addr_t rptr_baddr;98dma_addr_t comp_baddr;99u8 *in_buffer;100u8 *out_buffer;101u8 *gather_components;102u8 *scatter_components;103104struct pending_entry *pentry;105volatile u64 *completion_addr;106volatile u64 *alternate_caddr;107};108109/*110* CPT_INST_S software command definitions111* Words EI (0-3)112*/113union vq_cmd_word0 {114u64 u64;115struct {116__be16 opcode;117__be16 param1;118__be16 param2;119__be16 dlen;120} s;121};122123union vq_cmd_word3 {124u64 u64;125struct {126#if defined(__BIG_ENDIAN_BITFIELD)127u64 grp:3;128u64 cptr:61;129#else130u64 cptr:61;131u64 grp:3;132#endif133} s;134};135136struct cpt_vq_command {137union vq_cmd_word0 cmd;138u64 dptr;139u64 rptr;140union vq_cmd_word3 cptr;141};142143void vq_post_process(struct cpt_vf *cptvf, u32 qno);144int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req);145#endif /* __REQUEST_MANAGER_H */146147148