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