cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hns_enet.h (2432B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * Copyright (c) 2014-2015 Hisilicon Limited.
      4 */
      5
      6#ifndef __HNS_ENET_H
      7#define __HNS_ENET_H
      8
      9#include <linux/netdevice.h>
     10#include <linux/of_net.h>
     11#include <linux/of_mdio.h>
     12#include <linux/timer.h>
     13#include <linux/workqueue.h>
     14
     15#include "hnae.h"
     16
     17#define HNS_DEBUG_OFFSET	6
     18#define HNS_SRV_OFFSET		2
     19
     20enum hns_nic_state {
     21	NIC_STATE_TESTING = 0,
     22	NIC_STATE_RESETTING,
     23	NIC_STATE_REINITING,
     24	NIC_STATE_DOWN,
     25	NIC_STATE_DISABLED,
     26	NIC_STATE_REMOVING,
     27	NIC_STATE_SERVICE_INITED,
     28	NIC_STATE_SERVICE_SCHED,
     29	NIC_STATE2_RESET_REQUESTED,
     30	NIC_STATE_MAX
     31};
     32
     33struct hns_nic_ring_data {
     34	struct hnae_ring *ring;
     35	struct napi_struct napi;
     36	cpumask_t mask; /* affinity mask */
     37	u32 queue_index;
     38	int (*poll_one)(struct hns_nic_ring_data *, int, void *);
     39	void (*ex_process)(struct hns_nic_ring_data *, struct sk_buff *);
     40	bool (*fini_process)(struct hns_nic_ring_data *);
     41};
     42
     43/* compatible the difference between two versions */
     44struct hns_nic_ops {
     45	void (*fill_desc)(struct hnae_ring *ring, void *priv,
     46			  int size, dma_addr_t dma, int frag_end,
     47			  int buf_num, enum hns_desc_type type, int mtu);
     48	int (*maybe_stop_tx)(struct sk_buff **out_skb,
     49			     int *bnum, struct hnae_ring *ring);
     50	void (*get_rxd_bnum)(u32 bnum_flag, int *out_bnum);
     51};
     52
     53struct hns_nic_priv {
     54	const struct fwnode_handle      *fwnode;
     55	u32 enet_ver;
     56	u32 port_id;
     57	int phy_mode;
     58	int phy_led_val;
     59	struct net_device *netdev;
     60	struct device *dev;
     61	struct hnae_handle *ae_handle;
     62
     63	struct hns_nic_ops ops;
     64
     65	/* the cb for nic to manage the ring buffer, the first half of the
     66	 * array is for tx_ring and vice versa for the second half
     67	 */
     68	struct hns_nic_ring_data *ring_data;
     69
     70	/* The most recently read link state */
     71	int link;
     72	u64 tx_timeout_count;
     73
     74	unsigned long state;
     75
     76	struct timer_list service_timer;
     77
     78	struct work_struct service_task;
     79
     80	struct notifier_block notifier_block;
     81};
     82
     83#define tx_ring_data(priv, idx) ((priv)->ring_data[idx])
     84#define rx_ring_data(priv, idx) \
     85	((priv)->ring_data[(priv)->ae_handle->q_num + (idx)])
     86
     87void hns_ethtool_set_ops(struct net_device *ndev);
     88void hns_nic_net_reset(struct net_device *ndev);
     89void hns_nic_net_reinit(struct net_device *netdev);
     90int hns_nic_init_phy(struct net_device *ndev, struct hnae_handle *h);
     91netdev_tx_t hns_nic_net_xmit_hw(struct net_device *ndev,
     92				struct sk_buff *skb,
     93				struct hns_nic_ring_data *ring_data);
     94
     95#endif	/**__HNS_ENET_H */