1 /* SPDX-License-Identifier:    GPL-2.0
2  *
3  * Copyright (C) 2018 Marvell International Ltd.
4  */
5 
6 #ifndef __NPC_H__
7 #define __NPC_H__
8 
9 #define RSVD_MCAM_ENTRIES_PER_PF	2	/** Ucast and Bcast */
10 #define RSVD_MCAM_ENTRIES_PER_NIXLF	1	/** Ucast for VFs */
11 
12 struct npc_kpu_profile_cam {
13 	u8 state;
14 	u8 state_mask;
15 	u16 dp0;
16 	u16 dp0_mask;
17 	u16 dp1;
18 	u16 dp1_mask;
19 	u16 dp2;
20 	u16 dp2_mask;
21 };
22 
23 struct npc_kpu_profile_action {
24 	u8 errlev;
25 	u8 errcode;
26 	u8 dp0_offset;
27 	u8 dp1_offset;
28 	u8 dp2_offset;
29 	u8 bypass_count;
30 	u8 parse_done;
31 	u8 next_state;
32 	u8 ptr_advance;
33 	u8 cap_ena;
34 	u8 lid;
35 	u8 ltype;
36 	u8 flags;
37 	u8 offset;
38 	u8 mask;
39 	u8 right;
40 	u8 shift;
41 };
42 
43 struct npc_kpu_profile {
44 	int cam_entries;
45 	int action_entries;
46 	struct npc_kpu_profile_cam *cam;
47 	struct npc_kpu_profile_action *action;
48 };
49 
50 struct npc_pkind {
51 	struct rsrc_bmap rsrc;
52 	u32	*pfchan_map;
53 };
54 
55 struct npc_mcam {
56 	struct rsrc_bmap rsrc;
57 	u16	*pfvf_map;
58 	u16	total_entries; /* Total number of MCAM entries */
59 	u16	entries;  /* Total - reserved for NIX LFs */
60 	u8	banks_per_entry;  /* Number of keywords in key */
61 	u8	keysize;
62 	u8	banks;    /* Number of MCAM banks */
63 	u16	banksize; /* Number of MCAM entries in each bank */
64 	u16	counters; /* Number of match counters */
65 	u16	nixlf_offset;
66 	u16	pf_offset;
67 };
68 
69 struct nix_af_handle;
70 struct nix_handle;
71 struct rvu_hwinfo;
72 
73 struct npc_af {
74 	struct nix_af_handle	*nix_af;
75 	struct npc_pkind	pkind;
76 	void __iomem		*npc_af_base;
77 	u8			npc_kpus;	/** Number of parser units */
78 	struct npc_mcam		mcam;
79 	struct rvu_block	block;
80 	struct rvu_hwinfo	*hw;
81 };
82 
83 struct npc {
84 	struct npc_af		*npc_af;
85 	void __iomem		*npc_base;
86 	struct nix_handle	*nix;
87 }
88 
89 #endif /* __NPC_H__ */
90 
91