/* linux/drivers/scsi/esas2r/atioctl.h
* ATTO IOCTL Handling
*
* Copyright (c) 2001-2013 ATTO Technology, Inc.
* (mailto:linuxdrivers@attotech.com)
*/
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
/*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* NO WARRANTY
* THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR
* CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT
* LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is
* solely responsible for determining the appropriateness of using and
* distributing the Program and assumes all risks associated with its
* exercise of rights under this Agreement, including but not limited to
* the risks and costs of program errors, damage to or loss of data,
* programs or equipment, and unavailability or interruption of operations.
*
* DISCLAIMER OF LIABILITY
* NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED
* HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=*/
#include "atvda.h"
#ifndef ATIOCTL_H
#define ATIOCTL_H
#define EXPRESS_IOCTL_SIGNATURE "Express"
#define EXPRESS_IOCTL_SIGNATURE_SIZE 8
/* structure definitions for IOCTls */
struct __packed atto_express_ioctl_header {
u8 signature[EXPRESS_IOCTL_SIGNATURE_SIZE];
u8 return_code;
#define IOCTL_SUCCESS 0
#define IOCTL_ERR_INVCMD 101
#define IOCTL_INIT_FAILED 102
#define IOCTL_NOT_IMPLEMENTED 103
#define IOCTL_BAD_CHANNEL 104
#define IOCTL_TARGET_OVERRUN 105
#define IOCTL_TARGET_NOT_ENABLED 106
#define IOCTL_BAD_FLASH_IMGTYPE 107
#define IOCTL_OUT_OF_RESOURCES 108
#define IOCTL_GENERAL_ERROR 109
#define IOCTL_INVALID_PARAM 110
u8 channel;
u8 retries;
u8 pad[5];
};
/*
* NOTE - if channel == 0xFF, the request is
* handled on the adapter it came in on.
*/
#define MAX_NODE_NAMES 256
struct __packed atto_firmware_rw_request {
u8 function;
#define FUNC_FW_DOWNLOAD 0x09
#define FUNC_FW_UPLOAD 0x12
u8 img_type;
#define FW_IMG_FW 0x01
#define FW_IMG_BIOS 0x02
#define FW_IMG_NVR 0x03
#define FW_IMG_RAW 0x04
#define FW_IMG_FM_API 0x05
#define FW_IMG_FS_API 0x06
u8 pad[2];
u32 img_offset;
u32 img_size;
u8 image[0x80000];
};
struct __packed atto_param_rw_request {
u16 code;
char data_buffer[512];
};
#define MAX_CHANNEL 256
struct __packed atto_channel_list {
u32 num_channels;
u8 channel[MAX_CHANNEL];
};
struct __packed atto_channel_info {
u8 major_rev;
u8 minor_rev;
u8 IRQ;
u8 revision_id;
u8 pci_bus;
u8 pci_dev_func;
u8 core_rev;
u8 host_no;
u16 device_id;
u16 vendor_id;
u16 ven_dev_id;
u8 pad[3];
u32 hbaapi_rev;
};
/*
* CSMI control codes
* class independent
*/
#define CSMI_CC_GET_DRVR_INFO 1
#define CSMI_CC_GET_CNTLR_CFG 2
#define CSMI_CC_GET_CNTLR_STS 3
#define CSMI_CC_FW_DOWNLOAD 4
/* RAID class */
#define CSMI_CC_GET_RAID_INFO 10
#define CSMI_CC_GET_RAID_CFG 11
/* HBA class */
#define CSMI_CC_GET_PHY_INFO 20
#define CSMI_CC_SET_PHY_INFO 21
#define CSMI_CC_GET_LINK_ERRORS 22
#define CSMI_CC_SMP_PASSTHRU 23
#define CSMI_CC_SSP_PASSTHRU 24
#define CSMI_CC_STP_PASSTHRU 25
#define CSMI_CC_GET_SATA_SIG 26
#define CSMI_CC_GET_SCSI_ADDR 27
#define CSMI_CC_GET_DEV_ADDR 28
#define CSMI_CC_TASK_MGT 29
#define CSMI_CC_GET_CONN_INFO 30
/* PHY class */
#define CSMI_CC_PHY_CTRL 60
/*
* CSMI status codes
* class independent
*/
#define CSMI_STS_SUCCESS 0
#define CSMI_STS_FAILED 1
#define CSMI_STS_BAD_CTRL_CODE 2
#define CSMI_STS_INV_PARAM 3
#define CSMI_STS_WRITE_ATTEMPTED 4
/* RAID class */
#define CSMI_STS_INV_RAID_SET 1000
/* HBA class */
#define CSMI_STS_PHY_CHANGED CSMI_STS_SUCCESS
#define CSMI_STS_PHY_UNCHANGEABLE 2000
#define CSMI_STS_INV_LINK_RATE 2001
#define CSMI_STS_INV_PHY 2002
#define CSMI_STS_INV_PHY_FOR_PORT 2003
#define CSMI_STS_PHY_UNSELECTABLE 2004
#define CSMI_STS_SELECT_PHY_OR_PORT 2005
#define CSMI_STS_INV_PORT 2006
#define CSMI_STS_PORT_UNSELECTABLE 2007
#define CSMI_STS_CONNECTION_FAILED 2008
#define CSMI_STS_NO_SATA_DEV 2009
#define CSMI_STS_NO_SATA_SIGNATURE 2010
#define CSMI_STS_SCSI_EMULATION 2011
#define CSMI_STS_NOT_AN_END_DEV 2012
#define CSMI_STS_NO_SCSI_ADDR 2013
#d