162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2021 pureLiFi
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef PLFXLC_CHIP_H
762306a36Sopenharmony_ci#define PLFXLC_CHIP_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <net/mac80211.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include "usb.h"
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_cienum unit_type {
1462306a36Sopenharmony_ci	STA = 0,
1562306a36Sopenharmony_ci	AP = 1,
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cienum {
1962306a36Sopenharmony_ci	PLFXLC_RADIO_OFF = 0,
2062306a36Sopenharmony_ci	PLFXLC_RADIO_ON = 1,
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cistruct plfxlc_chip {
2462306a36Sopenharmony_ci	struct plfxlc_usb usb;
2562306a36Sopenharmony_ci	struct mutex mutex; /* lock to protect chip data */
2662306a36Sopenharmony_ci	enum unit_type unit_type;
2762306a36Sopenharmony_ci	u16 link_led;
2862306a36Sopenharmony_ci	u8 beacon_set;
2962306a36Sopenharmony_ci	u16 beacon_interval;
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_cistruct plfxlc_mc_hash {
3362306a36Sopenharmony_ci	u32 low;
3462306a36Sopenharmony_ci	u32 high;
3562306a36Sopenharmony_ci};
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci#define plfxlc_chip_dev(chip) (&(chip)->usb.intf->dev)
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_civoid plfxlc_chip_init(struct plfxlc_chip *chip,
4062306a36Sopenharmony_ci		      struct ieee80211_hw *hw,
4162306a36Sopenharmony_ci		      struct usb_interface *intf);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_civoid plfxlc_chip_release(struct plfxlc_chip *chip);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_civoid plfxlc_chip_disable_rxtx(struct plfxlc_chip *chip);
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ciint plfxlc_chip_init_hw(struct plfxlc_chip *chip);
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ciint plfxlc_chip_enable_rxtx(struct plfxlc_chip *chip);
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciint plfxlc_chip_set_rate(struct plfxlc_chip *chip, u8 rate);
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ciint plfxlc_set_beacon_interval(struct plfxlc_chip *chip, u16 interval,
5462306a36Sopenharmony_ci			       u8 dtim_period, int type);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ciint plfxlc_chip_switch_radio(struct plfxlc_chip *chip, u16 value);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_cistatic inline struct plfxlc_chip *plfxlc_usb_to_chip(struct plfxlc_usb
5962306a36Sopenharmony_ci							 *usb)
6062306a36Sopenharmony_ci{
6162306a36Sopenharmony_ci	return container_of(usb, struct plfxlc_chip, usb);
6262306a36Sopenharmony_ci}
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_cistatic inline void plfxlc_mc_add_all(struct plfxlc_mc_hash *hash)
6562306a36Sopenharmony_ci{
6662306a36Sopenharmony_ci	hash->low  = 0xffffffff;
6762306a36Sopenharmony_ci	hash->high = 0xffffffff;
6862306a36Sopenharmony_ci}
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci#endif /* PLFXLC_CHIP_H */
71