Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
net
wireless
iwlwifi
iwl-fh.h
Go to the documentation of this file.
1
/******************************************************************************
2
*
3
* This file is provided under a dual BSD/GPLv2 license. When using or
4
* redistributing this file, you may do so under either license.
5
*
6
* GPL LICENSE SUMMARY
7
*
8
* Copyright(c) 2005 - 2012 Intel Corporation. All rights reserved.
9
*
10
* This program is free software; you can redistribute it and/or modify
11
* it under the terms of version 2 of the GNU General Public License as
12
* published by the Free Software Foundation.
13
*
14
* This program is distributed in the hope that it will be useful, but
15
* WITHOUT ANY WARRANTY; without even the implied warranty of
16
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17
* General Public License for more details.
18
*
19
* You should have received a copy of the GNU General Public License
20
* along with this program; if not, write to the Free Software
21
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
22
* USA
23
*
24
* The full GNU General Public License is included in this distribution
25
* in the file called LICENSE.GPL.
26
*
27
* Contact Information:
28
* Intel Linux Wireless <
[email protected]
>
29
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
30
*
31
* BSD LICENSE
32
*
33
* Copyright(c) 2005 - 2012 Intel Corporation. All rights reserved.
34
* All rights reserved.
35
*
36
* Redistribution and use in source and binary forms, with or without
37
* modification, are permitted provided that the following conditions
38
* are met:
39
*
40
* * Redistributions of source code must retain the above copyright
41
* notice, this list of conditions and the following disclaimer.
42
* * Redistributions in binary form must reproduce the above copyright
43
* notice, this list of conditions and the following disclaimer in
44
* the documentation and/or other materials provided with the
45
* distribution.
46
* * Neither the name Intel Corporation nor the names of its
47
* contributors may be used to endorse or promote products derived
48
* from this software without specific prior written permission.
49
*
50
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
51
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
52
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
53
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
54
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
55
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
56
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
57
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
58
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
59
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
60
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
61
*
62
*****************************************************************************/
63
#ifndef __iwl_fh_h__
64
#define __iwl_fh_h__
65
66
#include <linux/types.h>
67
68
/****************************/
69
/* Flow Handler Definitions */
70
/****************************/
71
76
#define FH_MEM_LOWER_BOUND (0x1000)
77
#define FH_MEM_UPPER_BOUND (0x2000)
78
96
#define FH_KW_MEM_ADDR_REG (FH_MEM_LOWER_BOUND + 0x97C)
97
98
113
#define FH_MEM_CBBC_0_15_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0x9D0)
114
#define FH_MEM_CBBC_0_15_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xA10)
115
#define FH_MEM_CBBC_16_19_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xBF0)
116
#define FH_MEM_CBBC_16_19_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xC00)
117
#define FH_MEM_CBBC_20_31_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xB20)
118
#define FH_MEM_CBBC_20_31_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xB80)
119
120
/* Find TFD CB base pointer for given queue */
121
static
inline
unsigned
int
FH_MEM_CBBC_QUEUE(
unsigned
int
chnl)
122
{
123
if
(chnl < 16)
124
return
FH_MEM_CBBC_0_15_LOWER_BOUND
+ 4 * chnl;
125
if
(chnl < 20)
126
return
FH_MEM_CBBC_16_19_LOWER_BOUND
+ 4 * (chnl - 16);
127
WARN_ON_ONCE
(chnl >= 32);
128
return
FH_MEM_CBBC_20_31_LOWER_BOUND
+ 4 * (chnl - 20);
129
}
130
131
201
#define FH_MEM_RSCSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xBC0)
202
#define FH_MEM_RSCSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xC00)
203
#define FH_MEM_RSCSR_CHNL0 (FH_MEM_RSCSR_LOWER_BOUND)
204
210
#define FH_RSCSR_CHNL0_STTS_WPTR_REG (FH_MEM_RSCSR_CHNL0)
211
217
#define FH_RSCSR_CHNL0_RBDCB_BASE_REG (FH_MEM_RSCSR_CHNL0 + 0x004)
218
225
#define FH_RSCSR_CHNL0_RBDCB_WPTR_REG (FH_MEM_RSCSR_CHNL0 + 0x008)
226
#define FH_RSCSR_CHNL0_WPTR (FH_RSCSR_CHNL0_RBDCB_WPTR_REG)
227
228
255
#define FH_MEM_RCSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xC00)
256
#define FH_MEM_RCSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xCC0)
257
#define FH_MEM_RCSR_CHNL0 (FH_MEM_RCSR_LOWER_BOUND)
258
259
#define FH_MEM_RCSR_CHNL0_CONFIG_REG (FH_MEM_RCSR_CHNL0)
260
261
#define FH_RCSR_CHNL0_RX_CONFIG_RB_TIMEOUT_MSK (0x00000FF0)
/* bits 4-11 */
262
#define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_MSK (0x00001000)
/* bits 12 */
263
#define FH_RCSR_CHNL0_RX_CONFIG_SINGLE_FRAME_MSK (0x00008000)
/* bit 15 */
264
#define FH_RCSR_CHNL0_RX_CONFIG_RB_SIZE_MSK (0x00030000)
/* bits 16-17 */
265
#define FH_RCSR_CHNL0_RX_CONFIG_RBDBC_SIZE_MSK (0x00F00000)
/* bits 20-23 */
266
#define FH_RCSR_CHNL0_RX_CONFIG_DMA_CHNL_EN_MSK (0xC0000000)
/* bits 30-31*/
267
268
#define FH_RCSR_RX_CONFIG_RBDCB_SIZE_POS (20)
269
#define FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_POS (4)
270
#define RX_RB_TIMEOUT (0x10)
271
272
#define FH_RCSR_RX_CONFIG_CHNL_EN_PAUSE_VAL (0x00000000)
273
#define FH_RCSR_RX_CONFIG_CHNL_EN_PAUSE_EOF_VAL (0x40000000)
274
#define FH_RCSR_RX_CONFIG_CHNL_EN_ENABLE_VAL (0x80000000)
275
276
#define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_4K (0x00000000)
277
#define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K (0x00010000)
278
#define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_12K (0x00020000)
279
#define FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_16K (0x00030000)
280
281
#define FH_RCSR_CHNL0_RX_IGNORE_RXF_EMPTY (0x00000004)
282
#define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_NO_INT_VAL (0x00000000)
283
#define FH_RCSR_CHNL0_RX_CONFIG_IRQ_DEST_INT_HOST_VAL (0x00001000)
284
298
#define FH_MEM_RSSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xC40)
299
#define FH_MEM_RSSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xD00)
300
301
#define FH_MEM_RSSR_SHARED_CTRL_REG (FH_MEM_RSSR_LOWER_BOUND)
302
#define FH_MEM_RSSR_RX_STATUS_REG (FH_MEM_RSSR_LOWER_BOUND + 0x004)
303
#define FH_MEM_RSSR_RX_ENABLE_ERR_IRQ2DRV\
304
(FH_MEM_RSSR_LOWER_BOUND + 0x008)
305
306
#define FH_RSSR_CHNL0_RX_STATUS_CHNL_IDLE (0x01000000)
307
308
#define FH_MEM_TFDIB_REG1_ADDR_BITSHIFT 28
309
310
/* TFDB Area - TFDs buffer table */
311
#define FH_MEM_TFDIB_DRAM_ADDR_LSB_MSK (0xFFFFFFFF)
312
#define FH_TFDIB_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0x900)
313
#define FH_TFDIB_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0x958)
314
#define FH_TFDIB_CTRL0_REG(_chnl) (FH_TFDIB_LOWER_BOUND + 0x8 * (_chnl))
315
#define FH_TFDIB_CTRL1_REG(_chnl) (FH_TFDIB_LOWER_BOUND + 0x8 * (_chnl) + 0x4)
316
339
#define FH_TCSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xD00)
340
#define FH_TCSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xE60)
341
342
/* Find Control/Status reg for given Tx DMA/FIFO channel */
343
#define FH_TCSR_CHNL_NUM (8)
344
345
/* TCSR: tx_config register values */
346
#define FH_TCSR_CHNL_TX_CONFIG_REG(_chnl) \
347
(FH_TCSR_LOWER_BOUND + 0x20 * (_chnl))
348
#define FH_TCSR_CHNL_TX_CREDIT_REG(_chnl) \
349
(FH_TCSR_LOWER_BOUND + 0x20 * (_chnl) + 0x4)
350
#define FH_TCSR_CHNL_TX_BUF_STS_REG(_chnl) \
351
(FH_TCSR_LOWER_BOUND + 0x20 * (_chnl) + 0x8)
352
353
#define FH_TCSR_TX_CONFIG_REG_VAL_MSG_MODE_TXF (0x00000000)
354
#define FH_TCSR_TX_CONFIG_REG_VAL_MSG_MODE_DRV (0x00000001)
355
356
#define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_DISABLE (0x00000000)
357
#define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_ENABLE (0x00000008)
358
359
#define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_NOINT (0x00000000)
360
#define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_ENDTFD (0x00100000)
361
#define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_HOST_IFTFD (0x00200000)
362
363
#define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_RTC_NOINT (0x00000000)
364
#define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_RTC_ENDTFD (0x00400000)
365
#define FH_TCSR_TX_CONFIG_REG_VAL_CIRQ_RTC_IFTFD (0x00800000)
366
367
#define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE (0x00000000)
368
#define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_PAUSE_EOF (0x40000000)
369
#define FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE (0x80000000)
370
371
#define FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_EMPTY (0x00000000)
372
#define FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_WAIT (0x00002000)
373
#define FH_TCSR_CHNL_TX_BUF_STS_REG_VAL_TFDB_VALID (0x00000003)
374
375
#define FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_NUM (20)
376
#define FH_TCSR_CHNL_TX_BUF_STS_REG_POS_TB_IDX (12)
377
390
#define FH_TSSR_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0xEA0)
391
#define FH_TSSR_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0xEC0)
392
393
#define FH_TSSR_TX_STATUS_REG (FH_TSSR_LOWER_BOUND + 0x010)
394
412
#define FH_TSSR_TX_ERROR_REG (FH_TSSR_LOWER_BOUND + 0x018)
413
414
#define FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE(_chnl) ((1 << (_chnl)) << 16)
415
416
/* Tx service channels */
417
#define FH_SRVC_CHNL (9)
418
#define FH_SRVC_LOWER_BOUND (FH_MEM_LOWER_BOUND + 0x9C8)
419
#define FH_SRVC_UPPER_BOUND (FH_MEM_LOWER_BOUND + 0x9D0)
420
#define FH_SRVC_CHNL_SRAM_ADDR_REG(_chnl) \
421
(FH_SRVC_LOWER_BOUND + ((_chnl) - 9) * 0x4)
422
423
#define FH_TX_CHICKEN_BITS_REG (FH_MEM_LOWER_BOUND + 0xE98)
424
#define FH_TX_TRB_REG(_chan) (FH_MEM_LOWER_BOUND + 0x958 + (_chan) * 4)
425
426
/* Instruct FH to increment the retry count of a packet when
427
* it is brought from the memory to TX-FIFO
428
*/
429
#define FH_TX_CHICKEN_BITS_SCD_AUTO_RETRY_EN (0x00000002)
430
431
#define RX_QUEUE_SIZE 256
432
#define RX_QUEUE_MASK 255
433
#define RX_QUEUE_SIZE_LOG 8
434
435
/*
436
* RX related structures and functions
437
*/
438
#define RX_FREE_BUFFERS 64
439
#define RX_LOW_WATERMARK 8
440
451
struct
iwl_rb_status
{
452
__le16
closed_rb_num
;
453
__le16
closed_fr_num
;
454
__le16
finished_rb_num
;
455
__le16
finished_fr_nam
;
456
__le32
__unused
;
457
}
__packed
;
458
459
460
#define TFD_QUEUE_SIZE_MAX (256)
461
#define TFD_QUEUE_SIZE_BC_DUP (64)
462
#define TFD_QUEUE_BC_SIZE (TFD_QUEUE_SIZE_MAX + TFD_QUEUE_SIZE_BC_DUP)
463
#define IWL_TX_DMA_MASK DMA_BIT_MASK(36)
464
#define IWL_NUM_OF_TBS 20
465
466
static
inline
u8
iwl_get_dma_hi_addr(
dma_addr_t
addr
)
467
{
468
return
(
sizeof
(addr) >
sizeof
(
u32
) ? (addr >> 16) >> 16 : 0) & 0xF;
469
}
480
struct
iwl_tfd_tb
{
481
__le32
lo
;
482
__le16
hi_n_len
;
483
}
__packed
;
484
513
struct
iwl_tfd
{
514
u8
__reserved1
[3];
515
u8
num_tbs
;
516
struct
iwl_tfd_tb
tbs
[
IWL_NUM_OF_TBS
];
517
__le32
__pad
;
518
}
__packed
;
519
520
/* Keep Warm Size */
521
#define IWL_KW_SIZE 0x1000
/* 4k */
522
523
/* Fixed (non-configurable) rx data from phy */
524
531
struct
iwlagn_scd_bc_tbl
{
532
__le16
tfd_offset
[
TFD_QUEUE_BC_SIZE
];
533
}
__packed
;
534
535
#endif
/* !__iwl_fh_h__ */
Generated on Thu Jan 10 2013 14:11:50 for Linux Kernel by
1.8.2