123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- /* SPDX-License-Identifier: GPL-2.0-only */
- /*
- * Copyright (C) 2016 Cavium, Inc.
- */
- #ifndef __REQUEST_MANAGER_H
- #define __REQUEST_MANAGER_H
- #include "cpt_common.h"
- #define TIME_IN_RESET_COUNT 5
- #define COMPLETION_CODE_SIZE 8
- #define COMPLETION_CODE_INIT 0
- #define PENDING_THOLD 100
- #define MAX_SG_IN_CNT 12
- #define MAX_SG_OUT_CNT 13
- #define SG_LIST_HDR_SIZE 8
- #define MAX_BUF_CNT 16
- union ctrl_info {
- u32 flags;
- struct {
- #if defined(__BIG_ENDIAN_BITFIELD)
- u32 reserved0:26;
- u32 grp:3; /* Group bits */
- u32 dma_mode:2; /* DMA mode */
- u32 se_req:1;/* To SE core */
- #else
- u32 se_req:1; /* To SE core */
- u32 dma_mode:2; /* DMA mode */
- u32 grp:3; /* Group bits */
- u32 reserved0:26;
- #endif
- } s;
- };
- union opcode_info {
- u16 flags;
- struct {
- u8 major;
- u8 minor;
- } s;
- };
- struct cptvf_request {
- union opcode_info opcode;
- u16 param1;
- u16 param2;
- u16 dlen;
- };
- struct buf_ptr {
- u8 *vptr;
- dma_addr_t dma_addr;
- u16 size;
- };
- struct cpt_request_info {
- u8 incnt; /* Number of input buffers */
- u8 outcnt; /* Number of output buffers */
- u16 rlen; /* Output length */
- union ctrl_info ctrl; /* User control information */
- struct cptvf_request req; /* Request Information (Core specific) */
- bool may_sleep;
- struct buf_ptr in[MAX_BUF_CNT];
- struct buf_ptr out[MAX_BUF_CNT];
- void (*callback)(int, void *); /* Kernel ASYNC request callabck */
- void *callback_arg; /* Kernel ASYNC request callabck arg */
- };
- struct sglist_component {
- union {
- u64 len;
- struct {
- __be16 len0;
- __be16 len1;
- __be16 len2;
- __be16 len3;
- } s;
- } u;
- __be64 ptr0;
- __be64 ptr1;
- __be64 ptr2;
- __be64 ptr3;
- };
- struct cpt_info_buffer {
- struct cpt_vf *cptvf;
- unsigned long time_in;
- u8 extra_time;
- struct cpt_request_info *req;
- dma_addr_t dptr_baddr;
- u32 dlen;
- dma_addr_t rptr_baddr;
- dma_addr_t comp_baddr;
- u8 *in_buffer;
- u8 *out_buffer;
- u8 *gather_components;
- u8 *scatter_components;
- struct pending_entry *pentry;
- volatile u64 *completion_addr;
- volatile u64 *alternate_caddr;
- };
- /*
- * CPT_INST_S software command definitions
- * Words EI (0-3)
- */
- union vq_cmd_word0 {
- u64 u64;
- struct {
- __be16 opcode;
- __be16 param1;
- __be16 param2;
- __be16 dlen;
- } s;
- };
- union vq_cmd_word3 {
- u64 u64;
- struct {
- #if defined(__BIG_ENDIAN_BITFIELD)
- u64 grp:3;
- u64 cptr:61;
- #else
- u64 cptr:61;
- u64 grp:3;
- #endif
- } s;
- };
- struct cpt_vq_command {
- union vq_cmd_word0 cmd;
- u64 dptr;
- u64 rptr;
- union vq_cmd_word3 cptr;
- };
- void vq_post_process(struct cpt_vf *cptvf, u32 qno);
- int process_request(struct cpt_vf *cptvf, struct cpt_request_info *req);
- #endif /* __REQUEST_MANAGER_H */
|