mlxsw: reg: Add Router Algorithmic LPM Unicast Host Table Dump register
The RAUHTD register allows dumping entries from the Router Unicast Host Table. Signed-off-by: Yotam Gigi <yotamg@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4457b3df3f
commit
7cf2c205d7
|
@ -4023,6 +4023,151 @@ static inline void mlxsw_reg_rauht_pack4(char *payload,
|
|||
mlxsw_reg_rauht_dip4_set(payload, dip);
|
||||
}
|
||||
|
||||
/* RAUHTD - Router Algorithmic LPM Unicast Host Table Dump Register
|
||||
* ----------------------------------------------------------------
|
||||
* The RAUHTD register allows dumping entries from the Router Unicast Host
|
||||
* Table. For a given session an entry is dumped no more than one time. The
|
||||
* first RAUHTD access after reset is a new session. A session ends when the
|
||||
* num_rec response is smaller than num_rec request or for IPv4 when the
|
||||
* num_entries is smaller than 4. The clear activity affect the current session
|
||||
* or the last session if a new session has not started.
|
||||
*/
|
||||
#define MLXSW_REG_RAUHTD_ID 0x8018
|
||||
#define MLXSW_REG_RAUHTD_BASE_LEN 0x20
|
||||
#define MLXSW_REG_RAUHTD_REC_LEN 0x20
|
||||
#define MLXSW_REG_RAUHTD_REC_MAX_NUM 32
|
||||
#define MLXSW_REG_RAUHTD_LEN (MLXSW_REG_RAUHTD_BASE_LEN + \
|
||||
MLXSW_REG_RAUHTD_REC_MAX_NUM * MLXSW_REG_RAUHTD_REC_LEN)
|
||||
#define MLXSW_REG_RAUHTD_IPV4_ENT_PER_REC 4
|
||||
|
||||
static const struct mlxsw_reg_info mlxsw_reg_rauhtd = {
|
||||
.id = MLXSW_REG_RAUHTD_ID,
|
||||
.len = MLXSW_REG_RAUHTD_LEN,
|
||||
};
|
||||
|
||||
#define MLXSW_REG_RAUHTD_FILTER_A BIT(0)
|
||||
#define MLXSW_REG_RAUHTD_FILTER_RIF BIT(3)
|
||||
|
||||
/* reg_rauhtd_filter_fields
|
||||
* if a bit is '0' then the relevant field is ignored and dump is done
|
||||
* regardless of the field value
|
||||
* Bit0 - filter by activity: entry_a
|
||||
* Bit3 - filter by entry rip: entry_rif
|
||||
* Access: Index
|
||||
*/
|
||||
MLXSW_ITEM32(reg, rauhtd, filter_fields, 0x00, 0, 8);
|
||||
|
||||
enum mlxsw_reg_rauhtd_op {
|
||||
MLXSW_REG_RAUHTD_OP_DUMP,
|
||||
MLXSW_REG_RAUHTD_OP_DUMP_AND_CLEAR,
|
||||
};
|
||||
|
||||
/* reg_rauhtd_op
|
||||
* Access: OP
|
||||
*/
|
||||
MLXSW_ITEM32(reg, rauhtd, op, 0x04, 24, 2);
|
||||
|
||||
/* reg_rauhtd_num_rec
|
||||
* At request: number of records requested
|
||||
* At response: number of records dumped
|
||||
* For IPv4, each record has 4 entries at request and up to 4 entries
|
||||
* at response
|
||||
* Range is 0..MLXSW_REG_RAUHTD_REC_MAX_NUM
|
||||
* Access: Index
|
||||
*/
|
||||
MLXSW_ITEM32(reg, rauhtd, num_rec, 0x04, 0, 8);
|
||||
|
||||
/* reg_rauhtd_entry_a
|
||||
* Dump only if activity has value of entry_a
|
||||
* Reserved if filter_fields bit0 is '0'
|
||||
* Access: Index
|
||||
*/
|
||||
MLXSW_ITEM32(reg, rauhtd, entry_a, 0x08, 16, 1);
|
||||
|
||||
enum mlxsw_reg_rauhtd_type {
|
||||
MLXSW_REG_RAUHTD_TYPE_IPV4,
|
||||
MLXSW_REG_RAUHTD_TYPE_IPV6,
|
||||
};
|
||||
|
||||
/* reg_rauhtd_type
|
||||
* Dump only if record type is:
|
||||
* 0 - IPv4
|
||||
* 1 - IPv6
|
||||
* Access: Index
|
||||
*/
|
||||
MLXSW_ITEM32(reg, rauhtd, type, 0x08, 0, 4);
|
||||
|
||||
/* reg_rauhtd_entry_rif
|
||||
* Dump only if RIF has value of entry_rif
|
||||
* Reserved if filter_fields bit3 is '0'
|
||||
* Access: Index
|
||||
*/
|
||||
MLXSW_ITEM32(reg, rauhtd, entry_rif, 0x0C, 0, 16);
|
||||
|
||||
static inline void mlxsw_reg_rauhtd_pack(char *payload,
|
||||
enum mlxsw_reg_rauhtd_type type)
|
||||
{
|
||||
MLXSW_REG_ZERO(rauhtd, payload);
|
||||
mlxsw_reg_rauhtd_filter_fields_set(payload, MLXSW_REG_RAUHTD_FILTER_A);
|
||||
mlxsw_reg_rauhtd_op_set(payload, MLXSW_REG_RAUHTD_OP_DUMP_AND_CLEAR);
|
||||
mlxsw_reg_rauhtd_num_rec_set(payload, MLXSW_REG_RAUHTD_REC_MAX_NUM);
|
||||
mlxsw_reg_rauhtd_entry_a_set(payload, 1);
|
||||
mlxsw_reg_rauhtd_type_set(payload, type);
|
||||
}
|
||||
|
||||
/* reg_rauhtd_ipv4_rec_num_entries
|
||||
* Number of valid entries in this record:
|
||||
* 0 - 1 valid entry
|
||||
* 1 - 2 valid entries
|
||||
* 2 - 3 valid entries
|
||||
* 3 - 4 valid entries
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32_INDEXED(reg, rauhtd, ipv4_rec_num_entries,
|
||||
MLXSW_REG_RAUHTD_BASE_LEN, 28, 2,
|
||||
MLXSW_REG_RAUHTD_REC_LEN, 0x00, false);
|
||||
|
||||
/* reg_rauhtd_rec_type
|
||||
* Record type.
|
||||
* 0 - IPv4
|
||||
* 1 - IPv6
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32_INDEXED(reg, rauhtd, rec_type, MLXSW_REG_RAUHTD_BASE_LEN, 24, 2,
|
||||
MLXSW_REG_RAUHTD_REC_LEN, 0x00, false);
|
||||
|
||||
#define MLXSW_REG_RAUHTD_IPV4_ENT_LEN 0x8
|
||||
|
||||
/* reg_rauhtd_ipv4_ent_a
|
||||
* Activity. Set for new entries. Set if a packet lookup has hit on the
|
||||
* specific entry.
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32_INDEXED(reg, rauhtd, ipv4_ent_a, MLXSW_REG_RAUHTD_BASE_LEN, 16, 1,
|
||||
MLXSW_REG_RAUHTD_IPV4_ENT_LEN, 0x00, false);
|
||||
|
||||
/* reg_rauhtd_ipv4_ent_rif
|
||||
* Router interface.
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32_INDEXED(reg, rauhtd, ipv4_ent_rif, MLXSW_REG_RAUHTD_BASE_LEN, 0,
|
||||
16, MLXSW_REG_RAUHTD_IPV4_ENT_LEN, 0x00, false);
|
||||
|
||||
/* reg_rauhtd_ipv4_ent_dip
|
||||
* Destination IPv4 address.
|
||||
* Access: RO
|
||||
*/
|
||||
MLXSW_ITEM32_INDEXED(reg, rauhtd, ipv4_ent_dip, MLXSW_REG_RAUHTD_BASE_LEN, 0,
|
||||
32, MLXSW_REG_RAUHTD_IPV4_ENT_LEN, 0x04, false);
|
||||
|
||||
static inline void mlxsw_reg_rauhtd_ent_ipv4_unpack(char *payload,
|
||||
int ent_index, u16 *p_rif,
|
||||
u32 *p_dip)
|
||||
{
|
||||
*p_rif = mlxsw_reg_rauhtd_ipv4_ent_rif_get(payload, ent_index);
|
||||
*p_dip = mlxsw_reg_rauhtd_ipv4_ent_dip_get(payload, ent_index);
|
||||
}
|
||||
|
||||
/* MFCR - Management Fan Control Register
|
||||
* --------------------------------------
|
||||
* This register controls the settings of the Fan Speed PWM mechanism.
|
||||
|
@ -4775,6 +4920,8 @@ static inline const char *mlxsw_reg_id_str(u16 reg_id)
|
|||
return "RALUE";
|
||||
case MLXSW_REG_RAUHT_ID:
|
||||
return "RAUHT";
|
||||
case MLXSW_REG_RAUHTD_ID:
|
||||
return "RAUHTD";
|
||||
case MLXSW_REG_MFCR_ID:
|
||||
return "MFCR";
|
||||
case MLXSW_REG_MFSC_ID:
|
||||
|
|
Loading…
Reference in New Issue