Annotation of sys/dev/pci/if_wpivar.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: if_wpivar.h,v 1.12 2007/06/16 14:15:37 damien Exp $ */
2:
3: /*-
4: * Copyright (c) 2006, 2007
5: * Damien Bergamini <damien.bergamini@free.fr>
6: *
7: * Permission to use, copy, modify, and distribute this software for any
8: * purpose with or without fee is hereby granted, provided that the above
9: * copyright notice and this permission notice appear in all copies.
10: *
11: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18: */
19:
20: struct wpi_rx_radiotap_header {
21: struct ieee80211_radiotap_header wr_ihdr;
22: uint64_t wr_tsft;
23: uint8_t wr_flags;
24: uint8_t wr_rate;
25: uint16_t wr_chan_freq;
26: uint16_t wr_chan_flags;
27: int8_t wr_dbm_antsignal;
28: int8_t wr_dbm_antnoise;
29: uint8_t wr_antenna;
30: } __packed;
31:
32: #define WPI_RX_RADIOTAP_PRESENT \
33: ((1 << IEEE80211_RADIOTAP_TSFT) | \
34: (1 << IEEE80211_RADIOTAP_FLAGS) | \
35: (1 << IEEE80211_RADIOTAP_RATE) | \
36: (1 << IEEE80211_RADIOTAP_CHANNEL) | \
37: (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) | \
38: (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) | \
39: (1 << IEEE80211_RADIOTAP_ANTENNA))
40:
41: struct wpi_tx_radiotap_header {
42: struct ieee80211_radiotap_header wt_ihdr;
43: uint8_t wt_flags;
44: uint8_t wt_rate;
45: uint16_t wt_chan_freq;
46: uint16_t wt_chan_flags;
47: uint8_t wt_hwqueue;
48: } __packed;
49:
50: #define WPI_TX_RADIOTAP_PRESENT \
51: ((1 << IEEE80211_RADIOTAP_FLAGS) | \
52: (1 << IEEE80211_RADIOTAP_RATE) | \
53: (1 << IEEE80211_RADIOTAP_CHANNEL) | \
54: (1 << IEEE80211_RADIOTAP_HWQUEUE))
55:
56: struct wpi_dma_info {
57: bus_dma_tag_t tag;
58: bus_dmamap_t map;
59: bus_dma_segment_t seg;
60: bus_addr_t paddr;
61: caddr_t vaddr;
62: bus_size_t size;
63: };
64:
65: struct wpi_tx_data {
66: bus_dmamap_t map;
67: struct mbuf *m;
68: struct ieee80211_node *ni;
69: };
70:
71: struct wpi_tx_ring {
72: struct wpi_dma_info desc_dma;
73: struct wpi_dma_info cmd_dma;
74: struct wpi_tx_desc *desc;
75: struct wpi_tx_cmd *cmd;
76: struct wpi_tx_data *data;
77: int qid;
78: int count;
79: int queued;
80: int cur;
81: };
82:
83: #define WPI_RBUF_COUNT (WPI_RX_RING_COUNT + 16)
84:
85: struct wpi_softc;
86:
87: struct wpi_rbuf {
88: struct wpi_softc *sc;
89: caddr_t vaddr;
90: bus_addr_t paddr;
91: SLIST_ENTRY(wpi_rbuf) next;
92: };
93:
94: struct wpi_rx_data {
95: struct mbuf *m;
96: };
97:
98: struct wpi_rx_ring {
99: struct wpi_dma_info desc_dma;
100: struct wpi_dma_info buf_dma;
101: uint32_t *desc;
102: struct wpi_rx_data data[WPI_RX_RING_COUNT];
103: struct wpi_rbuf rbuf[WPI_RBUF_COUNT];
104: SLIST_HEAD(, wpi_rbuf) freelist;
105: int cur;
106: };
107:
108: struct wpi_node {
109: struct ieee80211_node ni; /* must be the first */
110: struct ieee80211_amrr_node amn;
111: };
112:
113: struct wpi_power_sample {
114: uint8_t index;
115: int8_t power;
116: };
117:
118: struct wpi_power_group {
119: #define WPI_SAMPLES_COUNT 5
120: struct wpi_power_sample samples[WPI_SAMPLES_COUNT];
121: uint8_t chan;
122: int8_t maxpwr;
123: int16_t temp;
124: };
125:
126: struct wpi_softc {
127: struct device sc_dev;
128:
129: struct ieee80211com sc_ic;
130: int (*sc_newstate)(struct ieee80211com *,
131: enum ieee80211_state, int);
132: struct ieee80211_amrr amrr;
133:
134: bus_dma_tag_t sc_dmat;
135:
136: /* shared area */
137: struct wpi_dma_info shared_dma;
138: struct wpi_shared *shared;
139:
140: /* firmware DMA transfer */
141: struct wpi_dma_info fw_dma;
142:
143: /* rings */
144: struct wpi_tx_ring txq[4];
145: struct wpi_tx_ring cmdq;
146: struct wpi_rx_ring rxq;
147:
148: bus_space_tag_t sc_st;
149: bus_space_handle_t sc_sh;
150: void *sc_ih;
151: pci_chipset_tag_t sc_pct;
152: pcitag_t sc_pcitag;
153: bus_size_t sc_sz;
154:
155: struct ksensordev sensordev;
156: struct ksensor sensor;
157: struct timeout calib_to;
158: int calib_cnt;
159:
160: struct wpi_config config;
161: int temp;
162:
163: uint8_t cap;
164: uint16_t rev;
165: uint8_t type;
166: struct wpi_power_group groups[WPI_POWER_GROUPS_COUNT];
167: int8_t maxpwr[IEEE80211_CHAN_MAX];
168:
169: int sc_tx_timer;
170: void *powerhook;
171:
172: #if NBPFILTER > 0
173: caddr_t sc_drvbpf;
174:
175: union {
176: struct wpi_rx_radiotap_header th;
177: uint8_t pad[IEEE80211_RADIOTAP_HDRLEN];
178: } sc_rxtapu;
179: #define sc_rxtap sc_rxtapu.th
180: int sc_rxtap_len;
181:
182: union {
183: struct wpi_tx_radiotap_header th;
184: uint8_t pad[IEEE80211_RADIOTAP_HDRLEN];
185: } sc_txtapu;
186: #define sc_txtap sc_txtapu.th
187: int sc_txtap_len;
188: #endif
189: };
CVSweb