1/*-
2 * Broadcom NetXtreme-C/E network driver.
3 *
4 * Copyright (c) 2016 Broadcom, All Rights Reserved.
5 * The term Broadcom refers to Broadcom Limited and/or its subsidiaries
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
9 * are met:
10 * 1. Redistributions of source code must retain the above copyright
11 *    notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 *    notice, this list of conditions and the following disclaimer in the
14 *    documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS'
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
26 * THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#include <sys/cdefs.h>
30__FBSDID("$FreeBSD: stable/11/sys/dev/bnxt/bnxt_ioctl.h 308696 2016-11-15 20:35:29Z shurd $");
31
32#ifndef _BNXT_IOCTL_H
33#define _BNXT_IOCTL_H
34
35enum bnxt_ioctl_type {
36	BNXT_HWRM_NVM_FIND_DIR_ENTRY,
37	BNXT_HWRM_NVM_READ,
38	BNXT_HWRM_FW_RESET,
39	BNXT_HWRM_FW_QSTATUS,
40	BNXT_HWRM_NVM_WRITE,
41	BNXT_HWRM_NVM_ERASE_DIR_ENTRY,
42	BNXT_HWRM_NVM_GET_DIR_INFO,
43	BNXT_HWRM_NVM_GET_DIR_ENTRIES,
44	BNXT_HWRM_NVM_MODIFY,
45	BNXT_HWRM_NVM_VERIFY_UPDATE,
46	BNXT_HWRM_NVM_INSTALL_UPDATE,
47	BNXT_HWRM_FW_GET_TIME,
48	BNXT_HWRM_FW_SET_TIME,
49};
50
51struct bnxt_ioctl_header {
52	enum bnxt_ioctl_type type;
53	int		rc;
54};
55
56struct bnxt_ioctl_hwrm_nvm_find_dir_entry {
57	struct bnxt_ioctl_header hdr;
58	uint32_t	data_length;
59	uint32_t	fw_ver;
60	uint32_t	item_length;
61	uint16_t	ext;
62	uint16_t	index;
63	uint16_t	ordinal;
64	uint16_t	type;
65	uint8_t		search_opt;
66	bool		use_index;
67};
68
69struct bnxt_ioctl_hwrm_nvm_read {
70	struct bnxt_ioctl_header hdr;
71	uint8_t		*data;
72	uint32_t	length;
73	uint32_t	offset;
74	uint16_t	index;
75};
76
77struct bnxt_ioctl_hwrm_fw_reset {
78	struct bnxt_ioctl_header hdr;
79	uint8_t		processor;
80	uint8_t		selfreset;
81};
82
83struct bnxt_ioctl_hwrm_fw_qstatus {
84	struct bnxt_ioctl_header hdr;
85	uint8_t		processor;
86	uint8_t		selfreset;
87};
88
89struct bnxt_ioctl_hwrm_nvm_write {
90	struct bnxt_ioctl_header hdr;
91	uint8_t		*data;
92	uint32_t	data_length;
93	uint32_t	item_length;
94	uint16_t	attr;
95	uint16_t	ext;
96	uint16_t	index;
97	uint16_t	option;
98	uint16_t	ordinal;
99	uint16_t	type;
100	bool		keep;
101};
102
103struct bnxt_ioctl_hwrm_nvm_erase_dir_entry {
104	struct bnxt_ioctl_header hdr;
105	enum bnxt_ioctl_type type;
106	int		rc;
107	uint16_t	index;
108};
109
110struct bnxt_ioctl_hwrm_nvm_get_dir_info {
111	struct bnxt_ioctl_header hdr;
112	uint32_t	entries;
113	uint32_t	entry_length;
114};
115
116struct bnxt_ioctl_hwrm_nvm_get_dir_entries {
117	struct bnxt_ioctl_header hdr;
118	uint8_t		*data;
119	size_t		max_size;
120	uint32_t	entries;
121	uint32_t	entry_length;
122};
123
124struct bnxt_ioctl_hwrm_nvm_install_update {
125	struct bnxt_ioctl_header hdr;
126	uint64_t	installed_items;
127	uint32_t	install_type;
128	uint8_t		problem_item;
129	uint8_t		reset_required;
130	uint8_t		result;
131};
132
133struct bnxt_ioctl_hwrm_nvm_verify_update {
134	struct bnxt_ioctl_header hdr;
135	uint16_t	ext;
136	uint16_t	ordinal;
137	uint16_t	type;
138};
139
140struct bnxt_ioctl_hwrm_nvm_modify {
141	struct bnxt_ioctl_header hdr;
142	uint8_t		*data;
143	uint32_t	length;
144	uint32_t	offset;
145	uint16_t	index;
146};
147
148struct bnxt_ioctl_hwrm_fw_get_time {
149	struct bnxt_ioctl_header hdr;
150	uint16_t	millisecond;
151	uint16_t	year;
152	uint16_t	zone;
153	uint8_t		day;
154	uint8_t		hour;
155	uint8_t		minute;
156	uint8_t		month;
157	uint8_t		second;
158};
159
160struct bnxt_ioctl_hwrm_fw_set_time {
161	struct bnxt_ioctl_header hdr;
162	uint16_t	millisecond;
163	uint16_t	year;
164	uint16_t	zone;
165	uint8_t		day;
166	uint8_t		hour;
167	uint8_t		minute;
168	uint8_t		month;
169	uint8_t		second;
170};
171
172/* IOCTL interface */
173struct bnxt_ioctl_data {
174	union {
175		struct bnxt_ioctl_header			hdr;
176		struct bnxt_ioctl_hwrm_nvm_find_dir_entry	find;
177		struct bnxt_ioctl_hwrm_nvm_read			read;
178		struct bnxt_ioctl_hwrm_fw_reset			reset;
179		struct bnxt_ioctl_hwrm_fw_qstatus		status;
180		struct bnxt_ioctl_hwrm_nvm_write		write;
181		struct bnxt_ioctl_hwrm_nvm_erase_dir_entry	erase;
182		struct bnxt_ioctl_hwrm_nvm_get_dir_info		dir_info;
183		struct bnxt_ioctl_hwrm_nvm_get_dir_entries	dir_entries;
184		struct bnxt_ioctl_hwrm_nvm_install_update	install;
185		struct bnxt_ioctl_hwrm_nvm_verify_update	verify;
186		struct bnxt_ioctl_hwrm_nvm_modify		modify;
187		struct bnxt_ioctl_hwrm_fw_get_time		get_time;
188		struct bnxt_ioctl_hwrm_fw_set_time		set_time;
189	};
190};
191
192#endif
193