xref: /freebsd-src/sys/dev/sfxge/sfxge_ioc.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
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