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) 73 struct device *sysbind;
75 unsigned long rmem_end;
76 unsigned long rmem_start;
77 unsigned long mem_end;
78 unsigned long mem_start;
79 unsigned long base_addr;
86 unsigned char if_port;
90 unsigned long link_state;
94 struct device *sysdev;
95 struct module *rt_owner;
99 unsigned long priv_flags;
101 unsigned short hard_header_len;
104 netdev_features_t features;
107 unsigned char broadcast[MAX_ADDR_LEN];
108 unsigned char dev_addr[MAX_ADDR_LEN];
109 unsigned char addr_len;
117 rtdm_event_t *stack_event;
119 rtdm_mutex_t xmit_mutex;
121 struct mutex nrt_lock;
123 unsigned int add_rtskbs;
125 struct rtskb_pool dev_pool;
128 struct rtmac_disc *mac_disc;
129 struct rtmac_priv *mac_priv;
130 int (*mac_detach)(
struct rtnet_device *rtdev);
133 int (*open)(
struct rtnet_device *rtdev);
134 int (*stop)(
struct rtnet_device *rtdev);
135 int (*hard_header)(
struct rtskb *,
struct rtnet_device *,
136 unsigned short type,
void *daddr,
137 void *saddr,
unsigned int len);
138 int (*rebuild_header)(
struct rtskb *);
139 int (*hard_start_xmit)(
struct rtskb *skb,
140 struct rtnet_device *dev);
141 int (*hw_reset)(
struct rtnet_device *rtdev);
149 int (*start_xmit)(
struct rtskb *skb,
150 struct rtnet_device *dev);
153 unsigned int (*get_mtu)(
struct rtnet_device *rtdev,
154 unsigned int priority);
156 int (*do_ioctl)(
struct rtnet_device *rtdev,
157 struct ifreq *ifr,
int cmd);
158 struct net_device_stats *(*get_stats)(
struct rtnet_device *rtdev);
161 dma_addr_t (*map_rtskb)(
struct rtnet_device *rtdev,
163 void (*unmap_rtskb)(
struct rtnet_device *rtdev,
167 struct rtnet_core_cmd;
169 struct rtdev_event_hook {
170 struct list_head entry;
171 void (*register_device)(
struct rtnet_device *rtdev);
172 void (*unregister_device)(
struct rtnet_device *rtdev);
173 void (*ifup)(
struct rtnet_device *rtdev,
174 struct rtnet_core_cmd *up_cmd);
175 void (*ifdown)(
struct rtnet_device *rtdev);
178 extern struct list_head event_hook_list;
179 extern struct mutex rtnet_devices_nrt_lock;
180 extern struct rtnet_device *rtnet_devices[];
183 struct rtnet_device *__rt_alloc_etherdev(
unsigned sizeof_priv,
184 unsigned dev_pool_size,
185 struct module *module);
186 #define rt_alloc_etherdev(priv_size, rx_size) \ 187 __rt_alloc_etherdev(priv_size, rx_size, THIS_MODULE) 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_map_rtskb(
struct rtskb *skb);
235 void rtdev_unmap_rtskb(
struct rtskb *skb);
237 struct rtskb *rtnetdev_alloc_rtskb(
struct rtnet_device *dev,
unsigned int size);
239 #define rtnetdev_priv(dev) ((dev)->priv) 241 #define rtdev_emerg(__dev, format, args...) \ 242 pr_emerg("%s: " format, (__dev)->name, ##args) 243 #define rtdev_alert(__dev, format, args...) \ 244 pr_alert("%s: " format, (__dev)->name, ##args) 245 #define rtdev_crit(__dev, format, args...) \ 246 pr_crit("%s: " format, (__dev)->name, ##args) 247 #define rtdev_err(__dev, format, args...) \ 248 pr_err("%s: " format, (__dev)->name, ##args) 249 #define rtdev_warn(__dev, format, args...) \ 250 pr_warn("%s: " format, (__dev)->name, ##args) 251 #define rtdev_notice(__dev, format, args...) \ 252 pr_notice("%s: " format, (__dev)->name, ##args) 253 #define rtdev_info(__dev, format, args...) \ 254 pr_info("%s: " format, (__dev)->name, ##args) 255 #define rtdev_dbg(__dev, format, args...) \ 256 pr_debug("%s: " format, (__dev)->name, ##args) 259 #define rtdev_vdbg rtdev_dbg 261 #define rtdev_vdbg(__dev, format, args...) \ 264 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