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

fm10k_tlv.h (6165B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/* Copyright(c) 2013 - 2019 Intel Corporation. */
      3
      4#ifndef _FM10K_TLV_H_
      5#define _FM10K_TLV_H_
      6
      7/* forward declaration */
      8struct fm10k_msg_data;
      9
     10#include "fm10k_type.h"
     11
     12/* Message / Argument header format
     13 *    3			  2		      1			  0
     14 *  1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
     15 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     16 * |	     Length	   | Flags |	      Type / ID		   |
     17 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
     18 *
     19 * The message header format described here is used for messages that are
     20 * passed between the PF and the VF.  To allow for messages larger then
     21 * mailbox size we will provide a message with the above header and it
     22 * will be segmented and transported to the mailbox to the other side where
     23 * it is reassembled.  It contains the following fields:
     24 * Length: Length of the message in bytes excluding the message header
     25 * Flags: TBD
     26 * Type/ID: These will be the message/argument types we pass
     27 */
     28/* message data header */
     29#define FM10K_TLV_ID_SHIFT		0
     30#define FM10K_TLV_ID_SIZE		16
     31#define FM10K_TLV_ID_MASK		((1u << FM10K_TLV_ID_SIZE) - 1)
     32#define FM10K_TLV_FLAGS_SHIFT		16
     33#define FM10K_TLV_FLAGS_MSG		0x1
     34#define FM10K_TLV_FLAGS_SIZE		4
     35#define FM10K_TLV_LEN_SHIFT		20
     36#define FM10K_TLV_LEN_SIZE		12
     37
     38#define FM10K_TLV_HDR_LEN		4ul
     39#define FM10K_TLV_LEN_ALIGN_MASK \
     40	((FM10K_TLV_HDR_LEN - 1) << FM10K_TLV_LEN_SHIFT)
     41#define FM10K_TLV_LEN_ALIGN(tlv) \
     42	(((tlv) + FM10K_TLV_LEN_ALIGN_MASK) & ~FM10K_TLV_LEN_ALIGN_MASK)
     43#define FM10K_TLV_DWORD_LEN(tlv) \
     44	((u16)((FM10K_TLV_LEN_ALIGN(tlv)) >> (FM10K_TLV_LEN_SHIFT + 2)) + 1)
     45
     46#define FM10K_TLV_RESULTS_MAX		32
     47
     48enum fm10k_tlv_type {
     49	FM10K_TLV_NULL_STRING,
     50	FM10K_TLV_MAC_ADDR,
     51	FM10K_TLV_BOOL,
     52	FM10K_TLV_UNSIGNED,
     53	FM10K_TLV_SIGNED,
     54	FM10K_TLV_LE_STRUCT,
     55	FM10K_TLV_NESTED,
     56	FM10K_TLV_MAX_TYPE
     57};
     58
     59#define FM10K_TLV_ERROR (~0u)
     60
     61struct fm10k_tlv_attr {
     62	unsigned int		id;
     63	enum fm10k_tlv_type	type;
     64	u16			len;
     65};
     66
     67#define FM10K_TLV_ATTR_NULL_STRING(id, len) { id, FM10K_TLV_NULL_STRING, len }
     68#define FM10K_TLV_ATTR_MAC_ADDR(id)	    { id, FM10K_TLV_MAC_ADDR, 6 }
     69#define FM10K_TLV_ATTR_BOOL(id)		    { id, FM10K_TLV_BOOL, 0 }
     70#define FM10K_TLV_ATTR_U8(id)		    { id, FM10K_TLV_UNSIGNED, 1 }
     71#define FM10K_TLV_ATTR_U16(id)		    { id, FM10K_TLV_UNSIGNED, 2 }
     72#define FM10K_TLV_ATTR_U32(id)		    { id, FM10K_TLV_UNSIGNED, 4 }
     73#define FM10K_TLV_ATTR_U64(id)		    { id, FM10K_TLV_UNSIGNED, 8 }
     74#define FM10K_TLV_ATTR_S8(id)		    { id, FM10K_TLV_SIGNED, 1 }
     75#define FM10K_TLV_ATTR_S16(id)		    { id, FM10K_TLV_SIGNED, 2 }
     76#define FM10K_TLV_ATTR_S32(id)		    { id, FM10K_TLV_SIGNED, 4 }
     77#define FM10K_TLV_ATTR_S64(id)		    { id, FM10K_TLV_SIGNED, 8 }
     78#define FM10K_TLV_ATTR_LE_STRUCT(id, len)   { id, FM10K_TLV_LE_STRUCT, len }
     79#define FM10K_TLV_ATTR_NESTED(id)	    { id, FM10K_TLV_NESTED, 0 }
     80#define FM10K_TLV_ATTR_LAST		    { FM10K_TLV_ERROR, 0, 0 }
     81
     82struct fm10k_msg_data {
     83	unsigned int		    id;
     84	const struct fm10k_tlv_attr *attr;
     85	s32			    (*func)(struct fm10k_hw *, u32 **,
     86					    struct fm10k_mbx_info *);
     87};
     88
     89#define FM10K_MSG_HANDLER(id, attr, func) { id, attr, func }
     90
     91s32 fm10k_tlv_msg_init(u32 *, u16);
     92s32 fm10k_tlv_attr_put_mac_vlan(u32 *, u16, const u8 *, u16);
     93s32 fm10k_tlv_attr_get_mac_vlan(u32 *, u8 *, u16 *);
     94s32 fm10k_tlv_attr_put_bool(u32 *, u16);
     95s32 fm10k_tlv_attr_put_value(u32 *, u16, s64, u32);
     96#define fm10k_tlv_attr_put_u8(msg, attr_id, val) \
     97		fm10k_tlv_attr_put_value(msg, attr_id, val, 1)
     98#define fm10k_tlv_attr_put_u16(msg, attr_id, val) \
     99		fm10k_tlv_attr_put_value(msg, attr_id, val, 2)
    100#define fm10k_tlv_attr_put_u32(msg, attr_id, val) \
    101		fm10k_tlv_attr_put_value(msg, attr_id, val, 4)
    102#define fm10k_tlv_attr_put_u64(msg, attr_id, val) \
    103		fm10k_tlv_attr_put_value(msg, attr_id, val, 8)
    104#define fm10k_tlv_attr_put_s8(msg, attr_id, val) \
    105		fm10k_tlv_attr_put_value(msg, attr_id, val, 1)
    106#define fm10k_tlv_attr_put_s16(msg, attr_id, val) \
    107		fm10k_tlv_attr_put_value(msg, attr_id, val, 2)
    108#define fm10k_tlv_attr_put_s32(msg, attr_id, val) \
    109		fm10k_tlv_attr_put_value(msg, attr_id, val, 4)
    110#define fm10k_tlv_attr_put_s64(msg, attr_id, val) \
    111		fm10k_tlv_attr_put_value(msg, attr_id, val, 8)
    112s32 fm10k_tlv_attr_get_value(u32 *, void *, u32);
    113#define fm10k_tlv_attr_get_u8(attr, ptr) \
    114		fm10k_tlv_attr_get_value(attr, ptr, sizeof(u8))
    115#define fm10k_tlv_attr_get_u16(attr, ptr) \
    116		fm10k_tlv_attr_get_value(attr, ptr, sizeof(u16))
    117#define fm10k_tlv_attr_get_u32(attr, ptr) \
    118		fm10k_tlv_attr_get_value(attr, ptr, sizeof(u32))
    119#define fm10k_tlv_attr_get_u64(attr, ptr) \
    120		fm10k_tlv_attr_get_value(attr, ptr, sizeof(u64))
    121#define fm10k_tlv_attr_get_s8(attr, ptr) \
    122		fm10k_tlv_attr_get_value(attr, ptr, sizeof(s8))
    123#define fm10k_tlv_attr_get_s16(attr, ptr) \
    124		fm10k_tlv_attr_get_value(attr, ptr, sizeof(s16))
    125#define fm10k_tlv_attr_get_s32(attr, ptr) \
    126		fm10k_tlv_attr_get_value(attr, ptr, sizeof(s32))
    127#define fm10k_tlv_attr_get_s64(attr, ptr) \
    128		fm10k_tlv_attr_get_value(attr, ptr, sizeof(s64))
    129s32 fm10k_tlv_attr_put_le_struct(u32 *, u16, const void *, u32);
    130s32 fm10k_tlv_attr_get_le_struct(u32 *, void *, u32);
    131s32 fm10k_tlv_msg_parse(struct fm10k_hw *, u32 *, struct fm10k_mbx_info *,
    132			const struct fm10k_msg_data *);
    133s32 fm10k_tlv_msg_error(struct fm10k_hw *hw, u32 **results,
    134			struct fm10k_mbx_info *);
    135
    136#define FM10K_TLV_MSG_ID_TEST	0
    137
    138enum fm10k_tlv_test_attr_id {
    139	FM10K_TEST_MSG_UNSET,
    140	FM10K_TEST_MSG_STRING,
    141	FM10K_TEST_MSG_MAC_ADDR,
    142	FM10K_TEST_MSG_U8,
    143	FM10K_TEST_MSG_U16,
    144	FM10K_TEST_MSG_U32,
    145	FM10K_TEST_MSG_U64,
    146	FM10K_TEST_MSG_S8,
    147	FM10K_TEST_MSG_S16,
    148	FM10K_TEST_MSG_S32,
    149	FM10K_TEST_MSG_S64,
    150	FM10K_TEST_MSG_LE_STRUCT,
    151	FM10K_TEST_MSG_NESTED,
    152	FM10K_TEST_MSG_RESULT,
    153	FM10K_TEST_MSG_MAX
    154};
    155
    156extern const struct fm10k_tlv_attr fm10k_tlv_msg_test_attr[];
    157void fm10k_tlv_msg_test_create(u32 *, u32);
    158s32 fm10k_tlv_msg_test(struct fm10k_hw *, u32 **, struct fm10k_mbx_info *);
    159
    160#define FM10K_TLV_MSG_TEST_HANDLER(func) \
    161	FM10K_MSG_HANDLER(FM10K_TLV_MSG_ID_TEST, fm10k_tlv_msg_test_attr, func)
    162#define FM10K_TLV_MSG_ERROR_HANDLER(func) \
    163	FM10K_MSG_HANDLER(FM10K_TLV_ERROR, NULL, func)
    164#endif /* _FM10K_MSG_H_ */