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

xgene_enet_cle.h (5434B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/* Applied Micro X-Gene SoC Ethernet Classifier structures
      3 *
      4 * Copyright (c) 2016, Applied Micro Circuits Corporation
      5 * Authors: Khuong Dinh <kdinh@apm.com>
      6 *          Tanmay Inamdar <tinamdar@apm.com>
      7 *          Iyappan Subramanian <isubramanian@apm.com>
      8 */
      9
     10#ifndef __XGENE_ENET_CLE_H__
     11#define __XGENE_ENET_CLE_H__
     12
     13#include <linux/io.h>
     14#include <linux/random.h>
     15
     16/* Register offsets */
     17#define INDADDR			0x04
     18#define INDCMD			0x08
     19#define INDCMD_STATUS		0x0c
     20#define DATA_RAM0		0x10
     21#define SNPTR0			0x0100
     22#define SPPTR0			0x0104
     23#define DFCLSRESDBPTR0		0x0108
     24#define DFCLSRESDB00		0x010c
     25#define RSS_CTRL0		0x0000013c
     26
     27#define CLE_CMD_TO		10	/* ms */
     28#define CLE_PKTRAM_SIZE		256	/* bytes */
     29#define CLE_PORT_OFFSET		0x200
     30#define CLE_DRAM_REGS		17
     31
     32#define CLE_DN_TYPE_LEN		2
     33#define CLE_DN_TYPE_POS		0
     34#define CLE_DN_LASTN_LEN	1
     35#define CLE_DN_LASTN_POS	2
     36#define CLE_DN_HLS_LEN		1
     37#define CLE_DN_HLS_POS		3
     38#define CLE_DN_EXT_LEN		2
     39#define	CLE_DN_EXT_POS		4
     40#define CLE_DN_BSTOR_LEN	2
     41#define CLE_DN_BSTOR_POS	6
     42#define CLE_DN_SBSTOR_LEN	2
     43#define CLE_DN_SBSTOR_POS	8
     44#define CLE_DN_RPTR_LEN		12
     45#define CLE_DN_RPTR_POS		12
     46
     47#define CLE_BR_VALID_LEN	1
     48#define CLE_BR_VALID_POS	0
     49#define CLE_BR_NPPTR_LEN	9
     50#define CLE_BR_NPPTR_POS	1
     51#define CLE_BR_JB_LEN		1
     52#define CLE_BR_JB_POS		10
     53#define CLE_BR_JR_LEN		1
     54#define CLE_BR_JR_POS		11
     55#define CLE_BR_OP_LEN		3
     56#define CLE_BR_OP_POS		12
     57#define CLE_BR_NNODE_LEN	9
     58#define CLE_BR_NNODE_POS	15
     59#define CLE_BR_NBR_LEN		5
     60#define CLE_BR_NBR_POS		24
     61
     62#define CLE_BR_DATA_LEN		16
     63#define CLE_BR_DATA_POS		0
     64#define CLE_BR_MASK_LEN		16
     65#define CLE_BR_MASK_POS		16
     66
     67#define CLE_KN_PRIO_POS		0
     68#define CLE_KN_PRIO_LEN		3
     69#define CLE_KN_RPTR_POS		3
     70#define CLE_KN_RPTR_LEN		10
     71#define CLE_TYPE_POS		0
     72#define CLE_TYPE_LEN		2
     73
     74#define CLE_DROP_POS		28
     75#define CLE_DROP_LEN		1
     76#define CLE_DSTQIDL_POS		25
     77#define CLE_DSTQIDL_LEN		7
     78#define CLE_DSTQIDH_POS		0
     79#define CLE_DSTQIDH_LEN		5
     80#define CLE_FPSEL_POS		21
     81#define CLE_FPSEL_LEN		4
     82#define CLE_NFPSEL_POS		17
     83#define CLE_NFPSEL_LEN		4
     84#define CLE_PRIORITY_POS	5
     85#define CLE_PRIORITY_LEN	3
     86
     87#define JMP_ABS			0
     88#define JMP_REL			1
     89#define JMP_FW			0
     90#define JMP_BW			1
     91
     92enum xgene_cle_ptree_nodes {
     93	PKT_TYPE_NODE,
     94	PKT_PROT_NODE,
     95	RSS_IPV4_TCP_NODE,
     96	RSS_IPV4_UDP_NODE,
     97	RSS_IPV4_OTHERS_NODE,
     98	LAST_NODE,
     99	MAX_NODES
    100};
    101
    102enum xgene_cle_byte_store {
    103	NO_BYTE,
    104	FIRST_BYTE,
    105	SECOND_BYTE,
    106	BOTH_BYTES
    107};
    108
    109/* Preclassification operation types */
    110enum xgene_cle_node_type {
    111	INV,
    112	KN,
    113	EWDN,
    114	RES_NODE
    115};
    116
    117/* Preclassification operation types */
    118enum xgene_cle_op_type {
    119	EQT,
    120	NEQT,
    121	LTEQT,
    122	GTEQT,
    123	AND,
    124	NAND
    125};
    126
    127enum xgene_cle_parser {
    128	PARSER0,
    129	PARSER1,
    130	PARSER2,
    131	PARSER_ALL
    132};
    133
    134#define XGENE_CLE_DRAM(type)	(((type) & 0xf) << 28)
    135enum xgene_cle_dram_type {
    136	PKT_RAM,
    137	RSS_IDT,
    138	RSS_IPV4_HASH_SKEY,
    139	PTREE_RAM = 0xc,
    140	AVL_RAM,
    141	DB_RAM
    142};
    143
    144enum xgene_cle_cmd_type {
    145	CLE_CMD_WR = 1,
    146	CLE_CMD_RD = 2,
    147	CLE_CMD_AVL_ADD = 8,
    148	CLE_CMD_AVL_DEL = 16,
    149	CLE_CMD_AVL_SRCH = 32
    150};
    151
    152enum xgene_cle_ipv4_rss_hashtype {
    153	RSS_IPV4_8B,
    154	RSS_IPV4_12B,
    155};
    156
    157enum xgene_cle_prot_type {
    158	XGENE_CLE_TCP,
    159	XGENE_CLE_UDP,
    160	XGENE_CLE_ESP,
    161	XGENE_CLE_OTHER
    162};
    163
    164enum xgene_cle_prot_version {
    165	XGENE_CLE_IPV4,
    166};
    167
    168enum xgene_cle_ptree_dbptrs {
    169	DB_RES_DROP,
    170	DB_RES_DEF,
    171	DB_RES_ACCEPT,
    172	DB_MAX_PTRS
    173};
    174
    175/* RSS sideband signal info */
    176#define SB_IPFRAG_POS	0
    177#define SB_IPFRAG_LEN	1
    178#define SB_IPPROT_POS	1
    179#define SB_IPPROT_LEN	2
    180#define SB_IPVER_POS	3
    181#define SB_IPVER_LEN	1
    182#define SB_HDRLEN_POS	4
    183#define SB_HDRLEN_LEN	12
    184
    185/* RSS indirection table */
    186#define XGENE_CLE_IDT_ENTRIES	128
    187#define IDT_DSTQID_POS		0
    188#define IDT_DSTQID_LEN		12
    189#define IDT_FPSEL_POS		12
    190#define IDT_FPSEL_LEN		5
    191#define IDT_NFPSEL_POS		17
    192#define IDT_NFPSEL_LEN		5
    193#define IDT_FPSEL1_POS		12
    194#define IDT_FPSEL1_LEN		4
    195#define IDT_NFPSEL1_POS		16
    196#define IDT_NFPSEL1_LEN		4
    197
    198struct xgene_cle_ptree_branch {
    199	bool valid;
    200	u16 next_packet_pointer;
    201	bool jump_bw;
    202	bool jump_rel;
    203	u8 operation;
    204	u16 next_node;
    205	u8 next_branch;
    206	u16 data;
    207	u16 mask;
    208};
    209
    210struct xgene_cle_ptree_ewdn {
    211	u8 node_type;
    212	bool last_node;
    213	bool hdr_len_store;
    214	u8 hdr_extn;
    215	u8 byte_store;
    216	u8 search_byte_store;
    217	u16 result_pointer;
    218	u8 num_branches;
    219	struct xgene_cle_ptree_branch branch[6];
    220};
    221
    222struct xgene_cle_ptree_key {
    223	u8 priority;
    224	u16 result_pointer;
    225};
    226
    227struct xgene_cle_ptree_kn {
    228	u8 node_type;
    229	u8 num_keys;
    230	struct xgene_cle_ptree_key key[32];
    231};
    232
    233struct xgene_cle_dbptr {
    234	u8 split_boundary;
    235	u8 mirror_nxtfpsel;
    236	u8 mirror_fpsel;
    237	u16 mirror_dstqid;
    238	u8 drop;
    239	u8 mirror;
    240	u8 hdr_data_split;
    241	u64 hopinfomsbs;
    242	u8 DR;
    243	u8 HR;
    244	u64 hopinfomlsbs;
    245	u16 h0enq_num;
    246	u8 h0fpsel;
    247	u8 nxtfpsel;
    248	u8 fpsel;
    249	u16 dstqid;
    250	u8 cle_priority;
    251	u8 cle_flowgroup;
    252	u8 cle_perflow;
    253	u8 cle_insert_timestamp;
    254	u8 stash;
    255	u8 in;
    256	u8 perprioen;
    257	u8 perflowgroupen;
    258	u8 perflowen;
    259	u8 selhash;
    260	u8 selhdrext;
    261	u8 mirror_nxtfpsel_msb;
    262	u8 mirror_fpsel_msb;
    263	u8 hfpsel_msb;
    264	u8 nxtfpsel_msb;
    265	u8 fpsel_msb;
    266};
    267
    268struct xgene_cle_ptree {
    269	struct xgene_cle_ptree_kn *kn;
    270	struct xgene_cle_dbptr *dbptr;
    271	u32 num_kn;
    272	u32 num_dbptr;
    273	u32 start_node;
    274	u32 start_pkt;
    275	u32 start_dbptr;
    276};
    277
    278struct xgene_enet_cle {
    279	void __iomem *base;
    280	struct xgene_cle_ptree ptree;
    281	enum xgene_cle_parser active_parser;
    282	u32 parsers;
    283	u32 max_nodes;
    284	u32 max_dbptrs;
    285	u32 jump_bytes;
    286};
    287
    288extern const struct xgene_cle_ops xgene_cle3in_ops;
    289
    290#endif /* __XGENE_ENET_CLE_H__ */