cfg802154: introduce cfg802154_registered_device

This patch introduce the cfg802154_registered_device struct. Like
cfg80211_registered_device in wireless this should contain similar
functionality for cfg802154. This patch should not change any behaviour.
We just adds cfg802154_registered_device as container for wpan_phy struct.

Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
Alexander Aring
2014-11-02 04:18:35 +01:00
committed by Marcel Holtmann
parent fe58d016e3
commit a5dd1d72d8
5 changed files with 64 additions and 18 deletions

View File

@@ -21,6 +21,7 @@
#include "ieee802154.h"
#include "sysfs.h"
#include "core.h"
static DEFINE_MUTEX(wpan_phy_mutex);
static int wpan_phy_idx;
@@ -76,31 +77,38 @@ static int wpan_phy_idx_valid(int idx)
return idx >= 0;
}
struct wpan_phy *wpan_phy_alloc(size_t priv_size)
struct wpan_phy *
wpan_phy_alloc(const struct cfg802154_ops *ops, size_t priv_size)
{
struct wpan_phy *phy = kzalloc(sizeof(*phy) + priv_size,
GFP_KERNEL);
struct cfg802154_registered_device *rdev;
size_t alloc_size;
alloc_size = sizeof(*rdev) + priv_size;
rdev = kzalloc(alloc_size, GFP_KERNEL);
if (!rdev)
return NULL;
rdev->ops = ops;
if (!phy)
goto out;
mutex_lock(&wpan_phy_mutex);
phy->idx = wpan_phy_idx++;
if (unlikely(!wpan_phy_idx_valid(phy->idx))) {
rdev->wpan_phy.idx = wpan_phy_idx++;
if (unlikely(!wpan_phy_idx_valid(rdev->wpan_phy.idx))) {
wpan_phy_idx--;
mutex_unlock(&wpan_phy_mutex);
kfree(phy);
kfree(rdev);
goto out;
}
mutex_unlock(&wpan_phy_mutex);
mutex_init(&phy->pib_lock);
mutex_init(&rdev->wpan_phy.pib_lock);
device_initialize(&phy->dev);
dev_set_name(&phy->dev, "wpan-phy%d", phy->idx);
device_initialize(&rdev->wpan_phy.dev);
dev_set_name(&rdev->wpan_phy.dev, "wpan-phy%d", rdev->wpan_phy.idx);
phy->dev.class = &wpan_phy_class;
rdev->wpan_phy.dev.class = &wpan_phy_class;
rdev->wpan_phy.dev.platform_data = rdev;
return phy;
return &rdev->wpan_phy;
out:
return NULL;
@@ -125,6 +133,11 @@ void wpan_phy_free(struct wpan_phy *phy)
}
EXPORT_SYMBOL(wpan_phy_free);
void cfg802154_dev_free(struct cfg802154_registered_device *rdev)
{
kfree(rdev);
}
static int __init wpan_phy_class_init(void)
{
int rc;