Bluetooth: Add legacy SMP tests
[deliverable/linux.git] / net / mac802154 / ieee802154_i.h
index c5b1ab743695cf0c015ab0045e9200b674b5376f..bebd70ffc7a3d101551f023e515db24033883f0b 100644 (file)
 #define __IEEE802154_I_H
 
 #include <linux/mutex.h>
+#include <linux/hrtimer.h>
+#include <net/cfg802154.h>
 #include <net/mac802154.h>
+#include <net/nl802154.h>
 #include <net/ieee802154_netdev.h>
 
 #include "llsec.h"
@@ -28,7 +31,7 @@
 /* mac802154 device private data */
 struct ieee802154_local {
        struct ieee802154_hw hw;
-       struct ieee802154_ops *ops;
+       const struct ieee802154_ops *ops;
 
        /* ieee802154 phy */
        struct wpan_phy *phy;
@@ -42,23 +45,29 @@ struct ieee802154_local {
         *
         * So atomic readers can use any of this protection methods.
         */
-       struct list_head        slaves;
-       struct mutex            slaves_mtx;
+       struct list_head        interfaces;
+       struct mutex            iflist_mtx;
 
        /* This one is used for scanning and other jobs not to be interfered
         * with serial driver.
         */
-       struct workqueue_struct *dev_workqueue;
+       struct workqueue_struct *workqueue;
 
-       /* SoftMAC device is registered and running. One can add subinterfaces.
-        * This flag should be modified under slaves_mtx and RTNL, so you can
-        * read them using any of protection methods.
-        */
-       bool running;
+       struct hrtimer ifs_timer;
+
+       bool started;
+
+       struct tasklet_struct tasklet;
+       struct sk_buff_head skb_queue;
 };
 
-#define        MAC802154_DEVICE_STOPPED        0x00
-#define MAC802154_DEVICE_RUN           0x01
+enum {
+       IEEE802154_RX_MSG        = 1,
+};
+
+enum ieee802154_sdata_state_bits {
+       SDATA_STATE_RUNNING,
+};
 
 /* Slave interface definition.
  *
@@ -69,69 +78,71 @@ struct ieee802154_local {
 struct ieee802154_sub_if_data {
        struct list_head list; /* the ieee802154_priv->slaves list */
 
+       struct wpan_dev wpan_dev;
+
        struct ieee802154_local *local;
        struct net_device *dev;
 
-       int type;
-       bool running;
+       unsigned long state;
+       char name[IFNAMSIZ];
 
        spinlock_t mib_lock;
 
-       __le16 pan_id;
-       __le16 short_addr;
-       __le64 extended_addr;
-
-       u8 chan;
-       u8 page;
-
-       struct ieee802154_mac_params mac_params;
-
-       /* MAC BSN field */
-       u8 bsn;
-       /* MAC DSN field */
-       u8 dsn;
-
        /* 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;
+       /* must be last, dynamically sized area in this! */
+       struct ieee802154_vif vif;
 };
 
-#define mac802154_to_priv(_hw) container_of(_hw, struct ieee802154_local, hw)
-
 #define MAC802154_CHAN_NONE            0xff /* No channel is assigned */
 
-extern struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced;
-extern struct ieee802154_mlme_ops mac802154_mlme_wpan;
-
-int mac802154_slave_open(struct net_device *dev);
-int mac802154_slave_close(struct net_device *dev);
+/* utility functions/constants */
+extern const void *const mac802154_wpan_phy_privid; /*  for wpan_phy privid */
+
+static inline struct ieee802154_local *
+hw_to_local(struct ieee802154_hw *hw)
+{
+       return container_of(hw, struct ieee802154_local, hw);
+}
+
+static inline struct ieee802154_sub_if_data *
+IEEE802154_DEV_TO_SUB_IF(const struct net_device *dev)
+{
+       return netdev_priv(dev);
+}
+
+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);
+}
+
+static inline bool
+ieee802154_sdata_running(struct ieee802154_sub_if_data *sdata)
+{
+       return test_bit(SDATA_STATE_RUNNING, &sdata->state);
+}
 
-void mac802154_monitors_rx(struct ieee802154_local *local, struct sk_buff *skb);
-void mac802154_monitor_setup(struct net_device *dev);
-
-void mac802154_wpans_rx(struct ieee802154_local *local, struct sk_buff *skb);
-void mac802154_wpan_setup(struct net_device *dev);
+extern struct ieee802154_mlme_ops mac802154_mlme_wpan;
 
-netdev_tx_t mac802154_tx(struct ieee802154_local *local, struct sk_buff *skb,
-                        u8 page, u8 chan);
+netdev_tx_t
+ieee802154_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev);
+netdev_tx_t
+ieee802154_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
+enum hrtimer_restart ieee802154_xmit_ifs_timer(struct hrtimer *timer);
 
 /* MIB callbacks */
 void mac802154_dev_set_short_addr(struct net_device *dev, __le16 val);
 __le16 mac802154_dev_get_short_addr(const struct net_device *dev);
-void mac802154_dev_set_ieee_addr(struct net_device *dev);
 __le16 mac802154_dev_get_pan_id(const struct net_device *dev);
 void mac802154_dev_set_pan_id(struct net_device *dev, __le16 val);
 void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan);
 u8 mac802154_dev_get_dsn(const struct net_device *dev);
 
-int mac802154_set_mac_params(struct net_device *dev,
-                            const struct ieee802154_mac_params *params);
-void mac802154_get_mac_params(struct net_device *dev,
-                             struct ieee802154_mac_params *params);
-
 int mac802154_get_params(struct net_device *dev,
                         struct ieee802154_llsec_params *params);
 int mac802154_set_params(struct net_device *dev,
@@ -165,4 +176,13 @@ void mac802154_get_table(struct net_device *dev,
                         struct ieee802154_llsec_table **t);
 void mac802154_unlock_table(struct net_device *dev);
 
+/* interface handling */
+int ieee802154_iface_init(void);
+void ieee802154_iface_exit(void);
+void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata);
+struct net_device *
+ieee802154_if_add(struct ieee802154_local *local, const char *name,
+                 enum nl802154_iftype type, __le64 extended_addr);
+void ieee802154_remove_interfaces(struct ieee802154_local *local);
+
 #endif /* __IEEE802154_I_H */
This page took 0.029211 seconds and 5 git commands to generate.