1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _LINUX_IF_HSR_H_ 3 #define _LINUX_IF_HSR_H_ 4 5 #include <linux/types.h> 6 7 struct net_device; 8 9 /* used to differentiate various protocols */ 10 enum hsr_version { 11 HSR_V0 = 0, 12 HSR_V1, 13 PRP_V1, 14 }; 15 16 enum hsr_port_type { 17 HSR_PT_NONE = 0, /* Must be 0, used by framereg */ 18 HSR_PT_SLAVE_A, 19 HSR_PT_SLAVE_B, 20 HSR_PT_INTERLINK, 21 HSR_PT_MASTER, 22 HSR_PT_PORTS, /* This must be the last item in the enum */ 23 }; 24 25 /* HSR Tag. 26 * As defined in IEC-62439-3:2010, the HSR tag is really { ethertype = 0x88FB, 27 * path, LSDU_size, sequence Nr }. But we let eth_header() create { h_dest, 28 * h_source, h_proto = 0x88FB }, and add { path, LSDU_size, sequence Nr, 29 * encapsulated protocol } instead. 30 * 31 * Field names as defined in the IEC:2010 standard for HSR. 32 */ 33 struct hsr_tag { 34 __be16 path_and_LSDU_size; 35 __be16 sequence_nr; 36 __be16 encap_proto; 37 } __packed; 38 39 #define HSR_HLEN 6 40 41 #if IS_ENABLED(CONFIG_HSR) 42 extern bool is_hsr_master(struct net_device *dev); 43 extern int hsr_get_version(struct net_device *dev, enum hsr_version *ver); 44 struct net_device *hsr_get_port_ndev(struct net_device *ndev, 45 enum hsr_port_type pt); 46 #else 47 static inline bool is_hsr_master(struct net_device *dev) 48 { 49 return false; 50 } 51 static inline int hsr_get_version(struct net_device *dev, 52 enum hsr_version *ver) 53 { 54 return -EINVAL; 55 } 56 57 static inline struct net_device *hsr_get_port_ndev(struct net_device *ndev, 58 enum hsr_port_type pt) 59 { 60 return ERR_PTR(-EINVAL); 61 } 62 #endif /* CONFIG_HSR */ 63 64 #endif /*_LINUX_IF_HSR_H_*/ 65