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