brintos

brintos / linux-shallow public Read only

0
0
Text · 4.4 KiB · 36f3460 Raw
211 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Definitions for RTL8187 hardware4 *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_H13#define RTL8187_H14 15#include <linux/cache.h>16 17#include "rtl818x.h"18#include "leds.h"19 20#define RTL8187_EEPROM_TXPWR_BASE	0x0521#define RTL8187_EEPROM_MAC_ADDR		0x0722#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	0x3B26 27#define RTL8187_REQT_READ	0xC028#define RTL8187_REQT_WRITE	0x4029#define RTL8187_REQ_GET_REG	0x0530#define RTL8187_REQ_SET_REG	0x0531 32#define RTL8187_MAX_RX		0x9C433 34#define RFKILL_MASK_8187_89_97	0x235#define RFKILL_MASK_8198	0x436 37#define RETRY_COUNT		738 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_RTL8187B89};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_LEDS120	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#endif126	u16 txpwr_base;127	u8 asic_rev;128	u8 is_rtl8187b;129	enum {130		RTL8187BvB,131		RTL8187BvD,132		RTL8187BvE133	} 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 */211