brintos

brintos / linux-shallow public Read only

0
0
Text · 6.0 KiB · ceb9b79 Raw
165 lines · c
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 format13 *    3			  2		      1			  014 *  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 015 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+16 * |	     Length	   | Flags |	      Type / ID		   |17 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+18 *19 * The message header format described here is used for messages that are20 * passed between the PF and the VF.  To allow for messages larger then21 * mailbox size we will provide a message with the above header and it22 * will be segmented and transported to the mailbox to the other side where23 * it is reassembled.  It contains the following fields:24 * Length: Length of the message in bytes excluding the message header25 * Flags: TBD26 * Type/ID: These will be the message/argument types we pass27 */28/* message data header */29#define FM10K_TLV_ID_SHIFT		030#define FM10K_TLV_ID_SIZE		1631#define FM10K_TLV_ID_MASK		((1u << FM10K_TLV_ID_SIZE) - 1)32#define FM10K_TLV_FLAGS_SHIFT		1633#define FM10K_TLV_FLAGS_MSG		0x134#define FM10K_TLV_FLAGS_SIZE		435#define FM10K_TLV_LEN_SHIFT		2036#define FM10K_TLV_LEN_SIZE		1237 38#define FM10K_TLV_HDR_LEN		4ul39#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		3247 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_TYPE57};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	0137 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_MAX154};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_ */165