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

chcr_common.h (3138B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/* Copyright (C) 2020 Chelsio Communications.  All rights reserved. */
      3
      4#ifndef __CHCR_COMMON_H__
      5#define __CHCR_COMMON_H__
      6
      7#include "cxgb4.h"
      8
      9#define CHCR_MAX_SALT                      4
     10#define CHCR_KEYCTX_MAC_KEY_SIZE_128       0
     11#define CHCR_KEYCTX_CIPHER_KEY_SIZE_128    0
     12#define CHCR_SCMD_CIPHER_MODE_AES_GCM      2
     13#define CHCR_SCMD_CIPHER_MODE_AES_CTR      3
     14#define CHCR_CPL_TX_SEC_PDU_LEN_64BIT      2
     15#define CHCR_SCMD_SEQ_NO_CTRL_64BIT        3
     16#define CHCR_SCMD_PROTO_VERSION_TLS        0
     17#define CHCR_SCMD_PROTO_VERSION_GENERIC    4
     18#define CHCR_SCMD_AUTH_MODE_GHASH          4
     19#define AES_BLOCK_LEN                      16
     20
     21struct ktls_key_ctx {
     22	__be32 ctx_hdr;
     23	u8 salt[CHCR_MAX_SALT];
     24	__be64 iv_to_auth;
     25	unsigned char key[TLS_CIPHER_AES_GCM_128_KEY_SIZE +
     26			  TLS_CIPHER_AES_GCM_256_TAG_SIZE];
     27};
     28
     29/* Crypto key context */
     30#define KEY_CONTEXT_CTX_LEN_S           24
     31#define KEY_CONTEXT_CTX_LEN_V(x)        ((x) << KEY_CONTEXT_CTX_LEN_S)
     32
     33#define KEY_CONTEXT_SALT_PRESENT_S      10
     34#define KEY_CONTEXT_SALT_PRESENT_V(x)   ((x) << KEY_CONTEXT_SALT_PRESENT_S)
     35#define KEY_CONTEXT_SALT_PRESENT_F      KEY_CONTEXT_SALT_PRESENT_V(1U)
     36
     37#define KEY_CONTEXT_VALID_S     0
     38#define KEY_CONTEXT_VALID_V(x)  ((x) << KEY_CONTEXT_VALID_S)
     39#define KEY_CONTEXT_VALID_F     KEY_CONTEXT_VALID_V(1U)
     40
     41#define KEY_CONTEXT_CK_SIZE_S           6
     42#define KEY_CONTEXT_CK_SIZE_V(x)        ((x) << KEY_CONTEXT_CK_SIZE_S)
     43
     44#define KEY_CONTEXT_MK_SIZE_S           2
     45#define KEY_CONTEXT_MK_SIZE_V(x)        ((x) << KEY_CONTEXT_MK_SIZE_S)
     46
     47#define KEY_CONTEXT_OPAD_PRESENT_S      11
     48#define KEY_CONTEXT_OPAD_PRESENT_V(x)   ((x) << KEY_CONTEXT_OPAD_PRESENT_S)
     49#define KEY_CONTEXT_OPAD_PRESENT_F      KEY_CONTEXT_OPAD_PRESENT_V(1U)
     50
     51#define FILL_KEY_CTX_HDR(ck_size, mk_size, ctx_len) \
     52		htonl(KEY_CONTEXT_MK_SIZE_V(mk_size) | \
     53		      KEY_CONTEXT_CK_SIZE_V(ck_size) | \
     54		      KEY_CONTEXT_VALID_F | \
     55		      KEY_CONTEXT_SALT_PRESENT_F | \
     56		      KEY_CONTEXT_CTX_LEN_V((ctx_len)))
     57
     58static inline void *chcr_copy_to_txd(const void *src, const struct sge_txq *q,
     59				     void *pos, int length)
     60{
     61	int left = (void *)q->stat - pos;
     62	u64 *p;
     63
     64	if (likely(length <= left)) {
     65		memcpy(pos, src, length);
     66		pos += length;
     67	} else {
     68		memcpy(pos, src, left);
     69		memcpy(q->desc, src + left, length - left);
     70		pos = (void *)q->desc + (length - left);
     71	}
     72	/* 0-pad to multiple of 16 */
     73	p = PTR_ALIGN(pos, 8);
     74	if ((uintptr_t)p & 8) {
     75		*p = 0;
     76		return p + 1;
     77	}
     78	return p;
     79}
     80
     81static inline unsigned int chcr_txq_avail(const struct sge_txq *q)
     82{
     83	return q->size - 1 - q->in_use;
     84}
     85
     86static inline void chcr_txq_advance(struct sge_txq *q, unsigned int n)
     87{
     88	q->in_use += n;
     89	q->pidx += n;
     90	if (q->pidx >= q->size)
     91		q->pidx -= q->size;
     92}
     93
     94static inline void chcr_eth_txq_stop(struct sge_eth_txq *q)
     95{
     96	netif_tx_stop_queue(q->txq);
     97	q->q.stops++;
     98}
     99
    100static inline unsigned int chcr_sgl_len(unsigned int n)
    101{
    102	n--;
    103	return (3 * n) / 2 + (n & 1) + 2;
    104}
    105
    106static inline unsigned int chcr_flits_to_desc(unsigned int n)
    107{
    108	WARN_ON(n > SGE_MAX_WR_LEN / 8);
    109	return DIV_ROUND_UP(n, 8);
    110}
    111#endif /* __CHCR_COMMON_H__ */