Blame view

net/mac802154/ieee802154_i.h 5.43 KB
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
1
2
3
4
5
6
7
8
9
10
11
12
  /*
   * Copyright (C) 2007-2012 Siemens AG
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU General Public License version 2
   * as published by the Free Software Foundation.
   *
   * This program is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU General Public License for more details.
   *
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
13
14
15
16
17
18
   * Written by:
   * Pavel Smolenskiy <pavel.smolenskiy@gmail.com>
   * Maxim Gorbachyov <maxim.gorbachev@siemens.com>
   * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
   * Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
   */
0f1556bc2   Alexander Aring   mac802154: move m...
19
20
  #ifndef __IEEE802154_I_H
  #define __IEEE802154_I_H
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
21

282ccf6ef   Florian Westphal   drivers: add expl...
22
  #include <linux/interrupt.h>
f30be4d53   Phoebe Buckheister   mac802154: integr...
23
  #include <linux/mutex.h>
61f2dcba9   Alexander Aring   mac802154: add in...
24
  #include <linux/hrtimer.h>
d5ae67bac   Alexander Aring   ieee802154: rewor...
25
  #include <net/cfg802154.h>
5d637d5aa   Phoebe Buckheister   mac802154: add ll...
26
  #include <net/mac802154.h>
944742a36   Alexander Aring   mac802154: use ne...
27
  #include <net/nl802154.h>
e462ded69   Phoebe Buckheister   mac802154: make c...
28
  #include <net/ieee802154_netdev.h>
f30be4d53   Phoebe Buckheister   mac802154: integr...
29
  #include "llsec.h"
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
30
  /* mac802154 device private data */
a5e1ec538   Alexander Aring   mac802154: rename...
31
  struct ieee802154_local {
5a5043977   Alexander Aring   ieee802154: renam...
32
  	struct ieee802154_hw hw;
163018610   Alexander Aring   mac802154: declar...
33
  	const struct ieee802154_ops *ops;
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
34
35
36
37
38
39
40
41
42
43
44
45
46
  
  	/* ieee802154 phy */
  	struct wpan_phy *phy;
  
  	int open_count;
  
  	/* As in mac80211 slaves list is modified:
  	 * 1) under the RTNL
  	 * 2) protected by slaves_mtx;
  	 * 3) in an RCU manner
  	 *
  	 * So atomic readers can use any of this protection methods.
  	 */
d98be45b3   Alexander Aring   mac802154: rename...
47
48
  	struct list_head	interfaces;
  	struct mutex		iflist_mtx;
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
49
50
51
52
  
  	/* This one is used for scanning and other jobs not to be interfered
  	 * with serial driver.
  	 */
f77305425   Alexander Aring   mac802154: rename...
53
  	struct workqueue_struct	*workqueue;
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
54

61f2dcba9   Alexander Aring   mac802154: add in...
55
  	struct hrtimer ifs_timer;
5d65cae4b   Alexander Aring   mac802154: rename...
56
  	bool started;
3cf24cf8c   Alexander Aring   mac802154: cfg: a...
57
  	bool suspended;
c5c47e67b   Alexander Aring   mac802154: rx: us...
58
59
60
  
  	struct tasklet_struct tasklet;
  	struct sk_buff_head skb_queue;
c22ff7b4e   Lennert Buytenhek   mac802154: Fix me...
61
62
63
  
  	struct sk_buff *tx_skb;
  	struct work_struct tx_work;
1010f5401   alex.bluesman.smirnov@gmail.com   mac802154: alloca...
64
  };
c5c47e67b   Alexander Aring   mac802154: rx: us...
65
66
67
  enum {
  	IEEE802154_RX_MSG        = 1,
  };
0ea3da64f   Alexander Aring   mac802154: rework...
68
69
70
  enum ieee802154_sdata_state_bits {
  	SDATA_STATE_RUNNING,
  };
4d23c9cc0   alex.bluesman.smirnov@gmail.com   mac802154: slave ...
71
72
73
74
75
76
  /* Slave interface definition.
   *
   * Slaves represent typical network interfaces available from userspace.
   * Each ieee802154 device/transceiver may have several slaves and able
   * to be associated with several networks at the same time.
   */
036562f9c   Alexander Aring   mac802154: rename...
77
  struct ieee802154_sub_if_data {
4d23c9cc0   alex.bluesman.smirnov@gmail.com   mac802154: slave ...
78
  	struct list_head list; /* the ieee802154_priv->slaves list */
d5ae67bac   Alexander Aring   ieee802154: rewor...
79
  	struct wpan_dev wpan_dev;
04e850fe0   Alexander Aring   mac802154: rename...
80
  	struct ieee802154_local *local;
4d23c9cc0   alex.bluesman.smirnov@gmail.com   mac802154: slave ...
81
  	struct net_device *dev;
0ea3da64f   Alexander Aring   mac802154: rework...
82
  	unsigned long state;
d5ae67bac   Alexander Aring   ieee802154: rewor...
83
  	char name[IFNAMSIZ];
4d23c9cc0   alex.bluesman.smirnov@gmail.com   mac802154: slave ...
84

f30be4d53   Phoebe Buckheister   mac802154: integr...
85
86
87
88
89
90
  	/* protects sec from concurrent access by netlink. access by
  	 * encrypt/decrypt/header_create safe without additional protection.
  	 */
  	struct mutex sec_mtx;
  
  	struct mac802154_llsec sec;
4d23c9cc0   alex.bluesman.smirnov@gmail.com   mac802154: slave ...
91
  };
6322d50d8   Alexander Aring   mac802154: add wp...
92
93
  /* utility functions/constants */
  extern const void *const mac802154_wpan_phy_privid; /*  for wpan_phy privid */
60741361c   Alexander Aring   mac802154: introd...
94
95
96
97
98
  static inline struct ieee802154_local *
  hw_to_local(struct ieee802154_hw *hw)
  {
  	return container_of(hw, struct ieee802154_local, hw);
  }
59d19cd70   Alexander Aring   mac802154: introd...
99
100
101
102
103
  static inline struct ieee802154_sub_if_data *
  IEEE802154_DEV_TO_SUB_IF(const struct net_device *dev)
  {
  	return netdev_priv(dev);
  }
b821ecd4c   Alexander Aring   ieee802154: add d...
104
105
106
107
108
  static inline struct ieee802154_sub_if_data *
  IEEE802154_WPAN_DEV_TO_SUB_IF(struct wpan_dev *wpan_dev)
  {
  	return container_of(wpan_dev, struct ieee802154_sub_if_data, wpan_dev);
  }
0ea3da64f   Alexander Aring   mac802154: rework...
109
110
111
112
113
  static inline bool
  ieee802154_sdata_running(struct ieee802154_sub_if_data *sdata)
  {
  	return test_bit(SDATA_STATE_RUNNING, &sdata->state);
  }
32bad7e30   alex.bluesman.smirnov@gmail.com   mac802154: add wp...
114
  extern struct ieee802154_mlme_ops mac802154_mlme_wpan;
6e2128d42   alex.bluesman.smirnov@gmail.com   mac802154: basic ...
115

d10270ce9   Varka Bhadram   mac802154: fix ie...
116
  void ieee802154_rx(struct ieee802154_local *local, struct sk_buff *skb);
c22ff7b4e   Lennert Buytenhek   mac802154: Fix me...
117
  void ieee802154_xmit_worker(struct work_struct *work);
e5e584fcc   Alexander Aring   mac802154: tx: ch...
118
119
  netdev_tx_t
  ieee802154_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev);
e5e584fcc   Alexander Aring   mac802154: tx: ch...
120
121
  netdev_tx_t
  ieee802154_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
61f2dcba9   Alexander Aring   mac802154: add in...
122
  enum hrtimer_restart ieee802154_xmit_ifs_timer(struct hrtimer *timer);
5b641ebee   alex.bluesman.smirnov@gmail.com   mac802154: TX dat...
123

ef2486f55   alex.bluesman.smirnov@gmail.com   mac802154: basic ...
124
  /* MIB callbacks */
66b69d4d7   alex.bluesman.smirnov@gmail.com   mac802154: page a...
125
  void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan);
ef2486f55   alex.bluesman.smirnov@gmail.com   mac802154: basic ...
126

29e023746   Phoebe Buckheister   mac802154: add ll...
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
  int mac802154_get_params(struct net_device *dev,
  			 struct ieee802154_llsec_params *params);
  int mac802154_set_params(struct net_device *dev,
  			 const struct ieee802154_llsec_params *params,
  			 int changed);
  
  int mac802154_add_key(struct net_device *dev,
  		      const struct ieee802154_llsec_key_id *id,
  		      const struct ieee802154_llsec_key *key);
  int mac802154_del_key(struct net_device *dev,
  		      const struct ieee802154_llsec_key_id *id);
  
  int mac802154_add_dev(struct net_device *dev,
  		      const struct ieee802154_llsec_device *llsec_dev);
  int mac802154_del_dev(struct net_device *dev, __le64 dev_addr);
  
  int mac802154_add_devkey(struct net_device *dev,
  			 __le64 device_addr,
  			 const struct ieee802154_llsec_device_key *key);
  int mac802154_del_devkey(struct net_device *dev,
  			 __le64 device_addr,
  			 const struct ieee802154_llsec_device_key *key);
  
  int mac802154_add_seclevel(struct net_device *dev,
  			   const struct ieee802154_llsec_seclevel *sl);
  int mac802154_del_seclevel(struct net_device *dev,
  			   const struct ieee802154_llsec_seclevel *sl);
  
  void mac802154_lock_table(struct net_device *dev);
  void mac802154_get_table(struct net_device *dev,
  			 struct ieee802154_llsec_table **t);
  void mac802154_unlock_table(struct net_device *dev);
d77b4852b   Alexander Aring   mac802154: add ll...
159
  int mac802154_wpan_update_llsec(struct net_device *dev);
be4fd8e5d   Alexander Aring   mac802154: add if...
160
161
162
  /* interface handling */
  int ieee802154_iface_init(void);
  void ieee802154_iface_exit(void);
b210b1874   Alexander Aring   mac802154: move i...
163
  void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata);
986a8abfc   Alexander Aring   mac802154: move i...
164
165
  struct net_device *
  ieee802154_if_add(struct ieee802154_local *local, const char *name,
5b4a10390   Varka Bhadram   cfg802154: pass n...
166
167
  		  unsigned char name_assign_type, enum nl802154_iftype type,
  		  __le64 extended_addr);
592dfbfc7   Alexander Aring   mac820154: move i...
168
  void ieee802154_remove_interfaces(struct ieee802154_local *local);
c4227c8a6   Alexander Aring   mac802154: util: ...
169
  void ieee802154_stop_device(struct ieee802154_local *local);
4a9a816a4   Alexander Aring   cfg802154: conver...
170

0f1556bc2   Alexander Aring   mac802154: move m...
171
  #endif /* __IEEE802154_I_H */