Blame view
include/net/cfg802154.h
10.5 KB
1802d0bee treewide: Replace... |
1 |
/* SPDX-License-Identifier: GPL-2.0-only */ |
2bfb1070b ieee802154: add a... |
2 3 4 |
/* * Copyright (C) 2007, 2008, 2009 Siemens AG * |
2bfb1070b ieee802154: add a... |
5 6 7 |
* Written by: * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com> */ |
5ad60d369 ieee802154: move ... |
8 9 |
#ifndef __NET_CFG802154_H #define __NET_CFG802154_H |
2bfb1070b ieee802154: add a... |
10 |
|
cb41c8dd0 ieee802154: renam... |
11 |
#include <linux/ieee802154.h> |
2bfb1070b ieee802154: add a... |
12 13 |
#include <linux/netdevice.h> #include <linux/mutex.h> |
187f1882b BUG: headers with... |
14 |
#include <linux/bug.h> |
2bfb1070b ieee802154: add a... |
15 |
|
f3ea5e442 ieee802154: add n... |
16 |
#include <net/nl802154.h> |
a5dd1d72d cfg802154: introd... |
17 |
struct wpan_phy; |
ba2a9506a nl802154: introdu... |
18 |
struct wpan_phy_cca; |
a5dd1d72d cfg802154: introd... |
19 |
|
a26c5fd76 nl802154: add sup... |
20 21 22 23 24 25 26 27 28 |
#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL struct ieee802154_llsec_device_key; struct ieee802154_llsec_seclevel; struct ieee802154_llsec_params; struct ieee802154_llsec_device; struct ieee802154_llsec_table; struct ieee802154_llsec_key_id; struct ieee802154_llsec_key; #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */ |
a5dd1d72d cfg802154: introd... |
29 |
struct cfg802154_ops { |
4a9a816a4 cfg802154: conver... |
30 31 |
struct net_device * (*add_virtual_intf_deprecated)(struct wpan_phy *wpan_phy, const char *name, |
5b4a10390 cfg802154: pass n... |
32 |
unsigned char name_assign_type, |
4a9a816a4 cfg802154: conver... |
33 |
int type); |
9d30a8cf9 ieee802154: clean... |
34 35 |
void (*del_virtual_intf_deprecated)(struct wpan_phy *wpan_phy, struct net_device *dev); |
a6cb869b3 cfg802154: add PM... |
36 37 |
int (*suspend)(struct wpan_phy *wpan_phy); int (*resume)(struct wpan_phy *wpan_phy); |
f3ea5e442 ieee802154: add n... |
38 39 |
int (*add_virtual_intf)(struct wpan_phy *wpan_phy, const char *name, |
5b4a10390 cfg802154: pass n... |
40 |
unsigned char name_assign_type, |
0e57547eb ieee802154: setti... |
41 42 |
enum nl802154_iftype type, __le64 extended_addr); |
b821ecd4c ieee802154: add d... |
43 44 |
int (*del_virtual_intf)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev); |
ab0bd5617 ieee820154: add c... |
45 |
int (*set_channel)(struct wpan_phy *wpan_phy, u8 page, u8 channel); |
ba2a9506a nl802154: introdu... |
46 47 |
int (*set_cca_mode)(struct wpan_phy *wpan_phy, const struct wpan_phy_cca *cca); |
b69644c1c nl802154: add sup... |
48 |
int (*set_cca_ed_level)(struct wpan_phy *wpan_phy, s32 ed_level); |
0f999b09f ieee802154: add s... |
49 |
int (*set_tx_power)(struct wpan_phy *wpan_phy, s32 power); |
702bf3712 ieee820154: add p... |
50 |
int (*set_pan_id)(struct wpan_phy *wpan_phy, |
ee7b9053b ieee802154: fix b... |
51 |
struct wpan_dev *wpan_dev, __le16 pan_id); |
9830c62a0 ieee820154: add s... |
52 |
int (*set_short_addr)(struct wpan_phy *wpan_phy, |
ee7b9053b ieee802154: fix b... |
53 |
struct wpan_dev *wpan_dev, __le16 short_addr); |
656a999e8 ieee820154: add b... |
54 55 56 |
int (*set_backoff_exponent)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, u8 min_be, u8 max_be); |
a01ba7652 ieee820154: add m... |
57 58 59 |
int (*set_max_csma_backoffs)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, u8 max_csma_backoffs); |
17a3a46bf ieee820154: add m... |
60 61 62 |
int (*set_max_frame_retries)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, s8 max_frame_retries); |
c8937a1d1 ieee820154: add l... |
63 64 |
int (*set_lbt_mode)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, bool mode); |
c91208d81 ieee802154: add a... |
65 66 |
int (*set_ackreq_default)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, bool ackreq); |
a26c5fd76 nl802154: add sup... |
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
#ifdef CONFIG_IEEE802154_NL802154_EXPERIMENTAL void (*get_llsec_table)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, struct ieee802154_llsec_table **table); void (*lock_llsec_table)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev); void (*unlock_llsec_table)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev); /* TODO remove locking/get table callbacks, this is part of the * nl802154 interface and should be accessible from ieee802154 layer. */ int (*get_llsec_params)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, struct ieee802154_llsec_params *params); int (*set_llsec_params)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, const struct ieee802154_llsec_params *params, int changed); int (*add_llsec_key)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, const struct ieee802154_llsec_key_id *id, const struct ieee802154_llsec_key *key); int (*del_llsec_key)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, const struct ieee802154_llsec_key_id *id); int (*add_seclevel)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, const struct ieee802154_llsec_seclevel *sl); int (*del_seclevel)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, const struct ieee802154_llsec_seclevel *sl); int (*add_device)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, const struct ieee802154_llsec_device *dev); int (*del_device)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, __le64 extended_addr); int (*add_devkey)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, __le64 extended_addr, const struct ieee802154_llsec_device_key *key); int (*del_devkey)(struct wpan_phy *wpan_phy, struct wpan_dev *wpan_dev, __le64 extended_addr, const struct ieee802154_llsec_device_key *key); #endif /* CONFIG_IEEE802154_NL802154_EXPERIMENTAL */ |
a5dd1d72d cfg802154: introd... |
112 |
}; |
fea3318d2 ieee802154: add s... |
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
static inline bool wpan_phy_supported_bool(bool b, enum nl802154_supported_bool_states st) { switch (st) { case NL802154_SUPPORTED_BOOL_TRUE: return b; case NL802154_SUPPORTED_BOOL_FALSE: return !b; case NL802154_SUPPORTED_BOOL_BOTH: return true; default: WARN_ON(1); } return false; } |
72f655e44 ieee802154: intro... |
129 |
struct wpan_phy_supported { |
fea3318d2 ieee802154: add s... |
130 |
u32 channels[IEEE802154_MAX_PAGE + 1], |
65318680c ieee802154: add i... |
131 |
cca_modes, cca_opts, iftypes; |
fea3318d2 ieee802154: add s... |
132 133 134 135 136 137 |
enum nl802154_supported_bool_states lbt; u8 min_minbe, max_minbe, min_maxbe, max_maxbe, min_csma_backoffs, max_csma_backoffs; s8 min_frame_retries, max_frame_retries; size_t tx_powers_size, cca_ed_levels_size; const s32 *tx_powers, *cca_ed_levels; |
72f655e44 ieee802154: intro... |
138 |
}; |
7fe9a3882 ieee802154: rewor... |
139 140 141 142 |
struct wpan_phy_cca { enum nl802154_cca_modes mode; enum nl802154_cca_opts opt; }; |
791021bf1 mac802154: check ... |
143 144 145 146 147 148 149 150 151 152 153 |
static inline bool wpan_phy_cca_cmp(const struct wpan_phy_cca *a, const struct wpan_phy_cca *b) { if (a->mode != b->mode) return false; if (a->mode == NL802154_CCA_ENERGY_CARRIER) return a->opt == b->opt; return true; } |
edea8f7c7 cfg802154: introd... |
154 155 156 157 158 159 160 161 162 163 164 165 166 |
/** * @WPAN_PHY_FLAG_TRANSMIT_POWER: Indicates that transceiver will support * transmit power setting. * @WPAN_PHY_FLAG_CCA_ED_LEVEL: Indicates that transceiver will support cca ed * level setting. * @WPAN_PHY_FLAG_CCA_MODE: Indicates that transceiver will support cca mode * setting. */ enum wpan_phy_flags { WPAN_PHY_FLAG_TXPOWER = BIT(1), WPAN_PHY_FLAG_CCA_ED_LEVEL = BIT(2), WPAN_PHY_FLAG_CCA_MODE = BIT(3), }; |
2bfb1070b ieee802154: add a... |
167 |
struct wpan_phy { |
6322d50d8 mac802154: add wp... |
168 169 170 171 172 173 174 |
/* If multiple wpan_phys are registered and you're handed e.g. * a regular netdev with assigned ieee802154_ptr, you won't * know whether it points to a wpan_phy your driver has registered * or not. Assign this to something global to your driver to * help determine whether you own this wpan_phy or not. */ const void *privid; |
edea8f7c7 cfg802154: introd... |
175 |
u32 flags; |
2bfb1070b ieee802154: add a... |
176 |
/* |
9b2777d60 ieee802154: add T... |
177 |
* This is a PIB according to 802.15.4-2011. |
2bfb1070b ieee802154: add a... |
178 179 180 181 182 |
* We do not provide timing-related variables, as they * aren't used outside of driver */ u8 current_channel; u8 current_page; |
72f655e44 ieee802154: intro... |
183 |
struct wpan_phy_supported supported; |
e2eb173aa ieee802154: chang... |
184 |
/* current transmit_power in mBm */ |
1a19cb680 ieee802154: chang... |
185 |
s32 transmit_power; |
7fe9a3882 ieee802154: rewor... |
186 |
struct wpan_phy_cca cca; |
dee56d147 mac802154: add su... |
187 188 |
__le64 perm_extended_addr; |
2bfb1070b ieee802154: add a... |
189 |
|
32b23550a ieee802154: chang... |
190 |
/* current cca ed threshold in mBm */ |
6ca001978 ieee802154: add s... |
191 |
s32 cca_ed_level; |
84dda3c64 ieee802154: add s... |
192 |
|
61f2dcba9 mac802154: add in... |
193 194 195 196 197 198 199 |
/* PHY depended MAC PIB values */ /* 802.15.4 acronym: Tdsym in usec */ u8 symbol_duration; /* lifs and sifs periods timing */ u16 lifs_period; u16 sifs_period; |
2bfb1070b ieee802154: add a... |
200 |
struct device dev; |
2bfb1070b ieee802154: add a... |
201 |
|
66e5c2672 ieee802154: add n... |
202 203 |
/* the network namespace this phy lives in currently */ possible_net_t _net; |
53cb2cfaa cfg802154: Replac... |
204 |
char priv[] __aligned(NETDEV_ALIGN); |
2bfb1070b ieee802154: add a... |
205 |
}; |
66e5c2672 ieee802154: add n... |
206 207 208 209 210 211 212 213 214 |
static inline struct net *wpan_phy_net(struct wpan_phy *wpan_phy) { return read_pnet(&wpan_phy->_net); } static inline void wpan_phy_net_set(struct wpan_phy *wpan_phy, struct net *net) { write_pnet(&wpan_phy->_net, net); } |
838b83d63 ieee802154: intro... |
215 216 217 218 219 220 221 222 |
struct ieee802154_addr { u8 mode; __le16 pan_id; union { __le16 short_addr; __le64 extended_addr; }; }; |
a26c5fd76 nl802154: add sup... |
223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 |
struct ieee802154_llsec_key_id { u8 mode; u8 id; union { struct ieee802154_addr device_addr; __le32 short_source; __le64 extended_source; }; }; #define IEEE802154_LLSEC_KEY_SIZE 16 struct ieee802154_llsec_key { u8 frame_types; u32 cmd_frame_ids; /* TODO replace with NL802154_KEY_SIZE */ u8 key[IEEE802154_LLSEC_KEY_SIZE]; }; struct ieee802154_llsec_key_entry { struct list_head list; struct ieee802154_llsec_key_id id; struct ieee802154_llsec_key *key; }; struct ieee802154_llsec_params { bool enabled; __be32 frame_counter; u8 out_level; struct ieee802154_llsec_key_id out_key; __le64 default_key_source; __le16 pan_id; __le64 hwaddr; __le64 coord_hwaddr; __le16 coord_shortaddr; }; struct ieee802154_llsec_table { struct list_head keys; struct list_head devices; struct list_head security_levels; }; struct ieee802154_llsec_seclevel { struct list_head list; u8 frame_type; u8 cmd_frame_id; bool device_override; u32 sec_levels; }; struct ieee802154_llsec_device { struct list_head list; __le16 pan_id; __le16 short_addr; __le64 hwaddr; u32 frame_counter; bool seclevel_exempt; u8 key_mode; struct list_head keys; }; struct ieee802154_llsec_device_key { struct list_head list; struct ieee802154_llsec_key_id key_id; u32 frame_counter; }; |
838b83d63 ieee802154: intro... |
298 299 300 301 302 303 304 305 306 307 |
struct wpan_dev_header_ops { /* TODO create callback currently assumes ieee802154_mac_cb inside * skb->cb. This should be changed to give these information as * parameter. */ int (*create)(struct sk_buff *skb, struct net_device *dev, const struct ieee802154_addr *daddr, const struct ieee802154_addr *saddr, unsigned int len); }; |
d5ae67bac ieee802154: rewor... |
308 309 |
struct wpan_dev { struct wpan_phy *wpan_phy; |
190ac1ca3 ieee802154: add i... |
310 |
int iftype; |
863e88f25 mac802154: move m... |
311 |
|
fcf39e6e8 ieee802154: add w... |
312 313 314 |
/* the remainder of this struct should be private to cfg802154 */ struct list_head list; struct net_device *netdev; |
838b83d63 ieee802154: intro... |
315 |
const struct wpan_dev_header_ops *header_ops; |
51e0e5d81 ieee802154: 6lowp... |
316 317 |
/* lowpan interface, set when the wpan_dev belongs to one lowpan_dev */ struct net_device *lowpan_dev; |
fcf39e6e8 ieee802154: add w... |
318 |
u32 identifier; |
863e88f25 mac802154: move m... |
319 320 321 322 323 324 |
/* MAC PIB */ __le16 pan_id; __le16 short_addr; __le64 extended_addr; /* MAC BSN field */ |
344f8c119 mac802154: use at... |
325 |
atomic_t bsn; |
863e88f25 mac802154: move m... |
326 |
/* MAC DSN field */ |
344f8c119 mac802154: use at... |
327 |
atomic_t dsn; |
863e88f25 mac802154: move m... |
328 329 330 331 332 333 334 335 336 |
u8 min_be; u8 max_be; u8 csma_retries; s8 frame_retries; bool lbt; bool promiscuous_mode; |
c91208d81 ieee802154: add a... |
337 338 339 |
/* fallback for acknowledgment bit setting */ bool ackreq; |
d5ae67bac ieee802154: rewor... |
340 |
}; |
42723448b ieee802154: add a... |
341 |
#define to_phy(_dev) container_of(_dev, struct wpan_phy, dev) |
838b83d63 ieee802154: intro... |
342 343 344 345 346 347 348 349 350 351 |
static inline int wpan_dev_hard_header(struct sk_buff *skb, struct net_device *dev, const struct ieee802154_addr *daddr, const struct ieee802154_addr *saddr, unsigned int len) { struct wpan_dev *wpan_dev = dev->ieee802154_ptr; return wpan_dev->header_ops->create(skb, dev, daddr, saddr, len); } |
a5dd1d72d cfg802154: introd... |
352 |
struct wpan_phy * |
f601379fa ieee802154: renam... |
353 |
wpan_phy_new(const struct cfg802154_ops *ops, size_t priv_size); |
e9cf356c0 wpan-phy: follow ... |
354 355 356 357 |
static inline void wpan_phy_set_dev(struct wpan_phy *phy, struct device *dev) { phy->dev.parent = dev; } |
e72740d05 ieee802154: wpan-... |
358 |
|
e9cf356c0 wpan-phy: follow ... |
359 |
int wpan_phy_register(struct wpan_phy *phy); |
2bfb1070b ieee802154: add a... |
360 361 |
void wpan_phy_unregister(struct wpan_phy *phy); void wpan_phy_free(struct wpan_phy *phy); |
1c889f4db wpan-phy: add wpa... |
362 363 |
/* Same semantics as for class_for_each_device */ int wpan_phy_for_each(int (*fn)(struct wpan_phy *phy, void *data), void *data); |
2bfb1070b ieee802154: add a... |
364 365 366 367 368 369 370 371 |
static inline void *wpan_phy_priv(struct wpan_phy *phy) { BUG_ON(!phy); return &phy->priv; } struct wpan_phy *wpan_phy_find(const char *str); |
69d9ab96f wpan-phy: add a h... |
372 373 374 375 376 |
static inline void wpan_phy_put(struct wpan_phy *phy) { put_device(&phy->dev); } |
2bfb1070b ieee802154: add a... |
377 378 379 380 |
static inline const char *wpan_phy_name(struct wpan_phy *phy) { return dev_name(&phy->dev); } |
5ad60d369 ieee802154: move ... |
381 382 |
#endif /* __NET_CFG802154_H */ |