1/*-
2 * Copyright (c) 2002-2007 Neterion, Inc.
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 *    notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 *    notice, this list of conditions and the following disclaimer in the
12 *    documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 *
26 * $FreeBSD: releng/11.0/sys/dev/nxge/include/xge-defs.h 173139 2007-10-29 14:19:32Z rwatson $
27 */
28
29#ifndef XGE_DEFS_H
30#define XGE_DEFS_H
31
32#define XGE_PCI_VENDOR_ID           0x17D5
33#define XGE_PCI_DEVICE_ID_XENA_1    0x5731
34#define XGE_PCI_DEVICE_ID_XENA_2    0x5831
35#define XGE_PCI_DEVICE_ID_HERC_1    0x5732
36#define XGE_PCI_DEVICE_ID_HERC_2    0x5832
37#define XGE_PCI_DEVICE_ID_TITAN_1   0x5733
38#define XGE_PCI_DEVICE_ID_TITAN_2   0x5833
39
40#define XGE_DRIVER_NAME             "Xge driver"
41#define XGE_DRIVER_VENDOR           "Neterion, Inc"
42#define XGE_CHIP_FAMILY             "Xframe"
43#define XGE_SUPPORTED_MEDIA_0       "Fiber"
44
45#include <dev/nxge/include/version.h>
46
47#if defined(__cplusplus)
48#define __EXTERN_BEGIN_DECLS    extern "C" {
49#define __EXTERN_END_DECLS  }
50#else
51#define __EXTERN_BEGIN_DECLS
52#define __EXTERN_END_DECLS
53#endif
54
55__EXTERN_BEGIN_DECLS
56
57/*---------------------------- DMA attributes ------------------------------*/
58/*           Used in xge_os_dma_malloc() and xge_os_dma_map() */
59/*---------------------------- DMA attributes ------------------------------*/
60
61/* XGE_OS_DMA_REQUIRES_SYNC  - should be defined or
62	                         NOT defined in the Makefile */
63#define XGE_OS_DMA_CACHELINE_ALIGNED      0x1
64/* Either STREAMING or CONSISTENT should be used.
65   The combination of both or none is invalid */
66#define XGE_OS_DMA_STREAMING              0x2
67#define XGE_OS_DMA_CONSISTENT             0x4
68#define XGE_OS_SPRINTF_STRLEN             64
69
70/*---------------------------- common stuffs -------------------------------*/
71
72#define XGE_OS_LLXFMT       "%llx"
73#define XGE_OS_NEWLINE      "\n"
74#ifdef XGE_OS_MEMORY_CHECK
75typedef struct {
76	void *ptr;
77	int size;
78	char *file;
79	int line;
80} xge_os_malloc_t;
81
82#define XGE_OS_MALLOC_CNT_MAX   64*1024
83extern xge_os_malloc_t g_malloc_arr[XGE_OS_MALLOC_CNT_MAX];
84extern int g_malloc_cnt;
85
86#define XGE_OS_MEMORY_CHECK_MALLOC(_vaddr, _size, _file, _line) { \
87	if (_vaddr) { \
88	    int index_mem_chk; \
89	    for (index_mem_chk=0; index_mem_chk < g_malloc_cnt; index_mem_chk++) { \
90	        if (g_malloc_arr[index_mem_chk].ptr == NULL) { \
91	            break; \
92	        } \
93	    } \
94	    if (index_mem_chk == g_malloc_cnt) { \
95	        g_malloc_cnt++; \
96	        if (g_malloc_cnt >= XGE_OS_MALLOC_CNT_MAX) { \
97	          xge_os_bug("g_malloc_cnt exceed %d", \
98	                    XGE_OS_MALLOC_CNT_MAX); \
99	        } \
100	    } \
101	    g_malloc_arr[index_mem_chk].ptr = _vaddr; \
102	    g_malloc_arr[index_mem_chk].size = _size; \
103	    g_malloc_arr[index_mem_chk].file = _file; \
104	    g_malloc_arr[index_mem_chk].line = _line; \
105	    for (index_mem_chk=0; index_mem_chk<_size; index_mem_chk++) { \
106	        *((char *)_vaddr+index_mem_chk) = 0x5a; \
107	    } \
108	} \
109}
110
111#define XGE_OS_MEMORY_CHECK_FREE(_vaddr, _check_size) { \
112	int index_mem_chk; \
113	for (index_mem_chk=0; index_mem_chk < XGE_OS_MALLOC_CNT_MAX; index_mem_chk++) { \
114	    if (g_malloc_arr[index_mem_chk].ptr == _vaddr) { \
115	        g_malloc_arr[index_mem_chk].ptr = NULL; \
116	        if(_check_size && g_malloc_arr[index_mem_chk].size!=_check_size) { \
117	            xge_os_printf("OSPAL: freeing with wrong " \
118	                  "size %d! allocated at %s:%d:"XGE_OS_LLXFMT":%d", \
119	                 (int)_check_size, \
120	                 g_malloc_arr[index_mem_chk].file, \
121	                 g_malloc_arr[index_mem_chk].line, \
122	                 (unsigned long long)(ulong_t) \
123	                    g_malloc_arr[index_mem_chk].ptr, \
124	                 g_malloc_arr[index_mem_chk].size); \
125	        } \
126	        break; \
127	    } \
128	} \
129	if (index_mem_chk == XGE_OS_MALLOC_CNT_MAX) { \
130	    xge_os_printf("OSPAL: ptr "XGE_OS_LLXFMT" not found!", \
131	            (unsigned long long)(ulong_t)_vaddr); \
132	} \
133}
134#else
135#define XGE_OS_MEMORY_CHECK_MALLOC(ptr, size, file, line)
136#define XGE_OS_MEMORY_CHECK_FREE(vaddr, check_size)
137#endif
138
139__EXTERN_END_DECLS
140
141#endif /* XGE_DEFS_H */
142