@@ -883,6 +883,91 @@ static inline void mlxsw_reg_spmlr_pack(char *payload, u8 local_port,
883
883
mlxsw_reg_spmlr_learn_mode_set (payload , mode );
884
884
}
885
885
886
+ /* SFMR - Switch FID Management Register
887
+ * -------------------------------------
888
+ * Creates and configures FIDs.
889
+ */
890
+ #define MLXSW_REG_SFMR_ID 0x201F
891
+ #define MLXSW_REG_SFMR_LEN 0x18
892
+
893
+ static const struct mlxsw_reg_info mlxsw_reg_sfmr = {
894
+ .id = MLXSW_REG_SFMR_ID ,
895
+ .len = MLXSW_REG_SFMR_LEN ,
896
+ };
897
+
898
+ enum mlxsw_reg_sfmr_op {
899
+ MLXSW_REG_SFMR_OP_CREATE_FID ,
900
+ MLXSW_REG_SFMR_OP_DESTROY_FID ,
901
+ };
902
+
903
+ /* reg_sfmr_op
904
+ * Operation.
905
+ * 0 - Create or edit FID.
906
+ * 1 - Destroy FID.
907
+ * Access: WO
908
+ */
909
+ MLXSW_ITEM32 (reg , sfmr , op , 0x00 , 24 , 4 );
910
+
911
+ /* reg_sfmr_fid
912
+ * Filtering ID.
913
+ * Access: Index
914
+ */
915
+ MLXSW_ITEM32 (reg , sfmr , fid , 0x00 , 0 , 16 );
916
+
917
+ /* reg_sfmr_fid_offset
918
+ * FID offset.
919
+ * Used to point into the flooding table selected by SFGC register if
920
+ * the table is of type FID-Offset. Otherwise, this field is reserved.
921
+ * Access: RW
922
+ */
923
+ MLXSW_ITEM32 (reg , sfmr , fid_offset , 0x08 , 0 , 16 );
924
+
925
+ /* reg_sfmr_vtfp
926
+ * Valid Tunnel Flood Pointer.
927
+ * If not set, then nve_tunnel_flood_ptr is reserved and considered NULL.
928
+ * Access: RW
929
+ *
930
+ * Note: Reserved for 802.1Q FIDs.
931
+ */
932
+ MLXSW_ITEM32 (reg , sfmr , vtfp , 0x0C , 31 , 1 );
933
+
934
+ /* reg_sfmr_nve_tunnel_flood_ptr
935
+ * Underlay Flooding and BC Pointer.
936
+ * Used as a pointer to the first entry of the group based link lists of
937
+ * flooding or BC entries (for NVE tunnels).
938
+ * Access: RW
939
+ */
940
+ MLXSW_ITEM32 (reg , sfmr , nve_tunnel_flood_ptr , 0x0C , 0 , 24 );
941
+
942
+ /* reg_sfmr_vv
943
+ * VNI Valid.
944
+ * If not set, then vni is reserved.
945
+ * Access: RW
946
+ *
947
+ * Note: Reserved for 802.1Q FIDs.
948
+ */
949
+ MLXSW_ITEM32 (reg , sfmr , vv , 0x10 , 31 , 1 );
950
+
951
+ /* reg_sfmr_vni
952
+ * Virtual Network Identifier.
953
+ * Access: RW
954
+ *
955
+ * Note: A given VNI can only be assigned to one FID.
956
+ */
957
+ MLXSW_ITEM32 (reg , sfmr , vni , 0x10 , 0 , 24 );
958
+
959
+ static inline void mlxsw_reg_sfmr_pack (char * payload ,
960
+ enum mlxsw_reg_sfmr_op op , u16 fid ,
961
+ u16 fid_offset )
962
+ {
963
+ MLXSW_REG_ZERO (sfmr , payload );
964
+ mlxsw_reg_sfmr_op_set (payload , op );
965
+ mlxsw_reg_sfmr_fid_set (payload , fid );
966
+ mlxsw_reg_sfmr_fid_offset_set (payload , fid_offset );
967
+ mlxsw_reg_sfmr_vtfp_set (payload , false);
968
+ mlxsw_reg_sfmr_vv_set (payload , false);
969
+ }
970
+
886
971
/* PMLP - Ports Module to Local Port Register
887
972
* ------------------------------------------
888
973
* Configures the assignment of modules to local ports.
@@ -2061,6 +2146,8 @@ static inline const char *mlxsw_reg_id_str(u16 reg_id)
2061
2146
return "SFTR" ;
2062
2147
case MLXSW_REG_SPMLR_ID :
2063
2148
return "SPMLR" ;
2149
+ case MLXSW_REG_SFMR_ID :
2150
+ return "SFMR" ;
2064
2151
case MLXSW_REG_PMLP_ID :
2065
2152
return "PMLP" ;
2066
2153
case MLXSW_REG_PMTU_ID :
0 commit comments