blob: a9d54874a55997f26d8808cd42d143204e4462d8 [file] [log] [blame]
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +02001/* bnx2x_init.h: Broadcom Everest network driver.
Vladislav Zolotarov94a78b72009-04-27 03:27:43 -07002 * Structures and macroes needed during the initialization.
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +02003 *
Eilon Greenstein2b144022009-02-12 08:38:35 +00004 * Copyright (c) 2007-2009 Broadcom Corporation
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +02005 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation.
9 *
Eilon Greenstein24e3fce2008-06-12 14:30:28 -070010 * Maintained by: Eilon Greenstein <eilong@broadcom.com>
11 * Written by: Eliezer Tamir
Vladislav Zolotarov94a78b72009-04-27 03:27:43 -070012 * Modified by: Vladislav Zolotarov <vladz@broadcom.com>
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +020013 */
14
15#ifndef BNX2X_INIT_H
16#define BNX2X_INIT_H
17
Eilon Greenstein490c3c92009-03-02 07:59:52 +000018/* RAM0 size in bytes */
19#define STORM_INTMEM_SIZE_E1 0x5800
20#define STORM_INTMEM_SIZE_E1H 0x10000
Eilon Greenstein573f2032009-08-12 08:24:14 +000021#define STORM_INTMEM_SIZE(bp) ((CHIP_IS_E1(bp) ? STORM_INTMEM_SIZE_E1 : \
22 STORM_INTMEM_SIZE_E1H) / 4)
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +020023
24
25/* Init operation types and structures */
Eilon Greensteinad8d3942008-06-23 20:29:02 -070026/* Common for both E1 and E1H */
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +020027#define OP_RD 0x1 /* read single register */
28#define OP_WR 0x2 /* write single register */
29#define OP_IW 0x3 /* write single register using mailbox */
30#define OP_SW 0x4 /* copy a string to the device */
31#define OP_SI 0x5 /* copy a string using mailbox */
32#define OP_ZR 0x6 /* clear memory */
33#define OP_ZP 0x7 /* unzip then copy with DMAE */
Eilon Greensteinad8d3942008-06-23 20:29:02 -070034#define OP_WR_64 0x8 /* write 64 bit pattern */
35#define OP_WB 0x9 /* copy a string using DMAE */
36
Eilon Greensteinad8d3942008-06-23 20:29:02 -070037/* FPGA and EMUL specific operations */
Vladislav Zolotarov94a78b72009-04-27 03:27:43 -070038#define OP_WR_EMUL 0xa /* write single register on Emulation */
39#define OP_WR_FPGA 0xb /* write single register on FPGA */
40#define OP_WR_ASIC 0xc /* write single register on ASIC */
41
42/* Init stages */
Eilon Greenstein573f2032009-08-12 08:24:14 +000043/* Never reorder stages !!! */
44#define COMMON_STAGE 0
45#define PORT0_STAGE 1
46#define PORT1_STAGE 2
47#define FUNC0_STAGE 3
48#define FUNC1_STAGE 4
49#define FUNC2_STAGE 5
50#define FUNC3_STAGE 6
51#define FUNC4_STAGE 7
52#define FUNC5_STAGE 8
53#define FUNC6_STAGE 9
54#define FUNC7_STAGE 10
55#define STAGE_IDX_MAX 11
Vladislav Zolotarov94a78b72009-04-27 03:27:43 -070056
Eilon Greenstein573f2032009-08-12 08:24:14 +000057#define STAGE_START 0
58#define STAGE_END 1
Vladislav Zolotarov94a78b72009-04-27 03:27:43 -070059
60
61/* Indices of blocks */
Eilon Greenstein573f2032009-08-12 08:24:14 +000062#define PRS_BLOCK 0
63#define SRCH_BLOCK 1
64#define TSDM_BLOCK 2
65#define TCM_BLOCK 3
66#define BRB1_BLOCK 4
67#define TSEM_BLOCK 5
68#define PXPCS_BLOCK 6
69#define EMAC0_BLOCK 7
70#define EMAC1_BLOCK 8
71#define DBU_BLOCK 9
72#define MISC_BLOCK 10
73#define DBG_BLOCK 11
74#define NIG_BLOCK 12
75#define MCP_BLOCK 13
76#define UPB_BLOCK 14
77#define CSDM_BLOCK 15
78#define USDM_BLOCK 16
79#define CCM_BLOCK 17
80#define UCM_BLOCK 18
81#define USEM_BLOCK 19
82#define CSEM_BLOCK 20
83#define XPB_BLOCK 21
84#define DQ_BLOCK 22
85#define TIMERS_BLOCK 23
86#define XSDM_BLOCK 24
87#define QM_BLOCK 25
88#define PBF_BLOCK 26
89#define XCM_BLOCK 27
90#define XSEM_BLOCK 28
91#define CDU_BLOCK 29
92#define DMAE_BLOCK 30
93#define PXP_BLOCK 31
94#define CFC_BLOCK 32
95#define HC_BLOCK 33
96#define PXP2_BLOCK 34
97#define MISC_AEU_BLOCK 35
98#define PGLUE_B_BLOCK 36
99#define IGU_BLOCK 37
Dmitry Kravkovf2e08992010-10-06 03:28:26 +0000100#define ATC_BLOCK 38
101#define QM_4PORT_BLOCK 39
102#define XSEM_4PORT_BLOCK 40
Eilon Greenstein573f2032009-08-12 08:24:14 +0000103
Vladislav Zolotarov94a78b72009-04-27 03:27:43 -0700104
105/* Returns the index of start or end of a specific block stage in ops array*/
106#define BLOCK_OPS_IDX(block, stage, end) \
Eilon Greenstein573f2032009-08-12 08:24:14 +0000107 (2*(((block)*STAGE_IDX_MAX) + (stage)) + (end))
Eilon Greensteinad8d3942008-06-23 20:29:02 -0700108
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +0200109
110struct raw_op {
Eilon Greenstein6378c022008-08-13 15:59:25 -0700111 u32 op:8;
112 u32 offset:24;
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +0200113 u32 raw_data;
114};
115
116struct op_read {
Eilon Greenstein6378c022008-08-13 15:59:25 -0700117 u32 op:8;
118 u32 offset:24;
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +0200119 u32 pad;
120};
121
122struct op_write {
Eilon Greenstein6378c022008-08-13 15:59:25 -0700123 u32 op:8;
124 u32 offset:24;
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +0200125 u32 val;
126};
127
128struct op_string_write {
Eilon Greenstein6378c022008-08-13 15:59:25 -0700129 u32 op:8;
130 u32 offset:24;
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +0200131#ifdef __LITTLE_ENDIAN
132 u16 data_off;
133 u16 data_len;
134#else /* __BIG_ENDIAN */
135 u16 data_len;
136 u16 data_off;
137#endif
138};
139
140struct op_zero {
Eilon Greenstein6378c022008-08-13 15:59:25 -0700141 u32 op:8;
142 u32 offset:24;
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +0200143 u32 len;
144};
145
146union init_op {
147 struct op_read read;
148 struct op_write write;
149 struct op_string_write str_wr;
150 struct op_zero zero;
151 struct raw_op raw;
152};
153
Dmitry Kravkov523224a2010-10-06 03:23:26 +0000154#define INITOP_SET 0 /* set the HW directly */
155#define INITOP_CLEAR 1 /* clear the HW directly */
156#define INITOP_INIT 2 /* set the init-value array */
157
158/****************************************************************************
159* ILT management
160****************************************************************************/
161struct ilt_line {
162 dma_addr_t page_mapping;
163 void *page;
164 u32 size;
165};
166
167struct ilt_client_info {
168 u32 page_size;
169 u16 start;
170 u16 end;
171 u16 client_num;
172 u16 flags;
173#define ILT_CLIENT_SKIP_INIT 0x1
174#define ILT_CLIENT_SKIP_MEM 0x2
175};
176
177struct bnx2x_ilt {
178 u32 start_line;
179 struct ilt_line *lines;
180 struct ilt_client_info clients[4];
181#define ILT_CLIENT_CDU 0
182#define ILT_CLIENT_QM 1
183#define ILT_CLIENT_SRC 2
184#define ILT_CLIENT_TM 3
185};
186
187/****************************************************************************
188* SRC configuration
189****************************************************************************/
190struct src_ent {
191 u8 opaque[56];
192 u64 next;
193};
194
Eliezer Tamira2fbb9e2007-11-15 20:09:02 +0200195#endif /* BNX2X_INIT_H */
196