ARM: 9148/1: handle CONFIG_CPU_ENDIAN_BE32 in arch/arm/kernel/head.S
[platform/kernel/linux-rpi.git] / drivers / net / dsa / ocelot / felix.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright 2019 NXP Semiconductors
3  */
4 #ifndef _MSCC_FELIX_H
5 #define _MSCC_FELIX_H
6
7 #define ocelot_to_felix(o)              container_of((o), struct felix, ocelot)
8 #define FELIX_MAC_QUIRKS                OCELOT_QUIRK_PCS_PERFORMS_RATE_ADAPTATION
9
10 /* Platform-specific information */
11 struct felix_info {
12         const struct resource           *target_io_res;
13         const struct resource           *port_io_res;
14         const struct resource           *imdio_res;
15         const struct reg_field          *regfields;
16         const u32 *const                *map;
17         const struct ocelot_ops         *ops;
18         int                             num_mact_rows;
19         const struct ocelot_stat_layout *stats_layout;
20         unsigned int                    num_stats;
21         int                             num_ports;
22         int                             num_tx_queues;
23         struct vcap_props               *vcap;
24         int                             switch_pci_bar;
25         int                             imdio_pci_bar;
26         const struct ptp_clock_info     *ptp_caps;
27
28         /* Some Ocelot switches are integrated into the SoC without the
29          * extraction IRQ line connected to the ARM GIC. By enabling this
30          * workaround, the few packets that are delivered to the CPU port
31          * module (currently only PTP) are copied not only to the hardware CPU
32          * port module, but also to the 802.1Q Ethernet CPU port, and polling
33          * the extraction registers is triggered once the DSA tagger sees a PTP
34          * frame. The Ethernet frame is only used as a notification: it is
35          * dropped, and the original frame is extracted over MMIO and annotated
36          * with the RX timestamp.
37          */
38         bool                            quirk_no_xtr_irq;
39
40         int     (*mdio_bus_alloc)(struct ocelot *ocelot);
41         void    (*mdio_bus_free)(struct ocelot *ocelot);
42         void    (*phylink_validate)(struct ocelot *ocelot, int port,
43                                     unsigned long *supported,
44                                     struct phylink_link_state *state);
45         int     (*prevalidate_phy_mode)(struct ocelot *ocelot, int port,
46                                         phy_interface_t phy_mode);
47         int     (*port_setup_tc)(struct dsa_switch *ds, int port,
48                                  enum tc_setup_type type, void *type_data);
49         void    (*port_sched_speed_set)(struct ocelot *ocelot, int port,
50                                         u32 speed);
51 };
52
53 extern const struct dsa_switch_ops felix_switch_ops;
54
55 /* DSA glue / front-end for struct ocelot */
56 struct felix {
57         struct dsa_switch               *ds;
58         const struct felix_info         *info;
59         struct ocelot                   ocelot;
60         struct mii_bus                  *imdio;
61         struct lynx_pcs                 **pcs;
62         resource_size_t                 switch_base;
63         resource_size_t                 imdio_base;
64         enum dsa_tag_protocol           tag_proto;
65 };
66
67 struct net_device *felix_port_to_netdev(struct ocelot *ocelot, int port);
68 int felix_netdev_to_port(struct net_device *dev);
69
70 #endif