rt2800lib.h revision 89297425c2104b187c25d6260a41345c491c8f18
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);
267ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_write)(struct rt2x00_dev *rt2x00dev,
277ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			       const unsigned int offset, u32 value);
287ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_write_lock)(struct rt2x00_dev *rt2x00dev,
297ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const unsigned int offset, u32 value);
307ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
317ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_multiread)(struct rt2x00_dev *rt2x00dev,
327ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				   const unsigned int offset,
337ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				   void *value, const u32 length);
347ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	void (*register_multiwrite)(struct rt2x00_dev *rt2x00dev,
357ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const unsigned int offset,
367ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				    const void *value, const u32 length);
377ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
387ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	int (*regbusy_read)(struct rt2x00_dev *rt2x00dev,
397ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			    const unsigned int offset,
407ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz			    const struct rt2x00_field32 field, u32 *reg);
417ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz};
427ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
437ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_read(struct rt2x00_dev *rt2x00dev,
447ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					const unsigned int offset,
457ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					u32 *value)
467ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
477ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
487ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
497ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_read(rt2x00dev, offset, value);
507ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
517ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
527ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_write(struct rt2x00_dev *rt2x00dev,
537ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					 const unsigned int offset,
547ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					 u32 value)
557ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
567ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
577ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
587ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_write(rt2x00dev, offset, value);
597ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
607ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
617ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_write_lock(struct rt2x00_dev *rt2x00dev,
627ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const unsigned int offset,
637ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      u32 value)
647ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
657ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
667ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
677ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_write_lock(rt2x00dev, offset, value);
687ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
697ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
707ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_multiread(struct rt2x00_dev *rt2x00dev,
717ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					     const unsigned int offset,
727ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					     void *value, const u32 length)
737ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
747ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
757ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
767ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_multiread(rt2x00dev, offset, value, length);
777ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
787ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
797ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline void rt2800_register_multiwrite(struct rt2x00_dev *rt2x00dev,
807ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const unsigned int offset,
817ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const void *value,
827ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz					      const u32 length)
837ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
847ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
857ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
867ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	rt2800ops->register_multiwrite(rt2x00dev, offset, value, length);
877ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
887ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
897ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewiczstatic inline int rt2800_regbusy_read(struct rt2x00_dev *rt2x00dev,
907ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      const unsigned int offset,
917ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      const struct rt2x00_field32 field,
927ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz				      u32 *reg)
937ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz{
947ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	const struct rt2800_ops *rt2800ops = rt2x00dev->priv;
957ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
967ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz	return rt2800ops->regbusy_read(rt2x00dev, offset, field, reg);
977ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz}
987ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz
9989297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_bbp_write(struct rt2x00_dev *rt2x00dev,
10089297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz		      const unsigned int word, const u8 value);
10189297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_bbp_read(struct rt2x00_dev *rt2x00dev,
10289297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz		     const unsigned int word, u8 *value);
10389297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_rfcsr_write(struct rt2x00_dev *rt2x00dev,
10489297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz			const unsigned int word, const u8 value);
10589297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_rfcsr_read(struct rt2x00_dev *rt2x00dev,
10689297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz		       const unsigned int word, u8 *value);
10789297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_rf_write(struct rt2x00_dev *rt2x00dev,
10889297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz		     const unsigned int word, const u32 value);
10989297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewiczvoid rt2800_mcu_request(struct rt2x00_dev *rt2x00dev,
11089297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz			const u8 command, const u8 token,
11189297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz			const u8 arg0, const u8 arg1);
11289297425c2104b187c25d6260a41345c491c8f18Bartlomiej Zolnierkiewicz
1137ef5cc92bac940419f022e11115a28daea53814fBartlomiej Zolnierkiewicz#endif /* RT2800LIB_H */
114