File Index
Files and directories
Sign in
FILE

rule.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ethernet/mellanox/mlx5/core/steering/hws/rule.h C
 1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
 2/* Copyright (c) 2024 NVIDIA Corporation & Affiliates */
 3
 4#ifndef MLX5HWS_RULE_H_
 5#define MLX5HWS_RULE_H_
 6
 7enum {
 8	MLX5HWS_STE_CTRL_SZ = 20,
 9	MLX5HWS_ACTIONS_SZ = 12,
10	MLX5HWS_MATCH_TAG_SZ = 32,
11	MLX5HWS_JUMBO_TAG_SZ = 44,
12};
13
14enum mlx5hws_rule_status {
15	MLX5HWS_RULE_STATUS_UNKNOWN,
16	MLX5HWS_RULE_STATUS_CREATING,
17	MLX5HWS_RULE_STATUS_CREATED,
18	MLX5HWS_RULE_STATUS_UPDATING,
19	MLX5HWS_RULE_STATUS_UPDATED,
20	MLX5HWS_RULE_STATUS_DELETING,
21	MLX5HWS_RULE_STATUS_DELETED,
22	MLX5HWS_RULE_STATUS_FAILING,
23	MLX5HWS_RULE_STATUS_FAILED,
24};
25
26enum mlx5hws_rule_move_state {
27	MLX5HWS_RULE_RESIZE_STATE_IDLE,
28	MLX5HWS_RULE_RESIZE_STATE_WRITING,
29	MLX5HWS_RULE_RESIZE_STATE_DELETING,
30};
31
32enum mlx5hws_rule_jumbo_match_tag_offset {
33	MLX5HWS_RULE_JUMBO_MATCH_TAG_OFFSET_DW0 = 8,
34};
35
36struct mlx5hws_rule_match_tag {
37	union {
38		u8 jumbo[MLX5HWS_JUMBO_TAG_SZ];
39		struct {
40			u8 reserved[MLX5HWS_ACTIONS_SZ];
41			u8 match[MLX5HWS_MATCH_TAG_SZ];
42		};
43	};
44};
45
46struct mlx5hws_rule_resize_info {
47	u32 rtc_0;
48	u32 rtc_1;
49	u32 rule_idx;
50	u8 state;
51	u8 ctrl_seg[MLX5HWS_WQE_SZ_GTA_CTRL]; /* Ctrl segment of STE: 48 bytes */
52	u8 data_seg[MLX5HWS_WQE_SZ_GTA_DATA]; /* Data segment of STE: 64 bytes */
53};
54
55struct mlx5hws_rule {
56	struct mlx5hws_matcher *matcher;
57	union {
58		struct mlx5hws_rule_match_tag tag;
59		struct mlx5hws_rule_resize_info *resize_info;
60	};
61	struct mlx5hws_action_ste_chunk action_ste;
62	struct mlx5hws_action_ste_chunk old_action_ste;
63	u32 rtc_0; /* The RTC into which the STE was inserted */
64	u32 rtc_1; /* The RTC into which the STE was inserted */
65	u8 status; /* enum mlx5hws_rule_status */
66	u8 pending_wqes;
67	bool skip_delete; /* For complex rules - another rule with same tag
68			   * still exists, so don't actually delete this rule.
69			   */
70};
71
72void mlx5hws_rule_skip(struct mlx5hws_matcher *matcher, u32 flow_source,
73		       bool *skip_rx, bool *skip_tx);
74
75void mlx5hws_rule_free_action_ste(struct mlx5hws_action_ste_chunk *action_ste);
76
77int mlx5hws_rule_move_hws_remove(struct mlx5hws_rule *rule,
78				 void *queue, void *user_data);
79
80int mlx5hws_rule_move_hws_add(struct mlx5hws_rule *rule,
81			      struct mlx5hws_rule_attr *attr);
82
83bool mlx5hws_rule_move_in_progress(struct mlx5hws_rule *rule);
84
85void mlx5hws_rule_clear_resize_info(struct mlx5hws_rule *rule);
86
87#endif /* MLX5HWS_RULE_H_ */
~/ Read-only file preview.