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,
58 #define RTNET_LINK_STATE_XOFF (1 << __RTNET_LINK_STATE_XOFF) 59 #define RTNET_LINK_STATE_START (1 << __RTNET_LINK_STATE_START) 60 #define RTNET_LINK_STATE_PRESENT (1 << __RTNET_LINK_STATE_PRESENT) 61 #define RTNET_LINK_STATE_NOCARRIER (1 << __RTNET_LINK_STATE_NOCARRIER) 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 module *rt_owner;
97 unsigned long priv_flags;
99 unsigned short hard_header_len;
102 netdev_features_t features;
105 unsigned char broadcast[MAX_ADDR_LEN];
106 unsigned char dev_addr[MAX_ADDR_LEN];
107 unsigned char addr_len;
115 rtdm_event_t *stack_event;
117 rtdm_mutex_t xmit_mutex;
119 struct mutex nrt_lock;
121 unsigned int add_rtskbs;
123 struct rtskb_pool dev_pool;
126 struct rtmac_disc *mac_disc;
127 struct rtmac_priv *mac_priv;
128 int (*mac_detach)(
struct rtnet_device *rtdev);
131 int (*open)(
struct rtnet_device *rtdev);
132 int (*stop)(
struct rtnet_device *rtdev);
133 int (*hard_header)(
struct rtskb *,
struct rtnet_device *,
134 unsigned short type,
void *daddr,
135 void *saddr,
unsigned int len);
136 int (*rebuild_header)(
struct rtskb *);
137 int (*hard_start_xmit)(
struct rtskb *skb,
138 struct rtnet_device *dev);
139 int (*hw_reset)(
struct rtnet_device *rtdev);
147 int (*start_xmit)(
struct rtskb *skb,
148 struct rtnet_device *dev);
151 unsigned int (*get_mtu)(
struct rtnet_device *rtdev,
152 unsigned int priority);
154 int (*do_ioctl)(
struct rtnet_device *rtdev,
155 unsigned int request,
void * cmd);
156 struct net_device_stats *(*get_stats)(
struct rtnet_device *rtdev);
159 dma_addr_t (*map_rtskb)(
struct rtnet_device *rtdev,
161 void (*unmap_rtskb)(
struct rtnet_device *rtdev,
165 struct rtnet_core_cmd;
167 struct rtdev_event_hook {
168 struct list_head entry;
169 void (*register_device)(
struct rtnet_device *rtdev);
170 void (*unregister_device)(
struct rtnet_device *rtdev);
171 void (*ifup)(
struct rtnet_device *rtdev,
172 struct rtnet_core_cmd *up_cmd);
173 void (*ifdown)(
struct rtnet_device *rtdev);
176 extern struct list_head event_hook_list;
177 extern struct mutex rtnet_devices_nrt_lock;
178 extern struct rtnet_device *rtnet_devices[];
181 struct 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) 187 void rtdev_free(
struct rtnet_device *rtdev);
189 int rt_register_rtnetdev(
struct rtnet_device *rtdev);
190 int rt_unregister_rtnetdev(
struct rtnet_device *rtdev);
192 void rtdev_add_event_hook(
struct rtdev_event_hook *hook);
193 void rtdev_del_event_hook(
struct rtdev_event_hook *hook);
195 void rtdev_alloc_name (
struct rtnet_device *rtdev,
const char *name_mask);
202 static inline struct rtnet_device *__rtdev_get_by_index(
int ifindex)
204 return rtnet_devices[ifindex-1];
207 struct rtnet_device *rtdev_get_by_name(
const char *if_name);
208 struct rtnet_device *rtdev_get_by_index(
int ifindex);
209 struct rtnet_device *rtdev_get_by_hwaddr(
unsigned short type,
char *ha);
210 struct rtnet_device *rtdev_get_loopback(
void);
212 int rtdev_reference(
struct rtnet_device *rtdev);
214 static inline void rtdev_dereference(
struct rtnet_device *rtdev)
216 smp_mb__before_atomic();
217 if (rtdev->rt_owner && atomic_dec_and_test(&rtdev->refcount))
218 module_put(rtdev->rt_owner);
221 int rtdev_xmit(
struct rtskb *skb);
223 #if IS_ENABLED(CONFIG_XENO_DRIVERS_NET_ADDON_PROXY) 224 int rtdev_xmit_proxy(
struct rtskb *skb);
227 unsigned int rt_hard_mtu(
struct rtnet_device *rtdev,
unsigned int priority);
229 int rtdev_open(
struct rtnet_device *rtdev);
230 int rtdev_close(
struct rtnet_device *rtdev);
232 int rtdev_map_rtskb(
struct rtskb *skb);
233 void rtdev_unmap_rtskb(
struct rtskb *skb);
235 struct rtskb *rtnetdev_alloc_rtskb(
struct rtnet_device *dev,
unsigned int size);
237 #define rtnetdev_priv(dev) ((dev)->priv) 239 #define rtdev_emerg(__dev, format, args...) \ 240 pr_emerg("%s: " format, (__dev)->name, ##args) 241 #define rtdev_alert(__dev, format, args...) \ 242 pr_alert("%s: " format, (__dev)->name, ##args) 243 #define rtdev_crit(__dev, format, args...) \ 244 pr_crit("%s: " format, (__dev)->name, ##args) 245 #define rtdev_err(__dev, format, args...) \ 246 pr_err("%s: " format, (__dev)->name, ##args) 247 #define rtdev_warn(__dev, format, args...) \ 248 pr_warn("%s: " format, (__dev)->name, ##args) 249 #define rtdev_notice(__dev, format, args...) \ 250 pr_notice("%s: " format, (__dev)->name, ##args) 251 #define rtdev_info(__dev, format, args...) \ 252 pr_info("%s: " format, (__dev)->name, ##args) 253 #define rtdev_dbg(__dev, format, args...) \ 254 pr_debug("%s: " format, (__dev)->name, ##args) 257 #define rtdev_vdbg rtdev_dbg 259 #define rtdev_vdbg(__dev, format, args...) \ 262 pr_debug("%s: " format, (__dev)->name, ##args); \ ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:551
Copyright © 2011 Gilles Chanteperdrix gilles.chanteperdrix@xenomai.org.
Definition: atomic.h:24