Lines Matching +full:sparx5 +full:- +full:switch

1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /* Microchip Sparx5 Switch driver
29 SPX5_TARGET_CT_7546 = 0x7546, /* SparX-5-64 Enterprise */
30 SPX5_TARGET_CT_7549 = 0x7549, /* SparX-5-90 Enterprise */
31 SPX5_TARGET_CT_7552 = 0x7552, /* SparX-5-128 Enterprise */
32 SPX5_TARGET_CT_7556 = 0x7556, /* SparX-5-160 Enterprise */
33 SPX5_TARGET_CT_7558 = 0x7558, /* SparX-5-200 Enterprise */
34 SPX5_TARGET_CT_7546TSN = 0x47546, /* SparX-5-64i Industrial */
35 SPX5_TARGET_CT_7549TSN = 0x47549, /* SparX-5-90i Industrial */
36 SPX5_TARGET_CT_7552TSN = 0x47552, /* SparX-5-128i Industrial */
37 SPX5_TARGET_CT_7556TSN = 0x47556, /* SparX-5-160i Industrial */
38 SPX5_TARGET_CT_7558TSN = 0x47558, /* SparX-5-200i Industrial */
39 SPX5_TARGET_CT_LAN9694 = 0x9694, /* lan969x-40 */
40 SPX5_TARGET_CT_LAN9691VAO = 0x9691, /* lan969x-40-VAO */
41 SPX5_TARGET_CT_LAN9694TSN = 0x9695, /* lan969x-40-TSN */
42 SPX5_TARGET_CT_LAN9694RED = 0x969A, /* lan969x-40-RED */
43 SPX5_TARGET_CT_LAN9696 = 0x9696, /* lan969x-60 */
44 SPX5_TARGET_CT_LAN9692VAO = 0x9692, /* lan969x-65-VAO */
45 SPX5_TARGET_CT_LAN9696TSN = 0x9697, /* lan969x-60-TSN */
46 SPX5_TARGET_CT_LAN9696RED = 0x969B, /* lan969x-60-RED */
47 SPX5_TARGET_CT_LAN9698 = 0x9698, /* lan969x-100 */
48 SPX5_TARGET_CT_LAN9693VAO = 0x9693, /* lan969x-100-VAO */
49 SPX5_TARGET_CT_LAN9698TSN = 0x9699, /* lan969x-100-TSN */
50 SPX5_TARGET_CT_LAN9698RED = 0x969C, /* lan969x-100-RED */
61 SPX5_VLAN_PORT_TYPE_C, /* C-port */
62 SPX5_VLAN_PORT_TYPE_S, /* S-port */
63 SPX5_VLAN_PORT_TYPE_S_CUSTOM /* S-port using custom type */
139 struct sparx5;
211 struct sparx5 *sparx5; member
253 struct sparx5 *sparx5; member
292 ((struct sparx5_skb_cb *)((skb)->cb))
334 u32 (*get_port_dev_index)(struct sparx5 *sparx5, int port);
335 u32 (*get_port_dev_bit)(struct sparx5 *sparx5, int port);
338 int (*set_port_mux)(struct sparx5 *sparx5, struct sparx5_port *port,
342 int (*dsm_calendar_calc)(struct sparx5 *sparx5, u32 taxi,
346 int (*fdma_init)(struct sparx5 *sparx5);
347 int (*fdma_deinit)(struct sparx5 *sparx5);
349 int (*fdma_xmit)(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
368 struct sparx5 { struct
393 /* Switch state */
440 bool is_sparx5(struct sparx5 *sparx5); argument
441 bool sparx5_has_feature(struct sparx5 *sparx5, enum sparx5_feature feature);
444 int sparx5_register_notifier_blocks(struct sparx5 *sparx5);
445 void sparx5_unregister_notifier_blocks(struct sparx5 *sparx5);
453 void sparx5_xtr_flush(struct sparx5 *sparx5, u8 grp);
454 void sparx5_ifh_parse(struct sparx5 *sparx5, u32 *ifh, struct frame_info *info);
457 int sparx5_manual_injection_mode(struct sparx5 *sparx5);
461 int sparx5_fdma_init(struct sparx5 *sparx5);
462 int sparx5_fdma_deinit(struct sparx5 *sparx5);
463 int sparx5_fdma_start(struct sparx5 *sparx5);
464 int sparx5_fdma_stop(struct sparx5 *sparx5);
466 int sparx5_fdma_xmit(struct sparx5 *sparx5, u32 *ifh, struct sk_buff *skb,
469 void sparx5_fdma_reload(struct sparx5 *sparx5, struct fdma *fdma);
470 void sparx5_fdma_injection_mode(struct sparx5 *sparx5);
474 int sparx5_mact_learn(struct sparx5 *sparx5, int port,
476 bool sparx5_mact_getnext(struct sparx5 *sparx5,
478 int sparx5_mact_find(struct sparx5 *sparx5,
480 int sparx5_mact_forget(struct sparx5 *sparx5,
482 int sparx5_add_mact_entry(struct sparx5 *sparx5,
486 int sparx5_del_mact_entry(struct sparx5 *sparx5,
491 void sparx5_set_ageing(struct sparx5 *sparx5, int msecs);
492 void sparx5_mact_init(struct sparx5 *sparx5);
496 void sparx5_pgid_clear(struct sparx5 *spx5, int pgid);
497 void sparx5_pgid_read_mask(struct sparx5 *sparx5, int pgid, u32 portmask[3]);
498 void sparx5_update_fwd(struct sparx5 *sparx5);
499 void sparx5_vlan_init(struct sparx5 *sparx5);
500 void sparx5_vlan_port_setup(struct sparx5 *sparx5, int portno);
504 void sparx5_vlan_port_apply(struct sparx5 *sparx5, struct sparx5_port *port);
507 int sparx5_config_auto_calendar(struct sparx5 *sparx5);
508 int sparx5_config_dsm_calendar(struct sparx5 *sparx5);
509 int sparx5_dsm_calendar_calc(struct sparx5 *sparx5, u32 taxi,
512 enum sparx5_cal_bw sparx5_get_port_cal_speed(struct sparx5 *sparx5, u32 portno);
517 int sparx_stats_init(struct sparx5 *sparx5);
521 int sparx5_dcb_init(struct sparx5 *sparx5);
523 static inline int sparx5_dcb_init(struct sparx5 *sparx5) in sparx5_dcb_init() argument
530 void sparx5_set_port_ifh_timestamp(struct sparx5 *sparx5, void *ifh_hdr,
533 void sparx5_set_port_ifh_pdu_type(struct sparx5 *sparx5, void *ifh_hdr,
535 void sparx5_set_port_ifh_pdu_w16_offset(struct sparx5 *sparx5, void *ifh_hdr,
537 void sparx5_set_port_ifh(struct sparx5 *sparx5, void *ifh_hdr, u16 portno);
539 struct net_device *sparx5_create_netdev(struct sparx5 *sparx5, u32 portno);
540 int sparx5_register_netdevs(struct sparx5 *sparx5);
541 void sparx5_destroy_netdevs(struct sparx5 *sparx5);
542 void sparx5_unregister_netdevs(struct sparx5 *sparx5);
545 int sparx5_ptp_init(struct sparx5 *sparx5);
546 void sparx5_ptp_deinit(struct sparx5 *sparx5);
552 void sparx5_ptp_rxtstamp(struct sparx5 *sparx5, struct sk_buff *skb,
560 void sparx5_get_hwtimestamp(struct sparx5 *sparx5,
565 int sparx5_vcap_init(struct sparx5 *sparx5);
566 void sparx5_vcap_destroy(struct sparx5 *sparx5);
575 void sparx5_pgid_init(struct sparx5 *spx5);
576 int sparx5_pgid_alloc_mcast(struct sparx5 *spx5, u16 *idx);
577 int sparx5_pgid_free(struct sparx5 *spx5, u16 idx);
578 int sparx5_get_pgid(struct sparx5 *sparx5, int pgid);
593 int sparx5_port_mux_set(struct sparx5 *sparx5, struct sparx5_port *port,
595 int sparx5_get_internal_port(struct sparx5 *sparx5, int port);
599 #define SPX5_SDLB_PUP_TOKEN_MAX (SPX5_SDLB_PUP_TOKEN_DISABLE - 1)
616 int sparx5_sdlb_pup_token_get(struct sparx5 *sparx5, u32 pup_interval,
619 u64 sparx5_sdlb_clk_hz_get(struct sparx5 *sparx5);
620 int sparx5_sdlb_group_get_by_rate(struct sparx5 *sparx5, u32 rate, u32 burst);
621 int sparx5_sdlb_group_get_by_index(struct sparx5 *sparx5, u32 idx, u32 *group);
623 int sparx5_sdlb_group_add(struct sparx5 *sparx5, u32 group, u32 idx);
624 int sparx5_sdlb_group_del(struct sparx5 *sparx5, u32 group, u32 idx);
626 void sparx5_sdlb_group_init(struct sparx5 *sparx5, u64 max_rate, u32 min_burst,
644 int sparx5_policer_conf_set(struct sparx5 *sparx5, struct sparx5_policer *pol);
650 #define SPX5_PSFP_SG_MAX_CYCLE_TIME_NS ((1 * NSEC_PER_SEC) - 1)
651 #define SPX5_PSFP_SG_MAX_IPV (SPX5_PRIOS - 1)
652 #define SPX5_PSFP_SG_OPEN (SPX5_PSFP_SG_CNT - 1)
686 int sparx5_psfp_fm_add(struct sparx5 *sparx5, u32 uidx,
688 int sparx5_psfp_fm_del(struct sparx5 *sparx5, u32 id);
690 int sparx5_psfp_sg_add(struct sparx5 *sparx5, u32 uidx,
692 int sparx5_psfp_sg_del(struct sparx5 *sparx5, u32 id);
694 int sparx5_psfp_sf_add(struct sparx5 *sparx5, const struct sparx5_psfp_sf *sf,
696 int sparx5_psfp_sf_del(struct sparx5 *sparx5, u32 id);
698 u32 sparx5_psfp_isdx_get_sf(struct sparx5 *sparx5, u32 isdx);
699 u32 sparx5_psfp_isdx_get_fm(struct sparx5 *sparx5, u32 isdx);
700 u32 sparx5_psfp_sf_get_sg(struct sparx5 *sparx5, u32 sfid);
701 void sparx5_isdx_conf_set(struct sparx5 *sparx5, u32 isdx, u32 sfid, u32 fmid);
703 void sparx5_psfp_init(struct sparx5 *sparx5);
706 void sparx5_new_base_time(struct sparx5 *sparx5, const u32 cycle_time,
718 switch (cclock) { in sparx5_clk_period()
788 static inline u32 spx5_rd(struct sparx5 *sparx5, int id, int tinst, int tcnt, in spx5_rd() argument
792 return readl(spx5_addr(sparx5->regs, id, tinst, tcnt, gbase, ginst, in spx5_rd()
804 static inline void spx5_wr(u32 val, struct sparx5 *sparx5, in spx5_wr() argument
809 writel(val, spx5_addr(sparx5->regs, id, tinst, tcnt, in spx5_wr()
824 static inline void spx5_rmw(u32 val, u32 mask, struct sparx5 *sparx5, in spx5_rmw() argument
831 nval = readl(spx5_addr(sparx5->regs, id, tinst, tcnt, gbase, ginst, in spx5_rmw()
834 writel(nval, spx5_addr(sparx5->regs, id, tinst, tcnt, gbase, ginst, in spx5_rmw()
852 static inline void __iomem *spx5_inst_get(struct sparx5 *sparx5, int id, int tinst) in spx5_inst_get() argument
854 return sparx5->regs[id + tinst]; in spx5_inst_get()
857 static inline void __iomem *spx5_reg_get(struct sparx5 *sparx5, in spx5_reg_get() argument
862 return spx5_addr(sparx5->regs, id, tinst, tcnt, in spx5_reg_get()