cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

request_manager.h (2616B)


      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	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 definitions
    112 * 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#else
    131		u64 cptr:61;
    132		u64 grp:3;
    133#endif
    134	} 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 */