vserver 1.9.5.x5
[linux-2.6.git] / include / linux / netdevice.h
index 6a821e7..eafc820 100644 (file)
@@ -73,6 +73,11 @@ struct ethtool_ops;
 
 #define MAX_ADDR_LEN   32              /* Largest hardware address length */
 
+/* Driver transmit return codes */
+#define NETDEV_TX_OK 0         /* driver took care of packet */
+#define NETDEV_TX_BUSY 1       /* driver tx path was busy*/
+#define NETDEV_TX_LOCKED -1    /* driver tx lock was already taken */
+
 /*
  *     Compute the worst case header length according to the protocols
  *     used.
@@ -215,6 +220,8 @@ struct hh_cache
  */
 #define LL_RESERVED_SPACE(dev) \
        (((dev)->hard_header_len&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
+#define LL_RESERVED_SPACE_EXTRA(dev,extra) \
+       ((((dev)->hard_header_len+extra)&~(HH_DATA_MOD - 1)) + HH_DATA_MOD)
 
 /* These flag bits are private to the generic network queueing
  * layer, they may not be explicitly referenced by any other
@@ -302,7 +309,9 @@ struct net_device
 
        /* List of functions to handle Wireless Extensions (instead of ioctl).
         * See <net/iw_handler.h> for details. Jean II */
-       struct iw_handler_def * wireless_handlers;
+       const struct iw_handler_def *   wireless_handlers;
+       /* Instance data managed by the core of Wireless Extensions. */
+       struct iw_public_data * wireless_data;
 
        struct ethtool_ops *ethtool_ops;
 
@@ -336,6 +345,7 @@ struct net_device
        unsigned char           broadcast[MAX_ADDR_LEN];        /* hw bcast add */
        unsigned char           dev_addr[MAX_ADDR_LEN]; /* hw address   */
        unsigned char           addr_len;       /* hardware address length      */
+       unsigned short          dev_id;         /* for shared network cards */
 
        struct dev_mc_list      *mc_list;       /* Multicast mac addresses      */
        int                     mc_count;       /* Number of installed mcasts   */
@@ -360,10 +370,12 @@ struct net_device
 
        struct Qdisc            *qdisc;
        struct Qdisc            *qdisc_sleeping;
-       struct Qdisc            *qdisc_list;
        struct Qdisc            *qdisc_ingress;
+       struct list_head        qdisc_list;
        unsigned long           tx_queue_len;   /* Max frames per queue allowed */
 
+       /* ingress path synchronizer */
+       spinlock_t              ingress_lock;
        /* hard_start_xmit synchronizer */
        spinlock_t              xmit_lock;
        /* cpu id of processor entered to hard_start_xmit or -1,
@@ -403,6 +415,7 @@ struct net_device
 #define NETIF_F_HW_VLAN_FILTER 512     /* Receive filtering on VLAN */
 #define NETIF_F_VLAN_CHALLENGED        1024    /* Device cannot handle VLAN packets */
 #define NETIF_F_TSO            2048    /* Can offload TCP/IP segmentation */
+#define NETIF_F_LLTX           4096    /* LockLess TX */
 
        /* Called after device is detached from network. */
        void                    (*uninit)(struct net_device *dev);
@@ -457,7 +470,7 @@ struct net_device
                                                     unsigned char *haddr);
        int                     (*neigh_setup)(struct net_device *dev, struct neigh_parms *);
        int                     (*accept_fastpath)(struct net_device *, struct dst_entry*);
-#ifdef CONFIG_NETPOLL_RX
+#ifdef CONFIG_NETPOLL
        int                     netpoll_rx;
 #endif
 #ifdef CONFIG_NET_POLL_CONTROLLER
@@ -467,12 +480,6 @@ struct net_device
        /* bridge stuff */
        struct net_bridge_port  *br_port;
 
-#ifdef CONFIG_NET_FASTROUTE
-#define NETDEV_FASTROUTE_HMASK 0xF
-       /* Semi-private data. Keep it at the end of device struct. */
-       rwlock_t                fastpath_lock;
-       struct dst_entry        *fastpath[NETDEV_FASTROUTE_HMASK+1];
-#endif
 #ifdef CONFIG_NET_DIVERT
        /* this will get initialized at each interface type init routine */
        struct divert_blk       *divert;
@@ -480,7 +487,6 @@ struct net_device
 
        /* class/net/name entry */
        struct class_device     class_dev;
-       struct net_device_stats* (*last_stats)(struct net_device *);
        /* how much padding had been added by alloc_netdev() */
        int padded;
 };
@@ -517,24 +523,16 @@ extern struct net_device          loopback_dev;           /* The loopback */
 extern struct net_device               *dev_base;              /* All devices */
 extern rwlock_t                                dev_base_lock;          /* Device list lock */
 
-extern int                     netdev_boot_setup_add(char *name, struct ifmap *map);
 extern int                     netdev_boot_setup_check(struct net_device *dev);
 extern unsigned long           netdev_boot_base(const char *prefix, int unit);
 extern struct net_device    *dev_getbyhwaddr(unsigned short type, char *hwaddr);
-extern struct net_device *__dev_getfirstbyhwtype(unsigned short type);
 extern struct net_device *dev_getfirstbyhwtype(unsigned short type);
 extern void            dev_add_pack(struct packet_type *pt);
 extern void            dev_remove_pack(struct packet_type *pt);
 extern void            __dev_remove_pack(struct packet_type *pt);
-extern int             __dev_get(const char *name);
-static inline int __deprecated dev_get(const char *name)
-{
-       return __dev_get(name);
-}
+
 extern struct net_device       *dev_get_by_flags(unsigned short flags,
                                                  unsigned short mask);
-extern struct net_device       *__dev_get_by_flags(unsigned short flags,
-                                                   unsigned short mask);
 extern struct net_device       *dev_get_by_name(const char *name);
 extern struct net_device       *__dev_get_by_name(const char *name);
 extern int             dev_alloc_name(struct net_device *dev, const char *name);
@@ -548,7 +546,6 @@ extern void         synchronize_net(void);
 extern int             register_netdevice_notifier(struct notifier_block *nb);
 extern int             unregister_netdevice_notifier(struct notifier_block *nb);
 extern int             call_netdevice_notifiers(unsigned long val, void *v);
-extern int             dev_new_index(void);
 extern struct net_device       *dev_get_by_index(int ifindex);
 extern struct net_device       *__dev_get_by_index(int ifindex);
 extern int             dev_restart(struct net_device *dev);
@@ -556,11 +553,11 @@ extern int                dev_restart(struct net_device *dev);
 extern int             netpoll_trap(void);
 #endif
 
-typedef int gifconf_func_t(struct net_device * dev, char * bufptr, int len);
+typedef int gifconf_func_t(struct net_device * dev, char __user * bufptr, int len);
 extern int             register_gifconf(unsigned int family, gifconf_func_t * gifconf);
 static inline int unregister_gifconf(unsigned int family)
 {
-       return register_gifconf(family, 0);
+       return register_gifconf(family, NULL);
 }
 
 /*
@@ -672,12 +669,14 @@ static inline void dev_kfree_skb_any(struct sk_buff *skb)
 
 #define HAVE_NETIF_RX 1
 extern int             netif_rx(struct sk_buff *skb);
+extern int             netif_rx_ni(struct sk_buff *skb);
 #define HAVE_NETIF_RECEIVE_SKB 1
 extern int             netif_receive_skb(struct sk_buff *skb);
-extern int             dev_ioctl(unsigned int cmd, void *);
+extern int             dev_ioctl(unsigned int cmd, void __user *);
 extern int             dev_ethtool(struct ifreq *);
 extern unsigned                dev_get_flags(const struct net_device *);
 extern int             dev_change_flags(struct net_device *, unsigned);
+extern int             dev_change_name(struct net_device *, char *);
 extern int             dev_set_mtu(struct net_device *, int);
 extern void            dev_queue_xmit_nit(struct sk_buff *skb, struct net_device *dev);
 
@@ -685,17 +684,6 @@ extern void                dev_init(void);
 
 extern int             netdev_nit;
 
-/* Post buffer to the network code from _non interrupt_ context.
- * see net/core/dev.c for netif_rx description.
- */
-static inline int netif_rx_ni(struct sk_buff *skb)
-{
-       int err = netif_rx(skb);
-       if (softirq_pending(smp_processor_id()))
-               do_softirq();
-       return err;
-}
-
 /* Called by rtnetlink.c:rtnl_unlock() */
 extern void netdev_run_todo(void);
 
@@ -914,10 +902,7 @@ static inline void netif_tx_disable(struct net_device *dev)
 /* These functions live elsewhere (drivers/net/net_init.c, but related) */
 
 extern void            ether_setup(struct net_device *dev);
-extern void            fddi_setup(struct net_device *dev);
-extern void            tr_setup(struct net_device *dev);
-extern void            fc_setup(struct net_device *dev);
-extern void            fc_freedev(struct net_device *dev);
+
 /* Support for loadable net-drivers */
 extern struct net_device *alloc_netdev(int sizeof_priv, const char *name,
                                       void (*setup)(struct net_device *));
@@ -934,19 +919,15 @@ extern void               netdev_state_change(struct net_device *dev);
 /* Load a device via the kmod */
 extern void            dev_load(const char *name);
 extern void            dev_mcast_init(void);
-extern int             netdev_register_fc(struct net_device *dev, void (*stimul)(struct net_device *dev));
-extern void            netdev_unregister_fc(int bit);
 extern int             netdev_max_backlog;
 extern int             weight_p;
 extern unsigned long   netdev_fc_xoff;
 extern atomic_t netdev_dropping;
 extern int             netdev_set_master(struct net_device *dev, struct net_device *master);
-extern struct sk_buff * skb_checksum_help(struct sk_buff *skb);
-#ifdef CONFIG_NET_FASTROUTE
-extern int             netdev_fastroute;
-extern int             netdev_fastroute_obstacles;
-extern void            dev_clear_fastroute(struct net_device *dev);
-#endif
+extern int skb_checksum_help(struct sk_buff *skb, int inward);
+/* rx skb timestamps */
+extern void            net_enable_timestamp(void);
+extern void            net_disable_timestamp(void);
 
 #ifdef CONFIG_SYSCTL
 extern char *net_sysctl_strdup(const char *s);