linux/net/mac802154/mac802154.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2007-2012 Siemens AG
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License version 2
   6 * as published by the Free Software Foundation.
   7 *
   8 * This program is distributed in the hope that it will be useful,
   9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  11 * GNU General Public License for more details.
  12 *
  13 * You should have received a copy of the GNU General Public License along
  14 * with this program; if not, write to the Free Software Foundation, Inc.,
  15 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  16 *
  17 * Written by:
  18 * Pavel Smolenskiy <pavel.smolenskiy@gmail.com>
  19 * Maxim Gorbachyov <maxim.gorbachev@siemens.com>
  20 * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
  21 * Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
  22 */
  23#ifndef MAC802154_H
  24#define MAC802154_H
  25
  26/* mac802154 device private data */
  27struct mac802154_priv {
  28        struct ieee802154_dev hw;
  29        struct ieee802154_ops *ops;
  30
  31        /* ieee802154 phy */
  32        struct wpan_phy *phy;
  33
  34        int open_count;
  35
  36        /* As in mac80211 slaves list is modified:
  37         * 1) under the RTNL
  38         * 2) protected by slaves_mtx;
  39         * 3) in an RCU manner
  40         *
  41         * So atomic readers can use any of this protection methods.
  42         */
  43        struct list_head        slaves;
  44        struct mutex            slaves_mtx;
  45
  46        /* This one is used for scanning and other jobs not to be interfered
  47         * with serial driver.
  48         */
  49        struct workqueue_struct *dev_workqueue;
  50
  51        /* SoftMAC device is registered and running. One can add subinterfaces.
  52         * This flag should be modified under slaves_mtx and RTNL, so you can
  53         * read them using any of protection methods.
  54         */
  55        bool running;
  56};
  57
  58#define MAC802154_DEVICE_STOPPED        0x00
  59#define MAC802154_DEVICE_RUN            0x01
  60
  61/* Slave interface definition.
  62 *
  63 * Slaves represent typical network interfaces available from userspace.
  64 * Each ieee802154 device/transceiver may have several slaves and able
  65 * to be associated with several networks at the same time.
  66 */
  67struct mac802154_sub_if_data {
  68        struct list_head list; /* the ieee802154_priv->slaves list */
  69
  70        struct mac802154_priv *hw;
  71        struct net_device *dev;
  72
  73        int type;
  74
  75        spinlock_t mib_lock;
  76
  77        __le16 pan_id;
  78        __le16 short_addr;
  79
  80        u8 chan;
  81        u8 page;
  82
  83        /* MAC BSN field */
  84        u8 bsn;
  85        /* MAC DSN field */
  86        u8 dsn;
  87};
  88
  89#define mac802154_to_priv(_hw)  container_of(_hw, struct mac802154_priv, hw)
  90
  91#define MAC802154_MAX_XMIT_ATTEMPTS     3
  92
  93#define MAC802154_CHAN_NONE             (~(u8)0) /* No channel is assigned */
  94
  95extern struct ieee802154_reduced_mlme_ops mac802154_mlme_reduced;
  96extern struct ieee802154_mlme_ops mac802154_mlme_wpan;
  97
  98int mac802154_slave_open(struct net_device *dev);
  99int mac802154_slave_close(struct net_device *dev);
 100
 101void mac802154_monitors_rx(struct mac802154_priv *priv, struct sk_buff *skb);
 102void mac802154_monitor_setup(struct net_device *dev);
 103
 104void mac802154_wpans_rx(struct mac802154_priv *priv, struct sk_buff *skb);
 105void mac802154_wpan_setup(struct net_device *dev);
 106
 107netdev_tx_t mac802154_tx(struct mac802154_priv *priv, struct sk_buff *skb,
 108                         u8 page, u8 chan);
 109
 110/* MIB callbacks */
 111void mac802154_dev_set_short_addr(struct net_device *dev, u16 val);
 112u16 mac802154_dev_get_short_addr(const struct net_device *dev);
 113void mac802154_dev_set_ieee_addr(struct net_device *dev);
 114u16 mac802154_dev_get_pan_id(const struct net_device *dev);
 115void mac802154_dev_set_pan_id(struct net_device *dev, u16 val);
 116void mac802154_dev_set_page_channel(struct net_device *dev, u8 page, u8 chan);
 117
 118#endif /* MAC802154_H */
 119