18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Contains all definitions needed for the Libertas' MESH implementation.
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci#ifndef _LBS_MESH_H_
68c2ecf20Sopenharmony_ci#define _LBS_MESH_H_
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_ci#include <net/iw_handler.h>
108c2ecf20Sopenharmony_ci#include <net/lib80211.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#include "host.h"
138c2ecf20Sopenharmony_ci#include "dev.h"
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#ifdef CONFIG_LIBERTAS_MESH
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistruct net_device;
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_civoid lbs_init_mesh(struct lbs_private *priv);
208c2ecf20Sopenharmony_civoid lbs_start_mesh(struct lbs_private *priv);
218c2ecf20Sopenharmony_ciint lbs_deinit_mesh(struct lbs_private *priv);
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_civoid lbs_remove_mesh(struct lbs_private *priv);
248c2ecf20Sopenharmony_ci
258c2ecf20Sopenharmony_cistatic inline bool lbs_mesh_activated(struct lbs_private *priv)
268c2ecf20Sopenharmony_ci{
278c2ecf20Sopenharmony_ci	return !!priv->mesh_tlv;
288c2ecf20Sopenharmony_ci}
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciint lbs_mesh_set_channel(struct lbs_private *priv, u8 channel);
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_ci/* Sending / Receiving */
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_cistruct rxpd;
358c2ecf20Sopenharmony_cistruct txpd;
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_cistruct net_device *lbs_mesh_set_dev(struct lbs_private *priv,
388c2ecf20Sopenharmony_ci	struct net_device *dev, struct rxpd *rxpd);
398c2ecf20Sopenharmony_civoid lbs_mesh_set_txpd(struct lbs_private *priv,
408c2ecf20Sopenharmony_ci	struct net_device *dev, struct txpd *txpd);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_ci/* Command handling */
448c2ecf20Sopenharmony_ci
458c2ecf20Sopenharmony_cistruct cmd_ds_command;
468c2ecf20Sopenharmony_cistruct cmd_ds_mesh_access;
478c2ecf20Sopenharmony_cistruct cmd_ds_mesh_config;
488c2ecf20Sopenharmony_ci
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_ci/* Ethtool statistics */
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_cistruct ethtool_stats;
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_civoid lbs_mesh_ethtool_get_stats(struct net_device *dev,
558c2ecf20Sopenharmony_ci	struct ethtool_stats *stats, uint64_t *data);
568c2ecf20Sopenharmony_ciint lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset);
578c2ecf20Sopenharmony_civoid lbs_mesh_ethtool_get_strings(struct net_device *dev,
588c2ecf20Sopenharmony_ci	uint32_t stringset, uint8_t *s);
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci#else
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci#define lbs_init_mesh(priv)
648c2ecf20Sopenharmony_ci#define lbs_deinit_mesh(priv)
658c2ecf20Sopenharmony_ci#define lbs_start_mesh(priv)
668c2ecf20Sopenharmony_ci#define lbs_add_mesh(priv)
678c2ecf20Sopenharmony_ci#define lbs_remove_mesh(priv)
688c2ecf20Sopenharmony_ci#define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
698c2ecf20Sopenharmony_ci#define lbs_mesh_set_txpd(priv, dev, txpd)
708c2ecf20Sopenharmony_ci#define lbs_mesh_set_channel(priv, channel) (0)
718c2ecf20Sopenharmony_ci#define lbs_mesh_activated(priv) (false)
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci#endif
748c2ecf20Sopenharmony_ci
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_ci
778c2ecf20Sopenharmony_ci#endif
78