Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 94b79222 authored by Alexander Aring's avatar Alexander Aring Committed by Marcel Holtmann
Browse files

mac802154: add support for promiscuous mode



This patch adds a new driver operation to bring the transceiver into
promiscuous mode.

Signed-off-by: default avatarAlexander Aring <alex.aring@gmail.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent c8fc84ed
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -92,6 +92,8 @@ struct ieee802154_hw {
#define IEEE802154_HW_FRAME_RETRIES	0x00000080
/* Indicates that transceiver will support hardware address filter setting. */
#define IEEE802154_HW_AFILT		0x00000100
/* Indicates that transceiver will support promiscuous mode setting. */
#define IEEE802154_HW_PROMISCUOUS	0x00000200

/* This groups the most common CSMA support fields into one. */
#define IEEE802154_HW_CSMA		(IEEE802154_HW_CCA_MODE | \
@@ -173,6 +175,9 @@ struct ieee802154_hw {
 * set_frame_retries
 *	  Sets the retransmission attempt limit. Called with pib_lock held.
 *	  Returns either zero, or negative errno.
 *
 * set_promiscuous_mode
 *	  Enables or disable promiscuous mode.
 */
struct ieee802154_ops {
	struct module	*owner;
@@ -197,6 +202,8 @@ struct ieee802154_ops {
					   u8 min_be, u8 max_be, u8 retries);
	int		(*set_frame_retries)(struct ieee802154_hw *hw,
					     s8 retries);
	int             (*set_promiscuous_mode)(struct ieee802154_hw *hw,
						const bool on);
};

/* Basic interface to register ieee802154 hwice */
+13 −0
Original line number Diff line number Diff line
@@ -210,4 +210,17 @@ static inline int drv_set_max_frame_retries(struct ieee802154_local *local,
	return local->ops->set_frame_retries(&local->hw, max_frame_retries);
}

static inline int drv_set_promiscuous_mode(struct ieee802154_local *local,
					   const bool on)
{
	might_sleep();

	if (!local->ops->set_promiscuous_mode) {
		WARN_ON(1);
		return -EOPNOTSUPP;
	}

	return local->ops->set_promiscuous_mode(&local->hw, on);
}

#endif /* __MAC802154_DRVIER_OPS */