1 /*
2  * Copyright (c) 2008-2016 Solarflare Communications 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 are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  *    this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright notice,
11  *    this list of conditions and the following disclaimer in the documentation
12  *    and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
15  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
16  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
21  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
22  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
24  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  *
26  * The views and conclusions contained in the software and documentation are
27  * those of the authors and should not be interpreted as representing official
28  * policies, either expressed or implied, of the FreeBSD Project.
29  */
30 
31 #ifndef	_SYS_SFXGE_IOC_H
32 #define	_SYS_SFXGE_IOC_H
33 
34 #ifdef	__cplusplus
35 extern "C" {
36 #endif
37 
38 #include <sys/types.h>
39 
40 /* Ensure no ambiguity over structure layouts */
41 #pragma pack(1)
42 
43 #define	SFXGE_IOC	('S' << 24 | 'F' << 16 | 'C' << 8)
44 
45 #define	SFXGE_STOP_IOC	(SFXGE_IOC | 0x01)
46 #define	SFXGE_START_IOC	(SFXGE_IOC | 0x02)
47 
48 /* MDIO was SFXGE_IOC 0x03 */
49 
50 /* I2C was SFXGE_IOC 0x04 */
51 
52 /* SPI was SFXGE_IOC 0x05 */
53 
54 /* BAR was SFXGE_IOC 0x06 */
55 
56 /* PCI was SFXGE_IOC 0x07 */
57 
58 /* MAC was SFXGE_IOC 0x08 */
59 
60 /* PHY was SFXGE_IOC 0x09 */
61 
62 /* SRAM was SFXGE_IOC 0x0a */
63 
64 /* TX was SFXGE_IOC 0x0b */
65 
66 /* RX was SFXGE_IOC 0x0c */
67 
68 /* NVRAM */
69 
70 #define	SFXGE_NVRAM_IOC	(SFXGE_IOC | 0x0d)
71 
72 typedef	struct sfxge_nvram_ioc_s {
73 	uint32_t	sni_op;
74 	uint32_t	sni_type;
75 	uint32_t	sni_offset;
76 	uint32_t	sni_size;
77 	uint32_t	sni_subtype;
78 	uint16_t	sni_version[4];		/* get/set_ver */
79 	/*
80 	 * Streams STRMSGSZ limit (default 64kb)
81 	 * See write(2) and I_STR in streamio(4I)
82 	 */
83 	uint8_t		sni_data[32*1024];	/* read/write */
84 } sfxge_nvram_ioc_t;
85 
86 #define	SFXGE_NVRAM_OP_SIZE		0x00000001
87 #define	SFXGE_NVRAM_OP_READ		0x00000002
88 #define	SFXGE_NVRAM_OP_WRITE		0x00000003
89 #define	SFXGE_NVRAM_OP_ERASE		0x00000004
90 #define	SFXGE_NVRAM_OP_GET_VER		0x00000005
91 #define	SFXGE_NVRAM_OP_SET_VER		0x00000006
92 
93 #define	SFXGE_NVRAM_TYPE_BOOTROM	0x00000001
94 #define	SFXGE_NVRAM_TYPE_BOOTROM_CFG	0x00000002
95 #define	SFXGE_NVRAM_TYPE_MC		0x00000003
96 #define	SFXGE_NVRAM_TYPE_MC_GOLDEN	0x00000004
97 #define	SFXGE_NVRAM_TYPE_PHY		0x00000005
98 #define	SFXGE_NVRAM_TYPE_NULL_PHY	0x00000006
99 #define	SFXGE_NVRAM_TYPE_FPGA		0x00000007
100 #define	SFXGE_NVRAM_TYPE_FCFW		0x00000008
101 #define	SFXGE_NVRAM_TYPE_CPLD		0x00000009
102 #define	SFXGE_NVRAM_TYPE_FPGA_BACKUP	0x0000000a
103 #define	SFXGE_NVRAM_TYPE_DYNAMIC_CFG	0x0000000b
104 
105 
106 /* PHY BIST was IOC 0x0e */
107 
108 /* Legacy IOC for MCDIv1 protocol - do not use in new code */
109 #define	SFXGE_MCDI_IOC	(SFXGE_IOC | 0x0f)
110 
111 typedef	struct sfxge_mcdi_ioc_s {
112 	uint8_t		smi_payload[256];
113 	uint8_t		smi_cmd;
114 	uint8_t		smi_len; /* In and out */
115 	uint8_t		smi_rc;
116 } sfxge_mcdi_ioc_t;
117 
118 /* Reset the NIC */
119 
120 #define	SFXGE_NIC_RESET_IOC	(SFXGE_IOC | 0x10)
121 
122 /* VPD */
123 
124 #define	SFXGE_VPD_IOC	(SFXGE_IOC | 0x11)
125 
126 #define	SFXGE_VPD_MAX_PAYLOAD 0x100
127 
128 typedef	struct sfxge_vpd_ioc_s {
129 	uint8_t		svi_op;
130 	uint8_t		svi_tag;
131 	uint16_t	svi_keyword;
132 	uint8_t		svi_len; /* In or out */
133 	uint8_t		svi_payload[SFXGE_VPD_MAX_PAYLOAD]; /* In or out */
134 } sfxge_vpd_ioc_t;
135 
136 #define	SFXGE_VPD_OP_GET_KEYWORD	0x00000001
137 #define	SFXGE_VPD_OP_SET_KEYWORD	0x00000002
138 
139 /* MCDIv2 */
140 
141 #define	SFXGE_MCDI2_IOC	(SFXGE_IOC | 0x12)
142 
143 typedef	struct sfxge_mcdi2_ioc_s {
144 	uint8_t		smi_payload[1024];
145 	uint32_t	smi_cmd;
146 	uint32_t	smi_len; /* In and out */
147 	uint32_t	smi_rc;
148 } sfxge_mcdi2_ioc_t;
149 
150 
151 #pragma pack()
152 
153 #ifdef	__cplusplus
154 }
155 #endif
156 
157 #endif	/* _SYS_SFXGE_IOC_H */
158