29#define MAX_RT_DEVICES 8
33#include <asm/atomic.h>
34#include <linux/netdevice.h>
37#include <rtnet_internal.h>
39#define RTDEV_VERS_2_0 0x0200
42#define PRIV_FLAG_ADDING_ROUTE 1
45#define NETIF_F_LLTX 4096
49#define RTDEV_TX_BUSY 1
51enum rtnet_link_state {
52 __RTNET_LINK_STATE_XOFF = 0,
53 __RTNET_LINK_STATE_START,
54 __RTNET_LINK_STATE_PRESENT,
55 __RTNET_LINK_STATE_NOCARRIER,
57#define RTNET_LINK_STATE_XOFF (1 << __RTNET_LINK_STATE_XOFF)
58#define RTNET_LINK_STATE_START (1 << __RTNET_LINK_STATE_START)
59#define RTNET_LINK_STATE_PRESENT (1 << __RTNET_LINK_STATE_PRESENT)
60#define RTNET_LINK_STATE_NOCARRIER (1 << __RTNET_LINK_STATE_NOCARRIER)
72 struct device *sysbind;
74 unsigned long rmem_end;
75 unsigned long rmem_start;
76 unsigned long mem_end;
77 unsigned long mem_start;
78 unsigned long base_addr;
85 unsigned char if_port;
89 unsigned long link_state;
93 struct device *sysdev;
94 struct module *rt_owner;
98 unsigned long priv_flags;
100 unsigned short hard_header_len;
103 netdev_features_t features;
106 unsigned char broadcast[MAX_ADDR_LEN];
107 unsigned char dev_addr[MAX_ADDR_LEN];
108 unsigned char addr_len;
116 rtdm_event_t *stack_event;
118 rtdm_mutex_t xmit_mutex;
120 struct mutex nrt_lock;
122 unsigned int add_rtskbs;
124 struct rtskb_pool dev_pool;
127 struct rtmac_disc *mac_disc;
128 struct rtmac_priv *mac_priv;
129 int (*mac_detach)(
struct rtnet_device *rtdev);
132 int (*open)(
struct rtnet_device *rtdev);
133 int (*stop)(
struct rtnet_device *rtdev);
134 int (*hard_header)(
struct rtskb *,
struct rtnet_device *,
135 unsigned short type,
void *daddr,
void *saddr,
137 int (*rebuild_header)(
struct rtskb *);
138 int (*hard_start_xmit)(
struct rtskb *skb,
struct rtnet_device *dev);
139 int (*hw_reset)(
struct rtnet_device *rtdev);
147 int (*start_xmit)(
struct rtskb *skb,
struct rtnet_device *dev);
150 unsigned int (*get_mtu)(
struct rtnet_device *rtdev,
151 unsigned int priority);
153 int (*do_ioctl)(
struct rtnet_device *rtdev,
struct ifreq *ifr,
int cmd);
154 struct net_device_stats *(*get_stats)(
struct rtnet_device *rtdev);
157 dma_addr_t (*map_rtskb)(
struct rtnet_device *rtdev,
struct rtskb *skb);
158 void (*unmap_rtskb)(
struct rtnet_device *rtdev,
struct rtskb *skb);
161struct rtnet_core_cmd;
163struct rtdev_event_hook {
164 struct list_head entry;
165 void (*register_device)(
struct rtnet_device *rtdev);
166 void (*unregister_device)(
struct rtnet_device *rtdev);
167 void (*ifup)(
struct rtnet_device *rtdev,
struct rtnet_core_cmd *up_cmd);
168 void (*ifdown)(
struct rtnet_device *rtdev);
171extern struct list_head event_hook_list;
172extern struct mutex rtnet_devices_nrt_lock;
173extern struct rtnet_device *rtnet_devices[];
175int __rt_init_etherdev(
struct rtnet_device *rtdev,
unsigned int dev_pool_size,
176 struct module *module);
178#define rt_init_etherdev(__rtdev, __dev_pool_size) \
179 __rt_init_etherdev(__rtdev, __dev_pool_size, THIS_MODULE)
181struct rtnet_device *__rt_alloc_etherdev(
unsigned sizeof_priv,
182 unsigned dev_pool_size,
183 struct module *module);
184#define rt_alloc_etherdev(priv_size, rx_size) \
185 __rt_alloc_etherdev(priv_size, rx_size, THIS_MODULE)
187void rtdev_destroy(
struct rtnet_device *rtdev);
189void rtdev_free(
struct rtnet_device *rtdev);
191int rt_register_rtnetdev(
struct rtnet_device *rtdev);
192int rt_unregister_rtnetdev(
struct rtnet_device *rtdev);
194void rtdev_add_event_hook(
struct rtdev_event_hook *hook);
195void rtdev_del_event_hook(
struct rtdev_event_hook *hook);
197void rtdev_alloc_name(
struct rtnet_device *rtdev,
const char *name_mask);
204static inline struct rtnet_device *__rtdev_get_by_index(
int ifindex)
206 return rtnet_devices[ifindex - 1];
209struct rtnet_device *rtdev_get_by_name(
const char *if_name);
210struct rtnet_device *rtdev_get_by_index(
int ifindex);
211struct rtnet_device *rtdev_get_by_hwaddr(
unsigned short type,
char *ha);
212struct rtnet_device *rtdev_get_loopback(
void);
214int rtdev_reference(
struct rtnet_device *rtdev);
216static inline void rtdev_dereference(
struct rtnet_device *rtdev)
218 smp_mb__before_atomic();
219 if (rtdev->rt_owner && atomic_dec_and_test(&rtdev->refcount))
220 module_put(rtdev->rt_owner);
223int rtdev_xmit(
struct rtskb *skb);
225#if IS_ENABLED(CONFIG_XENO_DRIVERS_NET_ADDON_PROXY)
226int rtdev_xmit_proxy(
struct rtskb *skb);
229unsigned int rt_hard_mtu(
struct rtnet_device *rtdev,
unsigned int priority);
231int rtdev_open(
struct rtnet_device *rtdev);
232int rtdev_close(
struct rtnet_device *rtdev);
234int rtdev_up(
struct rtnet_device *rtdev,
struct rtnet_core_cmd *cmd);
235int rtdev_down(
struct rtnet_device *rtdev);
237int rtdev_map_rtskb(
struct rtskb *skb);
238void rtdev_unmap_rtskb(
struct rtskb *skb);
240struct rtskb *rtnetdev_alloc_rtskb(
struct rtnet_device *dev,
unsigned int size);
242#define rtnetdev_priv(dev) ((dev)->priv)
244#define rtdev_emerg(__dev, format, args...) \
245 pr_emerg("%s: " format, (__dev)->name, ##args)
246#define rtdev_alert(__dev, format, args...) \
247 pr_alert("%s: " format, (__dev)->name, ##args)
248#define rtdev_crit(__dev, format, args...) \
249 pr_crit("%s: " format, (__dev)->name, ##args)
250#define rtdev_err(__dev, format, args...) \
251 pr_err("%s: " format, (__dev)->name, ##args)
252#define rtdev_warn(__dev, format, args...) \
253 pr_warn("%s: " format, (__dev)->name, ##args)
254#define rtdev_notice(__dev, format, args...) \
255 pr_notice("%s: " format, (__dev)->name, ##args)
256#define rtdev_info(__dev, format, args...) \
257 pr_info("%s: " format, (__dev)->name, ##args)
258#define rtdev_dbg(__dev, format, args...) \
259 pr_debug("%s: " format, (__dev)->name, ##args)
262#define rtdev_vdbg rtdev_dbg
264#define rtdev_vdbg(__dev, format, args...) \
267 pr_debug("%s: " format, (__dev)->name, ##args); \
pipeline_spinlock_t rtdm_lock_t
Lock variable.
Definition driver.h:552
Copyright © 2011 Gilles Chanteperdrix gilles.chanteperdrix@xenomai.org.
Definition atomic.h:24