xref: /freebsd/sys/contrib/dev/iwlwifi/mei/iwl-mei.h (revision a4128aad8503277614f2d214011ef60a19447b83)
1d9836fb4SBjoern A. Zeeb /*-
2*a4128aadSBjoern A. Zeeb  * Copyright (c) 2022-2024 The FreeBSD Foundation
3d9836fb4SBjoern A. Zeeb  *
4d9836fb4SBjoern A. Zeeb  * This software was developed by Björn Zeeb under sponsorship from
5d9836fb4SBjoern A. Zeeb  * the FreeBSD Foundation.
6d9836fb4SBjoern A. Zeeb  *
7d9836fb4SBjoern A. Zeeb  * Redistribution and use in source and binary forms, with or without
8d9836fb4SBjoern A. Zeeb  * modification, are permitted provided that the following conditions
9d9836fb4SBjoern A. Zeeb  * are met:
10d9836fb4SBjoern A. Zeeb  * 1. Redistributions of source code must retain the above copyright
11d9836fb4SBjoern A. Zeeb  *    notice, this list of conditions and the following disclaimer.
12d9836fb4SBjoern A. Zeeb  * 2. Redistributions in binary form must reproduce the above copyright
13d9836fb4SBjoern A. Zeeb  *    notice, this list of conditions and the following disclaimer in the
14d9836fb4SBjoern A. Zeeb  *    documentation and/or other materials provided with the distribution.
15d9836fb4SBjoern A. Zeeb  *
16d9836fb4SBjoern A. Zeeb  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17d9836fb4SBjoern A. Zeeb  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18d9836fb4SBjoern A. Zeeb  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19d9836fb4SBjoern A. Zeeb  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20d9836fb4SBjoern A. Zeeb  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21d9836fb4SBjoern A. Zeeb  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22d9836fb4SBjoern A. Zeeb  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23d9836fb4SBjoern A. Zeeb  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24d9836fb4SBjoern A. Zeeb  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25d9836fb4SBjoern A. Zeeb  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26d9836fb4SBjoern A. Zeeb  * SUCH DAMAGE.
27d9836fb4SBjoern A. Zeeb  *
28d9836fb4SBjoern A. Zeeb  * $FreeBSD$
29d9836fb4SBjoern A. Zeeb  */
30d9836fb4SBjoern A. Zeeb 
31d9836fb4SBjoern A. Zeeb #ifndef _IWL_MEI_IWL_MEI_H
32d9836fb4SBjoern A. Zeeb #define	_IWL_MEI_IWL_MEI_H
33d9836fb4SBjoern A. Zeeb 
34d9836fb4SBjoern A. Zeeb #include <linux/types.h>
35d9836fb4SBjoern A. Zeeb #include <linux/kernel.h>
36d9836fb4SBjoern A. Zeeb #include <linux/netdevice.h>
37d9836fb4SBjoern A. Zeeb #include <linux/skbuff.h>
38d9836fb4SBjoern A. Zeeb 
39d9836fb4SBjoern A. Zeeb enum mei_nvm_caps {
40d9836fb4SBjoern A. Zeeb 	MEI_NVM_CAPS_11AX_SUPPORT	= BIT(0),
41d9836fb4SBjoern A. Zeeb 	MEI_NVM_CAPS_LARI_SUPPORT	= BIT(1),
42d9836fb4SBjoern A. Zeeb };
43d9836fb4SBjoern A. Zeeb 
44d9836fb4SBjoern A. Zeeb struct iwl_mei_nvm {
45d9836fb4SBjoern A. Zeeb 	uint8_t				n_hw_addrs;
46d9836fb4SBjoern A. Zeeb 	enum mei_nvm_caps		caps;
47d9836fb4SBjoern A. Zeeb 	uint32_t			nvm_version;
48d9836fb4SBjoern A. Zeeb 	uint32_t			radio_cfg;
49d9836fb4SBjoern A. Zeeb 	uint32_t			channels[110 /* IWL_NVM_NUM_CHANNELS_UHB */];
50d9836fb4SBjoern A. Zeeb };
51d9836fb4SBjoern A. Zeeb 
52d9836fb4SBjoern A. Zeeb struct iwl_mei_conn_info {
539af1bba4SBjoern A. Zeeb 	uint8_t				lp_state;
549af1bba4SBjoern A. Zeeb 	uint8_t				band;
559af1bba4SBjoern A. Zeeb 	uint8_t				channel;
569af1bba4SBjoern A. Zeeb 	uint8_t				ssid_len;
579af1bba4SBjoern A. Zeeb 	uint8_t				bssid[ETH_ALEN];
589af1bba4SBjoern A. Zeeb 	uint8_t				ssid[IEEE80211_MAX_SSID_LEN];
59d9836fb4SBjoern A. Zeeb };
60d9836fb4SBjoern A. Zeeb 
61d9836fb4SBjoern A. Zeeb struct iwl_mei_ops {
62d9836fb4SBjoern A. Zeeb 	void (*me_conn_status)(void *, const struct iwl_mei_conn_info *);
63d9836fb4SBjoern A. Zeeb 	void (*nic_stolen)(void *);
64d9836fb4SBjoern A. Zeeb 	void (*rfkill)(void *, bool);
65d9836fb4SBjoern A. Zeeb 	void (*roaming_forbidden)(void *, bool);
66d9836fb4SBjoern A. Zeeb 	void (*sap_connected)(void *);
67d9836fb4SBjoern A. Zeeb };
68d9836fb4SBjoern A. Zeeb 
69d9836fb4SBjoern A. Zeeb #if IS_ENABLED(CONFIG_IWLMEI)
70d9836fb4SBjoern A. Zeeb #error No MEI support in FreeBSD currently
71d9836fb4SBjoern A. Zeeb #else
72d9836fb4SBjoern A. Zeeb 
73d9836fb4SBjoern A. Zeeb static __inline void
74d9836fb4SBjoern A. Zeeb iwl_mei_device_down(void)
75d9836fb4SBjoern A. Zeeb {
76d9836fb4SBjoern A. Zeeb }
77d9836fb4SBjoern A. Zeeb 
78d9836fb4SBjoern A. Zeeb static __inline struct iwl_mei_nvm *
79d9836fb4SBjoern A. Zeeb iwl_mei_get_nvm(void)
80d9836fb4SBjoern A. Zeeb {
81d9836fb4SBjoern A. Zeeb         return (NULL);
82d9836fb4SBjoern A. Zeeb }
83d9836fb4SBjoern A. Zeeb 
84d9836fb4SBjoern A. Zeeb static __inline int
85d9836fb4SBjoern A. Zeeb iwl_mei_get_ownership(void)
86d9836fb4SBjoern A. Zeeb {
87d9836fb4SBjoern A. Zeeb 	return (0);
88d9836fb4SBjoern A. Zeeb }
89d9836fb4SBjoern A. Zeeb 
90d9836fb4SBjoern A. Zeeb static __inline void
91d9836fb4SBjoern A. Zeeb iwl_mei_host_disassociated(void)
92d9836fb4SBjoern A. Zeeb {
93d9836fb4SBjoern A. Zeeb }
94d9836fb4SBjoern A. Zeeb 
95d9836fb4SBjoern A. Zeeb static __inline bool
96d9836fb4SBjoern A. Zeeb iwl_mei_is_connected(void)
97d9836fb4SBjoern A. Zeeb {
98d9836fb4SBjoern A. Zeeb         return (false);
99d9836fb4SBjoern A. Zeeb }
100d9836fb4SBjoern A. Zeeb 
101d9836fb4SBjoern A. Zeeb static __inline void
102d9836fb4SBjoern A. Zeeb iwl_mei_set_country_code(uint16_t mcc __unused)
103d9836fb4SBjoern A. Zeeb {
104d9836fb4SBjoern A. Zeeb }
105d9836fb4SBjoern A. Zeeb 
106d9836fb4SBjoern A. Zeeb static __inline void
107d9836fb4SBjoern A. Zeeb iwl_mei_set_netdev(struct net_device *netdevice __unused)
108d9836fb4SBjoern A. Zeeb {
109d9836fb4SBjoern A. Zeeb }
110d9836fb4SBjoern A. Zeeb 
111d9836fb4SBjoern A. Zeeb static __inline void
112d9836fb4SBjoern A. Zeeb iwl_mei_set_nic_info(const uint8_t *addr __unused, const uint8_t *hw_addr __unused)
113d9836fb4SBjoern A. Zeeb {
114d9836fb4SBjoern A. Zeeb }
115d9836fb4SBjoern A. Zeeb 
116d9836fb4SBjoern A. Zeeb static __inline void
117d9836fb4SBjoern A. Zeeb iwl_mei_set_rfkill_state(bool rf_killed __unused, bool sw_rfkill __unused)
118d9836fb4SBjoern A. Zeeb {
119d9836fb4SBjoern A. Zeeb }
120d9836fb4SBjoern A. Zeeb 
121d9836fb4SBjoern A. Zeeb static __inline void
122d9836fb4SBjoern A. Zeeb iwl_mei_tx_copy_to_csme(struct sk_buff *skb __unused, unsigned int ivlen __unused)
123d9836fb4SBjoern A. Zeeb {
124d9836fb4SBjoern A. Zeeb }
125d9836fb4SBjoern A. Zeeb 
126d9836fb4SBjoern A. Zeeb static __inline int
127d9836fb4SBjoern A. Zeeb iwl_mei_register(void *mvm __unused, const struct iwl_mei_ops *ops __unused)
128d9836fb4SBjoern A. Zeeb {
129d9836fb4SBjoern A. Zeeb 	return (0);
130d9836fb4SBjoern A. Zeeb }
131d9836fb4SBjoern A. Zeeb 
132d9836fb4SBjoern A. Zeeb static __inline void
133d9836fb4SBjoern A. Zeeb iwl_mei_start_unregister(void)
134d9836fb4SBjoern A. Zeeb {
135d9836fb4SBjoern A. Zeeb }
136d9836fb4SBjoern A. Zeeb 
137d9836fb4SBjoern A. Zeeb static __inline void
138d9836fb4SBjoern A. Zeeb iwl_mei_unregister_complete(void)
139d9836fb4SBjoern A. Zeeb {
140d9836fb4SBjoern A. Zeeb }
1419af1bba4SBjoern A. Zeeb 
1429af1bba4SBjoern A. Zeeb static __inline void
1439af1bba4SBjoern A. Zeeb iwl_mei_device_state(bool up __unused)
1449af1bba4SBjoern A. Zeeb {
1459af1bba4SBjoern A. Zeeb }
1469af1bba4SBjoern A. Zeeb 
1479af1bba4SBjoern A. Zeeb static __inline void
1489af1bba4SBjoern A. Zeeb iwl_mei_alive_notif(bool x __unused)
1499af1bba4SBjoern A. Zeeb {
1509af1bba4SBjoern A. Zeeb }
1519af1bba4SBjoern A. Zeeb 
1529af1bba4SBjoern A. Zeeb static __inline bool
1539af1bba4SBjoern A. Zeeb iwl_mei_pldr_req(void)
1549af1bba4SBjoern A. Zeeb {
1559af1bba4SBjoern A. Zeeb 	return (false);
1569af1bba4SBjoern A. Zeeb }
157*a4128aadSBjoern A. Zeeb 
158*a4128aadSBjoern A. Zeeb static __inline void
159*a4128aadSBjoern A. Zeeb iwl_mei_set_power_limit(__le16 *x __unused)
160*a4128aadSBjoern A. Zeeb {
161*a4128aadSBjoern A. Zeeb }
162d9836fb4SBjoern A. Zeeb #endif
163d9836fb4SBjoern A. Zeeb 
164d9836fb4SBjoern A. Zeeb #endif /* _IWL_MEI_IWL_MEI_H */
165