brintos

brintos / linux-shallow public Read only

0
0
Text · 2.6 KiB · 8d40e4b Raw
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