mpr_ioctl.h revision 265236
1265236Sken/*- 2265236Sken * Copyright (c) 2008 Yahoo!, Inc. 3265236Sken * All rights reserved. 4265236Sken * Written by: John Baldwin <jhb@FreeBSD.org> 5265236Sken * 6265236Sken * Redistribution and use in source and binary forms, with or without 7265236Sken * modification, are permitted provided that the following conditions 8265236Sken * are met: 9265236Sken * 1. Redistributions of source code must retain the above copyright 10265236Sken * notice, this list of conditions and the following disclaimer. 11265236Sken * 2. Redistributions in binary form must reproduce the above copyright 12265236Sken * notice, this list of conditions and the following disclaimer in the 13265236Sken * documentation and/or other materials provided with the distribution. 14265236Sken * 3. Neither the name of the author nor the names of any co-contributors 15265236Sken * may be used to endorse or promote products derived from this software 16265236Sken * without specific prior written permission. 17265236Sken * 18265236Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 19265236Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20265236Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21265236Sken * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 22265236Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23265236Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 24265236Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25265236Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 26265236Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27265236Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28265236Sken * SUCH DAMAGE. 29265236Sken * 30265236Sken * LSI MPT-Fusion Host Adapter FreeBSD userland interface 31265236Sken * 32265236Sken * $FreeBSD: head/sys/dev/mpr/mpr_ioctl.h 265236 2014-05-02 20:25:09Z ken $ 33265236Sken */ 34265236Sken/*- 35265236Sken * Copyright (c) 2011-2014 LSI Corp. 36265236Sken * All rights reserved. 37265236Sken * 38265236Sken * Redistribution and use in source and binary forms, with or without 39265236Sken * modification, are permitted provided that the following conditions 40265236Sken * are met: 41265236Sken * 1. Redistributions of source code must retain the above copyright 42265236Sken * notice, this list of conditions and the following disclaimer. 43265236Sken * 2. Redistributions in binary form must reproduce the above copyright 44265236Sken * notice, this list of conditions and the following disclaimer in the 45265236Sken * documentation and/or other materials provided with the distribution. 46265236Sken * 47265236Sken * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 48265236Sken * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 49265236Sken * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 50265236Sken * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 51265236Sken * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 52265236Sken * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 53265236Sken * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 54265236Sken * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 55265236Sken * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 56265236Sken * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 57265236Sken * SUCH DAMAGE. 58265236Sken * 59265236Sken * LSI MPT-Fusion Host Adapter FreeBSD 60265236Sken * 61265236Sken * $FreeBSD: head/sys/dev/mpr/mpr_ioctl.h 265236 2014-05-02 20:25:09Z ken $ 62265236Sken */ 63265236Sken 64265236Sken#ifndef _MPR_IOCTL_H_ 65265236Sken#define _MPR_IOCTL_H_ 66265236Sken 67265236Sken#include <dev/mpr/mpi/mpi2_type.h> 68265236Sken#include <dev/mpr/mpi/mpi2.h> 69265236Sken#include <dev/mpr/mpi/mpi2_cnfg.h> 70265236Sken#include <dev/mpr/mpi/mpi2_sas.h> 71265236Sken 72265236Sken/* 73265236Sken * For the read header requests, the header should include the page 74265236Sken * type or extended page type, page number, and page version. The 75265236Sken * buffer and length are unused. The completed header is returned in 76265236Sken * the 'header' member. 77265236Sken * 78265236Sken * For the read page and write page requests, 'buf' should point to a 79265236Sken * buffer of 'len' bytes which holds the entire page (including the 80265236Sken * header). 81265236Sken * 82265236Sken * All requests specify the page address in 'page_address'. 83265236Sken */ 84265236Skenstruct mpr_cfg_page_req { 85265236Sken MPI2_CONFIG_PAGE_HEADER header; 86265236Sken uint32_t page_address; 87265236Sken void *buf; 88265236Sken int len; 89265236Sken uint16_t ioc_status; 90265236Sken}; 91265236Sken 92265236Skenstruct mpr_ext_cfg_page_req { 93265236Sken MPI2_CONFIG_EXTENDED_PAGE_HEADER header; 94265236Sken uint32_t page_address; 95265236Sken void *buf; 96265236Sken int len; 97265236Sken uint16_t ioc_status; 98265236Sken}; 99265236Sken 100265236Skenstruct mpr_raid_action { 101265236Sken uint8_t action; 102265236Sken uint8_t volume_bus; 103265236Sken uint8_t volume_id; 104265236Sken uint8_t phys_disk_num; 105265236Sken uint32_t action_data_word; 106265236Sken void *buf; 107265236Sken int len; 108265236Sken uint32_t volume_status; 109265236Sken uint32_t action_data[4]; 110265236Sken uint16_t action_status; 111265236Sken uint16_t ioc_status; 112265236Sken uint8_t write; 113265236Sken}; 114265236Sken 115265236Skenstruct mpr_usr_command { 116265236Sken void *req; 117265236Sken uint32_t req_len; 118265236Sken void *rpl; 119265236Sken uint32_t rpl_len; 120265236Sken void *buf; 121265236Sken int len; 122265236Sken uint32_t flags; 123265236Sken}; 124265236Sken 125265236Skentypedef struct mpr_pci_bits 126265236Sken{ 127265236Sken union { 128265236Sken struct { 129265236Sken uint32_t DeviceNumber :5; 130265236Sken uint32_t FunctionNumber :3; 131265236Sken uint32_t BusNumber :24; 132265236Sken } bits; 133265236Sken uint32_t AsDWORD; 134265236Sken } u; 135265236Sken uint32_t PciSegmentId; 136265236Sken} mpr_pci_bits_t; 137265236Sken 138265236Sken/* 139265236Sken * The following is the MPRIOCTL_GET_ADAPTER_DATA data structure. This data 140265236Sken * structure is setup so that we hopefully are properly aligned for both 141265236Sken * 32-bit and 64-bit mode applications. 142265236Sken * 143265236Sken * Adapter Type - Value = 6 = SCSI Protocol through SAS-3 adapter 144265236Sken * 145265236Sken * MPI Port Number - The PCI Function number for this device 146265236Sken * 147265236Sken * PCI Device HW Id - The PCI device number for this device 148265236Sken * 149265236Sken */ 150265236Sken#define MPRIOCTL_ADAPTER_TYPE_SAS3 6 151265236Skentypedef struct mpr_adapter_data 152265236Sken{ 153265236Sken uint32_t StructureLength; 154265236Sken uint32_t AdapterType; 155265236Sken uint32_t MpiPortNumber; 156265236Sken uint32_t PCIDeviceHwId; 157265236Sken uint32_t PCIDeviceHwRev; 158265236Sken uint32_t SubSystemId; 159265236Sken uint32_t SubsystemVendorId; 160265236Sken uint32_t Reserved1; 161265236Sken uint32_t MpiFirmwareVersion; 162265236Sken uint32_t BiosVersion; 163265236Sken uint8_t DriverVersion[32]; 164265236Sken uint8_t Reserved2; 165265236Sken uint8_t ScsiId; 166265236Sken uint16_t Reserved3; 167265236Sken mpr_pci_bits_t PciInformation; 168265236Sken} mpr_adapter_data_t; 169265236Sken 170265236Sken 171265236Skentypedef struct mpr_update_flash 172265236Sken{ 173265236Sken uint64_t PtrBuffer; 174265236Sken uint32_t ImageChecksum; 175265236Sken uint32_t ImageOffset; 176265236Sken uint32_t ImageSize; 177265236Sken uint32_t ImageType; 178265236Sken} mpr_update_flash_t; 179265236Sken 180265236Sken 181265236Sken#define MPR_PASS_THRU_DIRECTION_NONE 0 182265236Sken#define MPR_PASS_THRU_DIRECTION_READ 1 183265236Sken#define MPR_PASS_THRU_DIRECTION_WRITE 2 184265236Sken#define MPR_PASS_THRU_DIRECTION_BOTH 3 185265236Sken 186265236Skentypedef struct mpr_pass_thru 187265236Sken{ 188265236Sken uint64_t PtrRequest; 189265236Sken uint64_t PtrReply; 190265236Sken uint64_t PtrData; 191265236Sken uint32_t RequestSize; 192265236Sken uint32_t ReplySize; 193265236Sken uint32_t DataSize; 194265236Sken uint32_t DataDirection; 195265236Sken uint64_t PtrDataOut; 196265236Sken uint32_t DataOutSize; 197265236Sken uint32_t Timeout; 198265236Sken} mpr_pass_thru_t; 199265236Sken 200265236Sken 201265236Sken/* 202265236Sken * Event queue defines 203265236Sken */ 204265236Sken#define MPR_EVENT_QUEUE_SIZE (50) /* Max Events stored in driver */ 205265236Sken#define MPR_MAX_EVENT_DATA_LENGTH (48) /* Size of each event in Dwords */ 206265236Sken 207265236Skentypedef struct mpr_event_query 208265236Sken{ 209265236Sken uint16_t Entries; 210265236Sken uint16_t Reserved; 211265236Sken uint32_t Types[4]; 212265236Sken} mpr_event_query_t; 213265236Sken 214265236Skentypedef struct mpr_event_enable 215265236Sken{ 216265236Sken uint32_t Types[4]; 217265236Sken} mpr_event_enable_t; 218265236Sken 219265236Sken/* 220265236Sken * Event record entry for ioctl. 221265236Sken */ 222265236Skentypedef struct mpr_event_entry 223265236Sken{ 224265236Sken uint32_t Type; 225265236Sken uint32_t Number; 226265236Sken uint32_t Data[MPR_MAX_EVENT_DATA_LENGTH]; 227265236Sken} mpr_event_entry_t; 228265236Sken 229265236Skentypedef struct mpr_event_report 230265236Sken{ 231265236Sken uint32_t Size; 232265236Sken uint64_t PtrEvents; 233265236Sken} mpr_event_report_t; 234265236Sken 235265236Sken 236265236Skentypedef struct mpr_pci_info 237265236Sken{ 238265236Sken uint32_t BusNumber; 239265236Sken uint8_t DeviceNumber; 240265236Sken uint8_t FunctionNumber; 241265236Sken uint16_t InterruptVector; 242265236Sken uint8_t PciHeader[256]; 243265236Sken} mpr_pci_info_t; 244265236Sken 245265236Sken 246265236Skentypedef struct mpr_diag_action 247265236Sken{ 248265236Sken uint32_t Action; 249265236Sken uint32_t Length; 250265236Sken uint64_t PtrDiagAction; 251265236Sken uint32_t ReturnCode; 252265236Sken} mpr_diag_action_t; 253265236Sken 254265236Sken#define MPR_FW_DIAGNOSTIC_UID_NOT_FOUND (0xFF) 255265236Sken 256265236Sken#define MPR_FW_DIAG_NEW (0x806E6577) 257265236Sken 258265236Sken#define MPR_FW_DIAG_TYPE_REGISTER (0x00000001) 259265236Sken#define MPR_FW_DIAG_TYPE_UNREGISTER (0x00000002) 260265236Sken#define MPR_FW_DIAG_TYPE_QUERY (0x00000003) 261265236Sken#define MPR_FW_DIAG_TYPE_READ_BUFFER (0x00000004) 262265236Sken#define MPR_FW_DIAG_TYPE_RELEASE (0x00000005) 263265236Sken 264265236Sken#define MPR_FW_DIAG_INVALID_UID (0x00000000) 265265236Sken 266265236Sken#define MPR_DIAG_SUCCESS 0 267265236Sken#define MPR_DIAG_FAILURE 1 268265236Sken 269265236Sken#define MPR_FW_DIAG_ERROR_SUCCESS (0x00000000) 270265236Sken#define MPR_FW_DIAG_ERROR_FAILURE (0x00000001) 271265236Sken#define MPR_FW_DIAG_ERROR_INVALID_PARAMETER (0x00000002) 272265236Sken#define MPR_FW_DIAG_ERROR_POST_FAILED (0x00000010) 273265236Sken#define MPR_FW_DIAG_ERROR_INVALID_UID (0x00000011) 274265236Sken#define MPR_FW_DIAG_ERROR_RELEASE_FAILED (0x00000012) 275265236Sken#define MPR_FW_DIAG_ERROR_NO_BUFFER (0x00000013) 276265236Sken#define MPR_FW_DIAG_ERROR_ALREADY_RELEASED (0x00000014) 277265236Sken 278265236Sken 279265236Skentypedef struct mpr_fw_diag_register 280265236Sken{ 281265236Sken uint8_t ExtendedType; 282265236Sken uint8_t BufferType; 283265236Sken uint16_t ApplicationFlags; 284265236Sken uint32_t DiagnosticFlags; 285265236Sken uint32_t ProductSpecific[23]; 286265236Sken uint32_t RequestedBufferSize; 287265236Sken uint32_t UniqueId; 288265236Sken} mpr_fw_diag_register_t; 289265236Sken 290265236Skentypedef struct mpr_fw_diag_unregister 291265236Sken{ 292265236Sken uint32_t UniqueId; 293265236Sken} mpr_fw_diag_unregister_t; 294265236Sken 295265236Sken#define MPR_FW_DIAG_FLAG_APP_OWNED (0x0001) 296265236Sken#define MPR_FW_DIAG_FLAG_BUFFER_VALID (0x0002) 297265236Sken#define MPR_FW_DIAG_FLAG_FW_BUFFER_ACCESS (0x0004) 298265236Sken 299265236Skentypedef struct mpr_fw_diag_query 300265236Sken{ 301265236Sken uint8_t ExtendedType; 302265236Sken uint8_t BufferType; 303265236Sken uint16_t ApplicationFlags; 304265236Sken uint32_t DiagnosticFlags; 305265236Sken uint32_t ProductSpecific[23]; 306265236Sken uint32_t TotalBufferSize; 307265236Sken uint32_t DriverAddedBufferSize; 308265236Sken uint32_t UniqueId; 309265236Sken} mpr_fw_diag_query_t; 310265236Sken 311265236Skentypedef struct mpr_fw_diag_release 312265236Sken{ 313265236Sken uint32_t UniqueId; 314265236Sken} mpr_fw_diag_release_t; 315265236Sken 316265236Sken#define MPR_FW_DIAG_FLAG_REREGISTER (0x0001) 317265236Sken#define MPR_FW_DIAG_FLAG_FORCE_RELEASE (0x0002) 318265236Sken 319265236Skentypedef struct mpr_diag_read_buffer 320265236Sken{ 321265236Sken uint8_t Status; 322265236Sken uint8_t Reserved; 323265236Sken uint16_t Flags; 324265236Sken uint32_t StartingOffset; 325265236Sken uint32_t BytesToRead; 326265236Sken uint32_t UniqueId; 327265236Sken uint64_t PtrDataBuffer; 328265236Sken} mpr_diag_read_buffer_t; 329265236Sken 330265236Sken/* 331265236Sken * Register Access 332265236Sken */ 333265236Sken#define REG_IO_READ 1 334265236Sken#define REG_IO_WRITE 2 335265236Sken#define REG_MEM_READ 3 336265236Sken#define REG_MEM_WRITE 4 337265236Sken 338265236Skentypedef struct mpr_reg_access 339265236Sken{ 340265236Sken uint32_t Command; 341265236Sken uint32_t RegOffset; 342265236Sken uint32_t RegData; 343265236Sken} mpr_reg_access_t; 344265236Sken 345265236Skentypedef struct mpr_btdh_mapping 346265236Sken{ 347265236Sken uint16_t TargetID; 348265236Sken uint16_t Bus; 349265236Sken uint16_t DevHandle; 350265236Sken uint16_t Reserved; 351265236Sken} mpr_btdh_mapping_t; 352265236Sken 353265236Sken#define MPRIO_MPR_COMMAND_FLAG_VERBOSE 0x01 354265236Sken#define MPRIO_MPR_COMMAND_FLAG_DEBUG 0x02 355265236Sken#define MPRIO_READ_CFG_HEADER _IOWR('M', 200, struct mpr_cfg_page_req) 356265236Sken#define MPRIO_READ_CFG_PAGE _IOWR('M', 201, struct mpr_cfg_page_req) 357265236Sken#define MPRIO_READ_EXT_CFG_HEADER _IOWR('M', 202, struct mpr_ext_cfg_page_req) 358265236Sken#define MPRIO_READ_EXT_CFG_PAGE _IOWR('M', 203, struct mpr_ext_cfg_page_req) 359265236Sken#define MPRIO_WRITE_CFG_PAGE _IOWR('M', 204, struct mpr_cfg_page_req) 360265236Sken#define MPRIO_RAID_ACTION _IOWR('M', 205, struct mpr_raid_action) 361265236Sken#define MPRIO_MPR_COMMAND _IOWR('M', 210, struct mpr_usr_command) 362265236Sken 363265236Sken#define MPTIOCTL ('I') 364265236Sken#define MPTIOCTL_GET_ADAPTER_DATA _IOWR(MPTIOCTL, 1,\ 365265236Sken struct mpr_adapter_data) 366265236Sken#define MPTIOCTL_UPDATE_FLASH _IOWR(MPTIOCTL, 2,\ 367265236Sken struct mpr_update_flash) 368265236Sken#define MPTIOCTL_RESET_ADAPTER _IO(MPTIOCTL, 3) 369265236Sken#define MPTIOCTL_PASS_THRU _IOWR(MPTIOCTL, 4,\ 370265236Sken struct mpr_pass_thru) 371265236Sken#define MPTIOCTL_EVENT_QUERY _IOWR(MPTIOCTL, 5,\ 372265236Sken struct mpr_event_query) 373265236Sken#define MPTIOCTL_EVENT_ENABLE _IOWR(MPTIOCTL, 6,\ 374265236Sken struct mpr_event_enable) 375265236Sken#define MPTIOCTL_EVENT_REPORT _IOWR(MPTIOCTL, 7,\ 376265236Sken struct mpr_event_report) 377265236Sken#define MPTIOCTL_GET_PCI_INFO _IOWR(MPTIOCTL, 8,\ 378265236Sken struct mpr_pci_info) 379265236Sken#define MPTIOCTL_DIAG_ACTION _IOWR(MPTIOCTL, 9,\ 380265236Sken struct mpr_diag_action) 381265236Sken#define MPTIOCTL_REG_ACCESS _IOWR(MPTIOCTL, 10,\ 382265236Sken struct mpr_reg_access) 383265236Sken#define MPTIOCTL_BTDH_MAPPING _IOWR(MPTIOCTL, 11,\ 384265236Sken struct mpr_btdh_mapping) 385265236Sken 386265236Sken#endif /* !_MPR_IOCTL_H_ */ 387