rt2800lib.h revision 31a4cf1f22677ba1ea90be055bc20aac25b8e7c4
17ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz/*
27ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	Copyright (C) 2009 Bartlomiej Zolnierkiewicz
37ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
47ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	This program is free software; you can redistribute it and/or modify
57ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	it under the terms of the GNU General Public License as published by
67ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	the Free Software Foundation; either version 2 of the License, or
77ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	(at your option) any later version.
87ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
97ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	This program is distributed in the hope that it will be useful,
107ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	but WITHOUT ANY WARRANTY; without even the implied warranty of
117ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
127ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	GNU General Public License for more details.
137ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
147ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	You should have received a copy of the GNU General Public License
157ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	along with this program; if not, write to the
167ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	Free Software Foundation, Inc.,
177ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
187ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz */
197ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
207ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz#ifndef RT2800LIB_H
217ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz#define RT2800LIB_H
227ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
237ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstruct rt2800_ops {
247ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_read)(struct rt2x00_dev *rt2x00dev,
257ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			      const unsigned int offset, u32 *value);
2631a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde	void (*register_read_lock)(struct rt2x00_dev *rt2x00dev,
2731a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde				   const unsigned int offset, u32 *value);
287ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_write)(struct rt2x00_dev *rt2x00dev,
297ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			       const unsigned int offset, u32 value);
307ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_write_lock)(struct rt2x00_dev *rt2x00dev,
317ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const unsigned int offset, u32 value);
327ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
337ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_multiread)(struct rt2x00_dev *rt2x00dev,
347ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				   const unsigned int offset,
357ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				   void *value, const u32 length);
367ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_multiwrite)(struct rt2x00_dev *rt2x00dev,
377ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const unsigned int offset,
387ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const void *value, const u32 length);
397ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
407ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	int (*regbusy_read)(struct rt2x00_dev *rt2x00dev,
417ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			    const unsigned int offset,
427ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			    const struct rt2x00_field32 field, u32 *reg);
437ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz};
447ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
457ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_read(struct rt2x00_dev *rt2x00dev,
467ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					const unsigned int offset,
477ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					u32 *value)
487ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
497ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
507ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
517ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_read(rt2x00dev, offset, value);
527ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
537ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
5431a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerdestatic inline void rt2800_register_read_lock(struct rt2x00_dev *rt2x00dev,
5531a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde					     const unsigned int offset,
5631a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde					     u32 *value)
5731a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde{
5831a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
5931a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde
6031a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde	rt2800ops->register_read_lock(rt2x00dev, offset, value);
6131a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde}
6231a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde
637ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_write(struct rt2x00_dev *rt2x00dev,
647ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					 const unsigned int offset,
657ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					 u32 value)
667ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
677ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
687ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
697ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_write(rt2x00dev, offset, value);
707ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
717ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
727ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_write_lock(struct rt2x00_dev *rt2x00dev,
737ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const unsigned int offset,
747ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      u32 value)
757ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
767ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
777ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
787ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_write_lock(rt2x00dev, offset, value);
797ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
807ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
817ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_multiread(struct rt2x00_dev *rt2x00dev,
827ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					     const unsigned int offset,
837ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					     void *value, const u32 length)
847ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
857ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
867ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
877ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_multiread(rt2x00dev, offset, value, length);
887ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
897ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
907ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_multiwrite(struct rt2x00_dev *rt2x00dev,
917ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const unsigned int offset,
927ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const void *value,
937ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const u32 length)
947ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
957ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
967ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
977ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_multiwrite(rt2x00dev, offset, value, length);
987ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
997ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
1007ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline int rt2800_regbusy_read(struct rt2x00_dev *rt2x00dev,
1017ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      const unsigned int offset,
1027ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      const struct rt2x00_field32 field,
1037ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      u32 *reg)
1047ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
1057ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
1067ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
1077ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	return rt2800ops->regbusy_read(rt2x00dev, offset, field, reg);
1087ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
1097ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
11089297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
11189297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz			const u8 command, const u8 token,
11289297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz			const u8 arg0, const u8 arg1);
11389297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz
114f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczextern const struct rt2x00debug rt2800_rt2x00debug;
115f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz
116f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczint rt2800_rfkill_poll(struct rt2x00_dev *rt2x00dev);
117f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_init_led(struct rt2x00_dev *rt2x00dev,
118f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz		     struct rt2x00_led *led, enum led_type type);
119f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczint rt2800_config_shared_key(struct rt2x00_dev *rt2x00dev,
120f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			     struct rt2x00lib_crypto *crypto,
121f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			     struct ieee80211_key_conf *key);
122f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczint rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
123f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			       struct rt2x00lib_crypto *crypto,
124f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			       struct ieee80211_key_conf *key);
125f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config_filter(struct rt2x00_dev *rt2x00dev,
126f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			  const unsigned int filter_flags);
127f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config_intf(struct rt2x00_dev *rt2x00dev, struct rt2x00_intf *intf,
128f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			struct rt2x00intf_conf *conf, const unsigned int flags);
129f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config_erp(struct rt2x00_dev *rt2x00dev, struct rt2x00lib_erp *erp);
130f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant);
131f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config(struct rt2x00_dev *rt2x00dev,
132f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz		   struct rt2x00lib_conf *libconf,
133f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz		   const unsigned int flags);
134f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_link_stats(struct rt2x00_dev *rt2x00dev, struct link_qual *qual);
135f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_reset_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual);
136f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_link_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual,
137f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz		       const u32 count);
138f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz
139fcf5154118849cca3cdf424e83f863225d8173e7Bartlomiej Zolnierkiewiczint rt2800_init_registers(struct rt2x00_dev *rt2x00dev);
140fcf5154118849cca3cdf424e83f863225d8173e7Bartlomiej Zolnierkiewiczint rt2800_init_bbp(struct rt2x00_dev *rt2x00dev);
141fcf5154118849cca3cdf424e83f863225d8173e7Bartlomiej Zolnierkiewiczint rt2800_init_rfcsr(struct rt2x00_dev *rt2x00dev);
142fcf5154118849cca3cdf424e83f863225d8173e7Bartlomiej Zolnierkiewicz
14330e840346c516ad4e36f710fa485933ccc7afa66Bartlomiej Zolnierkiewiczint rt2800_efuse_detect(struct rt2x00_dev *rt2x00dev);
14430e840346c516ad4e36f710fa485933ccc7afa66Bartlomiej Zolnierkiewiczvoid rt2800_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev);
14538bd7b8a0f485ba5ad514fcd621a1842ebadf9e6Bartlomiej Zolnierkiewiczint rt2800_validate_eeprom(struct rt2x00_dev *rt2x00dev);
14638bd7b8a0f485ba5ad514fcd621a1842ebadf9e6Bartlomiej Zolnierkiewiczint rt2800_init_eeprom(struct rt2x00_dev *rt2x00dev);
1474da2933fe1f2d3d9ed548660f5c02a9b0608a8c7Bartlomiej Zolnierkiewiczint rt2800_probe_hw_mode(struct rt2x00_dev *rt2x00dev);
14838bd7b8a0f485ba5ad514fcd621a1842ebadf9e6Bartlomiej Zolnierkiewicz
1492ce33995216a088fc11e1f85768375580324174cBartlomiej Zolnierkiewiczextern const struct ieee80211_ops rt2800_mac80211_ops;
1502ce33995216a088fc11e1f85768375580324174cBartlomiej Zolnierkiewicz
1517ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz#endif /* RT2800LIB_H */
152