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