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