linux/drivers/crypto/cavium/cpt/request_manager.h
<<
>>
Prefs
   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        struct buf_ptr in[MAX_BUF_CNT];
  66        struct buf_ptr out[MAX_BUF_CNT];
  67
  68        void (*callback)(int, void *); /* Kernel ASYNC request callabck */
  69        void *callback_arg; /* Kernel ASYNC request callabck arg */
  70};
  71
  72struct 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
  88struct 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 * CPT_INST_S software command definitions
 110 * Words EI (0-3)
 111 */
 112union vq_cmd_word0 {
 113        u64 u64;
 114        struct {
 115                u16 opcode;
 116                u16 param1;
 117                u16 param2;
 118                u16 dlen;
 119        } s;
 120};
 121
 122union 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
 135struct cpt_vq_command {
 136        union vq_cmd_word0 cmd;
 137        u64 dptr;
 138        u64 rptr;
 139        union vq_cmd_word3 cptr;
 140};
 141
 142void vq_post_process(struct cpt_vf *cptvf, u32 qno);
 143int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req);
 144#endif /* __REQUEST_MANAGER_H */
 145