brintos

brintos / linux-shallow public Read only

0
0
Text · 4.2 KiB · e75814a Raw
143 lines · c
1/* SPDX-License-Identifier: GPL-2.0-or-later */2/*3 * drivers/net/ethernet/rocker/rocker.h - Rocker switch device driver4 * Copyright (c) 2014-2016 Jiri Pirko <jiri@mellanox.com>5 * Copyright (c) 2014 Scott Feldman <sfeldma@gmail.com>6 */7 8#ifndef _ROCKER_H9#define _ROCKER_H10 11#include <linux/kernel.h>12#include <linux/types.h>13#include <linux/netdevice.h>14#include <linux/notifier.h>15#include <net/neighbour.h>16#include <net/switchdev.h>17 18#include "rocker_hw.h"19 20struct rocker_desc_info {21	char *data; /* mapped */22	size_t data_size;23	size_t tlv_size;24	struct rocker_desc *desc;25	dma_addr_t mapaddr;26};27 28struct rocker_dma_ring_info {29	size_t size;30	u32 head;31	u32 tail;32	struct rocker_desc *desc; /* mapped */33	dma_addr_t mapaddr;34	struct rocker_desc_info *desc_info;35	unsigned int type;36};37 38struct rocker;39 40struct rocker_port {41	struct net_device *dev;42	struct rocker *rocker;43	void *wpriv;44	unsigned int port_number;45	u32 pport;46	struct napi_struct napi_tx;47	struct napi_struct napi_rx;48	struct rocker_dma_ring_info tx_ring;49	struct rocker_dma_ring_info rx_ring;50};51 52struct rocker_port *rocker_port_dev_lower_find(struct net_device *dev,53					       struct rocker *rocker);54 55struct rocker_world_ops;56 57struct rocker {58	struct pci_dev *pdev;59	u8 __iomem *hw_addr;60	struct msix_entry *msix_entries;61	unsigned int port_count;62	struct rocker_port **ports;63	struct {64		u64 id;65	} hw;66	spinlock_t cmd_ring_lock;		/* for cmd ring accesses */67	struct rocker_dma_ring_info cmd_ring;68	struct rocker_dma_ring_info event_ring;69	struct notifier_block fib_nb;70	struct rocker_world_ops *wops;71	struct workqueue_struct *rocker_owq;72	void *wpriv;73};74 75typedef int (*rocker_cmd_prep_cb_t)(const struct rocker_port *rocker_port,76				    struct rocker_desc_info *desc_info,77				    void *priv);78 79typedef int (*rocker_cmd_proc_cb_t)(const struct rocker_port *rocker_port,80				    const struct rocker_desc_info *desc_info,81				    void *priv);82 83int rocker_cmd_exec(struct rocker_port *rocker_port, bool nowait,84		    rocker_cmd_prep_cb_t prepare, void *prepare_priv,85		    rocker_cmd_proc_cb_t process, void *process_priv);86 87int rocker_port_set_learning(struct rocker_port *rocker_port,88			     bool learning);89 90struct rocker_world_ops {91	const char *kind;92	size_t priv_size;93	size_t port_priv_size;94	u8 mode;95	int (*init)(struct rocker *rocker);96	void (*fini)(struct rocker *rocker);97	int (*port_pre_init)(struct rocker_port *rocker_port);98	int (*port_init)(struct rocker_port *rocker_port);99	void (*port_fini)(struct rocker_port *rocker_port);100	void (*port_post_fini)(struct rocker_port *rocker_port);101	int (*port_open)(struct rocker_port *rocker_port);102	void (*port_stop)(struct rocker_port *rocker_port);103	int (*port_attr_stp_state_set)(struct rocker_port *rocker_port,104				       u8 state);105	int (*port_attr_bridge_flags_set)(struct rocker_port *rocker_port,106					  unsigned long brport_flags);107	int (*port_attr_bridge_flags_support_get)(const struct rocker_port *108						  rocker_port,109						  unsigned long *110						  p_brport_flags);111	int (*port_attr_bridge_ageing_time_set)(struct rocker_port *rocker_port,112						u32 ageing_time);113	int (*port_obj_vlan_add)(struct rocker_port *rocker_port,114				 const struct switchdev_obj_port_vlan *vlan);115	int (*port_obj_vlan_del)(struct rocker_port *rocker_port,116				 const struct switchdev_obj_port_vlan *vlan);117	int (*port_obj_fdb_add)(struct rocker_port *rocker_port,118				u16 vid, const unsigned char *addr);119	int (*port_obj_fdb_del)(struct rocker_port *rocker_port,120				u16 vid, const unsigned char *addr);121	int (*port_master_linked)(struct rocker_port *rocker_port,122				  struct net_device *master,123				  struct netlink_ext_ack *extack);124	int (*port_master_unlinked)(struct rocker_port *rocker_port,125				    struct net_device *master);126	int (*port_neigh_update)(struct rocker_port *rocker_port,127				 struct neighbour *n);128	int (*port_neigh_destroy)(struct rocker_port *rocker_port,129				  struct neighbour *n);130	int (*port_ev_mac_vlan_seen)(struct rocker_port *rocker_port,131				     const unsigned char *addr,132				     __be16 vlan_id);133	int (*fib4_add)(struct rocker *rocker,134			const struct fib_entry_notifier_info *fen_info);135	int (*fib4_del)(struct rocker *rocker,136			const struct fib_entry_notifier_info *fen_info);137	void (*fib4_abort)(struct rocker *rocker);138};139 140extern struct rocker_world_ops rocker_ofdpa_ops;141 142#endif143