mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-11-26 14:58:25 +00:00
There is a desire to share the oclot_stats_layout struct outside of the current vsc7514 driver. In order to do so, the length of the array needs to be known at compile time, and defined in the struct ocelot and struct felix_info. Since the array is defined in a .c file and would be declared in the header file via: extern struct ocelot_stat_layout[]; the size of the array will not be known at compile time to outside modules. To fix this, remove the need for defining the number of stats at compile time and allow this number to be determined at initialization. Signed-off-by: Colin Foster <colin.foster@in-advantage.com> Signed-off-by: David S. Miller <davem@davemloft.net>
80 lines
2.6 KiB
C
80 lines
2.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/* Copyright 2019 NXP
|
|
*/
|
|
#ifndef _MSCC_FELIX_H
|
|
#define _MSCC_FELIX_H
|
|
|
|
#define ocelot_to_felix(o) container_of((o), struct felix, ocelot)
|
|
#define FELIX_MAC_QUIRKS OCELOT_QUIRK_PCS_PERFORMS_RATE_ADAPTATION
|
|
|
|
#define OCELOT_PORT_MODE_INTERNAL BIT(0)
|
|
#define OCELOT_PORT_MODE_SGMII BIT(1)
|
|
#define OCELOT_PORT_MODE_QSGMII BIT(2)
|
|
#define OCELOT_PORT_MODE_2500BASEX BIT(3)
|
|
#define OCELOT_PORT_MODE_USXGMII BIT(4)
|
|
|
|
/* Platform-specific information */
|
|
struct felix_info {
|
|
const struct resource *target_io_res;
|
|
const struct resource *port_io_res;
|
|
const struct resource *imdio_res;
|
|
const struct reg_field *regfields;
|
|
const u32 *const *map;
|
|
const struct ocelot_ops *ops;
|
|
const u32 *port_modes;
|
|
int num_mact_rows;
|
|
const struct ocelot_stat_layout *stats_layout;
|
|
int num_ports;
|
|
int num_tx_queues;
|
|
struct vcap_props *vcap;
|
|
u16 vcap_pol_base;
|
|
u16 vcap_pol_max;
|
|
u16 vcap_pol_base2;
|
|
u16 vcap_pol_max2;
|
|
const struct ptp_clock_info *ptp_caps;
|
|
|
|
/* Some Ocelot switches are integrated into the SoC without the
|
|
* extraction IRQ line connected to the ARM GIC. By enabling this
|
|
* workaround, the few packets that are delivered to the CPU port
|
|
* module (currently only PTP) are copied not only to the hardware CPU
|
|
* port module, but also to the 802.1Q Ethernet CPU port, and polling
|
|
* the extraction registers is triggered once the DSA tagger sees a PTP
|
|
* frame. The Ethernet frame is only used as a notification: it is
|
|
* dropped, and the original frame is extracted over MMIO and annotated
|
|
* with the RX timestamp.
|
|
*/
|
|
bool quirk_no_xtr_irq;
|
|
|
|
int (*mdio_bus_alloc)(struct ocelot *ocelot);
|
|
void (*mdio_bus_free)(struct ocelot *ocelot);
|
|
void (*phylink_validate)(struct ocelot *ocelot, int port,
|
|
unsigned long *supported,
|
|
struct phylink_link_state *state);
|
|
int (*port_setup_tc)(struct dsa_switch *ds, int port,
|
|
enum tc_setup_type type, void *type_data);
|
|
void (*port_sched_speed_set)(struct ocelot *ocelot, int port,
|
|
u32 speed);
|
|
struct regmap *(*init_regmap)(struct ocelot *ocelot,
|
|
struct resource *res);
|
|
};
|
|
|
|
extern const struct dsa_switch_ops felix_switch_ops;
|
|
|
|
/* DSA glue / front-end for struct ocelot */
|
|
struct felix {
|
|
struct dsa_switch *ds;
|
|
const struct felix_info *info;
|
|
struct ocelot ocelot;
|
|
struct mii_bus *imdio;
|
|
struct phylink_pcs **pcs;
|
|
resource_size_t switch_base;
|
|
resource_size_t imdio_base;
|
|
enum dsa_tag_protocol tag_proto;
|
|
struct kthread_worker *xmit_worker;
|
|
};
|
|
|
|
struct net_device *felix_port_to_netdev(struct ocelot *ocelot, int port);
|
|
int felix_netdev_to_port(struct net_device *dev);
|
|
|
|
#endif
|