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

smc_llc.h (4048B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 *  Shared Memory Communications over RDMA (SMC-R) and RoCE
      4 *
      5 *  Definitions for LLC (link layer control) message handling
      6 *
      7 *  Copyright IBM Corp. 2016
      8 *
      9 *  Author(s):  Klaus Wacker <Klaus.Wacker@de.ibm.com>
     10 *              Ursula Braun <ubraun@linux.vnet.ibm.com>
     11 */
     12
     13#ifndef SMC_LLC_H
     14#define SMC_LLC_H
     15
     16#include "smc_wr.h"
     17
     18#define SMC_LLC_FLAG_RESP		0x80
     19
     20#define SMC_LLC_WAIT_FIRST_TIME		(5 * HZ)
     21#define SMC_LLC_WAIT_TIME		(2 * HZ)
     22
     23enum smc_llc_reqresp {
     24	SMC_LLC_REQ,
     25	SMC_LLC_RESP
     26};
     27
     28enum smc_llc_msg_type {
     29	SMC_LLC_CONFIRM_LINK		= 0x01,
     30	SMC_LLC_ADD_LINK		= 0x02,
     31	SMC_LLC_ADD_LINK_CONT		= 0x03,
     32	SMC_LLC_DELETE_LINK		= 0x04,
     33	SMC_LLC_REQ_ADD_LINK		= 0x05,
     34	SMC_LLC_CONFIRM_RKEY		= 0x06,
     35	SMC_LLC_TEST_LINK		= 0x07,
     36	SMC_LLC_CONFIRM_RKEY_CONT	= 0x08,
     37	SMC_LLC_DELETE_RKEY		= 0x09,
     38	/* V2 types */
     39	SMC_LLC_CONFIRM_LINK_V2		= 0x21,
     40	SMC_LLC_ADD_LINK_V2		= 0x22,
     41	SMC_LLC_DELETE_LINK_V2		= 0x24,
     42	SMC_LLC_REQ_ADD_LINK_V2		= 0x25,
     43	SMC_LLC_CONFIRM_RKEY_V2		= 0x26,
     44	SMC_LLC_TEST_LINK_V2		= 0x27,
     45	SMC_LLC_DELETE_RKEY_V2		= 0x29,
     46};
     47
     48#define smc_link_downing(state) \
     49	(cmpxchg(state, SMC_LNK_ACTIVE, SMC_LNK_INACTIVE) == SMC_LNK_ACTIVE)
     50
     51/* LLC DELETE LINK Request Reason Codes */
     52#define SMC_LLC_DEL_LOST_PATH		0x00010000
     53#define SMC_LLC_DEL_OP_INIT_TERM	0x00020000
     54#define SMC_LLC_DEL_PROG_INIT_TERM	0x00030000
     55#define SMC_LLC_DEL_PROT_VIOL		0x00040000
     56#define SMC_LLC_DEL_NO_ASYM_NEEDED	0x00050000
     57/* LLC DELETE LINK Response Reason Codes */
     58#define SMC_LLC_DEL_NOLNK	0x00100000  /* Unknown Link ID (no link) */
     59#define SMC_LLC_DEL_NOLGR	0x00200000  /* Unknown Link Group */
     60
     61/* returns a usable link of the link group, or NULL */
     62static inline struct smc_link *smc_llc_usable_link(struct smc_link_group *lgr)
     63{
     64	int i;
     65
     66	for (i = 0; i < SMC_LINKS_PER_LGR_MAX; i++)
     67		if (smc_link_usable(&lgr->lnk[i]))
     68			return &lgr->lnk[i];
     69	return NULL;
     70}
     71
     72/* set the termination reason code for the link group */
     73static inline void smc_llc_set_termination_rsn(struct smc_link_group *lgr,
     74					       u32 rsn)
     75{
     76	if (!lgr->llc_termination_rsn)
     77		lgr->llc_termination_rsn = rsn;
     78}
     79
     80/* transmit */
     81int smc_llc_send_confirm_link(struct smc_link *lnk,
     82			      enum smc_llc_reqresp reqresp);
     83int smc_llc_send_add_link(struct smc_link *link, u8 mac[], u8 gid[],
     84			  struct smc_link *link_new,
     85			  enum smc_llc_reqresp reqresp);
     86int smc_llc_send_delete_link(struct smc_link *link, u8 link_del_id,
     87			     enum smc_llc_reqresp reqresp, bool orderly,
     88			     u32 reason);
     89void smc_llc_srv_delete_link_local(struct smc_link *link, u8 del_link_id);
     90void smc_llc_lgr_init(struct smc_link_group *lgr, struct smc_sock *smc);
     91void smc_llc_lgr_clear(struct smc_link_group *lgr);
     92int smc_llc_link_init(struct smc_link *link);
     93void smc_llc_link_active(struct smc_link *link);
     94void smc_llc_link_clear(struct smc_link *link, bool log);
     95int smc_llc_do_confirm_rkey(struct smc_link *send_link,
     96			    struct smc_buf_desc *rmb_desc);
     97int smc_llc_do_delete_rkey(struct smc_link_group *lgr,
     98			   struct smc_buf_desc *rmb_desc);
     99int smc_llc_flow_initiate(struct smc_link_group *lgr,
    100			  enum smc_llc_flowtype type);
    101void smc_llc_flow_stop(struct smc_link_group *lgr, struct smc_llc_flow *flow);
    102int smc_llc_eval_conf_link(struct smc_llc_qentry *qentry,
    103			   enum smc_llc_reqresp type);
    104void smc_llc_link_set_uid(struct smc_link *link);
    105void smc_llc_save_peer_uid(struct smc_llc_qentry *qentry);
    106struct smc_llc_qentry *smc_llc_wait(struct smc_link_group *lgr,
    107				    struct smc_link *lnk,
    108				    int time_out, u8 exp_msg);
    109struct smc_llc_qentry *smc_llc_flow_qentry_clr(struct smc_llc_flow *flow);
    110void smc_llc_flow_qentry_del(struct smc_llc_flow *flow);
    111void smc_llc_send_link_delete_all(struct smc_link_group *lgr, bool ord,
    112				  u32 rsn);
    113int smc_llc_cli_add_link(struct smc_link *link, struct smc_llc_qentry *qentry);
    114int smc_llc_srv_add_link(struct smc_link *link,
    115			 struct smc_llc_qentry *req_qentry);
    116void smc_llc_add_link_local(struct smc_link *link);
    117int smc_llc_init(void) __init;
    118
    119#endif /* SMC_LLC_H */