Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
[firefly-linux-kernel-4.4.55.git] / drivers / net / ethernet / sun / sunvnet.h
1 #ifndef _SUNVNET_H
2 #define _SUNVNET_H
3
4 #include <linux/interrupt.h>
5
6 #define DESC_NCOOKIES(entry_size)       \
7         ((entry_size) - sizeof(struct vio_net_desc))
8
9 /* length of time before we decide the hardware is borked,
10  * and dev->tx_timeout() should be called to fix the problem
11  */
12 #define VNET_TX_TIMEOUT                 (5 * HZ)
13
14 #define VNET_TX_RING_SIZE               512
15 #define VNET_TX_WAKEUP_THRESH(dr)       ((dr)->pending / 4)
16
17 /* VNET packets are sent in buffers with the first 6 bytes skipped
18  * so that after the ethernet header the IPv4/IPv6 headers are aligned
19  * properly.
20  */
21 #define VNET_PACKET_SKIP                6
22
23 struct vnet_tx_entry {
24         void                    *buf;
25         unsigned int            ncookies;
26         struct ldc_trans_cookie cookies[2];
27 };
28
29 struct vnet;
30 struct vnet_port {
31         struct vio_driver_state vio;
32
33         struct hlist_node       hash;
34         u8                      raddr[ETH_ALEN];
35         u8                      switch_port;
36         u8                      __pad;
37
38         struct vnet             *vp;
39
40         struct vnet_tx_entry    tx_bufs[VNET_TX_RING_SIZE];
41
42         struct list_head        list;
43 };
44
45 static inline struct vnet_port *to_vnet_port(struct vio_driver_state *vio)
46 {
47         return container_of(vio, struct vnet_port, vio);
48 }
49
50 #define VNET_PORT_HASH_SIZE     16
51 #define VNET_PORT_HASH_MASK     (VNET_PORT_HASH_SIZE - 1)
52
53 static inline unsigned int vnet_hashfn(u8 *mac)
54 {
55         unsigned int val = mac[4] ^ mac[5];
56
57         return val & (VNET_PORT_HASH_MASK);
58 }
59
60 struct vnet_mcast_entry {
61         u8                      addr[ETH_ALEN];
62         u8                      sent;
63         u8                      hit;
64         struct vnet_mcast_entry *next;
65 };
66
67 struct vnet {
68         /* Protects port_list and port_hash.  */
69         spinlock_t              lock;
70
71         struct net_device       *dev;
72
73         u32                     msg_enable;
74
75         struct list_head        port_list;
76
77         struct hlist_head       port_hash[VNET_PORT_HASH_SIZE];
78
79         struct vnet_mcast_entry *mcast_list;
80
81         struct list_head        list;
82         u64                     local_mac;
83
84         struct tasklet_struct   vnet_tx_wakeup;
85 };
86
87 #endif /* _SUNVNET_H */