mfi_ioctl.h revision 184897
1258945Sroberto/*- 2258945Sroberto * Copyright (c) 2006 IronPort Systems 3258945Sroberto * All rights reserved. 4258945Sroberto * 5258945Sroberto * Redistribution and use in source and binary forms, with or without 6258945Sroberto * modification, are permitted provided that the following conditions 7258945Sroberto * are met: 8258945Sroberto * 1. Redistributions of source code must retain the above copyright 9258945Sroberto * notice, this list of conditions and the following disclaimer. 10258945Sroberto * 2. Redistributions in binary form must reproduce the above copyright 11258945Sroberto * notice, this list of conditions and the following disclaimer in the 12258945Sroberto * documentation and/or other materials provided with the distribution. 13258945Sroberto * 14258945Sroberto * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15258945Sroberto * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16258945Sroberto * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17258945Sroberto * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18258945Sroberto * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19258945Sroberto * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20258945Sroberto * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21258945Sroberto * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22258945Sroberto * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23258945Sroberto * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24258945Sroberto * SUCH DAMAGE. 25258945Sroberto */ 26258945Sroberto 27258945Sroberto#include <sys/cdefs.h> 28258945Sroberto__FBSDID("$FreeBSD: head/sys/dev/mfi/mfi_ioctl.h 184897 2008-11-12 22:44:50Z ambrisko $"); 29258945Sroberto 30258945Sroberto#if defined(__amd64__) /* Assume amd64 wants 32 bit Linux */ 31258945Srobertostruct iovec32 { 32258945Sroberto u_int32_t iov_base; 33258945Sroberto int iov_len; 34258945Sroberto}; 35258945Sroberto#endif 36258945Sroberto 37258945Sroberto#define MFIQ_FREE 0 38258945Sroberto#define MFIQ_BIO 1 39258945Sroberto#define MFIQ_READY 2 40258945Sroberto#define MFIQ_BUSY 3 41258945Sroberto#define MFIQ_COUNT 4 42258945Sroberto 43258945Srobertostruct mfi_qstat { 44258945Sroberto uint32_t q_length; 45258945Sroberto uint32_t q_max; 46258945Sroberto}; 47258945Sroberto 48258945Srobertounion mfi_statrequest { 49258945Sroberto uint32_t ms_item; 50258945Sroberto struct mfi_qstat ms_qstat; 51258945Sroberto}; 52258945Sroberto 53258945Sroberto#define MAX_SPACE_FOR_SENSE_PTR 32 54258945Srobertounion mfi_sense_ptr { 55258945Sroberto uint8_t sense_ptr_data[MAX_SPACE_FOR_SENSE_PTR]; 56258945Sroberto void *user_space; 57258945Sroberto struct { 58258945Sroberto uint32_t low; 59258945Sroberto uint32_t high; 60258945Sroberto } addr; 61258945Sroberto} __packed; 62258945Sroberto 63258945Sroberto#define MAX_IOCTL_SGE 16 64258945Sroberto 65258945Srobertostruct mfi_ioc_packet { 66258945Sroberto uint16_t mfi_adapter_no; 67258945Sroberto uint16_t mfi_pad1; 68258945Sroberto uint32_t mfi_sgl_off; 69258945Sroberto uint32_t mfi_sge_count; 70258945Sroberto uint32_t mfi_sense_off; 71258945Sroberto uint32_t mfi_sense_len; 72258945Sroberto union { 73258945Sroberto uint8_t raw[128]; 74258945Sroberto struct mfi_frame_header hdr; 75258945Sroberto } mfi_frame; 76258945Sroberto 77258945Sroberto struct iovec mfi_sgl[MAX_IOCTL_SGE]; 78258945Sroberto} __packed; 79258945Sroberto 80258945Sroberto#ifdef __amd64__ 81258945Srobertostruct mfi_ioc_packet32 { 82258945Sroberto uint16_t mfi_adapter_no; 83258945Sroberto uint16_t mfi_pad1; 84258945Sroberto uint32_t mfi_sgl_off; 85258945Sroberto uint32_t mfi_sge_count; 86258945Sroberto uint32_t mfi_sense_off; 87258945Sroberto uint32_t mfi_sense_len; 88258945Sroberto union { 89258945Sroberto uint8_t raw[128]; 90258945Sroberto struct mfi_frame_header hdr; 91258945Sroberto } mfi_frame; 92258945Sroberto 93258945Sroberto struct iovec32 mfi_sgl[MAX_IOCTL_SGE]; 94258945Sroberto} __packed; 95258945Sroberto#endif 96258945Sroberto 97258945Srobertostruct mfi_ioc_aen { 98258945Sroberto uint16_t aen_adapter_no; 99258945Sroberto uint16_t aen_pad1; 100258945Sroberto uint32_t aen_seq_num; 101258945Sroberto uint32_t aen_class_locale; 102258945Sroberto} __packed; 103258945Sroberto 104258945Sroberto#define MFI_CMD _IOWR('M', 1, struct mfi_ioc_packet) 105258945Sroberto#ifdef __amd64__ 106258945Sroberto#define MFI_CMD32 _IOWR('M', 1, struct mfi_ioc_packet32) 107258945Sroberto#endif 108258945Sroberto#define MFI_SET_AEN _IOW('M', 3, struct mfi_ioc_aen) 109258945Sroberto 110258945Sroberto#define MAX_LINUX_IOCTL_SGE 16 111258945Sroberto 112258945Srobertostruct mfi_linux_ioc_packet { 113258945Sroberto uint16_t lioc_adapter_no; 114258945Sroberto uint16_t lioc_pad1; 115258945Sroberto uint32_t lioc_sgl_off; 116258945Sroberto uint32_t lioc_sge_count; 117258945Sroberto uint32_t lioc_sense_off; 118258945Sroberto uint32_t lioc_sense_len; 119258945Sroberto union { 120258945Sroberto uint8_t raw[128]; 121258945Sroberto struct mfi_frame_header hdr; 122258945Sroberto } lioc_frame; 123258945Sroberto 124258945Sroberto#if defined(__amd64__) /* Assume amd64 wants 32 bit Linux */ 125258945Sroberto struct iovec32 lioc_sgl[MAX_LINUX_IOCTL_SGE]; 126258945Sroberto#else 127258945Sroberto struct iovec lioc_sgl[MAX_LINUX_IOCTL_SGE]; 128258945Sroberto#endif 129258945Sroberto} __packed; 130258945Sroberto 131258945Srobertostruct mfi_ioc_passthru { 132258945Sroberto struct mfi_dcmd_frame ioc_frame; 133258945Sroberto uint32_t buf_size; 134258945Sroberto uint8_t *buf; 135258945Sroberto} __packed; 136258945Sroberto 137258945Sroberto#ifdef __amd64__ 138258945Srobertostruct mfi_ioc_passthru32 { 139258945Sroberto struct mfi_dcmd_frame ioc_frame; 140258945Sroberto uint32_t buf_size; 141258945Sroberto uint32_t buf; 142258945Sroberto} __packed; 143258945Sroberto#endif 144258945Sroberto 145258945Sroberto#define MFIIO_STATS _IOWR('Q', 101, union mfi_statrequest) 146258945Sroberto#define MFIIO_PASSTHRU _IOWR('C', 102, struct mfi_ioc_passthru) 147258945Sroberto#ifdef __amd64__ 148258945Sroberto#define MFIIO_PASSTHRU32 _IOWR('C', 102, struct mfi_ioc_passthru32) 149258945Sroberto#endif 150258945Sroberto 151258945Srobertostruct mfi_linux_ioc_aen { 152258945Sroberto uint16_t laen_adapter_no; 153258945Sroberto uint16_t laen_pad1; 154258945Sroberto uint32_t laen_seq_num; 155258945Sroberto uint32_t laen_class_locale; 156258945Sroberto} __packed; 157258945Sroberto 158258945Srobertostruct mfi_query_disk { 159258945Sroberto uint8_t array_id; 160258945Sroberto uint8_t present; 161258945Sroberto uint8_t open; 162258945Sroberto uint8_t reserved; /* reserved for future use */ 163258945Sroberto char devname[SPECNAMELEN + 1]; 164258945Sroberto} __packed; 165258945Sroberto 166258945Sroberto#define MFIIO_QUERY_DISK _IOWR('Q', 102, struct mfi_query_disk) 167258945Sroberto 168258945Sroberto/* 169258945Sroberto * Create a second set so the FreeBSD native ioctl doesn't 170258945Sroberto * conflict in FreeBSD ioctl handler. Translate in mfi_linux.c. 171258945Sroberto */ 172258945Sroberto#define MFI_LINUX_CMD 0xc1144d01 173258945Sroberto#define MFI_LINUX_SET_AEN 0x400c4d03 174258945Sroberto#define MFI_LINUX_CMD_2 0xc1144d02 175258945Sroberto#define MFI_LINUX_SET_AEN_2 0x400c4d04 176258945Sroberto