rt2800lib.h revision ae1b1c5dcdef1ebd4b37a7d56ad767add757a660
17ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz/*
296481b20f4d6df7021867ae9a9deaa989ec32e40Ivo van Doorn	Copyright (C) 2010 Willow Garage <http://www.willowgarage.com>
396481b20f4d6df7021867ae9a9deaa989ec32e40Ivo van Doorn	Copyright (C) 2010 Ivo van Doorn <IvDoorn@gmail.com>
47ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	Copyright (C) 2009 Bartlomiej Zolnierkiewicz
57ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
67ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	This program is free software; you can redistribute it and/or modify
77ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	it under the terms of the GNU General Public License as published by
87ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	the Free Software Foundation; either version 2 of the License, or
97ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	(at your option) any later version.
107ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
117ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	This program is distributed in the hope that it will be useful,
127ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	but WITHOUT ANY WARRANTY; without even the implied warranty of
137ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
147ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	GNU General Public License for more details.
157ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
167ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	You should have received a copy of the GNU General Public License
177ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	along with this program; if not, write to the
187ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	Free Software Foundation, Inc.,
197ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
207ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz */
217ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
227ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz#ifndef RT2800LIB_H
237ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz#define RT2800LIB_H
247ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
257ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstruct rt2800_ops {
267ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_read)(struct rt2x00_dev *rt2x00dev,
277ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			      const unsigned int offset, u32 *value);
2831a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde	void (*register_read_lock)(struct rt2x00_dev *rt2x00dev,
2931a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde				   const unsigned int offset, u32 *value);
307ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_write)(struct rt2x00_dev *rt2x00dev,
317ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			       const unsigned int offset, u32 value);
327ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_write_lock)(struct rt2x00_dev *rt2x00dev,
337ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const unsigned int offset, u32 value);
347ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
357ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_multiread)(struct rt2x00_dev *rt2x00dev,
367ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				   const unsigned int offset,
377ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				   void *value, const u32 length);
387ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_multiwrite)(struct rt2x00_dev *rt2x00dev,
397ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const unsigned int offset,
407ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const void *value, const u32 length);
417ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
427ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	int (*regbusy_read)(struct rt2x00_dev *rt2x00dev,
437ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			    const unsigned int offset,
447ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			    const struct rt2x00_field32 field, u32 *reg);
45e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerde
46a02308e931ad0bba19803779bec491c4b2d67b47Gabor Juhos	int (*read_eeprom)(struct rt2x00_dev *rt2x00dev);
47ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde	bool (*hwcrypt_disabled)(struct rt2x00_dev *rt2x00dev);
48ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde
49f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn	int (*drv_write_firmware)(struct rt2x00_dev *rt2x00dev,
50f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn				  const u8 *data, const size_t len);
51e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerde	int (*drv_init_registers)(struct rt2x00_dev *rt2x00dev);
520c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn	__le32 *(*drv_get_txwi)(struct queue_entry *entry);
537ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz};
547ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
557ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_read(struct rt2x00_dev *rt2x00dev,
567ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					const unsigned int offset,
577ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					u32 *value)
587ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
59e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
607ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
617ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_read(rt2x00dev, offset, value);
627ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
637ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
6431a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerdestatic inline void rt2800_register_read_lock(struct rt2x00_dev *rt2x00dev,
6531a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde					     const unsigned int offset,
6631a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde					     u32 *value)
6731a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde{
68e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
6931a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde
7031a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde	rt2800ops->register_read_lock(rt2x00dev, offset, value);
7131a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde}
7231a4cf1f22677ba1ea90be055bc20aac25b8e7c4Gertjan van Wingerde
737ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_write(struct rt2x00_dev *rt2x00dev,
747ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					 const unsigned int offset,
757ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					 u32 value)
767ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
77e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
787ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
797ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_write(rt2x00dev, offset, value);
807ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
817ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
827ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_write_lock(struct rt2x00_dev *rt2x00dev,
837ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const unsigned int offset,
847ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      u32 value)
857ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
86e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
877ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
887ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_write_lock(rt2x00dev, offset, value);
897ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
907ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
917ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_multiread(struct rt2x00_dev *rt2x00dev,
927ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					     const unsigned int offset,
937ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					     void *value, const u32 length)
947ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
95e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
967ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
977ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_multiread(rt2x00dev, offset, value, length);
987ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
997ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
1007ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_multiwrite(struct rt2x00_dev *rt2x00dev,
1017ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const unsigned int offset,
1027ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const void *value,
1037ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const u32 length)
1047ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
105e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
1067ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
1077ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_multiwrite(rt2x00dev, offset, value, length);
1087ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
1097ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
1107ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline int rt2800_regbusy_read(struct rt2x00_dev *rt2x00dev,
1117ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      const unsigned int offset,
1127ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      const struct rt2x00_field32 field,
1137ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      u32 *reg)
1147ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
115e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
1167ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
1177ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	return rt2800ops->regbusy_read(rt2x00dev, offset, field, reg);
1187ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
1197ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
120a02308e931ad0bba19803779bec491c4b2d67b47Gabor Juhosstatic inline int rt2800_read_eeprom(struct rt2x00_dev *rt2x00dev)
121ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde{
122ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
123ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde
124a02308e931ad0bba19803779bec491c4b2d67b47Gabor Juhos	return rt2800ops->read_eeprom(rt2x00dev);
125ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde}
126ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde
127ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerdestatic inline bool rt2800_hwcrypt_disabled(struct rt2x00_dev *rt2x00dev)
128ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde{
129ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
130ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde
131ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde	return rt2800ops->hwcrypt_disabled(rt2x00dev);
132ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde}
133ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde
134f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doornstatic inline int rt2800_drv_write_firmware(struct rt2x00_dev *rt2x00dev,
135f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn					    const u8 *data, const size_t len)
136f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn{
137e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
138f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn
139f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn	return rt2800ops->drv_write_firmware(rt2x00dev, data, len);
140f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn}
141f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn
142e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerdestatic inline int rt2800_drv_init_registers(struct rt2x00_dev *rt2x00dev)
143e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerde{
144e796643eaf0889c346e6b69c5afe777c327b1919Ivo van Doorn	const struct rt2800_ops *rt2800ops = rt2x00dev->ops->drv;
145e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerde
146e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerde	return rt2800ops->drv_init_registers(rt2x00dev);
147e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerde}
148e3a896b9924d6dcd88ad16186d7ec77f32d12ef8Gertjan van Wingerde
1490c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doornstatic inline __le32 *rt2800_drv_get_txwi(struct queue_entry *entry)
1500c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn{
1510c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn	const struct rt2800_ops *rt2800ops = entry->queue->rt2x00dev->ops->drv;
1520c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn
1530c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn	return rt2800ops->drv_get_txwi(entry);
1540c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn}
1550c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn
15689297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
15789297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz			const u8 command, const u8 token,
15889297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz			const u8 arg0, const u8 arg1);
15989297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz
1605ffddc498c700bb45ea55efc37746cb28d601766Ivo van Doornint rt2800_wait_csr_ready(struct rt2x00_dev *rt2x00dev);
161b9a07ae9d9e09662013992088fd58ffbcb2f9a30Ivo van Doornint rt2800_wait_wpdma_ready(struct rt2x00_dev *rt2x00dev);
162b9a07ae9d9e09662013992088fd58ffbcb2f9a30Ivo van Doorn
163f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doornint rt2800_check_firmware(struct rt2x00_dev *rt2x00dev,
164f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn			  const u8 *data, const size_t len);
165f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doornint rt2800_load_firmware(struct rt2x00_dev *rt2x00dev,
166f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn			 const u8 *data, const size_t len);
167f31c9a8c1380e20e95d06925f2e42baf61af4db7Ivo van Doorn
1680c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doornvoid rt2800_write_tx_data(struct queue_entry *entry,
1690c5879bc62f9b8eb31520a86213466f3a68ec794Ivo van Doorn			  struct txentry_desc *txdesc);
170748619220651a33c260ed6c0a7648e69324edd74Ivo van Doornvoid rt2800_process_rxwi(struct queue_entry *entry, struct rxdone_entry_desc *txdesc);
17159679b91d1d33ebe90b72ffded9a57dba788fa6bGertjan van Wingerde
17231937c423ed3a13613b3aa7459e7405dd428f2d8Helmut Schaavoid rt2800_txdone_entry(struct queue_entry *entry, u32 status, __le32* txwi);
17396481b20f4d6df7021867ae9a9deaa989ec32e40Ivo van Doorn
174f0194b2d5d01b99555fd8a6e42281809086f1ab1Gertjan van Wingerdevoid rt2800_write_beacon(struct queue_entry *entry, struct txentry_desc *txdesc);
17569cf36a4523be026bc16743c5c989c5e82edb7d9Helmut Schaavoid rt2800_clear_beacon(struct queue_entry *entry);
176f0194b2d5d01b99555fd8a6e42281809086f1ab1Gertjan van Wingerde
177f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczextern const struct rt2x00debug rt2800_rt2x00debug;
178f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz
179f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczint rt2800_rfkill_poll(struct rt2x00_dev *rt2x00dev);
180f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczint rt2800_config_shared_key(struct rt2x00_dev *rt2x00dev,
181f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			     struct rt2x00lib_crypto *crypto,
182f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			     struct ieee80211_key_conf *key);
183f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczint rt2800_config_pairwise_key(struct rt2x00_dev *rt2x00dev,
184f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			       struct rt2x00lib_crypto *crypto,
185f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			       struct ieee80211_key_conf *key);
186a2b1328a23c57fbb9c51e6660a11049c35d151f9Helmut Schaaint rt2800_sta_add(struct rt2x00_dev *rt2x00dev, struct ieee80211_vif *vif,
187a2b1328a23c57fbb9c51e6660a11049c35d151f9Helmut Schaa		   struct ieee80211_sta *sta);
188a2b1328a23c57fbb9c51e6660a11049c35d151f9Helmut Schaaint rt2800_sta_remove(struct rt2x00_dev *rt2x00dev, int wcid);
189f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config_filter(struct rt2x00_dev *rt2x00dev,
190f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			  const unsigned int filter_flags);
191f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config_intf(struct rt2x00_dev *rt2x00dev, struct rt2x00_intf *intf,
192f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz			struct rt2x00intf_conf *conf, const unsigned int flags);
1930204464329c17ba6d293e1899f71223599a0e582Helmut Schaavoid rt2800_config_erp(struct rt2x00_dev *rt2x00dev, struct rt2x00lib_erp *erp,
1940204464329c17ba6d293e1899f71223599a0e582Helmut Schaa		       u32 changed);
195f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config_ant(struct rt2x00_dev *rt2x00dev, struct antenna_setup *ant);
196f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_config(struct rt2x00_dev *rt2x00dev,
197f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz		   struct rt2x00lib_conf *libconf,
198f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz		   const unsigned int flags);
199f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_link_stats(struct rt2x00_dev *rt2x00dev, struct link_qual *qual);
200f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_reset_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual);
201f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewiczvoid rt2800_link_tuner(struct rt2x00_dev *rt2x00dev, struct link_qual *qual,
202f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz		       const u32 count);
2039e33a3553821418b2c4f53d09311476c55176b13Helmut Schaavoid rt2800_gain_calibration(struct rt2x00_dev *rt2x00dev);
2042e9c43dd45ced5bd77c94d4216f96b4a49448d73John Livoid rt2800_vco_calibration(struct rt2x00_dev *rt2x00dev);
205f445061630c7a4a85193fdef006234f94f71c366Bartlomiej Zolnierkiewicz
206b9a07ae9d9e09662013992088fd58ffbcb2f9a30Ivo van Doornint rt2800_enable_radio(struct rt2x00_dev *rt2x00dev);
207b9a07ae9d9e09662013992088fd58ffbcb2f9a30Ivo van Doornvoid rt2800_disable_radio(struct rt2x00_dev *rt2x00dev);
208fcf5154118849cca3cdf424e83f863225d8173e7Bartlomiej Zolnierkiewicz
20930e840346c516ad4e36f710fa485933ccc7afa66Bartlomiej Zolnierkiewiczint rt2800_efuse_detect(struct rt2x00_dev *rt2x00dev);
210a02308e931ad0bba19803779bec491c4b2d67b47Gabor Juhosint rt2800_read_eeprom_efuse(struct rt2x00_dev *rt2x00dev);
211ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerde
212ad417a533a5bddedbf6b64c12cc26af7c80866f8Gertjan van Wingerdeint rt2800_probe_hw(struct rt2x00_dev *rt2x00dev);
21338bd7b8a0f485ba5ad514fcd621a1842ebadf9e6Bartlomiej Zolnierkiewicz
214e783619ea8f1fb9fccec4931b0cf956de0ed1019Helmut Schaavoid rt2800_get_tkip_seq(struct ieee80211_hw *hw, u8 hw_key_idx, u32 *iv32,
215e783619ea8f1fb9fccec4931b0cf956de0ed1019Helmut Schaa			 u16 *iv16);
216e783619ea8f1fb9fccec4931b0cf956de0ed1019Helmut Schaaint rt2800_set_rts_threshold(struct ieee80211_hw *hw, u32 value);
2178a3a3c85e44d58f5af0adac74a0b866ba89a1978Eliad Pellerint rt2800_conf_tx(struct ieee80211_hw *hw,
2188a3a3c85e44d58f5af0adac74a0b866ba89a1978Eliad Peller		   struct ieee80211_vif *vif, u16 queue_idx,
219e783619ea8f1fb9fccec4931b0cf956de0ed1019Helmut Schaa		   const struct ieee80211_tx_queue_params *params);
22037a41b4affa33bb237d3692bf51f1b5ebcaf29d8Eliad Pelleru64 rt2800_get_tsf(struct ieee80211_hw *hw, struct ieee80211_vif *vif);
221e783619ea8f1fb9fccec4931b0cf956de0ed1019Helmut Schaaint rt2800_ampdu_action(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
222e783619ea8f1fb9fccec4931b0cf956de0ed1019Helmut Schaa			enum ieee80211_ampdu_mlme_action action,
2230b01f030d38e00650e2db42da083d8647aad40a5Johannes Berg			struct ieee80211_sta *sta, u16 tid, u16 *ssn,
2240b01f030d38e00650e2db42da083d8647aad40a5Johannes Berg			u8 buf_size);
225977206d79fdc9fc1b153e0b52c56e0be59586f37Helmut Schaaint rt2800_get_survey(struct ieee80211_hw *hw, int idx,
226977206d79fdc9fc1b153e0b52c56e0be59586f37Helmut Schaa		      struct survey_info *survey);
227f7b395e9f898313c2add740af04361e59b06e68bJakub Kicinskivoid rt2800_disable_wpdma(struct rt2x00_dev *rt2x00dev);
2282ce33995216a088fc11e1f85768375580324174cBartlomiej Zolnierkiewicz
229ae1b1c5dcdef1ebd4b37a7d56ad767add757a660Gabor Juhosvoid rt2800_get_txwi_rxwi_size(struct rt2x00_dev *rt2x00dev,
230ae1b1c5dcdef1ebd4b37a7d56ad767add757a660Gabor Juhos			       unsigned short *txwi_size,
231ae1b1c5dcdef1ebd4b37a7d56ad767add757a660Gabor Juhos			       unsigned short *rxwi_size);
232ae1b1c5dcdef1ebd4b37a7d56ad767add757a660Gabor Juhos
2337ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz#endif /* RT2800LIB_H */
234