cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

driver-ops.h (5923B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2#ifndef __MAC802154_DRIVER_OPS
      3#define __MAC802154_DRIVER_OPS
      4
      5#include <linux/types.h>
      6#include <linux/rtnetlink.h>
      7
      8#include <net/mac802154.h>
      9
     10#include "ieee802154_i.h"
     11#include "trace.h"
     12
     13static inline int
     14drv_xmit_async(struct ieee802154_local *local, struct sk_buff *skb)
     15{
     16	return local->ops->xmit_async(&local->hw, skb);
     17}
     18
     19static inline int
     20drv_xmit_sync(struct ieee802154_local *local, struct sk_buff *skb)
     21{
     22	might_sleep();
     23
     24	return local->ops->xmit_sync(&local->hw, skb);
     25}
     26
     27static inline int drv_start(struct ieee802154_local *local)
     28{
     29	int ret;
     30
     31	might_sleep();
     32
     33	trace_802154_drv_start(local);
     34	local->started = true;
     35	smp_mb();
     36	ret = local->ops->start(&local->hw);
     37	trace_802154_drv_return_int(local, ret);
     38	return ret;
     39}
     40
     41static inline void drv_stop(struct ieee802154_local *local)
     42{
     43	might_sleep();
     44
     45	trace_802154_drv_stop(local);
     46	local->ops->stop(&local->hw);
     47	trace_802154_drv_return_void(local);
     48
     49	/* sync away all work on the tasklet before clearing started */
     50	tasklet_disable(&local->tasklet);
     51	tasklet_enable(&local->tasklet);
     52
     53	barrier();
     54
     55	local->started = false;
     56}
     57
     58static inline int
     59drv_set_channel(struct ieee802154_local *local, u8 page, u8 channel)
     60{
     61	int ret;
     62
     63	might_sleep();
     64
     65	trace_802154_drv_set_channel(local, page, channel);
     66	ret = local->ops->set_channel(&local->hw, page, channel);
     67	trace_802154_drv_return_int(local, ret);
     68	return ret;
     69}
     70
     71static inline int drv_set_tx_power(struct ieee802154_local *local, s32 mbm)
     72{
     73	int ret;
     74
     75	might_sleep();
     76
     77	if (!local->ops->set_txpower) {
     78		WARN_ON(1);
     79		return -EOPNOTSUPP;
     80	}
     81
     82	trace_802154_drv_set_tx_power(local, mbm);
     83	ret = local->ops->set_txpower(&local->hw, mbm);
     84	trace_802154_drv_return_int(local, ret);
     85	return ret;
     86}
     87
     88static inline int drv_set_cca_mode(struct ieee802154_local *local,
     89				   const struct wpan_phy_cca *cca)
     90{
     91	int ret;
     92
     93	might_sleep();
     94
     95	if (!local->ops->set_cca_mode) {
     96		WARN_ON(1);
     97		return -EOPNOTSUPP;
     98	}
     99
    100	trace_802154_drv_set_cca_mode(local, cca);
    101	ret = local->ops->set_cca_mode(&local->hw, cca);
    102	trace_802154_drv_return_int(local, ret);
    103	return ret;
    104}
    105
    106static inline int drv_set_lbt_mode(struct ieee802154_local *local, bool mode)
    107{
    108	int ret;
    109
    110	might_sleep();
    111
    112	if (!local->ops->set_lbt) {
    113		WARN_ON(1);
    114		return -EOPNOTSUPP;
    115	}
    116
    117	trace_802154_drv_set_lbt_mode(local, mode);
    118	ret = local->ops->set_lbt(&local->hw, mode);
    119	trace_802154_drv_return_int(local, ret);
    120	return ret;
    121}
    122
    123static inline int
    124drv_set_cca_ed_level(struct ieee802154_local *local, s32 mbm)
    125{
    126	int ret;
    127
    128	might_sleep();
    129
    130	if (!local->ops->set_cca_ed_level) {
    131		WARN_ON(1);
    132		return -EOPNOTSUPP;
    133	}
    134
    135	trace_802154_drv_set_cca_ed_level(local, mbm);
    136	ret = local->ops->set_cca_ed_level(&local->hw, mbm);
    137	trace_802154_drv_return_int(local, ret);
    138	return ret;
    139}
    140
    141static inline int drv_set_pan_id(struct ieee802154_local *local, __le16 pan_id)
    142{
    143	struct ieee802154_hw_addr_filt filt;
    144	int ret;
    145
    146	might_sleep();
    147
    148	if (!local->ops->set_hw_addr_filt) {
    149		WARN_ON(1);
    150		return -EOPNOTSUPP;
    151	}
    152
    153	filt.pan_id = pan_id;
    154
    155	trace_802154_drv_set_pan_id(local, pan_id);
    156	ret = local->ops->set_hw_addr_filt(&local->hw, &filt,
    157					    IEEE802154_AFILT_PANID_CHANGED);
    158	trace_802154_drv_return_int(local, ret);
    159	return ret;
    160}
    161
    162static inline int
    163drv_set_extended_addr(struct ieee802154_local *local, __le64 extended_addr)
    164{
    165	struct ieee802154_hw_addr_filt filt;
    166	int ret;
    167
    168	might_sleep();
    169
    170	if (!local->ops->set_hw_addr_filt) {
    171		WARN_ON(1);
    172		return -EOPNOTSUPP;
    173	}
    174
    175	filt.ieee_addr = extended_addr;
    176
    177	trace_802154_drv_set_extended_addr(local, extended_addr);
    178	ret = local->ops->set_hw_addr_filt(&local->hw, &filt,
    179					    IEEE802154_AFILT_IEEEADDR_CHANGED);
    180	trace_802154_drv_return_int(local, ret);
    181	return ret;
    182}
    183
    184static inline int
    185drv_set_short_addr(struct ieee802154_local *local, __le16 short_addr)
    186{
    187	struct ieee802154_hw_addr_filt filt;
    188	int ret;
    189
    190	might_sleep();
    191
    192	if (!local->ops->set_hw_addr_filt) {
    193		WARN_ON(1);
    194		return -EOPNOTSUPP;
    195	}
    196
    197	filt.short_addr = short_addr;
    198
    199	trace_802154_drv_set_short_addr(local, short_addr);
    200	ret = local->ops->set_hw_addr_filt(&local->hw, &filt,
    201					    IEEE802154_AFILT_SADDR_CHANGED);
    202	trace_802154_drv_return_int(local, ret);
    203	return ret;
    204}
    205
    206static inline int
    207drv_set_pan_coord(struct ieee802154_local *local, bool is_coord)
    208{
    209	struct ieee802154_hw_addr_filt filt;
    210	int ret;
    211
    212	might_sleep();
    213
    214	if (!local->ops->set_hw_addr_filt) {
    215		WARN_ON(1);
    216		return -EOPNOTSUPP;
    217	}
    218
    219	filt.pan_coord = is_coord;
    220
    221	trace_802154_drv_set_pan_coord(local, is_coord);
    222	ret = local->ops->set_hw_addr_filt(&local->hw, &filt,
    223					    IEEE802154_AFILT_PANC_CHANGED);
    224	trace_802154_drv_return_int(local, ret);
    225	return ret;
    226}
    227
    228static inline int
    229drv_set_csma_params(struct ieee802154_local *local, u8 min_be, u8 max_be,
    230		    u8 max_csma_backoffs)
    231{
    232	int ret;
    233
    234	might_sleep();
    235
    236	if (!local->ops->set_csma_params) {
    237		WARN_ON(1);
    238		return -EOPNOTSUPP;
    239	}
    240
    241	trace_802154_drv_set_csma_params(local, min_be, max_be,
    242					 max_csma_backoffs);
    243	ret = local->ops->set_csma_params(&local->hw, min_be, max_be,
    244					   max_csma_backoffs);
    245	trace_802154_drv_return_int(local, ret);
    246	return ret;
    247}
    248
    249static inline int
    250drv_set_max_frame_retries(struct ieee802154_local *local, s8 max_frame_retries)
    251{
    252	int ret;
    253
    254	might_sleep();
    255
    256	if (!local->ops->set_frame_retries) {
    257		WARN_ON(1);
    258		return -EOPNOTSUPP;
    259	}
    260
    261	trace_802154_drv_set_max_frame_retries(local, max_frame_retries);
    262	ret = local->ops->set_frame_retries(&local->hw, max_frame_retries);
    263	trace_802154_drv_return_int(local, ret);
    264	return ret;
    265}
    266
    267static inline int
    268drv_set_promiscuous_mode(struct ieee802154_local *local, bool on)
    269{
    270	int ret;
    271
    272	might_sleep();
    273
    274	if (!local->ops->set_promiscuous_mode) {
    275		WARN_ON(1);
    276		return -EOPNOTSUPP;
    277	}
    278
    279	trace_802154_drv_set_promiscuous_mode(local, on);
    280	ret = local->ops->set_promiscuous_mode(&local->hw, on);
    281	trace_802154_drv_return_int(local, ret);
    282	return ret;
    283}
    284
    285#endif /* __MAC802154_DRIVER_OPS */