hw_ops.h revision c83cb8031bdd7923c7c5ea87accede4a5fc3282a
1b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov/*
2b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * This file is part of wlcore
3b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov *
4b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * Copyright (C) 2011 Texas Instruments Inc.
5b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov *
6b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * This program is free software; you can redistribute it and/or
7b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * modify it under the terms of the GNU General Public License
8b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * version 2 as published by the Free Software Foundation.
9b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov *
10b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * This program is distributed in the hope that it will be useful, but
11b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * WITHOUT ANY WARRANTY; without even the implied warranty of
12b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * General Public License for more details.
14b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov *
15b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * You should have received a copy of the GNU General Public License
16b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * along with this program; if not, write to the Free Software
17b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
18b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov * 02110-1301 USA
19b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov *
20b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov */
21b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov
22b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov#ifndef __WLCORE_HW_OPS_H__
23b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov#define __WLCORE_HW_OPS_H__
24b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov
25b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov#include "wlcore.h"
26cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov#include "rx.h"
27b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov
28b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsovstatic inline u32
29b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsovwlcore_hw_calc_tx_blocks(struct wl1271 *wl, u32 len, u32 spare_blks)
30b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov{
31b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov	if (!wl->ops->calc_tx_blocks)
32b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov		BUG_ON(1);
33b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov
34b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov	return wl->ops->calc_tx_blocks(wl, len, spare_blks);
35b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov}
36b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov
374a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsovstatic inline void
384a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsovwlcore_hw_set_tx_desc_blocks(struct wl1271 *wl, struct wl1271_tx_hw_descr *desc,
394a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov			     u32 blks, u32 spare_blks)
404a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov{
414a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov	if (!wl->ops->set_tx_desc_blocks)
424a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov		BUG_ON(1);
434a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov
444a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov	return wl->ops->set_tx_desc_blocks(wl, desc, blks, spare_blks);
454a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov}
464a3b97eea216135cd37e6d3a4a6c551c201a6615Arik Nemtsov
476f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsovstatic inline void
486f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsovwlcore_hw_set_tx_desc_data_len(struct wl1271 *wl,
496f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov			       struct wl1271_tx_hw_descr *desc,
506f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov			       struct sk_buff *skb)
516f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov{
526f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov	if (!wl->ops->set_tx_desc_data_len)
536f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov		BUG_ON(1);
546f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov
556f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov	wl->ops->set_tx_desc_data_len(wl, desc, skb);
566f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov}
576f266e912c0733e77f63e9ad245db3c966b75942Arik Nemtsov
58cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsovstatic inline enum wl_rx_buf_align
59cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsovwlcore_hw_get_rx_buf_align(struct wl1271 *wl, u32 rx_desc)
60cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov{
61cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov
62cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov	if (!wl->ops->get_rx_buf_align)
63cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov		BUG_ON(1);
64cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov
65cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov	return wl->ops->get_rx_buf_align(wl, rx_desc);
66cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov}
67cd70f6a48b3fbb841a127361ee4ac0752f9d29a2Arik Nemtsov
68eb96f841b9563ba34969be25615548635728faf5Ido Yarivstatic inline int
69b14684a00439b7b154e63be9446fba19281b8bbcLuciano Coelhowlcore_hw_prepare_read(struct wl1271 *wl, u32 rx_desc, u32 len)
70b14684a00439b7b154e63be9446fba19281b8bbcLuciano Coelho{
71b14684a00439b7b154e63be9446fba19281b8bbcLuciano Coelho	if (wl->ops->prepare_read)
72eb96f841b9563ba34969be25615548635728faf5Ido Yariv		return wl->ops->prepare_read(wl, rx_desc, len);
73eb96f841b9563ba34969be25615548635728faf5Ido Yariv
74eb96f841b9563ba34969be25615548635728faf5Ido Yariv	return 0;
75b14684a00439b7b154e63be9446fba19281b8bbcLuciano Coelho}
76b14684a00439b7b154e63be9446fba19281b8bbcLuciano Coelho
774158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsovstatic inline u32
784158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsovwlcore_hw_get_rx_packet_len(struct wl1271 *wl, void *rx_data, u32 data_len)
794158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsov{
804158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsov	if (!wl->ops->get_rx_packet_len)
814158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsov		BUG_ON(1);
824158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsov
834158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsov	return wl->ops->get_rx_packet_len(wl, rx_data, data_len);
844158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsov}
854158149c24e6f933809bc6fe03dbc3fb218b935bArik Nemtsov
86045b9b5f4172b2b21af0b9bf5e6dda51146d51a4Ido Yarivstatic inline int wlcore_hw_tx_delayed_compl(struct wl1271 *wl)
8753d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov{
8853d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov	if (wl->ops->tx_delayed_compl)
89045b9b5f4172b2b21af0b9bf5e6dda51146d51a4Ido Yariv		return wl->ops->tx_delayed_compl(wl);
90045b9b5f4172b2b21af0b9bf5e6dda51146d51a4Ido Yariv
91045b9b5f4172b2b21af0b9bf5e6dda51146d51a4Ido Yariv	return 0;
9253d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov}
9353d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov
9453d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsovstatic inline void wlcore_hw_tx_immediate_compl(struct wl1271 *wl)
9553d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov{
9653d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov	if (wl->ops->tx_immediate_compl)
9753d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov		wl->ops->tx_immediate_compl(wl);
9853d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov}
9953d67a50cd17aca120dff20eb2a93e1665361688Arik Nemtsov
1008a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsovstatic inline int
1018a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsovwlcore_hw_init_vif(struct wl1271 *wl, struct wl12xx_vif *wlvif)
1028a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsov{
1038a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsov	if (wl->ops->init_vif)
1048a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsov		return wl->ops->init_vif(wl, wlvif);
1058a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsov
1068a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsov	return 0;
1078a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsov}
1088a9affc08d676a9fe627361ab6767cdec0740af3Arik Nemtsov
109fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsovstatic inline u32
110fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsovwlcore_hw_sta_get_ap_rate_mask(struct wl1271 *wl, struct wl12xx_vif *wlvif)
111fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsov{
112fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsov	if (!wl->ops->sta_get_ap_rate_mask)
113fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsov		BUG_ON(1);
114fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsov
115fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsov	return wl->ops->sta_get_ap_rate_mask(wl, wlvif);
116fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsov}
117fa7930afa525e7f481f9d6984a301f69c2255ee4Arik Nemtsov
11880cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelhostatic inline int wlcore_identify_fw(struct wl1271 *wl)
11980cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelho{
12080cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelho	if (wl->ops->identify_fw)
12180cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelho		return wl->ops->identify_fw(wl);
12280cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelho
12380cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelho	return 0;
12480cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelho}
12580cd661097f3cb1dcfe45cac983c55d03cdcf64dLuciano Coelho
1262fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsovstatic inline void
1272fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsovwlcore_hw_set_tx_desc_csum(struct wl1271 *wl,
1282fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov			   struct wl1271_tx_hw_descr *desc,
1292fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov			   struct sk_buff *skb)
1302fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov{
1312fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov	if (!wl->ops->set_tx_desc_csum)
1322fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov		BUG_ON(1);
1332fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov
1342fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov	wl->ops->set_tx_desc_csum(wl, desc, skb);
1352fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov}
1362fc28de5989e1c40fee4e92e2a8f3bdd47b1b34aArik Nemtsov
137169da04f523bafee46993b1efbddb913641aad56Arik Nemtsovstatic inline void
138169da04f523bafee46993b1efbddb913641aad56Arik Nemtsovwlcore_hw_set_rx_csum(struct wl1271 *wl,
139169da04f523bafee46993b1efbddb913641aad56Arik Nemtsov		      struct wl1271_rx_descriptor *desc,
140169da04f523bafee46993b1efbddb913641aad56Arik Nemtsov		      struct sk_buff *skb)
141169da04f523bafee46993b1efbddb913641aad56Arik Nemtsov{
142169da04f523bafee46993b1efbddb913641aad56Arik Nemtsov	if (wl->ops->set_rx_csum)
143169da04f523bafee46993b1efbddb913641aad56Arik Nemtsov		wl->ops->set_rx_csum(wl, desc, skb);
144169da04f523bafee46993b1efbddb913641aad56Arik Nemtsov}
145169da04f523bafee46993b1efbddb913641aad56Arik Nemtsov
146ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsovstatic inline u32
147ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsovwlcore_hw_ap_get_mimo_wide_rate_mask(struct wl1271 *wl,
148ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov				     struct wl12xx_vif *wlvif)
149ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov{
150ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov	if (wl->ops->ap_get_mimo_wide_rate_mask)
151ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov		return wl->ops->ap_get_mimo_wide_rate_mask(wl, wlvif);
152ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov
153ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov	return 0;
154ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov}
155ebc7e57ddd01ffa4c996dde7095746259693755dArik Nemtsov
1564987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelhostatic inline int
1574987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelhowlcore_debugfs_init(struct wl1271 *wl, struct dentry *rootdir)
1584987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelho{
1594987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelho	if (wl->ops->debugfs_init)
1604987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelho		return wl->ops->debugfs_init(wl, rootdir);
1614987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelho
1624987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelho	return 0;
1634987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelho}
1644987257c304bf5d12e7a5cedde1100ba7f14a8a3Luciano Coelho
1657140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelhostatic inline int
1667140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelhowlcore_handle_static_data(struct wl1271 *wl, void *static_data)
1677140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelho{
1687140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelho	if (wl->ops->handle_static_data)
1697140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelho		return wl->ops->handle_static_data(wl, static_data);
1707140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelho
1717140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelho	return 0;
1727140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelho}
1737140df6e51ecca70e8963f18e9836e62090221c2Luciano Coelho
17432bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsovstatic inline int
17532bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsovwlcore_hw_get_spare_blocks(struct wl1271 *wl, bool is_gem)
17632bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsov{
17732bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsov	if (!wl->ops->get_spare_blocks)
17832bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsov		BUG_ON(1);
17932bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsov
18032bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsov	return wl->ops->get_spare_blocks(wl, is_gem);
18132bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsov}
18232bb2c03f990d015c0fec67e9134ea8625aaf784Arik Nemtsov
183a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsovstatic inline int
184a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsovwlcore_hw_set_key(struct wl1271 *wl, enum set_key_cmd cmd,
185a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov		  struct ieee80211_vif *vif,
186a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov		  struct ieee80211_sta *sta,
187a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov		  struct ieee80211_key_conf *key_conf)
188a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov{
189a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov	if (!wl->ops->set_key)
190a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov		BUG_ON(1);
191a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov
192a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov	return wl->ops->set_key(wl, cmd, vif, sta, key_conf);
193a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov}
194a1c597f2b22cdc228de3c58784b00e80b9b53e03Arik Nemtsov
1959fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reisstatic inline u32
1969fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reiswlcore_hw_pre_pkt_send(struct wl1271 *wl, u32 buf_offset, u32 last_len)
1979fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reis{
1989fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reis	if (wl->ops->pre_pkt_send)
1999fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reis		return wl->ops->pre_pkt_send(wl, buf_offset, last_len);
2009fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reis
2019fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reis	return buf_offset;
2029fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reis}
2039fccc82e19db0d63741cd6c3d2a8829fc8854406Ido Reis
2045f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsovstatic inline void
2055f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsovwlcore_hw_sta_rc_update(struct wl1271 *wl, struct wl12xx_vif *wlvif,
2065f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsov			struct ieee80211_sta *sta, u32 changed)
2075f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsov{
2085f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsov	if (wl->ops->sta_rc_update)
2095f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsov		wl->ops->sta_rc_update(wl, wlvif, sta, changed);
2105f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsov}
2115f9b67770be4201f4449b0f180effecaac4e2686Arik Nemtsov
212530abe195df6918d43c9381fd9a70b7e16d55036Eliad Pellerstatic inline int
213530abe195df6918d43c9381fd9a70b7e16d55036Eliad Pellerwlcore_hw_set_peer_cap(struct wl1271 *wl,
214530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller		       struct ieee80211_sta_ht_cap *ht_cap,
215530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller		       bool allow_ht_operation,
216530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller		       u32 rate_set, u8 hlid)
217530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller{
218530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller	if (wl->ops->set_peer_cap)
219530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller		return wl->ops->set_peer_cap(wl, ht_cap, allow_ht_operation,
220530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller					     rate_set, hlid);
221530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller
222530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller	return 0;
223530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller}
224530abe195df6918d43c9381fd9a70b7e16d55036Eliad Peller
225c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelskystatic inline u32
226c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelskywlcore_hw_convert_hwaddr(struct wl1271 *wl, u32 hwaddr)
227c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelsky{
228c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelsky	if (!wl->ops->convert_hwaddr)
229c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelsky		BUG_ON(1);
230c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelsky
231c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelsky	return wl->ops->convert_hwaddr(wl, hwaddr);
232c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelsky}
233c83cb8031bdd7923c7c5ea87accede4a5fc3282aIgal Chernobelsky
234f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsovstatic inline bool
235f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsovwlcore_hw_lnk_high_prio(struct wl1271 *wl, u8 hlid,
236f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov			struct wl1271_link *lnk)
237f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov{
238f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov	if (!wl->ops->lnk_high_prio)
239f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov		BUG_ON(1);
240f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov
241f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov	return wl->ops->lnk_high_prio(wl, hlid, lnk);
242f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov}
243f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov
244f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsovstatic inline bool
245f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsovwlcore_hw_lnk_low_prio(struct wl1271 *wl, u8 hlid,
246f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov		       struct wl1271_link *lnk)
247f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov{
248f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov	if (!wl->ops->lnk_low_prio)
249f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov		BUG_ON(1);
250f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov
251f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov	return wl->ops->lnk_low_prio(wl, hlid, lnk);
252f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov}
253f1626fd8983a5bc68ce2879865cce297eb96c0b4Arik Nemtsov
254b3b4b4b812018a06221b6d7b88a5540fccae2940Arik Nemtsov#endif
255