linux/drivers/net/ethernet/sun/sunvnet.h
<<
>>
Prefs
   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/* length of time (or less) we expect pending descriptors to be marked
  15 * as VIO_DESC_DONE and skbs ready to be freed
  16 */
  17#define VNET_CLEAN_TIMEOUT              ((HZ/100)+1)
  18
  19#define VNET_MAXPACKET                  (65535ULL + ETH_HLEN + VLAN_HLEN)
  20#define VNET_TX_RING_SIZE               512
  21#define VNET_TX_WAKEUP_THRESH(dr)       ((dr)->pending / 4)
  22
  23#define VNET_MINTSO      2048   /* VIO protocol's minimum TSO len */
  24#define VNET_MAXTSO     65535   /* VIO protocol's maximum TSO len */
  25
  26/* VNET packets are sent in buffers with the first 6 bytes skipped
  27 * so that after the ethernet header the IPv4/IPv6 headers are aligned
  28 * properly.
  29 */
  30#define VNET_PACKET_SKIP                6
  31
  32#define VNET_MAXCOOKIES                 (VNET_MAXPACKET/PAGE_SIZE + 1)
  33
  34struct vnet_tx_entry {
  35        struct sk_buff          *skb;
  36        unsigned int            ncookies;
  37        struct ldc_trans_cookie cookies[VNET_MAXCOOKIES];
  38};
  39
  40struct vnet;
  41struct vnet_port {
  42        struct vio_driver_state vio;
  43
  44        struct hlist_node       hash;
  45        u8                      raddr[ETH_ALEN];
  46        unsigned                switch_port:1;
  47        unsigned                tso:1;
  48        unsigned                __pad:14;
  49
  50        struct vnet             *vp;
  51
  52        struct vnet_tx_entry    tx_bufs[VNET_TX_RING_SIZE];
  53
  54        struct list_head        list;
  55
  56        u32                     stop_rx_idx;
  57        bool                    stop_rx;
  58        bool                    start_cons;
  59
  60        struct timer_list       clean_timer;
  61
  62        u64                     rmtu;
  63        u16                     tsolen;
  64
  65        struct napi_struct      napi;
  66        u32                     napi_stop_idx;
  67        bool                    napi_resume;
  68        int                     rx_event;
  69        u16                     q_index;
  70};
  71
  72static inline struct vnet_port *to_vnet_port(struct vio_driver_state *vio)
  73{
  74        return container_of(vio, struct vnet_port, vio);
  75}
  76
  77#define VNET_PORT_HASH_SIZE     16
  78#define VNET_PORT_HASH_MASK     (VNET_PORT_HASH_SIZE - 1)
  79
  80static inline unsigned int vnet_hashfn(u8 *mac)
  81{
  82        unsigned int val = mac[4] ^ mac[5];
  83
  84        return val & (VNET_PORT_HASH_MASK);
  85}
  86
  87struct vnet_mcast_entry {
  88        u8                      addr[ETH_ALEN];
  89        u8                      sent;
  90        u8                      hit;
  91        struct vnet_mcast_entry *next;
  92};
  93
  94struct vnet {
  95        /* Protects port_list and port_hash.  */
  96        spinlock_t              lock;
  97
  98        struct net_device       *dev;
  99
 100        u32                     msg_enable;
 101
 102        struct list_head        port_list;
 103
 104        struct hlist_head       port_hash[VNET_PORT_HASH_SIZE];
 105
 106        struct vnet_mcast_entry *mcast_list;
 107
 108        struct list_head        list;
 109        u64                     local_mac;
 110
 111        int                     nports;
 112};
 113
 114#endif /* _SUNVNET_H */
 115