153 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* bnx2x_init.h: Broadcom Everest network driver.
 | 
						|
 *               Structures and macroes needed during the initialization.
 | 
						|
 *
 | 
						|
 * Copyright (c) 2007-2009 Broadcom Corporation
 | 
						|
 *
 | 
						|
 * This program is free software; you can redistribute it and/or modify
 | 
						|
 * it under the terms of the GNU General Public License as published by
 | 
						|
 * the Free Software Foundation.
 | 
						|
 *
 | 
						|
 * Maintained by: Eilon Greenstein <eilong@broadcom.com>
 | 
						|
 * Written by: Eliezer Tamir
 | 
						|
 * Modified by: Vladislav Zolotarov <vladz@broadcom.com>
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef BNX2X_INIT_H
 | 
						|
#define BNX2X_INIT_H
 | 
						|
 | 
						|
/* RAM0 size in bytes */
 | 
						|
#define STORM_INTMEM_SIZE_E1		0x5800
 | 
						|
#define STORM_INTMEM_SIZE_E1H		0x10000
 | 
						|
#define STORM_INTMEM_SIZE(bp) ((CHIP_IS_E1(bp) ? STORM_INTMEM_SIZE_E1 : \
 | 
						|
						    STORM_INTMEM_SIZE_E1H) / 4)
 | 
						|
 | 
						|
 | 
						|
/* Init operation types and structures */
 | 
						|
/* Common for both E1 and E1H */
 | 
						|
#define OP_RD			0x1 /* read single register */
 | 
						|
#define OP_WR			0x2 /* write single register */
 | 
						|
#define OP_IW			0x3 /* write single register using mailbox */
 | 
						|
#define OP_SW			0x4 /* copy a string to the device */
 | 
						|
#define OP_SI			0x5 /* copy a string using mailbox */
 | 
						|
#define OP_ZR			0x6 /* clear memory */
 | 
						|
#define OP_ZP			0x7 /* unzip then copy with DMAE */
 | 
						|
#define OP_WR_64		0x8 /* write 64 bit pattern */
 | 
						|
#define OP_WB			0x9 /* copy a string using DMAE */
 | 
						|
 | 
						|
/* FPGA and EMUL specific operations */
 | 
						|
#define OP_WR_EMUL		0xa /* write single register on Emulation */
 | 
						|
#define OP_WR_FPGA		0xb /* write single register on FPGA */
 | 
						|
#define OP_WR_ASIC		0xc /* write single register on ASIC */
 | 
						|
 | 
						|
/* Init stages */
 | 
						|
/* Never reorder stages !!! */
 | 
						|
#define COMMON_STAGE		0
 | 
						|
#define PORT0_STAGE		1
 | 
						|
#define PORT1_STAGE		2
 | 
						|
#define FUNC0_STAGE		3
 | 
						|
#define FUNC1_STAGE		4
 | 
						|
#define FUNC2_STAGE		5
 | 
						|
#define FUNC3_STAGE		6
 | 
						|
#define FUNC4_STAGE		7
 | 
						|
#define FUNC5_STAGE		8
 | 
						|
#define FUNC6_STAGE		9
 | 
						|
#define FUNC7_STAGE		10
 | 
						|
#define STAGE_IDX_MAX		11
 | 
						|
 | 
						|
#define STAGE_START		0
 | 
						|
#define STAGE_END		1
 | 
						|
 | 
						|
 | 
						|
/* Indices of blocks */
 | 
						|
#define PRS_BLOCK		0
 | 
						|
#define SRCH_BLOCK		1
 | 
						|
#define TSDM_BLOCK		2
 | 
						|
#define TCM_BLOCK		3
 | 
						|
#define BRB1_BLOCK		4
 | 
						|
#define TSEM_BLOCK		5
 | 
						|
#define PXPCS_BLOCK		6
 | 
						|
#define EMAC0_BLOCK		7
 | 
						|
#define EMAC1_BLOCK		8
 | 
						|
#define DBU_BLOCK		9
 | 
						|
#define MISC_BLOCK		10
 | 
						|
#define DBG_BLOCK		11
 | 
						|
#define NIG_BLOCK		12
 | 
						|
#define MCP_BLOCK		13
 | 
						|
#define UPB_BLOCK		14
 | 
						|
#define CSDM_BLOCK		15
 | 
						|
#define USDM_BLOCK		16
 | 
						|
#define CCM_BLOCK		17
 | 
						|
#define UCM_BLOCK		18
 | 
						|
#define USEM_BLOCK		19
 | 
						|
#define CSEM_BLOCK		20
 | 
						|
#define XPB_BLOCK		21
 | 
						|
#define DQ_BLOCK		22
 | 
						|
#define TIMERS_BLOCK		23
 | 
						|
#define XSDM_BLOCK		24
 | 
						|
#define QM_BLOCK		25
 | 
						|
#define PBF_BLOCK		26
 | 
						|
#define XCM_BLOCK		27
 | 
						|
#define XSEM_BLOCK		28
 | 
						|
#define CDU_BLOCK		29
 | 
						|
#define DMAE_BLOCK		30
 | 
						|
#define PXP_BLOCK		31
 | 
						|
#define CFC_BLOCK		32
 | 
						|
#define HC_BLOCK		33
 | 
						|
#define PXP2_BLOCK		34
 | 
						|
#define MISC_AEU_BLOCK		35
 | 
						|
#define PGLUE_B_BLOCK		36
 | 
						|
#define IGU_BLOCK		37
 | 
						|
 | 
						|
 | 
						|
/* Returns the index of start or end of a specific block stage in ops array*/
 | 
						|
#define BLOCK_OPS_IDX(block, stage, end) \
 | 
						|
			(2*(((block)*STAGE_IDX_MAX) + (stage)) + (end))
 | 
						|
 | 
						|
 | 
						|
struct raw_op {
 | 
						|
	u32 op:8;
 | 
						|
	u32 offset:24;
 | 
						|
	u32 raw_data;
 | 
						|
};
 | 
						|
 | 
						|
struct op_read {
 | 
						|
	u32 op:8;
 | 
						|
	u32 offset:24;
 | 
						|
	u32 pad;
 | 
						|
};
 | 
						|
 | 
						|
struct op_write {
 | 
						|
	u32 op:8;
 | 
						|
	u32 offset:24;
 | 
						|
	u32 val;
 | 
						|
};
 | 
						|
 | 
						|
struct op_string_write {
 | 
						|
	u32 op:8;
 | 
						|
	u32 offset:24;
 | 
						|
#ifdef __LITTLE_ENDIAN
 | 
						|
	u16 data_off;
 | 
						|
	u16 data_len;
 | 
						|
#else /* __BIG_ENDIAN */
 | 
						|
	u16 data_len;
 | 
						|
	u16 data_off;
 | 
						|
#endif
 | 
						|
};
 | 
						|
 | 
						|
struct op_zero {
 | 
						|
	u32 op:8;
 | 
						|
	u32 offset:24;
 | 
						|
	u32 len;
 | 
						|
};
 | 
						|
 | 
						|
union init_op {
 | 
						|
	struct op_read		read;
 | 
						|
	struct op_write		write;
 | 
						|
	struct op_string_write	str_wr;
 | 
						|
	struct op_zero		zero;
 | 
						|
	struct raw_op		raw;
 | 
						|
};
 | 
						|
 | 
						|
#endif /* BNX2X_INIT_H */
 | 
						|
 |