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

hinic_hw_mgmt.h (5464B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Huawei HiNIC PCI Express Linux driver
      4 * Copyright(c) 2017 Huawei Technologies Co., Ltd
      5 */
      6
      7#ifndef HINIC_HW_MGMT_H
      8#define HINIC_HW_MGMT_H
      9
     10#include <linux/types.h>
     11#include <linux/semaphore.h>
     12#include <linux/completion.h>
     13#include <linux/bitops.h>
     14
     15#include "hinic_hw_if.h"
     16#include "hinic_hw_api_cmd.h"
     17
     18#define HINIC_MSG_HEADER_MSG_LEN_SHIFT                          0
     19#define HINIC_MSG_HEADER_MODULE_SHIFT                           11
     20#define HINIC_MSG_HEADER_SEG_LEN_SHIFT                          16
     21#define HINIC_MSG_HEADER_NO_ACK_SHIFT                           22
     22#define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_SHIFT                 23
     23#define HINIC_MSG_HEADER_SEQID_SHIFT                            24
     24#define HINIC_MSG_HEADER_LAST_SHIFT                             30
     25#define HINIC_MSG_HEADER_DIRECTION_SHIFT                        31
     26#define HINIC_MSG_HEADER_CMD_SHIFT                              32
     27#define HINIC_MSG_HEADER_ZEROS_SHIFT                            40
     28#define HINIC_MSG_HEADER_PCI_INTF_SHIFT                         48
     29#define HINIC_MSG_HEADER_PF_IDX_SHIFT                           50
     30#define HINIC_MSG_HEADER_MSG_ID_SHIFT                           54
     31
     32#define HINIC_MSG_HEADER_MSG_LEN_MASK                           0x7FF
     33#define HINIC_MSG_HEADER_MODULE_MASK                            0x1F
     34#define HINIC_MSG_HEADER_SEG_LEN_MASK                           0x3F
     35#define HINIC_MSG_HEADER_NO_ACK_MASK                            0x1
     36#define HINIC_MSG_HEADER_ASYNC_MGMT_TO_PF_MASK                  0x1
     37#define HINIC_MSG_HEADER_SEQID_MASK                             0x3F
     38#define HINIC_MSG_HEADER_LAST_MASK                              0x1
     39#define HINIC_MSG_HEADER_DIRECTION_MASK                         0x1
     40#define HINIC_MSG_HEADER_CMD_MASK                               0xFF
     41#define HINIC_MSG_HEADER_ZEROS_MASK                             0xFF
     42#define HINIC_MSG_HEADER_PCI_INTF_MASK                          0x3
     43#define HINIC_MSG_HEADER_PF_IDX_MASK                            0xF
     44#define HINIC_MSG_HEADER_MSG_ID_MASK                            0x3FF
     45
     46#define HINIC_MSG_HEADER_SET(val, member)                       \
     47		((u64)((val) & HINIC_MSG_HEADER_##member##_MASK) << \
     48		 HINIC_MSG_HEADER_##member##_SHIFT)
     49
     50#define HINIC_MSG_HEADER_GET(val, member)                       \
     51		(((val) >> HINIC_MSG_HEADER_##member##_SHIFT) & \
     52		 HINIC_MSG_HEADER_##member##_MASK)
     53
     54enum hinic_mgmt_msg_type {
     55	HINIC_MGMT_MSG_SYNC = 1,
     56};
     57
     58enum hinic_cfg_cmd {
     59	HINIC_CFG_NIC_CAP = 0,
     60};
     61
     62enum hinic_comm_cmd {
     63	HINIC_COMM_CMD_START_FLR          = 0x1,
     64	HINIC_COMM_CMD_IO_STATUS_GET    = 0x3,
     65	HINIC_COMM_CMD_DMA_ATTR_SET	    = 0x4,
     66
     67	HINIC_COMM_CMD_CMDQ_CTXT_SET    = 0x10,
     68	HINIC_COMM_CMD_CMDQ_CTXT_GET    = 0x11,
     69
     70	HINIC_COMM_CMD_HWCTXT_SET       = 0x12,
     71	HINIC_COMM_CMD_HWCTXT_GET       = 0x13,
     72
     73	HINIC_COMM_CMD_SQ_HI_CI_SET     = 0x14,
     74
     75	HINIC_COMM_CMD_RES_STATE_SET    = 0x24,
     76
     77	HINIC_COMM_CMD_IO_RES_CLEAR     = 0x29,
     78
     79	HINIC_COMM_CMD_CEQ_CTRL_REG_WR_BY_UP = 0x33,
     80
     81	HINIC_COMM_CMD_MSI_CTRL_REG_WR_BY_UP,
     82	HINIC_COMM_CMD_MSI_CTRL_REG_RD_BY_UP,
     83
     84	HINIC_COMM_CMD_FAULT_REPORT	= 0x37,
     85
     86	HINIC_COMM_CMD_SET_LED_STATUS	= 0x4a,
     87
     88	HINIC_COMM_CMD_L2NIC_RESET	= 0x4b,
     89
     90	HINIC_COMM_CMD_PAGESIZE_SET	= 0x50,
     91
     92	HINIC_COMM_CMD_GET_BOARD_INFO	= 0x52,
     93
     94	HINIC_COMM_CMD_WATCHDOG_INFO	= 0x56,
     95
     96	HINIC_MGMT_CMD_SET_VF_RANDOM_ID = 0x61,
     97
     98	HINIC_COMM_CMD_MAX,
     99};
    100
    101enum hinic_mgmt_cb_state {
    102	HINIC_MGMT_CB_ENABLED = BIT(0),
    103	HINIC_MGMT_CB_RUNNING = BIT(1),
    104};
    105
    106struct hinic_recv_msg {
    107	u8                      *msg;
    108	u8                      *buf_out;
    109
    110	struct completion       recv_done;
    111
    112	u16                     cmd;
    113	enum hinic_mod_type     mod;
    114	int                     async_mgmt_to_pf;
    115
    116	u16                     msg_len;
    117	u16                     msg_id;
    118};
    119
    120struct hinic_mgmt_cb {
    121	void    (*cb)(void *handle, u8 cmd,
    122		      void *buf_in, u16 in_size,
    123		      void *buf_out, u16 *out_size);
    124
    125	void            *handle;
    126	unsigned long   state;
    127};
    128
    129struct hinic_pf_to_mgmt {
    130	struct hinic_hwif               *hwif;
    131	struct hinic_hwdev		*hwdev;
    132	struct semaphore                sync_msg_lock;
    133	u16                             sync_msg_id;
    134	u8                              *sync_msg_buf;
    135	void				*mgmt_ack_buf;
    136
    137	struct hinic_recv_msg           recv_resp_msg_from_mgmt;
    138	struct hinic_recv_msg           recv_msg_from_mgmt;
    139
    140	struct hinic_api_cmd_chain      *cmd_chain[HINIC_API_CMD_MAX];
    141
    142	struct hinic_mgmt_cb            mgmt_cb[HINIC_MOD_MAX];
    143
    144	struct workqueue_struct		*workq;
    145};
    146
    147struct hinic_mgmt_msg_handle_work {
    148	struct work_struct work;
    149	struct hinic_pf_to_mgmt *pf_to_mgmt;
    150
    151	void			*msg;
    152	u16			msg_len;
    153
    154	enum hinic_mod_type	mod;
    155	u8			cmd;
    156	u16			msg_id;
    157	int			async_mgmt_to_pf;
    158};
    159
    160void hinic_register_mgmt_msg_cb(struct hinic_pf_to_mgmt *pf_to_mgmt,
    161				enum hinic_mod_type mod,
    162				void *handle,
    163				void (*callback)(void *handle,
    164						 u8 cmd, void *buf_in,
    165						 u16 in_size, void *buf_out,
    166						 u16 *out_size));
    167
    168void hinic_unregister_mgmt_msg_cb(struct hinic_pf_to_mgmt *pf_to_mgmt,
    169				  enum hinic_mod_type mod);
    170
    171int hinic_msg_to_mgmt(struct hinic_pf_to_mgmt *pf_to_mgmt,
    172		      enum hinic_mod_type mod, u8 cmd,
    173		      void *buf_in, u16 in_size, void *buf_out, u16 *out_size,
    174		      enum hinic_mgmt_msg_type sync);
    175
    176int hinic_pf_to_mgmt_init(struct hinic_pf_to_mgmt *pf_to_mgmt,
    177			  struct hinic_hwif *hwif);
    178
    179void hinic_pf_to_mgmt_free(struct hinic_pf_to_mgmt *pf_to_mgmt);
    180
    181#endif