1 | /* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later */ |
2 | /* |
3 | * Copyright 2008 - 2015 Freescale Semiconductor Inc. |
4 | */ |
5 | |
6 | #ifndef __MAC_H |
7 | #define __MAC_H |
8 | |
9 | #include <linux/device.h> |
10 | #include <linux/if_ether.h> |
11 | #include <linux/phy.h> |
12 | #include <linux/phylink.h> |
13 | #include <linux/list.h> |
14 | |
15 | #include "fman_port.h" |
16 | #include "fman.h" |
17 | #include "fman_mac.h" |
18 | |
19 | struct fman_mac; |
20 | struct mac_priv_s; |
21 | |
22 | struct mac_device { |
23 | void __iomem *vaddr; |
24 | struct device *dev; |
25 | struct resource *res; |
26 | u8 addr[ETH_ALEN]; |
27 | struct fman_port *port[2]; |
28 | struct phylink *phylink; |
29 | struct phylink_config phylink_config; |
30 | phy_interface_t phy_if; |
31 | |
32 | bool promisc; |
33 | bool allmulti; |
34 | |
35 | const struct phylink_mac_ops *phylink_ops; |
36 | int (*enable)(struct fman_mac *mac_dev); |
37 | void (*disable)(struct fman_mac *mac_dev); |
38 | int (*set_promisc)(struct fman_mac *mac_dev, bool enable); |
39 | int (*change_addr)(struct fman_mac *mac_dev, const enet_addr_t *enet_addr); |
40 | int (*set_allmulti)(struct fman_mac *mac_dev, bool enable); |
41 | int (*set_tstamp)(struct fman_mac *mac_dev, bool enable); |
42 | int (*set_multi)(struct net_device *net_dev, |
43 | struct mac_device *mac_dev); |
44 | int (*set_exception)(struct fman_mac *mac_dev, |
45 | enum fman_mac_exceptions exception, bool enable); |
46 | int (*add_hash_mac_addr)(struct fman_mac *mac_dev, |
47 | enet_addr_t *eth_addr); |
48 | int (*remove_hash_mac_addr)(struct fman_mac *mac_dev, |
49 | enet_addr_t *eth_addr); |
50 | |
51 | void (*update_speed)(struct mac_device *mac_dev, int speed); |
52 | |
53 | struct fman_mac *fman_mac; |
54 | struct mac_priv_s *priv; |
55 | }; |
56 | |
57 | static inline struct mac_device |
58 | *fman_config_to_mac(struct phylink_config *config) |
59 | { |
60 | return container_of(config, struct mac_device, phylink_config); |
61 | } |
62 | |
63 | struct dpaa_eth_data { |
64 | struct mac_device *mac_dev; |
65 | int mac_hw_id; |
66 | int fman_hw_id; |
67 | }; |
68 | |
69 | extern const char *mac_driver_description; |
70 | |
71 | int fman_set_multi(struct net_device *net_dev, struct mac_device *mac_dev); |
72 | |
73 | #endif /* __MAC_H */ |
74 | |