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

bfa_msgq.h (2933B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Linux network driver for QLogic BR-series Converged Network Adapter.
      4 */
      5/*
      6 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
      7 * Copyright (c) 2014-2015 QLogic Corporation
      8 * All rights reserved
      9 * www.qlogic.com
     10 */
     11
     12#ifndef __BFA_MSGQ_H__
     13#define __BFA_MSGQ_H__
     14
     15#include "bfa_defs.h"
     16#include "bfi.h"
     17#include "bfa_ioc.h"
     18#include "bfa_cs.h"
     19
     20#define BFA_MSGQ_FREE_CNT(_q)						\
     21	(((_q)->consumer_index - (_q)->producer_index - 1) & ((_q)->depth - 1))
     22
     23#define BFA_MSGQ_INDX_ADD(_q_indx, _qe_num, _q_depth)			\
     24	((_q_indx) = (((_q_indx) + (_qe_num)) & ((_q_depth) - 1)))
     25
     26#define BFA_MSGQ_CMDQ_NUM_ENTRY		128
     27#define BFA_MSGQ_CMDQ_SIZE						\
     28	(BFI_MSGQ_CMD_ENTRY_SIZE * BFA_MSGQ_CMDQ_NUM_ENTRY)
     29
     30#define BFA_MSGQ_RSPQ_NUM_ENTRY		128
     31#define BFA_MSGQ_RSPQ_SIZE						\
     32	(BFI_MSGQ_RSP_ENTRY_SIZE * BFA_MSGQ_RSPQ_NUM_ENTRY)
     33
     34#define bfa_msgq_cmd_set(_cmd, _cbfn, _cbarg, _msg_size, _msg_hdr)	\
     35do {									\
     36	(_cmd)->cbfn = (_cbfn);						\
     37	(_cmd)->cbarg = (_cbarg);					\
     38	(_cmd)->msg_size = (_msg_size);					\
     39	(_cmd)->msg_hdr = (_msg_hdr);					\
     40} while (0)
     41
     42struct bfa_msgq;
     43
     44typedef void (*bfa_msgq_cmdcbfn_t)(void *cbarg, enum bfa_status status);
     45
     46struct bfa_msgq_cmd_entry {
     47	struct list_head				qe;
     48	bfa_msgq_cmdcbfn_t		cbfn;
     49	void				*cbarg;
     50	size_t				msg_size;
     51	struct bfi_msgq_mhdr *msg_hdr;
     52};
     53
     54enum bfa_msgq_cmdq_flags {
     55	BFA_MSGQ_CMDQ_F_DB_UPDATE	= 1,
     56};
     57
     58struct bfa_msgq_cmdq {
     59	bfa_fsm_t			fsm;
     60	enum bfa_msgq_cmdq_flags flags;
     61
     62	u16			producer_index;
     63	u16			consumer_index;
     64	u16			depth; /* FW Q depth is 16 bits */
     65	struct bfa_dma addr;
     66	struct bfa_mbox_cmd dbell_mb;
     67
     68	u16			token;
     69	int				offset;
     70	int				bytes_to_copy;
     71	struct bfa_mbox_cmd copy_mb;
     72
     73	struct list_head		pending_q; /* pending command queue */
     74
     75	struct bfa_msgq *msgq;
     76};
     77
     78enum bfa_msgq_rspq_flags {
     79	BFA_MSGQ_RSPQ_F_DB_UPDATE	= 1,
     80};
     81
     82typedef void (*bfa_msgq_mcfunc_t)(void *cbarg, struct bfi_msgq_mhdr *mhdr);
     83
     84struct bfa_msgq_rspq {
     85	bfa_fsm_t			fsm;
     86	enum bfa_msgq_rspq_flags flags;
     87
     88	u16			producer_index;
     89	u16			consumer_index;
     90	u16			depth; /* FW Q depth is 16 bits */
     91	struct bfa_dma addr;
     92	struct bfa_mbox_cmd dbell_mb;
     93
     94	int				nmclass;
     95	struct {
     96		bfa_msgq_mcfunc_t	cbfn;
     97		void			*cbarg;
     98	} rsphdlr[BFI_MC_MAX];
     99
    100	struct bfa_msgq *msgq;
    101};
    102
    103struct bfa_msgq {
    104	struct bfa_msgq_cmdq cmdq;
    105	struct bfa_msgq_rspq rspq;
    106
    107	struct bfa_wc			init_wc;
    108	struct bfa_mbox_cmd init_mb;
    109
    110	struct bfa_ioc_notify ioc_notify;
    111	struct bfa_ioc *ioc;
    112};
    113
    114u32 bfa_msgq_meminfo(void);
    115void bfa_msgq_memclaim(struct bfa_msgq *msgq, u8 *kva, u64 pa);
    116void bfa_msgq_attach(struct bfa_msgq *msgq, struct bfa_ioc *ioc);
    117void bfa_msgq_regisr(struct bfa_msgq *msgq, enum bfi_mclass mc,
    118		     bfa_msgq_mcfunc_t cbfn, void *cbarg);
    119void bfa_msgq_cmd_post(struct bfa_msgq *msgq,
    120		       struct bfa_msgq_cmd_entry *cmd);
    121void bfa_msgq_rsp_copy(struct bfa_msgq *msgq, u8 *buf, size_t buf_len);
    122
    123#endif