13c838a9fSAndrew Rybchenko /*- 2*929c7febSAndrew Rybchenko * Copyright (c) 2014-2016 Solarflare Communications Inc. 33c838a9fSAndrew Rybchenko * All rights reserved. 43c838a9fSAndrew Rybchenko * 53c838a9fSAndrew Rybchenko * Redistribution and use in source and binary forms, with or without 63c838a9fSAndrew Rybchenko * modification, are permitted provided that the following conditions are met: 73c838a9fSAndrew Rybchenko * 83c838a9fSAndrew Rybchenko * 1. Redistributions of source code must retain the above copyright notice, 93c838a9fSAndrew Rybchenko * this list of conditions and the following disclaimer. 103c838a9fSAndrew Rybchenko * 2. Redistributions in binary form must reproduce the above copyright notice, 113c838a9fSAndrew Rybchenko * this list of conditions and the following disclaimer in the documentation 123c838a9fSAndrew Rybchenko * and/or other materials provided with the distribution. 133c838a9fSAndrew Rybchenko * 143c838a9fSAndrew Rybchenko * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 153c838a9fSAndrew Rybchenko * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 163c838a9fSAndrew Rybchenko * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 173c838a9fSAndrew Rybchenko * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 183c838a9fSAndrew Rybchenko * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 193c838a9fSAndrew Rybchenko * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 203c838a9fSAndrew Rybchenko * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 213c838a9fSAndrew Rybchenko * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 223c838a9fSAndrew Rybchenko * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 233c838a9fSAndrew Rybchenko * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, 243c838a9fSAndrew Rybchenko * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 253c838a9fSAndrew Rybchenko * 263c838a9fSAndrew Rybchenko * The views and conclusions contained in the software and documentation are 273c838a9fSAndrew Rybchenko * those of the authors and should not be interpreted as representing official 283c838a9fSAndrew Rybchenko * policies, either expressed or implied, of the FreeBSD Project. 293c838a9fSAndrew Rybchenko */ 303c838a9fSAndrew Rybchenko 313c838a9fSAndrew Rybchenko #ifndef _SYS_SFXGE_IOC_H 323c838a9fSAndrew Rybchenko #define _SYS_SFXGE_IOC_H 333c838a9fSAndrew Rybchenko 343c838a9fSAndrew Rybchenko #ifdef __cplusplus 353c838a9fSAndrew Rybchenko extern "C" { 363c838a9fSAndrew Rybchenko #endif 373c838a9fSAndrew Rybchenko 383c838a9fSAndrew Rybchenko #include <sys/types.h> 393c838a9fSAndrew Rybchenko 403c838a9fSAndrew Rybchenko /* More codes may be added if necessary */ 413c838a9fSAndrew Rybchenko enum sfxge_ioc_codes { 423c838a9fSAndrew Rybchenko SFXGE_MCDI_IOC, 433c838a9fSAndrew Rybchenko SFXGE_NVRAM_IOC, 443c838a9fSAndrew Rybchenko SFXGE_VPD_IOC 453c838a9fSAndrew Rybchenko }; 463c838a9fSAndrew Rybchenko 473c838a9fSAndrew Rybchenko enum sfxge_nvram_ops { 483c838a9fSAndrew Rybchenko SFXGE_NVRAM_OP_SIZE, 493c838a9fSAndrew Rybchenko SFXGE_NVRAM_OP_READ, 503c838a9fSAndrew Rybchenko SFXGE_NVRAM_OP_WRITE, 513c838a9fSAndrew Rybchenko SFXGE_NVRAM_OP_ERASE, 523c838a9fSAndrew Rybchenko SFXGE_NVRAM_OP_GET_VER, 533c838a9fSAndrew Rybchenko SFXGE_NVRAM_OP_SET_VER 543c838a9fSAndrew Rybchenko }; 553c838a9fSAndrew Rybchenko 563c838a9fSAndrew Rybchenko enum sfxge_nvram_types { 573c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_BOOTROM, 583c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_BOOTROM_CFG, 593c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_MC, 603c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_MC_GOLDEN, 613c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_PHY, 623c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_NULL_PHY, 633c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_FPGA, 643c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_FCFW, 653c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_CPLD, 663c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_FPGA_BACKUP, 673c838a9fSAndrew Rybchenko SFXGE_NVRAM_TYPE_DYNAMIC_CFG 683c838a9fSAndrew Rybchenko }; 693c838a9fSAndrew Rybchenko 703c838a9fSAndrew Rybchenko enum sfxge_vpd_ops { 713c838a9fSAndrew Rybchenko SFXGE_VPD_OP_GET_KEYWORD, 723c838a9fSAndrew Rybchenko SFXGE_VPD_OP_SET_KEYWORD 733c838a9fSAndrew Rybchenko }; 743c838a9fSAndrew Rybchenko 753c838a9fSAndrew Rybchenko #define SFXGE_MCDI_MAX_PAYLOAD 0x400 763c838a9fSAndrew Rybchenko #define SFXGE_VPD_MAX_PAYLOAD 0x100 773c838a9fSAndrew Rybchenko 783c838a9fSAndrew Rybchenko typedef struct sfxge_ioc_s { 793c838a9fSAndrew Rybchenko uint32_t op; 803c838a9fSAndrew Rybchenko union { 813c838a9fSAndrew Rybchenko struct { 823c838a9fSAndrew Rybchenko caddr_t payload; 833c838a9fSAndrew Rybchenko uint32_t cmd; 843c838a9fSAndrew Rybchenko size_t len; /* In and out */ 853c838a9fSAndrew Rybchenko uint32_t rc; 863c838a9fSAndrew Rybchenko } mcdi; 873c838a9fSAndrew Rybchenko struct { 883c838a9fSAndrew Rybchenko uint32_t op; 893c838a9fSAndrew Rybchenko uint32_t type; 903c838a9fSAndrew Rybchenko uint32_t offset; 913c838a9fSAndrew Rybchenko uint32_t size; 923c838a9fSAndrew Rybchenko uint32_t subtype; 933c838a9fSAndrew Rybchenko uint16_t version[4]; /* get/set_ver */ 943c838a9fSAndrew Rybchenko caddr_t data; 953c838a9fSAndrew Rybchenko } nvram; 963c838a9fSAndrew Rybchenko struct { 973c838a9fSAndrew Rybchenko uint8_t op; 983c838a9fSAndrew Rybchenko uint8_t tag; 993c838a9fSAndrew Rybchenko uint16_t keyword; 1003c838a9fSAndrew Rybchenko uint16_t len; /* In or out */ 1013c838a9fSAndrew Rybchenko caddr_t payload; 1023c838a9fSAndrew Rybchenko } vpd; 1033c838a9fSAndrew Rybchenko } u; 1043c838a9fSAndrew Rybchenko } __packed sfxge_ioc_t; 1053c838a9fSAndrew Rybchenko 1063c838a9fSAndrew Rybchenko #ifdef __cplusplus 1073c838a9fSAndrew Rybchenko } 1083c838a9fSAndrew Rybchenko #endif 1093c838a9fSAndrew Rybchenko 1103c838a9fSAndrew Rybchenko #endif /* _SYS_SFXGE_IOC_H */ 111