]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blobdiff - net/mac802154/ieee802154_i.h
mac802154: fix typo promisuous to promiscuous
[mirror_ubuntu-eoan-kernel.git] / net / mac802154 / ieee802154_i.h
index eb55cd2d0b345dac71c5246eafc82d420d03e610..4acacea0d37179219a542945108cf5c91e99aa5d 100644 (file)
@@ -20,6 +20,7 @@
 #define __IEEE802154_I_H
 
 #include <linux/mutex.h>
+#include <net/cfg802154.h>
 #include <net/mac802154.h>
 #include <net/ieee802154_netdev.h>
 
@@ -28,7 +29,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 +43,27 @@ 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;
+       bool started;
+
+       struct tasklet_struct tasklet;
+       struct sk_buff_head skb_queue;
+};
+
+enum {
+       IEEE802154_RX_MSG        = 1,
 };
 
-#define        MAC802154_DEVICE_STOPPED        0x00
-#define MAC802154_DEVICE_RUN           0x01
+enum ieee802154_sdata_state_bits {
+       SDATA_STATE_RUNNING,
+};
 
 /* Slave interface definition.
  *
@@ -66,23 +71,23 @@ struct ieee802154_local {
  * Each ieee802154 device/transceiver may have several slaves and able
  * to be associated with several networks at the same time.
  */
-struct mac802154_sub_if_data {
+struct ieee802154_sub_if_data {
        struct list_head list; /* the ieee802154_priv->slaves list */
 
-       struct ieee802154_local *hw;
+       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;
+       bool promiscuous_mode;
 
        struct ieee802154_mac_params mac_params;
 
@@ -97,41 +102,49 @@ struct mac802154_sub_if_data {
        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 */
 
+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 bool
+ieee802154_sdata_running(struct ieee802154_sub_if_data *sdata)
+{
+       return test_bit(SDATA_STATE_RUNNING, &sdata->state);
+}
+
 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);
-
-void mac802154_monitors_rx(struct ieee802154_local *local, struct sk_buff *skb);
 void mac802154_monitor_setup(struct net_device *dev);
+netdev_tx_t
+ieee802154_monitor_start_xmit(struct sk_buff *skb, struct net_device *dev);
 
-void mac802154_wpans_rx(struct ieee802154_local *local, struct sk_buff *skb);
 void mac802154_wpan_setup(struct net_device *dev);
-
-netdev_tx_t mac802154_tx(struct ieee802154_local *local, struct sk_buff *skb,
-                        u8 page, u8 chan);
+netdev_tx_t
+ieee802154_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
 
 /* 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 +178,11 @@ void mac802154_get_table(struct net_device *dev,
                         struct ieee802154_llsec_table **t);
 void mac802154_unlock_table(struct net_device *dev);
 
+struct net_device *
+mac802154_add_iface(struct wpan_phy *phy, const char *name, int type);
+void ieee802154_if_remove(struct ieee802154_sub_if_data *sdata);
+struct net_device *
+ieee802154_if_add(struct ieee802154_local *local, const char *name,
+                 struct wpan_dev **new_wpan_dev, int type);
+
 #endif /* __IEEE802154_I_H */