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 41 #define PRIV_FLAG_UP 0 42 #define PRIV_FLAG_ADDING_ROUTE 1 45 #define NETIF_F_LLTX 4096 49 #define RTDEV_TX_BUSY 1 51 enum 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);
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,
struct rtnet_core_cmd *up_cmd);
168 void (*ifdown)(
struct rtnet_device *rtdev);
171 extern struct list_head event_hook_list;
172 extern struct mutex rtnet_devices_nrt_lock;
173 extern struct rtnet_device *rtnet_devices[];
175 int __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) 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_destroy(
struct rtnet_device *rtdev);
189 void rtdev_free(
struct rtnet_device *rtdev);
191 int rt_register_rtnetdev(
struct rtnet_device *rtdev);
192 int rt_unregister_rtnetdev(
struct rtnet_device *rtdev);
194 void rtdev_add_event_hook(
struct rtdev_event_hook *hook);
195 void rtdev_del_event_hook(
struct rtdev_event_hook *hook);
197 void rtdev_alloc_name(
struct rtnet_device *rtdev,
const char *name_mask);
204 static inline struct rtnet_device *__rtdev_get_by_index(
int ifindex)
206 return rtnet_devices[ifindex - 1];
209 struct rtnet_device *rtdev_get_by_name(
const char *if_name);
210 struct rtnet_device *rtdev_get_by_index(
int ifindex);
211 struct rtnet_device *rtdev_get_by_hwaddr(
unsigned short type,
char *ha);
212 struct rtnet_device *rtdev_get_loopback(
void);
214 int rtdev_reference(
struct rtnet_device *rtdev);
216 static 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);
223 int rtdev_xmit(
struct rtskb *skb);
225 #if IS_ENABLED(CONFIG_XENO_DRIVERS_NET_ADDON_PROXY) 226 int rtdev_xmit_proxy(
struct rtskb *skb);
229 unsigned int rt_hard_mtu(
struct rtnet_device *rtdev,
unsigned int priority);
231 int rtdev_open(
struct rtnet_device *rtdev);
232 int rtdev_close(
struct rtnet_device *rtdev);
234 int rtdev_up(
struct rtnet_device *rtdev,
struct rtnet_core_cmd *cmd);
235 int rtdev_down(
struct rtnet_device *rtdev);
237 int rtdev_map_rtskb(
struct rtskb *skb);
238 void rtdev_unmap_rtskb(
struct rtskb *skb);
240 struct 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); \ ipipe_spinlock_t rtdm_lock_t
Lock variable.
Definition: driver.h:551
Copyright © 2011 Gilles Chanteperdrix gilles.chanteperdrix@xenomai.org.
Definition: atomic.h:24