linux/include/net/wpan-phy.h
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2007, 2008, 2009 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 * Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
  19 */
  20
  21#ifndef WPAN_PHY_H
  22#define WPAN_PHY_H
  23
  24#include <linux/netdevice.h>
  25#include <linux/mutex.h>
  26
  27struct wpan_phy {
  28        struct mutex pib_lock;
  29
  30        /*
  31         * This is a PIB acording to 802.15.4-2006.
  32         * We do not provide timing-related variables, as they
  33         * aren't used outside of driver
  34         */
  35        u8 current_channel;
  36        u8 current_page;
  37        u32 channels_supported[32];
  38        u8 transmit_power;
  39        u8 cca_mode;
  40
  41        struct device dev;
  42        int idx;
  43
  44        struct net_device *(*add_iface)(struct wpan_phy *phy,
  45                        const char *name);
  46        void (*del_iface)(struct wpan_phy *phy, struct net_device *dev);
  47
  48        char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
  49};
  50
  51#define to_phy(_dev)    container_of(_dev, struct wpan_phy, dev)
  52
  53struct wpan_phy *wpan_phy_alloc(size_t priv_size);
  54static inline void wpan_phy_set_dev(struct wpan_phy *phy, struct device *dev)
  55{
  56        phy->dev.parent = dev;
  57}
  58int wpan_phy_register(struct wpan_phy *phy);
  59void wpan_phy_unregister(struct wpan_phy *phy);
  60void wpan_phy_free(struct wpan_phy *phy);
  61/* Same semantics as for class_for_each_device */
  62int wpan_phy_for_each(int (*fn)(struct wpan_phy *phy, void *data), void *data);
  63
  64static inline void *wpan_phy_priv(struct wpan_phy *phy)
  65{
  66        BUG_ON(!phy);
  67        return &phy->priv;
  68}
  69
  70struct wpan_phy *wpan_phy_find(const char *str);
  71
  72static inline void wpan_phy_put(struct wpan_phy *phy)
  73{
  74        put_device(&phy->dev);
  75}
  76
  77static inline const char *wpan_phy_name(struct wpan_phy *phy)
  78{
  79        return dev_name(&phy->dev);
  80}
  81#endif
  82