On 04/08/2015 04:48 PM, Alexander Aring wrote: > This patch introduce the wpan_phy_supported struct for wpan_phy. There > is currently no way to check if a transceiver can handle IEEE 802.15.4 > complaint values. With this struct we can check before if the > transceiver supports these values before sending to driver layer. > > Signed-off-by: Alexander Aring <alex.aring@xxxxxxxxx> > Suggested-by: Phoebe Buckheister <phoebe.buckheister@xxxxxxxxxxxxxxxxxx> > Cc: Varka Bhadram <varkabhadram@xxxxxxxxx> > Cc: Alan Ott <alan@xxxxxxxxxxx> > --- > drivers/net/ieee802154/at86rf230.c | 8 ++++---- > drivers/net/ieee802154/cc2520.c | 2 +- > drivers/net/ieee802154/fakelb.c | 30 +++++++++++++++--------------- > drivers/net/ieee802154/mrf24j40.c | 2 +- > include/net/cfg802154.h | 6 +++++- > net/ieee802154/nl-phy.c | 4 ++-- > net/ieee802154/nl802154.c | 2 +- > net/mac802154/cfg.c | 2 +- > 8 files changed, 30 insertions(+), 26 deletions(-) > > diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c > index 5ad46f7..1e8c532 100644 > --- a/drivers/net/ieee802154/at86rf230.c > +++ b/drivers/net/ieee802154/at86rf230.c > @@ -1556,7 +1556,7 @@ at86rf230_detect_device(struct at86rf230_local *lp) > case 3: > chip = "at86rf231"; > lp->data = &at86rf231_data; > - lp->hw->phy->channels_supported[0] = 0x7FFF800; > + lp->hw->phy->supported.channels[0] = 0x7FFF800; > lp->hw->phy->current_channel = 11; > lp->hw->phy->symbol_duration = 16; > break; > @@ -1564,15 +1564,15 @@ at86rf230_detect_device(struct at86rf230_local *lp) > chip = "at86rf212"; > lp->data = &at86rf212_data; > lp->hw->flags |= IEEE802154_HW_LBT; > - lp->hw->phy->channels_supported[0] = 0x00007FF; > - lp->hw->phy->channels_supported[2] = 0x00007FF; > + lp->hw->phy->supported.channels[0] = 0x00007FF; > + lp->hw->phy->supported.channels[2] = 0x00007FF; > lp->hw->phy->current_channel = 5; > lp->hw->phy->symbol_duration = 25; > break; > case 11: > chip = "at86rf233"; > lp->data = &at86rf233_data; > - lp->hw->phy->channels_supported[0] = 0x7FFF800; > + lp->hw->phy->supported.channels[0] = 0x7FFF800; > lp->hw->phy->current_channel = 13; > lp->hw->phy->symbol_duration = 16; > break; > diff --git a/drivers/net/ieee802154/cc2520.c b/drivers/net/ieee802154/cc2520.c > index f833b8b..84b28a0 100644 > --- a/drivers/net/ieee802154/cc2520.c > +++ b/drivers/net/ieee802154/cc2520.c > @@ -653,7 +653,7 @@ static int cc2520_register(struct cc2520_private *priv) > ieee802154_random_extended_addr(&priv->hw->phy->perm_extended_addr); > > /* We do support only 2.4 Ghz */ > - priv->hw->phy->channels_supported[0] = 0x7FFF800; > + priv->hw->phy->supported.channels[0] = 0x7FFF800; > priv->hw->flags = IEEE802154_HW_OMIT_CKSUM | IEEE802154_HW_AACK | > IEEE802154_HW_AFILT; > > diff --git a/drivers/net/ieee802154/fakelb.c b/drivers/net/ieee802154/fakelb.c > index dc2bfb6..91bbf03 100644 > --- a/drivers/net/ieee802154/fakelb.c > +++ b/drivers/net/ieee802154/fakelb.c > @@ -149,35 +149,35 @@ static int fakelb_add_one(struct device *dev, struct fakelb_priv *fake) > priv->hw = hw; > > /* 868 MHz BPSK 802.15.4-2003 */ > - hw->phy->channels_supported[0] |= 1; > + hw->phy->supported.channels[0] |= 1; > /* 915 MHz BPSK 802.15.4-2003 */ > - hw->phy->channels_supported[0] |= 0x7fe; > + hw->phy->supported.channels[0] |= 0x7fe; > /* 2.4 GHz O-QPSK 802.15.4-2003 */ > - hw->phy->channels_supported[0] |= 0x7FFF800; > + hw->phy->supported.channels[0] |= 0x7FFF800; > /* 868 MHz ASK 802.15.4-2006 */ > - hw->phy->channels_supported[1] |= 1; > + hw->phy->supported.channels[1] |= 1; > /* 915 MHz ASK 802.15.4-2006 */ > - hw->phy->channels_supported[1] |= 0x7fe; > + hw->phy->supported.channels[1] |= 0x7fe; > /* 868 MHz O-QPSK 802.15.4-2006 */ > - hw->phy->channels_supported[2] |= 1; > + hw->phy->supported.channels[2] |= 1; > /* 915 MHz O-QPSK 802.15.4-2006 */ > - hw->phy->channels_supported[2] |= 0x7fe; > + hw->phy->supported.channels[2] |= 0x7fe; > /* 2.4 GHz CSS 802.15.4a-2007 */ > - hw->phy->channels_supported[3] |= 0x3fff; > + hw->phy->supported.channels[3] |= 0x3fff; > /* UWB Sub-gigahertz 802.15.4a-2007 */ > - hw->phy->channels_supported[4] |= 1; > + hw->phy->supported.channels[4] |= 1; > /* UWB Low band 802.15.4a-2007 */ > - hw->phy->channels_supported[4] |= 0x1e; > + hw->phy->supported.channels[4] |= 0x1e; > /* UWB High band 802.15.4a-2007 */ > - hw->phy->channels_supported[4] |= 0xffe0; > + hw->phy->supported.channels[4] |= 0xffe0; > /* 750 MHz O-QPSK 802.15.4c-2009 */ > - hw->phy->channels_supported[5] |= 0xf; > + hw->phy->supported.channels[5] |= 0xf; > /* 750 MHz MPSK 802.15.4c-2009 */ > - hw->phy->channels_supported[5] |= 0xf0; > + hw->phy->supported.channels[5] |= 0xf0; > /* 950 MHz BPSK 802.15.4d-2009 */ > - hw->phy->channels_supported[6] |= 0x3ff; > + hw->phy->supported.channels[6] |= 0x3ff; > /* 950 MHz GFSK 802.15.4d-2009 */ > - hw->phy->channels_supported[6] |= 0x3ffc00; > + hw->phy->supported.channels[6] |= 0x3ffc00; > > INIT_LIST_HEAD(&priv->list); > priv->fake = fake; > diff --git a/drivers/net/ieee802154/mrf24j40.c b/drivers/net/ieee802154/mrf24j40.c > index fba2dfd..f2a1bd1 100644 > --- a/drivers/net/ieee802154/mrf24j40.c > +++ b/drivers/net/ieee802154/mrf24j40.c > @@ -750,7 +750,7 @@ static int mrf24j40_probe(struct spi_device *spi) > > devrec->hw->priv = devrec; > devrec->hw->parent = &devrec->spi->dev; > - devrec->hw->phy->channels_supported[0] = CHANNEL_MASK; > + devrec->hw->phy->supported.channels[0] = CHANNEL_MASK; > devrec->hw->flags = IEEE802154_HW_OMIT_CKSUM | IEEE802154_HW_AACK | > IEEE802154_HW_AFILT; > > diff --git a/include/net/cfg802154.h b/include/net/cfg802154.h > index eeda676..c4d42ad 100644 > --- a/include/net/cfg802154.h > +++ b/include/net/cfg802154.h > @@ -59,6 +59,10 @@ struct cfg802154_ops { > struct wpan_dev *wpan_dev, bool mode); > }; > > +struct wpan_phy_supported { > + u32 channels[IEEE802154_MAX_PAGE + 1]; > +}; > + > struct wpan_phy_cca { > enum nl802154_cca_modes mode; > enum nl802154_cca_opts opt; > @@ -82,7 +86,7 @@ struct wpan_phy { > */ > u8 current_channel; > u8 current_page; > - u32 channels_supported[IEEE802154_MAX_PAGE + 1]; > + struct wpan_phy_supported supported; > s8 transmit_power; > struct wpan_phy_cca cca; > > diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c > index 1b9d25f6..b6826cf 100644 > --- a/net/ieee802154/nl-phy.c > +++ b/net/ieee802154/nl-phy.c > @@ -56,8 +56,8 @@ static int ieee802154_nl_fill_phy(struct sk_buff *msg, u32 portid, > nla_put_u8(msg, IEEE802154_ATTR_CHANNEL, phy->current_channel)) > goto nla_put_failure; > for (i = 0; i < 32; i++) { > - if (phy->channels_supported[i]) > - buf[pages++] = phy->channels_supported[i] | (i << 27); > + if (phy->supported.channels[i]) > + buf[pages++] = phy->supported.channels[i] | (i << 27); > } > if (pages && > nla_put(msg, IEEE802154_ATTR_CHANNEL_PAGE_LIST, > diff --git a/net/ieee802154/nl802154.c b/net/ieee802154/nl802154.c > index a4daf91..4172e21 100644 > --- a/net/ieee802154/nl802154.c > +++ b/net/ieee802154/nl802154.c > @@ -248,7 +248,7 @@ nl802154_send_wpan_phy_channels(struct cfg802154_registered_device *rdev, > > for (page = 0; page <= IEEE802154_MAX_PAGE; page++) { > if (nla_put_u32(msg, NL802154_ATTR_SUPPORTED_CHANNEL, > - rdev->wpan_phy.channels_supported[page])) > + rdev->wpan_phy.supported.channels[page])) > return -ENOBUFS; > } > nla_nest_end(msg, nl_page); > diff --git a/net/mac802154/cfg.c b/net/mac802154/cfg.c > index 5d9f68c..191143a 100644 > --- a/net/mac802154/cfg.c > +++ b/net/mac802154/cfg.c > @@ -71,7 +71,7 @@ ieee802154_set_channel(struct wpan_phy *wpan_phy, u8 page, u8 channel) > ASSERT_RTNL(); > > /* check if phy support this setting */ > - if (!(wpan_phy->channels_supported[page] & BIT(channel))) > + if (!(wpan_phy->supported.channels[page] & BIT(channel))) > return -EINVAL; > > ret = drv_set_channel(local, page, channel); This patch looks fine to me. For cc2520 change: Acked-by: Varka Bhadram <varkabhadram@xxxxxxxxx> -- Varka Bhadram -- To unsubscribe from this list: send the line "unsubscribe linux-wpan" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html