]>
Commit | Line | Data |
---|---|---|
95ea3627 ID |
1 | /* |
2 | Copyright (C) 2004 - 2007 rt2x00 SourceForge Project | |
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 | ||
31 | /* | |
32 | * This variable should be used with the | |
33 | * pci_driver structure initialization. | |
34 | */ | |
35 | #define PCI_DEVICE_DATA(__ops) .driver_data = (kernel_ulong_t)(__ops) | |
36 | ||
37 | /* | |
38 | * Register defines. | |
39 | * Some registers require multiple attempts before success, | |
40 | * in those cases REGISTER_BUSY_COUNT attempts should be | |
41 | * taken with a REGISTER_BUSY_DELAY interval. | |
42 | */ | |
43 | #define REGISTER_BUSY_COUNT 5 | |
44 | #define REGISTER_BUSY_DELAY 100 | |
45 | ||
46 | /* | |
47 | * Descriptor availability flags. | |
48 | * All PCI device descriptors have these 2 flags | |
49 | * with the exact same definition. | |
50 | * By storing them here we can use them inside rt2x00pci | |
51 | * for some simple entry availability checking. | |
52 | */ | |
53 | #define TXD_ENTRY_OWNER_NIC FIELD32(0x00000001) | |
54 | #define TXD_ENTRY_VALID FIELD32(0x00000002) | |
55 | #define RXD_ENTRY_OWNER_NIC FIELD32(0x00000001) | |
56 | ||
57 | /* | |
58 | * Register access. | |
59 | */ | |
0e14f6d3 | 60 | static inline void rt2x00pci_register_read(struct rt2x00_dev *rt2x00dev, |
95ea3627 ID |
61 | const unsigned long offset, |
62 | u32 *value) | |
63 | { | |
64 | *value = readl(rt2x00dev->csr_addr + offset); | |
65 | } | |
66 | ||
67 | static inline void | |
0e14f6d3 | 68 | rt2x00pci_register_multiread(struct rt2x00_dev *rt2x00dev, |
95ea3627 ID |
69 | const unsigned long offset, |
70 | void *value, const u16 length) | |
71 | { | |
72 | memcpy_fromio(value, rt2x00dev->csr_addr + offset, length); | |
73 | } | |
74 | ||
0e14f6d3 | 75 | static inline void rt2x00pci_register_write(struct rt2x00_dev *rt2x00dev, |
95ea3627 ID |
76 | const unsigned long offset, |
77 | u32 value) | |
78 | { | |
79 | writel(value, rt2x00dev->csr_addr + offset); | |
80 | } | |
81 | ||
82 | static inline void | |
0e14f6d3 | 83 | rt2x00pci_register_multiwrite(struct rt2x00_dev *rt2x00dev, |
95ea3627 ID |
84 | const unsigned long offset, |
85 | void *value, const u16 length) | |
86 | { | |
87 | memcpy_toio(rt2x00dev->csr_addr + offset, value, length); | |
88 | } | |
89 | ||
90 | /* | |
91 | * Beacon handlers. | |
92 | */ | |
93 | int rt2x00pci_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb, | |
94 | struct ieee80211_tx_control *control); | |
95 | ||
96 | /* | |
97 | * TX data handlers. | |
98 | */ | |
99 | int rt2x00pci_write_tx_data(struct rt2x00_dev *rt2x00dev, | |
100 | struct data_ring *ring, struct sk_buff *skb, | |
101 | struct ieee80211_tx_control *control); | |
102 | ||
103 | /* | |
3957ccb5 | 104 | * RX/TX data handlers. |
95ea3627 ID |
105 | */ |
106 | void rt2x00pci_rxdone(struct rt2x00_dev *rt2x00dev); | |
3957ccb5 ID |
107 | void rt2x00pci_txdone(struct rt2x00_dev *rt2x00dev, struct data_entry *entry, |
108 | const int tx_status, const int retry); | |
95ea3627 ID |
109 | |
110 | /* | |
111 | * Device initialization handlers. | |
112 | */ | |
113 | int rt2x00pci_initialize(struct rt2x00_dev *rt2x00dev); | |
114 | void rt2x00pci_uninitialize(struct rt2x00_dev *rt2x00dev); | |
115 | ||
116 | /* | |
117 | * PCI driver handlers. | |
118 | */ | |
119 | int rt2x00pci_probe(struct pci_dev *pci_dev, const struct pci_device_id *id); | |
120 | void rt2x00pci_remove(struct pci_dev *pci_dev); | |
121 | #ifdef CONFIG_PM | |
122 | int rt2x00pci_suspend(struct pci_dev *pci_dev, pm_message_t state); | |
123 | int rt2x00pci_resume(struct pci_dev *pci_dev); | |
124 | #else | |
125 | #define rt2x00pci_suspend NULL | |
126 | #define rt2x00pci_resume NULL | |
127 | #endif /* CONFIG_PM */ | |
128 | ||
129 | #endif /* RT2X00PCI_H */ |