162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Contains all definitions needed for the Libertas' MESH implementation.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci#ifndef _LBS_MESH_H_
662306a36Sopenharmony_ci#define _LBS_MESH_H_
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <net/iw_handler.h>
1062306a36Sopenharmony_ci#include <net/lib80211.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "host.h"
1362306a36Sopenharmony_ci#include "dev.h"
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#ifdef CONFIG_LIBERTAS_MESH
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cistruct net_device;
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_civoid lbs_init_mesh(struct lbs_private *priv);
2062306a36Sopenharmony_civoid lbs_start_mesh(struct lbs_private *priv);
2162306a36Sopenharmony_ciint lbs_deinit_mesh(struct lbs_private *priv);
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_civoid lbs_remove_mesh(struct lbs_private *priv);
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic inline bool lbs_mesh_activated(struct lbs_private *priv)
2662306a36Sopenharmony_ci{
2762306a36Sopenharmony_ci	return !!priv->mesh_tlv;
2862306a36Sopenharmony_ci}
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ciint lbs_mesh_set_channel(struct lbs_private *priv, u8 channel);
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci/* Sending / Receiving */
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistruct rxpd;
3562306a36Sopenharmony_cistruct txpd;
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistruct net_device *lbs_mesh_set_dev(struct lbs_private *priv,
3862306a36Sopenharmony_ci	struct net_device *dev, struct rxpd *rxpd);
3962306a36Sopenharmony_civoid lbs_mesh_set_txpd(struct lbs_private *priv,
4062306a36Sopenharmony_ci	struct net_device *dev, struct txpd *txpd);
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci/* Command handling */
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistruct cmd_ds_command;
4662306a36Sopenharmony_cistruct cmd_ds_mesh_access;
4762306a36Sopenharmony_cistruct cmd_ds_mesh_config;
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci/* Ethtool statistics */
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_cistruct ethtool_stats;
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_civoid lbs_mesh_ethtool_get_stats(struct net_device *dev,
5562306a36Sopenharmony_ci	struct ethtool_stats *stats, uint64_t *data);
5662306a36Sopenharmony_ciint lbs_mesh_ethtool_get_sset_count(struct net_device *dev, int sset);
5762306a36Sopenharmony_civoid lbs_mesh_ethtool_get_strings(struct net_device *dev,
5862306a36Sopenharmony_ci	uint32_t stringset, uint8_t *s);
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci#else
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#define lbs_init_mesh(priv)	do { } while (0)
6462306a36Sopenharmony_ci#define lbs_deinit_mesh(priv)	do { } while (0)
6562306a36Sopenharmony_ci#define lbs_start_mesh(priv)	do { } while (0)
6662306a36Sopenharmony_ci#define lbs_add_mesh(priv)	do { } while (0)
6762306a36Sopenharmony_ci#define lbs_remove_mesh(priv)	do { } while (0)
6862306a36Sopenharmony_ci#define lbs_mesh_set_dev(priv, dev, rxpd) (dev)
6962306a36Sopenharmony_ci#define lbs_mesh_set_txpd(priv, dev, txpd) do { } while (0)
7062306a36Sopenharmony_ci#define lbs_mesh_set_channel(priv, channel) (0)
7162306a36Sopenharmony_ci#define lbs_mesh_activated(priv) (false)
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci#endif
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ci#endif
78