• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/net/wireless/rt2x00/
1/*
2	Copyright (C) 2004 - 2009 Ivo van Doorn <IvDoorn@gmail.com>
3	<http://rt2x00.serialmonkey.com>
4
5	This program is free software; you can redistribute it and/or modify
6	it under the terms of the GNU General Public License as published by
7	the Free Software Foundation; either version 2 of the License, or
8	(at your option) any later version.
9
10	This program is distributed in the hope that it will be useful,
11	but WITHOUT ANY WARRANTY; without even the implied warranty of
12	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13	GNU General Public License for more details.
14
15	You should have received a copy of the GNU General Public License
16	along with this program; if not, write to the
17	Free Software Foundation, Inc.,
18	59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20
21/*
22	Module: rt2x00pci
23	Abstract: Data structures for the rt2x00pci module.
24 */
25
26#ifndef RT2X00PCI_H
27#define RT2X00PCI_H
28
29#include <linux/io.h>
30#include <linux/pci.h>
31
32/*
33 * This variable should be used with the
34 * pci_driver structure initialization.
35 */
36#define PCI_DEVICE_DATA(__ops)	.driver_data = (kernel_ulong_t)(__ops)
37
38/*
39 * Register access.
40 */
41static inline void rt2x00pci_register_read(struct rt2x00_dev *rt2x00dev,
42					   const unsigned int offset,
43					   u32 *value)
44{
45	*value = readl(rt2x00dev->csr.base + offset);
46}
47
48static inline void rt2x00pci_register_multiread(struct rt2x00_dev *rt2x00dev,
49						const unsigned int offset,
50						void *value, const u32 length)
51{
52	memcpy_fromio(value, rt2x00dev->csr.base + offset, length);
53}
54
55static inline void rt2x00pci_register_write(struct rt2x00_dev *rt2x00dev,
56					    const unsigned int offset,
57					    u32 value)
58{
59	writel(value, rt2x00dev->csr.base + offset);
60}
61
62static inline void rt2x00pci_register_multiwrite(struct rt2x00_dev *rt2x00dev,
63						 const unsigned int offset,
64						 const void *value,
65						 const u32 length)
66{
67	memcpy_toio(rt2x00dev->csr.base + offset, value, length);
68}
69
70/**
71 * rt2x00pci_regbusy_read - Read from register with busy check
72 * @rt2x00dev: Device pointer, see &struct rt2x00_dev.
73 * @offset: Register offset
74 * @field: Field to check if register is busy
75 * @reg: Pointer to where register contents should be stored
76 *
77 * This function will read the given register, and checks if the
78 * register is busy. If it is, it will sleep for a couple of
79 * microseconds before reading the register again. If the register
80 * is not read after a certain timeout, this function will return
81 * FALSE.
82 */
83int rt2x00pci_regbusy_read(struct rt2x00_dev *rt2x00dev,
84			   const unsigned int offset,
85			   const struct rt2x00_field32 field,
86			   u32 *reg);
87
88/**
89 * struct queue_entry_priv_pci: Per entry PCI specific information
90 *
91 * @desc: Pointer to device descriptor
92 * @desc_dma: DMA pointer to &desc.
93 * @data: Pointer to device's entry memory.
94 * @data_dma: DMA pointer to &data.
95 */
96struct queue_entry_priv_pci {
97	__le32 *desc;
98	dma_addr_t desc_dma;
99};
100
101/**
102 * rt2x00pci_rxdone - Handle RX done events
103 * @rt2x00dev: Device pointer, see &struct rt2x00_dev.
104 */
105void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev);
106
107/*
108 * Device initialization handlers.
109 */
110int rt2x00pci_initialize(struct rt2x00_dev *rt2x00dev);
111void rt2x00pci_uninitialize(struct rt2x00_dev *rt2x00dev);
112
113/*
114 * PCI driver handlers.
115 */
116int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id);
117void rt2x00pci_remove(struct pci_dev *pci_dev);
118#ifdef CONFIG_PM
119int rt2x00pci_suspend(struct pci_dev *pci_dev, pm_message_t state);
120int rt2x00pci_resume(struct pci_dev *pci_dev);
121#else
122#define rt2x00pci_suspend	NULL
123#define rt2x00pci_resume	NULL
124#endif /* CONFIG_PM */
125
126#endif /* RT2X00PCI_H */
127