Re: [RFC bluetooth-next 1/4] ieee802154: introduce wpan_phy_supported struct

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux