cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

rtl8187.h (4514B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Definitions for RTL8187 hardware
      4 *
      5 * Copyright 2007 Michael Wu <flamingice@sourmilk.net>
      6 * Copyright 2007 Andrea Merello <andrea.merello@gmail.com>
      7 *
      8 * Based on the r8187 driver, which is:
      9 * Copyright 2005 Andrea Merello <andrea.merello@gmail.com>, et al.
     10 */
     11
     12#ifndef RTL8187_H
     13#define RTL8187_H
     14
     15#include <linux/cache.h>
     16
     17#include "rtl818x.h"
     18#include "leds.h"
     19
     20#define RTL8187_EEPROM_TXPWR_BASE	0x05
     21#define RTL8187_EEPROM_MAC_ADDR		0x07
     22#define RTL8187_EEPROM_TXPWR_CHAN_1	0x16	/* 3 channels */
     23#define RTL8187_EEPROM_TXPWR_CHAN_6	0x1B	/* 2 channels */
     24#define RTL8187_EEPROM_TXPWR_CHAN_4	0x3D	/* 2 channels */
     25#define RTL8187_EEPROM_SELECT_GPIO	0x3B
     26
     27#define RTL8187_REQT_READ	0xC0
     28#define RTL8187_REQT_WRITE	0x40
     29#define RTL8187_REQ_GET_REG	0x05
     30#define RTL8187_REQ_SET_REG	0x05
     31
     32#define RTL8187_MAX_RX		0x9C4
     33
     34#define RFKILL_MASK_8187_89_97	0x2
     35#define RFKILL_MASK_8198	0x4
     36
     37#define RETRY_COUNT		7
     38
     39struct rtl8187_rx_info {
     40	struct urb *urb;
     41	struct ieee80211_hw *dev;
     42};
     43
     44struct rtl8187_rx_hdr {
     45	__le32 flags;
     46	u8 noise;
     47	u8 signal;
     48	u8 agc;
     49	u8 reserved;
     50	__le64 mac_time;
     51} __packed;
     52
     53struct rtl8187b_rx_hdr {
     54	__le32 flags;
     55	__le64 mac_time;
     56	u8 sq;
     57	u8 rssi;
     58	u8 agc;
     59	u8 flags2;
     60	__le16 snr_long2end;
     61	s8 pwdb_g12;
     62	u8 fot;
     63} __packed;
     64
     65/* {rtl8187,rtl8187b}_tx_info is in skb */
     66
     67struct rtl8187_tx_hdr {
     68	__le32 flags;
     69	__le16 rts_duration;
     70	__le16 len;
     71	__le32 retry;
     72} __packed;
     73
     74struct rtl8187b_tx_hdr {
     75	__le32 flags;
     76	__le16 rts_duration;
     77	__le16 len;
     78	__le32 unused_1;
     79	__le16 unused_2;
     80	__le16 tx_duration;
     81	__le32 unused_3;
     82	__le32 retry;
     83	__le32 unused_4[2];
     84} __packed;
     85
     86enum {
     87	DEVICE_RTL8187,
     88	DEVICE_RTL8187B
     89};
     90
     91struct rtl8187_vif {
     92	struct ieee80211_hw *dev;
     93
     94	/* beaconing */
     95	struct delayed_work beacon_work;
     96	bool enable_beacon;
     97};
     98
     99struct rtl8187_priv {
    100	/* common between rtl818x drivers */
    101	struct rtl818x_csr *map;
    102	const struct rtl818x_rf_ops *rf;
    103	struct ieee80211_vif *vif;
    104
    105	/* The mutex protects the TX loopback state.
    106	 * Any attempt to set channels concurrently locks the device.
    107	 */
    108	struct mutex conf_mutex;
    109
    110	/* rtl8187 specific */
    111	struct ieee80211_channel channels[14];
    112	struct ieee80211_rate rates[12];
    113	struct ieee80211_supported_band band;
    114	struct usb_device *udev;
    115	u32 rx_conf;
    116	struct usb_anchor anchored;
    117	struct delayed_work work;
    118	struct ieee80211_hw *dev;
    119#ifdef CONFIG_RTL8187_LEDS
    120	struct rtl8187_led led_radio;
    121	struct rtl8187_led led_tx;
    122	struct rtl8187_led led_rx;
    123	struct delayed_work led_on;
    124	struct delayed_work led_off;
    125#endif
    126	u16 txpwr_base;
    127	u8 asic_rev;
    128	u8 is_rtl8187b;
    129	enum {
    130		RTL8187BvB,
    131		RTL8187BvD,
    132		RTL8187BvE
    133	} hw_rev;
    134	struct sk_buff_head rx_queue;
    135	u8 signal;
    136	u8 noise;
    137	u8 slot_time;
    138	u8 aifsn[4];
    139	u8 rfkill_mask;
    140	struct {
    141		union {
    142			__le64 buf;
    143			u8 dummy1[L1_CACHE_BYTES];
    144		} ____cacheline_aligned;
    145		struct sk_buff_head queue;
    146	} b_tx_status; /* This queue is used by both -b and non-b devices */
    147	struct mutex io_mutex;
    148	union {
    149		u8 bits8;
    150		__le16 bits16;
    151		__le32 bits32;
    152		u8 dummy2[L1_CACHE_BYTES];
    153	} *io_dmabuf ____cacheline_aligned;
    154	bool rfkill_off;
    155	u16 seqno;
    156};
    157
    158void rtl8187_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data);
    159
    160u8 rtl818x_ioread8_idx(struct rtl8187_priv *priv,
    161				u8 *addr, u8 idx);
    162
    163static inline u8 rtl818x_ioread8(struct rtl8187_priv *priv, u8 *addr)
    164{
    165	return rtl818x_ioread8_idx(priv, addr, 0);
    166}
    167
    168u16 rtl818x_ioread16_idx(struct rtl8187_priv *priv,
    169				__le16 *addr, u8 idx);
    170
    171static inline u16 rtl818x_ioread16(struct rtl8187_priv *priv, __le16 *addr)
    172{
    173	return rtl818x_ioread16_idx(priv, addr, 0);
    174}
    175
    176u32 rtl818x_ioread32_idx(struct rtl8187_priv *priv,
    177				__le32 *addr, u8 idx);
    178
    179static inline u32 rtl818x_ioread32(struct rtl8187_priv *priv, __le32 *addr)
    180{
    181	return rtl818x_ioread32_idx(priv, addr, 0);
    182}
    183
    184void rtl818x_iowrite8_idx(struct rtl8187_priv *priv,
    185				u8 *addr, u8 val, u8 idx);
    186
    187static inline void rtl818x_iowrite8(struct rtl8187_priv *priv, u8 *addr, u8 val)
    188{
    189	rtl818x_iowrite8_idx(priv, addr, val, 0);
    190}
    191
    192void rtl818x_iowrite16_idx(struct rtl8187_priv *priv,
    193				__le16 *addr, u16 val, u8 idx);
    194
    195static inline void rtl818x_iowrite16(struct rtl8187_priv *priv, __le16 *addr,
    196				     u16 val)
    197{
    198	rtl818x_iowrite16_idx(priv, addr, val, 0);
    199}
    200
    201void rtl818x_iowrite32_idx(struct rtl8187_priv *priv,
    202				__le32 *addr, u32 val, u8 idx);
    203
    204static inline void rtl818x_iowrite32(struct rtl8187_priv *priv, __le32 *addr,
    205				     u32 val)
    206{
    207	rtl818x_iowrite32_idx(priv, addr, val, 0);
    208}
    209
    210#endif /* RTL8187_H */