29 #define MAX_RT_DEVICES 8
34 #include <asm/atomic.h>
35 #include <linux/netdevice.h>
38 #include <rtnet_internal.h>
40 #define RTDEV_VERS_2_0 0x0200
42 #define PRIV_FLAG_UP 0
43 #define PRIV_FLAG_ADDING_ROUTE 1
46 #define NETIF_F_LLTX 4096
50 #define RTDEV_TX_BUSY 1
52 enum rtnet_link_state {
53 __RTNET_LINK_STATE_XOFF = 0,
54 __RTNET_LINK_STATE_START,
55 __RTNET_LINK_STATE_PRESENT,
56 __RTNET_LINK_STATE_NOCARRIER,
70 unsigned long rmem_end;
71 unsigned long rmem_start;
72 unsigned long mem_end;
73 unsigned long mem_start;
74 unsigned long base_addr;
81 unsigned char if_port;
85 unsigned long link_state;
89 struct module *rt_owner;
93 unsigned long priv_flags;
95 unsigned short hard_header_len;
98 netdev_features_t features;
101 unsigned char broadcast[MAX_ADDR_LEN];
102 unsigned char dev_addr[MAX_ADDR_LEN];
103 unsigned char addr_len;
111 rtdm_event_t *stack_event;
113 rtdm_mutex_t xmit_mutex;
115 struct mutex nrt_lock;
117 unsigned int add_rtskbs;
119 struct rtskb_pool rx_pool;
122 struct rtmac_disc *mac_disc;
123 struct rtmac_priv *mac_priv;
124 int (*mac_detach)(
struct rtnet_device *rtdev);
127 int (*open)(
struct rtnet_device *rtdev);
128 int (*stop)(
struct rtnet_device *rtdev);
129 int (*hard_header)(
struct rtskb *,
struct rtnet_device *,
130 unsigned short type,
void *daddr,
131 void *saddr,
unsigned int len);
132 int (*rebuild_header)(
struct rtskb *);
133 int (*hard_start_xmit)(
struct rtskb *skb,
134 struct rtnet_device *dev);
135 int (*hw_reset)(
struct rtnet_device *rtdev);
143 int (*start_xmit)(
struct rtskb *skb,
144 struct rtnet_device *dev);
147 unsigned int (*get_mtu)(
struct rtnet_device *rtdev,
148 unsigned int priority);
150 int (*do_ioctl)(
struct rtnet_device *rtdev,
151 unsigned int request,
void * cmd);
152 struct net_device_stats *(*get_stats)(
struct rtnet_device *rtdev);
155 dma_addr_t (*map_rtskb)(
struct rtnet_device *rtdev,
157 void (*unmap_rtskb)(
struct rtnet_device *rtdev,
161 struct rtnet_core_cmd;
163 struct 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,
168 struct rtnet_core_cmd *up_cmd);
169 void (*ifdown)(
struct rtnet_device *rtdev);
172 extern struct list_head event_hook_list;
173 extern struct mutex rtnet_devices_nrt_lock;
174 extern struct rtnet_device *rtnet_devices[];
177 struct rtnet_device *__rt_alloc_etherdev(
unsigned sizeof_priv,
178 unsigned rx_pool_size,
179 struct module *module);
180 #define rt_alloc_etherdev(priv_size, rx_size) \
181 __rt_alloc_etherdev(priv_size, rx_size, THIS_MODULE)
183 void rtdev_free(
struct rtnet_device *rtdev);
185 int rt_register_rtnetdev(
struct rtnet_device *rtdev);
186 int rt_unregister_rtnetdev(
struct rtnet_device *rtdev);
188 void rtdev_add_event_hook(
struct rtdev_event_hook *hook);
189 void rtdev_del_event_hook(
struct rtdev_event_hook *hook);
191 void rtdev_alloc_name (
struct rtnet_device *rtdev,
const char *name_mask);
198 static inline struct rtnet_device *__rtdev_get_by_index(
int ifindex)
200 return rtnet_devices[ifindex-1];
203 struct rtnet_device *rtdev_get_by_name(
const char *if_name);
204 struct rtnet_device *rtdev_get_by_index(
int ifindex);
205 struct rtnet_device *rtdev_get_by_hwaddr(
unsigned short type,
char *ha);
206 struct rtnet_device *rtdev_get_loopback(
void);
208 int rtdev_reference(
struct rtnet_device *rtdev);
210 static inline void rtdev_dereference(
struct rtnet_device *rtdev)
212 smp_mb__before_atomic();
213 if (rtdev->rt_owner && atomic_dec_and_test(&rtdev->refcount))
214 module_put(rtdev->rt_owner);
217 int rtdev_xmit(
struct rtskb *skb);
219 #if IS_ENABLED(CONFIG_XENO_DRIVERS_NET_ADDON_PROXY)
220 int rtdev_xmit_proxy(
struct rtskb *skb);
223 unsigned int rt_hard_mtu(
struct rtnet_device *rtdev,
unsigned int priority);
225 int rtdev_open(
struct rtnet_device *rtdev);
226 int rtdev_close(
struct rtnet_device *rtdev);
228 int rtdev_map_rtskb(
struct rtskb *skb);
229 void rtdev_unmap_rtskb(
struct rtskb *skb);
231 struct rtskb *rtnetdev_alloc_rtskb(
struct rtnet_device *dev,
unsigned int size);
233 #define rtnetdev_priv(dev) ((dev)->priv)
235 #define rtdev_emerg(__dev, format, args...) \
236 pr_emerg("%s: " format, (__dev)->name, ##args)
237 #define rtdev_alert(__dev, format, args...) \
238 pr_alert("%s: " format, (__dev)->name, ##args)
239 #define rtdev_crit(__dev, format, args...) \
240 pr_crit("%s: " format, (__dev)->name, ##args)
241 #define rtdev_err(__dev, format, args...) \
242 pr_err("%s: " format, (__dev)->name, ##args)
243 #define rtdev_warn(__dev, format, args...) \
244 pr_warn("%s: " format, (__dev)->name, ##args)
245 #define rtdev_notice(__dev, format, args...) \
246 pr_notice("%s: " format, (__dev)->name, ##args)
247 #define rtdev_info(__dev, format, args...) \
248 pr_info("%s: " format, (__dev)->name, ##args)
249 #define rtdev_dbg(__dev, format, args...) \
250 pr_debug("%s: " format, (__dev)->name, ##args)
253 #define rtdev_vdbg rtdev_dbg
255 #define rtdev_vdbg(__dev, format, args...) \
258 pr_debug("%s: " format, (__dev)->name, ##args); \
ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:528
Copyright © 2011 Gilles Chanteperdrix gilles.chanteperdrix@xenomai.org.
Definition: atomic.h:24