1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2008 NetXen, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef _UNM_NIC_HW_
28#define	_UNM_NIC_HW_
29
30#ifdef __cplusplus
31extern "C" {
32#endif
33
34#include "unm_inc.h"
35
36/* Hardware memory size of 128 meg */
37#define	BAR0_SIZE (128 * 1024 * 1024)
38/*
39 * It can be calculated by looking at the first 1 bit of the BAR0 addr after
40 * bit 4 For us lets assume that BAR0 is D8000008, then the size is 0x8000000,
41 * 8 represents first bit containing 1.   FSL temp notes....pg 162 of PCI
42 * systems arch...
43 */
44
45#define	UNM_NIC_HW_BLOCK_WRITE_64(DATA_PTR, ADDR, NUM_WORDS)        \
46{                                                           \
47	int i;                                              \
48	u64 *a = (u64 *) (DATA_PTR);                        \
49	u64 *b = (u64 *) (ADDR);                            \
50	u64 tmp;					    \
51	for (i = 0; i < (NUM_WORDS); i++, a++, b++) {       \
52		tmp = UNM_NIC_PCI_READ_64(a);		    \
53		UNM_NIC_PCI_WRITE_64(tmp, b);		    \
54	}						    \
55}
56
57#define	UNM_NIC_HW_BLOCK_READ_64(DATA_PTR, ADDR, NUM_WORDS)           \
58{                                                             \
59	int i;                                                \
60	u64 *a = (u64 *) (DATA_PTR);                          \
61	u64 *b = (u64 *) (ADDR);                              \
62	u64 tmp;					      \
63	for (i = 0; i < (NUM_WORDS); i++, a++, b++) {            \
64		tmp = UNM_NIC_PCI_READ_64(b);		      \
65		UNM_NIC_PCI_WRITE_64(tmp, a);		      \
66	}                                                     \
67}
68
69#define	UNM_PCI_MAPSIZE_BYTES  (UNM_PCI_MAPSIZE << 20)
70
71#define	UNM_NIC_LOCKED_READ_REG(X, Y)   \
72	addr = (void *)(pci_base_offset(adapter, (X)));     \
73	*(uint32_t *)(Y) = UNM_NIC_PCI_READ_32(addr);
74
75#define	UNM_NIC_LOCKED_WRITE_REG(X, Y)   \
76	addr = (void *)(pci_base_offset(adapter, (X))); \
77	UNM_NIC_PCI_WRITE_32(*(uint32_t *)(Y), addr);
78
79/* For Multicard support */
80#define	UNM_CRB_READ_VAL_ADAPTER(ADDR, ADAPTER) \
81	unm_crb_read_val_adapter((ADDR), (struct unm_adapter_s *)ADAPTER)
82
83#define	UNM_CRB_READ_CHECK_ADAPTER(ADDR, VALUE, ADAPTER)		\
84	{								\
85		if (unm_crb_read_adapter(ADDR, VALUE,			\
86		    (struct unm_adapter_s *)ADAPTER)) return -1;	\
87	}
88
89#define	UNM_CRB_WRITELIT_ADAPTER(ADDR, VALUE, ADAPTER)			\
90	{								\
91		adapter->unm_crb_writelit_adapter(			\
92		    (struct unm_adapter_s *)ADAPTER,			\
93		    (unsigned long)ADDR, (int)VALUE);			\
94	}
95
96struct unm_adapter_s;
97void unm_nic_set_link_parameters(struct unm_adapter_s *adapter);
98long xge_mdio_init(struct unm_adapter_s *adapter);
99void unm_nic_flash_print(struct unm_adapter_s *adapter);
100void unm_nic_get_serial_num(struct unm_adapter_s *adapter);
101
102typedef struct {
103	unsigned valid;
104	unsigned start_128M;
105	unsigned end_128M;
106	unsigned start_2M;
107} crb_128M_2M_sub_block_map_t;
108
109typedef struct {
110	crb_128M_2M_sub_block_map_t sub_block[16];
111} crb_128M_2M_block_map_t;
112
113#ifdef __cplusplus
114}
115#endif
116
117#endif /* _UNM_NIC_HW_ */
118