tws_user.h revision 256281
1127474Stjr/* 2127474Stjr * Copyright (c) 2010, LSI Corp. 3127474Stjr * All rights reserved. 4127474Stjr * Author : Manjunath Ranganathaiah 5127474Stjr * Support: freebsdraid@lsi.com 6174990Sache * 7127474Stjr * Redistribution and use in source and binary forms, with or without 8134337Stjr * modification, are permitted provided that the following conditions 9134337Stjr * are met: 10134337Stjr * 11134337Stjr * 1. Redistributions of source code must retain the above copyright 12134337Stjr * notice, this list of conditions and the following disclaimer. 13134337Stjr * 2. Redistributions in binary form must reproduce the above copyright 14134337Stjr * notice, this list of conditions and the following disclaimer in 15134337Stjr * the documentation and/or other materials provided with the 16134337Stjr * distribution. 17134337Stjr * 3. Neither the name of the <ORGANIZATION> nor the names of its 18134337Stjr * contributors may be used to endorse or promote products derived 19134337Stjr * from this software without specific prior written permission. 20127474Stjr * 21174990Sache * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22127474Stjr * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23134337Stjr * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 24134337Stjr * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 25134337Stjr * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 26134337Stjr * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 27134337Stjr * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 28134337Stjr * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 29134337Stjr * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30134337Stjr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 31134337Stjr * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32134337Stjr * POSSIBILITY OF SUCH DAMAGE. 33134337Stjr * 34134337Stjr * $FreeBSD: stable/10/sys/dev/tws/tws_user.h 226026 2011-10-04 21:40:25Z delphij $ 35127474Stjr */ 36174990Sache 37127474Stjr#define TWS_AEN_NOT_RETRIEVED 0x1 38134337Stjr#define TWS_AEN_RETRIEVED 0x2 39134337Stjr 40134337Stjr#define TWS_AEN_NO_EVENTS 0x1003 /* No more events */ 41134337Stjr#define TWS_AEN_OVERFLOW 0x1004 /* AEN overflow occurred */ 42134337Stjr 43134337Stjr#define TWS_IOCTL_LOCK_NOT_HELD 0x1001 /* Not locked */ 44134337Stjr#define TWS_IOCTL_LOCK_ALREADY_HELD 0x1002 /* Already locked */ 45127474Stjr 46174990Sache#define TWS_IOCTL_LOCK_HELD 0x1 47127474Stjr#define TWS_IOCTL_LOCK_FREE 0x0 48134337Stjr 49134337Stjr#pragma pack(1) 50134337Stjr 51134337Stjr/* Structure used to handle GET/RELEASE LOCK ioctls. */ 52134337Stjrstruct tws_lock_packet { 53134337Stjr u_int32_t timeout_msec; 54134337Stjr u_int32_t time_remaining_msec; 55127474Stjr u_int32_t force_flag; 56127474Stjr}; 57127474Stjr 58127474Stjr/* Structure used to handle GET COMPATIBILITY INFO ioctl. */ 59127474Stjrstruct tws_compatibility_packet { 60127474Stjr u_int8_t driver_version[32];/* driver version */ 61127474Stjr u_int16_t working_srl; /* driver & firmware negotiated srl */ 62127474Stjr u_int16_t working_branch; /* branch # of the firmware that the 63127474Stjr driver is compatible with */ 64127474Stjr u_int16_t working_build; /* build # of the firmware that the 65127474Stjr driver is compatible with */ 66127474Stjr u_int16_t driver_srl_high;/* highest driver supported srl */ 67127474Stjr u_int16_t driver_branch_high;/* highest driver supported branch */ 68127474Stjr u_int16_t driver_build_high;/* highest driver supported build */ 69127474Stjr u_int16_t driver_srl_low;/* lowest driver supported srl */ 70127474Stjr u_int16_t driver_branch_low;/* lowest driver supported branch */ 71127474Stjr u_int16_t driver_build_low;/* lowest driver supported build */ 72127474Stjr u_int16_t fw_on_ctlr_srl; /* srl of running firmware */ 73127474Stjr u_int16_t fw_on_ctlr_branch;/* branch # of running firmware */ 74127474Stjr u_int16_t fw_on_ctlr_build;/* build # of running firmware */ 75127474Stjr}; 76127474Stjr 77127474Stjr 78127474Stjr/* Driver understandable part of the ioctl packet built by the API. */ 79127474Stjrstruct tws_driver_packet { 80174990Sache u_int32_t control_code; 81127474Stjr u_int32_t status; 82134337Stjr u_int32_t unique_id; 83134337Stjr u_int32_t sequence_id; 84134337Stjr u_int32_t os_status; 85134337Stjr u_int32_t buffer_length; 86134337Stjr}; 87134337Stjr 88134337Stjr/* ioctl packet built by the API. */ 89134337Stjrstruct tws_ioctl_packet { 90134337Stjr struct tws_driver_packet driver_pkt; 91134337Stjr char padding[488]; 92134337Stjr struct tws_command_packet cmd_pkt; 93134337Stjr char data_buf[1]; 94127474Stjr}; 95127474Stjr 96127474Stjr#pragma pack() 97127474Stjr 98127474Stjr 99127474Stjr#pragma pack(1) 100127474Stjr/* 101127474Stjr * We need the structure below to ensure that the first byte of 102127474Stjr * data_buf is not overwritten by the kernel, after we return 103 * from the ioctl call. Note that cmd_pkt has been reduced 104 * to an array of 1024 bytes even though it's actually 2048 bytes 105 * in size. This is because, we don't expect requests from user 106 * land requiring 2048 (273 sg elements) byte cmd pkts. 107 */ 108struct tws_ioctl_no_data_buf { 109 struct tws_driver_packet driver_pkt; 110 void *pdata; /* points to data_buf */ 111 char padding[488 - sizeof(void *)]; 112 struct tws_command_packet cmd_pkt; 113}; 114 115#pragma pack() 116 117 118#include <sys/ioccom.h> 119 120#pragma pack(1) 121 122struct tws_ioctl_with_payload { 123 struct tws_driver_packet driver_pkt; 124 char padding[488]; 125 struct tws_command_packet cmd_pkt; 126 union { 127 struct tws_event_packet event_pkt; 128 struct tws_lock_packet lock_pkt; 129 struct tws_compatibility_packet compat_pkt; 130 char data_buf[1]; 131 } payload; 132}; 133 134#pragma pack() 135 136/* ioctl cmds */ 137 138#define TWS_IOCTL_SCAN_BUS \ 139 _IO('T', 200) 140#define TWS_IOCTL_FIRMWARE_PASS_THROUGH \ 141 _IOWR('T', 202, struct tws_ioctl_no_data_buf) 142#define TWS_IOCTL_GET_FIRST_EVENT \ 143 _IOWR('T', 203, struct tws_ioctl_with_payload) 144#define TWS_IOCTL_GET_LAST_EVENT \ 145 _IOWR('T', 204, struct tws_ioctl_with_payload) 146#define TWS_IOCTL_GET_NEXT_EVENT \ 147 _IOWR('T', 205, struct tws_ioctl_with_payload) 148#define TWS_IOCTL_GET_PREVIOUS_EVENT \ 149 _IOWR('T', 206, struct tws_ioctl_with_payload) 150#define TWS_IOCTL_GET_LOCK \ 151 _IOWR('T', 207, struct tws_ioctl_with_payload) 152#define TWS_IOCTL_RELEASE_LOCK \ 153 _IOWR('T', 208, struct tws_ioctl_with_payload) 154#define TWS_IOCTL_GET_COMPATIBILITY_INFO \ 155 _IOWR('T', 209, struct tws_ioctl_with_payload) 156 157