mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-28 00:19:36 +00:00

Create an API to get the net_device to the slave port of HSR device. The API will take hsr net_device and enum hsr_port_type for which we want the net_device as arguments. This API can be used by client drivers who support HSR and want to get the net_devcie of slave ports from the hsr device. Export this API for the same. This API needs the enum hsr_port_type to be accessible by the drivers using hsr. Move the enum hsr_port_type from net/hsr/hsr_main.h to include/linux/if_hsr.h for the same. Signed-off-by: MD Danish Anwar <danishanwar@ti.com> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
65 lines
1.5 KiB
C
65 lines
1.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef _LINUX_IF_HSR_H_
|
|
#define _LINUX_IF_HSR_H_
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct net_device;
|
|
|
|
/* used to differentiate various protocols */
|
|
enum hsr_version {
|
|
HSR_V0 = 0,
|
|
HSR_V1,
|
|
PRP_V1,
|
|
};
|
|
|
|
enum hsr_port_type {
|
|
HSR_PT_NONE = 0, /* Must be 0, used by framereg */
|
|
HSR_PT_SLAVE_A,
|
|
HSR_PT_SLAVE_B,
|
|
HSR_PT_INTERLINK,
|
|
HSR_PT_MASTER,
|
|
HSR_PT_PORTS, /* This must be the last item in the enum */
|
|
};
|
|
|
|
/* HSR Tag.
|
|
* As defined in IEC-62439-3:2010, the HSR tag is really { ethertype = 0x88FB,
|
|
* path, LSDU_size, sequence Nr }. But we let eth_header() create { h_dest,
|
|
* h_source, h_proto = 0x88FB }, and add { path, LSDU_size, sequence Nr,
|
|
* encapsulated protocol } instead.
|
|
*
|
|
* Field names as defined in the IEC:2010 standard for HSR.
|
|
*/
|
|
struct hsr_tag {
|
|
__be16 path_and_LSDU_size;
|
|
__be16 sequence_nr;
|
|
__be16 encap_proto;
|
|
} __packed;
|
|
|
|
#define HSR_HLEN 6
|
|
|
|
#if IS_ENABLED(CONFIG_HSR)
|
|
extern bool is_hsr_master(struct net_device *dev);
|
|
extern int hsr_get_version(struct net_device *dev, enum hsr_version *ver);
|
|
struct net_device *hsr_get_port_ndev(struct net_device *ndev,
|
|
enum hsr_port_type pt);
|
|
#else
|
|
static inline bool is_hsr_master(struct net_device *dev)
|
|
{
|
|
return false;
|
|
}
|
|
static inline int hsr_get_version(struct net_device *dev,
|
|
enum hsr_version *ver)
|
|
{
|
|
return -EINVAL;
|
|
}
|
|
|
|
static inline struct net_device *hsr_get_port_ndev(struct net_device *ndev,
|
|
enum hsr_port_type pt)
|
|
{
|
|
return ERR_PTR(-EINVAL);
|
|
}
|
|
#endif /* CONFIG_HSR */
|
|
|
|
#endif /*_LINUX_IF_HSR_H_*/
|