Commit dc1f8bf6 authored by Stephen Hemminger's avatar Stephen Hemminger Committed by David S. Miller

netdev: change transmit to limited range type

The transmit function should only return one of three possible values,
some drivers got confused and returned errno's or other values.
This changes the definition so that this can be caught at compile time.
Signed-off-by: default avatarStephen Hemminger <shemminger@vyatta.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 9e39f7c5
...@@ -79,17 +79,19 @@ struct wireless_dev; ...@@ -79,17 +79,19 @@ struct wireless_dev;
#define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e)) #define net_xmit_eval(e) ((e) == NET_XMIT_CN? 0 : (e))
#define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0) #define net_xmit_errno(e) ((e) != NET_XMIT_CN ? -ENOBUFS : 0)
/* Driver transmit return codes */
enum netdev_tx {
NETDEV_TX_OK = 0, /* driver took care of packet */
NETDEV_TX_BUSY, /* driver tx path was busy*/
NETDEV_TX_LOCKED = -1, /* driver tx lock was already taken */
};
typedef enum netdev_tx netdev_tx_t;
#endif #endif
#define MAX_ADDR_LEN 32 /* Largest hardware address length */ #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 */
#ifdef __KERNEL__ #ifdef __KERNEL__
/* /*
* Compute the worst case header length according to the protocols * Compute the worst case header length according to the protocols
* used. * used.
...@@ -507,9 +509,11 @@ struct netdev_queue { ...@@ -507,9 +509,11 @@ struct netdev_queue {
* This function is called when network device transistions to the down * This function is called when network device transistions to the down
* state. * state.
* *
* int (*ndo_start_xmit)(struct sk_buff *skb, struct net_device *dev); * netdev_tx_t (*ndo_start_xmit)(struct sk_buff *skb,
* struct net_device *dev);
* Called when a packet needs to be transmitted. * Called when a packet needs to be transmitted.
* Must return NETDEV_TX_OK , NETDEV_TX_BUSY, or NETDEV_TX_LOCKED, * Must return NETDEV_TX_OK , NETDEV_TX_BUSY.
* (can also return NETDEV_TX_LOCKED iff NETIF_F_LLTX)
* Required can not be NULL. * Required can not be NULL.
* *
* u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb); * u16 (*ndo_select_queue)(struct net_device *dev, struct sk_buff *skb);
...@@ -580,7 +584,7 @@ struct net_device_ops { ...@@ -580,7 +584,7 @@ struct net_device_ops {
void (*ndo_uninit)(struct net_device *dev); void (*ndo_uninit)(struct net_device *dev);
int (*ndo_open)(struct net_device *dev); int (*ndo_open)(struct net_device *dev);
int (*ndo_stop)(struct net_device *dev); int (*ndo_stop)(struct net_device *dev);
int (*ndo_start_xmit) (struct sk_buff *skb, netdev_tx_t (*ndo_start_xmit) (struct sk_buff *skb,
struct net_device *dev); struct net_device *dev);
u16 (*ndo_select_queue)(struct net_device *dev, u16 (*ndo_select_queue)(struct net_device *dev,
struct sk_buff *skb); struct sk_buff *skb);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment