blob: ee4933ca7ed8e74b04e211be0b2e582c1aeb31f6 [file] [log] [blame]
Maxime Chevallierdb9d7d32018-05-31 10:07:43 +02001/*
2 * RSS and Classifier definitions for Marvell PPv2 Network Controller
3 *
4 * Copyright (C) 2014 Marvell
5 *
6 * Marcin Wojtas <mw@semihalf.com>
7 *
8 * This file is licensed under the terms of the GNU General Public
9 * License version 2. This program is licensed "as is" without any
10 * warranty of any kind, whether express or implied.
11 */
12
13#ifndef _MVPP2_CLS_H_
14#define _MVPP2_CLS_H_
15
Maxime Chevallier0ad2f532018-07-12 13:54:11 +020016#include "mvpp2.h"
Maxime Chevallierb1a962c2018-07-12 13:54:24 +020017#include "mvpp2_prs.h"
Maxime Chevallier0ad2f532018-07-12 13:54:11 +020018
Maxime Chevallierdb9d7d32018-05-31 10:07:43 +020019/* Classifier constants */
20#define MVPP2_CLS_FLOWS_TBL_SIZE 512
21#define MVPP2_CLS_FLOWS_TBL_DATA_WORDS 3
22#define MVPP2_CLS_LKP_TBL_SIZE 64
23#define MVPP2_CLS_RX_QUEUES 256
24
Maxime Chevallierb1a962c2018-07-12 13:54:24 +020025/* Classifier flow constants */
26enum mvpp2_cls_engine {
27 MVPP22_CLS_ENGINE_C2 = 1,
28 MVPP22_CLS_ENGINE_C3A,
29 MVPP22_CLS_ENGINE_C3B,
30 MVPP22_CLS_ENGINE_C4,
31 MVPP22_CLS_ENGINE_C3HA = 6,
32 MVPP22_CLS_ENGINE_C3HB = 7,
33};
34
35enum mvpp2_cls_flow_seq {
36 MVPP2_CLS_FLOW_SEQ_NORMAL = 0,
37 MVPP2_CLS_FLOW_SEQ_FIRST1,
38 MVPP2_CLS_FLOW_SEQ_FIRST2,
39 MVPP2_CLS_FLOW_SEQ_LAST,
40 MVPP2_CLS_FLOW_SEQ_MIDDLE
41};
42
43/* Classifier C2 engine constants */
44#define MVPP22_CLS_C2_TCAM_EN(data) ((data) << 16)
45
46enum mvpp22_cls_c2_action {
47 MVPP22_C2_NO_UPD = 0,
48 MVPP22_C2_NO_UPD_LOCK,
49 MVPP22_C2_UPD,
50 MVPP22_C2_UPD_LOCK,
51};
52
53enum mvpp22_cls_c2_fwd_action {
54 MVPP22_C2_FWD_NO_UPD = 0,
55 MVPP22_C2_FWD_NO_UPD_LOCK,
56 MVPP22_C2_FWD_SW,
57 MVPP22_C2_FWD_SW_LOCK,
58 MVPP22_C2_FWD_HW,
59 MVPP22_C2_FWD_HW_LOCK,
60 MVPP22_C2_FWD_HW_LOW_LAT,
61 MVPP22_C2_FWD_HW_LOW_LAT_LOCK,
62};
63
64#define MVPP2_CLS_C2_TCAM_WORDS 5
65#define MVPP2_CLS_C2_ATTR_WORDS 5
66
67struct mvpp2_cls_c2_entry {
68 u32 index;
69 u32 tcam[MVPP2_CLS_C2_TCAM_WORDS];
70 u32 act;
71 u32 attr[MVPP2_CLS_C2_ATTR_WORDS];
72};
73
74/* Classifier C2 engine entries */
75#define MVPP22_CLS_C2_RSS_ENTRY(port) (port)
76#define MVPP22_CLS_C2_N_ENTRIES MVPP2_MAX_PORTS
77
78#define MVPP22_RSS_FLOW_C2_OFFS 0
79
Maxime Chevallierdb9d7d32018-05-31 10:07:43 +020080struct mvpp2_cls_flow_entry {
81 u32 index;
82 u32 data[MVPP2_CLS_FLOWS_TBL_DATA_WORDS];
83};
84
85struct mvpp2_cls_lookup_entry {
86 u32 lkpid;
87 u32 way;
88 u32 data;
89};
90
Antoine Tenart81796422018-07-12 13:54:20 +020091void mvpp22_rss_fill_table(struct mvpp2_port *port, u32 table);
92
Maxime Chevalliere6e21c02018-07-12 13:54:23 +020093void mvpp22_rss_port_init(struct mvpp2_port *port);
Maxime Chevallierdb9d7d32018-05-31 10:07:43 +020094
95void mvpp2_cls_init(struct mvpp2 *priv);
96
97void mvpp2_cls_port_config(struct mvpp2_port *port);
98
99void mvpp2_cls_oversize_rxq_set(struct mvpp2_port *port);
100
101#endif