Commit b8e508f4 authored by Miquel Raynal's avatar Miquel Raynal Committed by Stefan Schmidt
Browse files

net: ieee802154: Drop duration settings when the core does it already



The core now knows how to set the symbol duration in a few cases, when
drivers correctly advertise the protocols used on each channel. For
these drivers, there is no more need to bother with symbol duration,
lifs and sifs periods so just drop the duplicated code.

Signed-off-by: default avatarMiquel Raynal <miquel.raynal@bootlin.com>
Acked-by: default avatarAlexander Aring <aahringo@redhat.com>
Link: https://lore.kernel.org/r/20220201180629.93410-5-miquel.raynal@bootlin.com


Signed-off-by: default avatarStefan Schmidt <stefan@datenfreihafen.org>
parent 781830c8
Loading
Loading
Loading
Loading
+0 −33
Original line number Diff line number Diff line
@@ -1064,36 +1064,6 @@ at86rf212_set_channel(struct at86rf230_local *lp, u8 page, u8 channel)
	if (rc < 0)
		return rc;

	/* This sets the symbol_duration according frequency on the 212.
	 * TODO move this handling while set channel and page in cfg802154.
	 * We can do that, this timings are according 802.15.4 standard.
	 * If we do that in cfg802154, this is a more generic calculation.
	 *
	 * This should also protected from ifs_timer. Means cancel timer and
	 * init with a new value. For now, this is okay.
	 */
	if (channel == 0) {
		if (page == 0) {
			/* SUB:0 and BPSK:0 -> BPSK-20 */
			lp->hw->phy->symbol_duration = 50 * NSEC_PER_USEC;
		} else {
			/* SUB:1 and BPSK:0 -> BPSK-40 */
			lp->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
		}
	} else {
		if (page == 0)
			/* SUB:0 and BPSK:1 -> OQPSK-100/200/400 */
			lp->hw->phy->symbol_duration = 40 * NSEC_PER_USEC;
		else
			/* SUB:1 and BPSK:1 -> OQPSK-250/500/1000 */
			lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
	}

	lp->hw->phy->lifs_period =
		(IEEE802154_LIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
	lp->hw->phy->sifs_period =
		(IEEE802154_SIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;

	return at86rf230_write_subreg(lp, SR_CHANNEL, channel);
}

@@ -1569,7 +1539,6 @@ at86rf230_detect_device(struct at86rf230_local *lp)
		lp->data = &at86rf231_data;
		lp->hw->phy->supported.channels[0] = 0x7FFF800;
		lp->hw->phy->current_channel = 11;
		lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
		lp->hw->phy->supported.tx_powers = at86rf231_powers;
		lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf231_powers);
		lp->hw->phy->supported.cca_ed_levels = at86rf231_ed_levels;
@@ -1582,7 +1551,6 @@ at86rf230_detect_device(struct at86rf230_local *lp)
		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 * NSEC_PER_USEC;
		lp->hw->phy->supported.lbt = NL802154_SUPPORTED_BOOL_BOTH;
		lp->hw->phy->supported.tx_powers = at86rf212_powers;
		lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers);
@@ -1594,7 +1562,6 @@ at86rf230_detect_device(struct at86rf230_local *lp)
		lp->data = &at86rf233_data;
		lp->hw->phy->supported.channels[0] = 0x7FFF800;
		lp->hw->phy->current_channel = 13;
		lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
		lp->hw->phy->supported.tx_powers = at86rf233_powers;
		lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf233_powers);
		lp->hw->phy->supported.cca_ed_levels = at86rf233_ed_levels;
+0 −33
Original line number Diff line number Diff line
@@ -614,36 +614,6 @@ static int hulusb_set_channel(struct ieee802154_hw *hw, u8 page, u8 channel)
	if (rc < 0)
		return rc;

	/* This sets the symbol_duration according frequency on the 212.
	 * TODO move this handling while set channel and page in cfg802154.
	 * We can do that, this timings are according 802.15.4 standard.
	 * If we do that in cfg802154, this is a more generic calculation.
	 *
	 * This should also protected from ifs_timer. Means cancel timer and
	 * init with a new value. For now, this is okay.
	 */
	if (channel == 0) {
		if (page == 0) {
			/* SUB:0 and BPSK:0 -> BPSK-20 */
			lp->hw->phy->symbol_duration = 50 * NSEC_PER_USEC;
		} else {
			/* SUB:1 and BPSK:0 -> BPSK-40 */
			lp->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
		}
	} else {
		if (page == 0)
			/* SUB:0 and BPSK:1 -> OQPSK-100/200/400 */
			lp->hw->phy->symbol_duration = 40 * NSEC_PER_USEC;
		else
			/* SUB:1 and BPSK:1 -> OQPSK-250/500/1000 */
			lp->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
	}

	lp->hw->phy->lifs_period =
		(IEEE802154_LIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;
	lp->hw->phy->sifs_period =
		(IEEE802154_SIFS_PERIOD * lp->hw->phy->symbol_duration) / 1000;

	return atusb_write_subreg(lp, SR_CHANNEL, channel);
}

@@ -869,7 +839,6 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
		chip = "AT86RF230";
		atusb->hw->phy->supported.channels[0] = 0x7FFF800;
		atusb->hw->phy->current_channel = 11;	/* reset default */
		atusb->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
		atusb->hw->phy->supported.tx_powers = atusb_powers;
		atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers);
		hw->phy->supported.cca_ed_levels = atusb_ed_levels;
@@ -879,7 +848,6 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
		chip = "AT86RF231";
		atusb->hw->phy->supported.channels[0] = 0x7FFF800;
		atusb->hw->phy->current_channel = 11;	/* reset default */
		atusb->hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
		atusb->hw->phy->supported.tx_powers = atusb_powers;
		atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers);
		hw->phy->supported.cca_ed_levels = atusb_ed_levels;
@@ -891,7 +859,6 @@ static int atusb_get_and_conf_chip(struct atusb *atusb)
		atusb->hw->phy->supported.channels[0] = 0x00007FF;
		atusb->hw->phy->supported.channels[2] = 0x00007FF;
		atusb->hw->phy->current_channel = 5;
		atusb->hw->phy->symbol_duration = 25 * NSEC_PER_USEC;
		atusb->hw->phy->supported.lbt = NL802154_SUPPORTED_BOOL_BOTH;
		atusb->hw->phy->supported.tx_powers = at86rf212_powers;
		atusb->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf212_powers);
+0 −3
Original line number Diff line number Diff line
@@ -2974,9 +2974,6 @@ static void ca8210_hw_setup(struct ieee802154_hw *ca8210_hw)
	ca8210_hw->phy->cca.mode = NL802154_CCA_ENERGY_CARRIER;
	ca8210_hw->phy->cca.opt = NL802154_CCA_OPT_ENERGY_CARRIER_AND;
	ca8210_hw->phy->cca_ed_level = -9800;
	ca8210_hw->phy->symbol_duration = 16 * NSEC_PER_USEC;
	ca8210_hw->phy->lifs_period = 40 * ca8210_hw->phy->symbol_duration;
	ca8210_hw->phy->sifs_period = 12 * ca8210_hw->phy->symbol_duration;
	ca8210_hw->flags =
		IEEE802154_HW_AFILT |
		IEEE802154_HW_OMIT_CKSUM |
+0 −5
Original line number Diff line number Diff line
@@ -975,10 +975,6 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)

	dev_dbg(printdev(lp), "%s\n", __func__);

	phy->symbol_duration = 16 * NSEC_PER_USEC;
	phy->lifs_period = (40 * phy->symbol_duration) / NSEC_PER_USEC;
	phy->sifs_period = (12 * phy->symbol_duration) / NSEC_PER_USEC;

	hw->flags = IEEE802154_HW_TX_OMIT_CKSUM |
			IEEE802154_HW_AFILT |
			IEEE802154_HW_PROMISCUOUS;
@@ -1006,7 +1002,6 @@ static void mcr20a_hw_setup(struct mcr20a_local *lp)
	phy->current_page = 0;
	/* MCR20A default reset value */
	phy->current_channel = 20;
	phy->symbol_duration = 16 * NSEC_PER_USEC;
	phy->supported.tx_powers = mcr20a_powers;
	phy->supported.tx_powers_size = ARRAY_SIZE(mcr20a_powers);
	phy->cca_ed_level = phy->supported.cca_ed_levels[75];