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#include <linux/bug.h>
  27
  28/* According to the IEEE 802.15.4 stadard the upper most significant bits of
  29 * the 32-bit channel bitmaps shall be used as an integer value to specify 32
  30 * possible channel pages. The lower 27 bits of the channel bit map shall be
  31 * used as a bit mask to specify channel numbers within a channel page.
  32 */
  33#define WPAN_NUM_CHANNELS       27
  34#define WPAN_NUM_PAGES          32
  35
  36struct wpan_phy {
  37        struct mutex pib_lock;
  38
  39        /*
  40         * This is a PIB according to 802.15.4-2006.
  41         * We do not provide timing-related variables, as they
  42         * aren't used outside of driver
  43         */
  44        u8 current_channel;
  45        u8 current_page;
  46        u32 channels_supported[32];
  47        u8 transmit_power;
  48        u8 cca_mode;
  49
  50        struct device dev;
  51        int idx;
  52
  53        struct net_device *(*add_iface)(struct wpan_phy *phy,
  54                                        const char *name, int type);
  55        void (*del_iface)(struct wpan_phy *phy, struct net_device *dev);
  56
  57        char priv[0] __attribute__((__aligned__(NETDEV_ALIGN)));
  58};
  59
  60#define to_phy(_dev)    container_of(_dev, struct wpan_phy, dev)
  61
  62struct wpan_phy *wpan_phy_alloc(size_t priv_size);
  63static inline void wpan_phy_set_dev(struct wpan_phy *phy, struct device *dev)
  64{
  65        phy->dev.parent = dev;
  66}
  67int wpan_phy_register(struct wpan_phy *phy);
  68void wpan_phy_unregister(struct wpan_phy *phy);
  69void wpan_phy_free(struct wpan_phy *phy);
  70/* Same semantics as for class_for_each_device */
  71int wpan_phy_for_each(int (*fn)(struct wpan_phy *phy, void *data), void *data);
  72
  73static inline void *wpan_phy_priv(struct wpan_phy *phy)
  74{
  75        BUG_ON(!phy);
  76        return &phy->priv;
  77}
  78
  79struct wpan_phy *wpan_phy_find(const char *str);
  80
  81static inline void wpan_phy_put(struct wpan_phy *phy)
  82{
  83        put_device(&phy->dev);
  84}
  85
  86static inline const char *wpan_phy_name(struct wpan_phy *phy)
  87{
  88        return dev_name(&phy->dev);
  89}
  90#endif
  91
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.