1d3c7b9a0SKenneth D. Merry /*- 27282444bSPedro F. Giffuni * SPDX-License-Identifier: BSD-3-Clause 37282444bSPedro F. Giffuni * 4d3c7b9a0SKenneth D. Merry * Copyright (c) 2008 Yahoo!, Inc. 5d3c7b9a0SKenneth D. Merry * All rights reserved. 6d3c7b9a0SKenneth D. Merry * Written by: John Baldwin <jhb@FreeBSD.org> 7d3c7b9a0SKenneth D. Merry * 8d3c7b9a0SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 9d3c7b9a0SKenneth D. Merry * modification, are permitted provided that the following conditions 10d3c7b9a0SKenneth D. Merry * are met: 11d3c7b9a0SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright 12d3c7b9a0SKenneth D. Merry * notice, this list of conditions and the following disclaimer. 13d3c7b9a0SKenneth D. Merry * 2. Redistributions in binary form must reproduce the above copyright 14d3c7b9a0SKenneth D. Merry * notice, this list of conditions and the following disclaimer in the 15d3c7b9a0SKenneth D. Merry * documentation and/or other materials provided with the distribution. 16d3c7b9a0SKenneth D. Merry * 3. Neither the name of the author nor the names of any co-contributors 17d3c7b9a0SKenneth D. Merry * may be used to endorse or promote products derived from this software 18d3c7b9a0SKenneth D. Merry * without specific prior written permission. 19d3c7b9a0SKenneth D. Merry * 20d3c7b9a0SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 21d3c7b9a0SKenneth D. Merry * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22d3c7b9a0SKenneth D. Merry * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 23d3c7b9a0SKenneth D. Merry * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 24d3c7b9a0SKenneth D. Merry * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25d3c7b9a0SKenneth D. Merry * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 26d3c7b9a0SKenneth D. Merry * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 27d3c7b9a0SKenneth D. Merry * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 28d3c7b9a0SKenneth D. Merry * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 29d3c7b9a0SKenneth D. Merry * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30d3c7b9a0SKenneth D. Merry * SUCH DAMAGE. 31d3c7b9a0SKenneth D. Merry * 32ef065d89SStephen McConnell * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD userland interface 33d3c7b9a0SKenneth D. Merry */ 34d043c564SKenneth D. Merry /*- 35ef065d89SStephen McConnell * Copyright (c) 2011-2015 LSI Corp. 36ef065d89SStephen McConnell * Copyright (c) 2013-2015 Avago Technologies 37d043c564SKenneth D. Merry * All rights reserved. 38d043c564SKenneth D. Merry * 39d043c564SKenneth D. Merry * Redistribution and use in source and binary forms, with or without 40d043c564SKenneth D. Merry * modification, are permitted provided that the following conditions 41d043c564SKenneth D. Merry * are met: 42d043c564SKenneth D. Merry * 1. Redistributions of source code must retain the above copyright 43d043c564SKenneth D. Merry * notice, this list of conditions and the following disclaimer. 44d043c564SKenneth D. Merry * 2. Redistributions in binary form must reproduce the above copyright 45d043c564SKenneth D. Merry * notice, this list of conditions and the following disclaimer in the 46d043c564SKenneth D. Merry * documentation and/or other materials provided with the distribution. 47d043c564SKenneth D. Merry * 48d043c564SKenneth D. Merry * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 49d043c564SKenneth D. Merry * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 50d043c564SKenneth D. Merry * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 51d043c564SKenneth D. Merry * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 52d043c564SKenneth D. Merry * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 53d043c564SKenneth D. Merry * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 54d043c564SKenneth D. Merry * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 55d043c564SKenneth D. Merry * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 56d043c564SKenneth D. Merry * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 57d043c564SKenneth D. Merry * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 58d043c564SKenneth D. Merry * SUCH DAMAGE. 59d043c564SKenneth D. Merry * 60ef065d89SStephen McConnell * Avago Technologies (LSI) MPT-Fusion Host Adapter FreeBSD 61d043c564SKenneth D. Merry */ 62d3c7b9a0SKenneth D. Merry 63d3c7b9a0SKenneth D. Merry #ifndef _MPS_IOCTL_H_ 64d3c7b9a0SKenneth D. Merry #define _MPS_IOCTL_H_ 65d3c7b9a0SKenneth D. Merry 66d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2_type.h> 67d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2.h> 68d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2_cnfg.h> 69d3c7b9a0SKenneth D. Merry #include <dev/mps/mpi/mpi2_sas.h> 70d3c7b9a0SKenneth D. Merry 71d3c7b9a0SKenneth D. Merry /* 72d3c7b9a0SKenneth D. Merry * For the read header requests, the header should include the page 73d3c7b9a0SKenneth D. Merry * type or extended page type, page number, and page version. The 74d3c7b9a0SKenneth D. Merry * buffer and length are unused. The completed header is returned in 75d3c7b9a0SKenneth D. Merry * the 'header' member. 76d3c7b9a0SKenneth D. Merry * 77d3c7b9a0SKenneth D. Merry * For the read page and write page requests, 'buf' should point to a 78d3c7b9a0SKenneth D. Merry * buffer of 'len' bytes which holds the entire page (including the 79d3c7b9a0SKenneth D. Merry * header). 80d3c7b9a0SKenneth D. Merry * 81d3c7b9a0SKenneth D. Merry * All requests specify the page address in 'page_address'. 82d3c7b9a0SKenneth D. Merry */ 83d3c7b9a0SKenneth D. Merry struct mps_cfg_page_req { 84d3c7b9a0SKenneth D. Merry MPI2_CONFIG_PAGE_HEADER header; 85d3c7b9a0SKenneth D. Merry uint32_t page_address; 86d3c7b9a0SKenneth D. Merry void *buf; 87d3c7b9a0SKenneth D. Merry int len; 88d3c7b9a0SKenneth D. Merry uint16_t ioc_status; 89d3c7b9a0SKenneth D. Merry }; 90d3c7b9a0SKenneth D. Merry 91d3c7b9a0SKenneth D. Merry struct mps_ext_cfg_page_req { 92d3c7b9a0SKenneth D. Merry MPI2_CONFIG_EXTENDED_PAGE_HEADER header; 93d3c7b9a0SKenneth D. Merry uint32_t page_address; 94d3c7b9a0SKenneth D. Merry void *buf; 95d3c7b9a0SKenneth D. Merry int len; 96d3c7b9a0SKenneth D. Merry uint16_t ioc_status; 97d3c7b9a0SKenneth D. Merry }; 98d3c7b9a0SKenneth D. Merry 99d3c7b9a0SKenneth D. Merry struct mps_raid_action { 100d3c7b9a0SKenneth D. Merry uint8_t action; 101d3c7b9a0SKenneth D. Merry uint8_t volume_bus; 102d3c7b9a0SKenneth D. Merry uint8_t volume_id; 103d3c7b9a0SKenneth D. Merry uint8_t phys_disk_num; 104d3c7b9a0SKenneth D. Merry uint32_t action_data_word; 105d3c7b9a0SKenneth D. Merry void *buf; 106d3c7b9a0SKenneth D. Merry int len; 107d3c7b9a0SKenneth D. Merry uint32_t volume_status; 108d3c7b9a0SKenneth D. Merry uint32_t action_data[4]; 109d3c7b9a0SKenneth D. Merry uint16_t action_status; 110d3c7b9a0SKenneth D. Merry uint16_t ioc_status; 111d3c7b9a0SKenneth D. Merry uint8_t write; 112d3c7b9a0SKenneth D. Merry }; 113d3c7b9a0SKenneth D. Merry 114d3c7b9a0SKenneth D. Merry struct mps_usr_command { 115d3c7b9a0SKenneth D. Merry void *req; 116d3c7b9a0SKenneth D. Merry uint32_t req_len; 117d3c7b9a0SKenneth D. Merry void *rpl; 118d3c7b9a0SKenneth D. Merry uint32_t rpl_len; 119d3c7b9a0SKenneth D. Merry void *buf; 120d3c7b9a0SKenneth D. Merry int len; 121d3c7b9a0SKenneth D. Merry uint32_t flags; 122d3c7b9a0SKenneth D. Merry }; 123d3c7b9a0SKenneth D. Merry 124d043c564SKenneth D. Merry typedef struct mps_pci_bits 125d043c564SKenneth D. Merry { 126d043c564SKenneth D. Merry union { 127d043c564SKenneth D. Merry struct { 128d043c564SKenneth D. Merry uint32_t DeviceNumber :5; 129d043c564SKenneth D. Merry uint32_t FunctionNumber :3; 130d043c564SKenneth D. Merry uint32_t BusNumber :24; 131d043c564SKenneth D. Merry } bits; 132d043c564SKenneth D. Merry uint32_t AsDWORD; 133d043c564SKenneth D. Merry } u; 134d043c564SKenneth D. Merry uint32_t PciSegmentId; 135d043c564SKenneth D. Merry } mps_pci_bits_t; 136d043c564SKenneth D. Merry 137d043c564SKenneth D. Merry /* 138d043c564SKenneth D. Merry * The following is the MPSIOCTL_GET_ADAPTER_DATA data structure. This data 139d043c564SKenneth D. Merry * structure is setup so that we hopefully are properly aligned for both 140d043c564SKenneth D. Merry * 32-bit and 64-bit mode applications. 141d043c564SKenneth D. Merry * 142d043c564SKenneth D. Merry * Adapter Type - Value = 4 = SCSI Protocol through SAS-2 adapter 143d043c564SKenneth D. Merry * 144d043c564SKenneth D. Merry * MPI Port Number - The PCI Function number for this device 145d043c564SKenneth D. Merry * 146d043c564SKenneth D. Merry * PCI Device HW Id - The PCI device number for this device 147d043c564SKenneth D. Merry * 148d043c564SKenneth D. Merry */ 149d043c564SKenneth D. Merry #define MPSIOCTL_ADAPTER_TYPE_SAS2 4 150d043c564SKenneth D. Merry #define MPSIOCTL_ADAPTER_TYPE_SAS2_SSS6200 5 151d043c564SKenneth D. Merry typedef struct mps_adapter_data 152d043c564SKenneth D. Merry { 153d043c564SKenneth D. Merry uint32_t StructureLength; 154d043c564SKenneth D. Merry uint32_t AdapterType; 155d043c564SKenneth D. Merry uint32_t MpiPortNumber; 156d043c564SKenneth D. Merry uint32_t PCIDeviceHwId; 157d043c564SKenneth D. Merry uint32_t PCIDeviceHwRev; 158d043c564SKenneth D. Merry uint32_t SubSystemId; 159d043c564SKenneth D. Merry uint32_t SubsystemVendorId; 160d043c564SKenneth D. Merry uint32_t Reserved1; 161d043c564SKenneth D. Merry uint32_t MpiFirmwareVersion; 162d043c564SKenneth D. Merry uint32_t BiosVersion; 163d043c564SKenneth D. Merry uint8_t DriverVersion[32]; 164d043c564SKenneth D. Merry uint8_t Reserved2; 165d043c564SKenneth D. Merry uint8_t ScsiId; 166d043c564SKenneth D. Merry uint16_t Reserved3; 167d043c564SKenneth D. Merry mps_pci_bits_t PciInformation; 168d043c564SKenneth D. Merry } mps_adapter_data_t; 169d043c564SKenneth D. Merry 170d043c564SKenneth D. Merry typedef struct mps_update_flash 171d043c564SKenneth D. Merry { 172d043c564SKenneth D. Merry uint64_t PtrBuffer; 173d043c564SKenneth D. Merry uint32_t ImageChecksum; 174d043c564SKenneth D. Merry uint32_t ImageOffset; 175d043c564SKenneth D. Merry uint32_t ImageSize; 176d043c564SKenneth D. Merry uint32_t ImageType; 177d043c564SKenneth D. Merry } mps_update_flash_t; 178d043c564SKenneth D. Merry 179d043c564SKenneth D. Merry #define MPS_PASS_THRU_DIRECTION_NONE 0 180d043c564SKenneth D. Merry #define MPS_PASS_THRU_DIRECTION_READ 1 181d043c564SKenneth D. Merry #define MPS_PASS_THRU_DIRECTION_WRITE 2 182d043c564SKenneth D. Merry #define MPS_PASS_THRU_DIRECTION_BOTH 3 183d043c564SKenneth D. Merry 184d043c564SKenneth D. Merry typedef struct mps_pass_thru 185d043c564SKenneth D. Merry { 186d043c564SKenneth D. Merry uint64_t PtrRequest; 187d043c564SKenneth D. Merry uint64_t PtrReply; 188d043c564SKenneth D. Merry uint64_t PtrData; 189d043c564SKenneth D. Merry uint32_t RequestSize; 190d043c564SKenneth D. Merry uint32_t ReplySize; 191d043c564SKenneth D. Merry uint32_t DataSize; 192d043c564SKenneth D. Merry uint32_t DataDirection; 193d043c564SKenneth D. Merry uint64_t PtrDataOut; 194d043c564SKenneth D. Merry uint32_t DataOutSize; 195d043c564SKenneth D. Merry uint32_t Timeout; 196d043c564SKenneth D. Merry } mps_pass_thru_t; 197d043c564SKenneth D. Merry 198d043c564SKenneth D. Merry /* 199d043c564SKenneth D. Merry * Event queue defines 200d043c564SKenneth D. Merry */ 201d043c564SKenneth D. Merry #define MPS_EVENT_QUEUE_SIZE (50) /* Max Events stored in driver */ 202d043c564SKenneth D. Merry #define MPS_MAX_EVENT_DATA_LENGTH (48) /* Size of each event in Dwords */ 203d043c564SKenneth D. Merry 204d043c564SKenneth D. Merry typedef struct mps_event_query 205d043c564SKenneth D. Merry { 206d043c564SKenneth D. Merry uint16_t Entries; 207d043c564SKenneth D. Merry uint16_t Reserved; 208d043c564SKenneth D. Merry uint32_t Types[4]; 209d043c564SKenneth D. Merry } mps_event_query_t; 210d043c564SKenneth D. Merry 211d043c564SKenneth D. Merry typedef struct mps_event_enable 212d043c564SKenneth D. Merry { 213d043c564SKenneth D. Merry uint32_t Types[4]; 214d043c564SKenneth D. Merry } mps_event_enable_t; 215d043c564SKenneth D. Merry 216d043c564SKenneth D. Merry /* 217d043c564SKenneth D. Merry * Event record entry for ioctl. 218d043c564SKenneth D. Merry */ 219d043c564SKenneth D. Merry typedef struct mps_event_entry 220d043c564SKenneth D. Merry { 221d043c564SKenneth D. Merry uint32_t Type; 222d043c564SKenneth D. Merry uint32_t Number; 223d043c564SKenneth D. Merry uint32_t Data[MPS_MAX_EVENT_DATA_LENGTH]; 224d043c564SKenneth D. Merry } mps_event_entry_t; 225d043c564SKenneth D. Merry 226d043c564SKenneth D. Merry typedef struct mps_event_report 227d043c564SKenneth D. Merry { 228d043c564SKenneth D. Merry uint32_t Size; 229d043c564SKenneth D. Merry uint64_t PtrEvents; 230d043c564SKenneth D. Merry } mps_event_report_t; 231d043c564SKenneth D. Merry 232d043c564SKenneth D. Merry typedef struct mps_pci_info 233d043c564SKenneth D. Merry { 234d043c564SKenneth D. Merry uint32_t BusNumber; 235d043c564SKenneth D. Merry uint8_t DeviceNumber; 236d043c564SKenneth D. Merry uint8_t FunctionNumber; 237d043c564SKenneth D. Merry uint16_t InterruptVector; 238d043c564SKenneth D. Merry uint8_t PciHeader[256]; 239d043c564SKenneth D. Merry } mps_pci_info_t; 240d043c564SKenneth D. Merry 241d043c564SKenneth D. Merry typedef struct mps_diag_action 242d043c564SKenneth D. Merry { 243d043c564SKenneth D. Merry uint32_t Action; 244d043c564SKenneth D. Merry uint32_t Length; 245d043c564SKenneth D. Merry uint64_t PtrDiagAction; 246d043c564SKenneth D. Merry uint32_t ReturnCode; 247d043c564SKenneth D. Merry } mps_diag_action_t; 248d043c564SKenneth D. Merry 249d043c564SKenneth D. Merry #define MPS_FW_DIAGNOSTIC_UID_NOT_FOUND (0xFF) 250d043c564SKenneth D. Merry 251d043c564SKenneth D. Merry #define MPS_FW_DIAG_NEW (0x806E6577) 252d043c564SKenneth D. Merry 253d043c564SKenneth D. Merry #define MPS_FW_DIAG_TYPE_REGISTER (0x00000001) 254d043c564SKenneth D. Merry #define MPS_FW_DIAG_TYPE_UNREGISTER (0x00000002) 255d043c564SKenneth D. Merry #define MPS_FW_DIAG_TYPE_QUERY (0x00000003) 256d043c564SKenneth D. Merry #define MPS_FW_DIAG_TYPE_READ_BUFFER (0x00000004) 257d043c564SKenneth D. Merry #define MPS_FW_DIAG_TYPE_RELEASE (0x00000005) 258d043c564SKenneth D. Merry 259d043c564SKenneth D. Merry #define MPS_FW_DIAG_INVALID_UID (0x00000000) 260d043c564SKenneth D. Merry 261d043c564SKenneth D. Merry #define MPS_DIAG_SUCCESS 0 262d043c564SKenneth D. Merry #define MPS_DIAG_FAILURE 1 263d043c564SKenneth D. Merry 264d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_SUCCESS (0x00000000) 265d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_FAILURE (0x00000001) 266d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_INVALID_PARAMETER (0x00000002) 267d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_POST_FAILED (0x00000010) 268d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_INVALID_UID (0x00000011) 269d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_RELEASE_FAILED (0x00000012) 270d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_NO_BUFFER (0x00000013) 271d043c564SKenneth D. Merry #define MPS_FW_DIAG_ERROR_ALREADY_RELEASED (0x00000014) 272d043c564SKenneth D. Merry 273d043c564SKenneth D. Merry typedef struct mps_fw_diag_register 274d043c564SKenneth D. Merry { 275d043c564SKenneth D. Merry uint8_t ExtendedType; 276d043c564SKenneth D. Merry uint8_t BufferType; 277d043c564SKenneth D. Merry uint16_t ApplicationFlags; 278d043c564SKenneth D. Merry uint32_t DiagnosticFlags; 279d043c564SKenneth D. Merry uint32_t ProductSpecific[23]; 280d043c564SKenneth D. Merry uint32_t RequestedBufferSize; 281d043c564SKenneth D. Merry uint32_t UniqueId; 282d043c564SKenneth D. Merry } mps_fw_diag_register_t; 283d043c564SKenneth D. Merry 284d043c564SKenneth D. Merry typedef struct mps_fw_diag_unregister 285d043c564SKenneth D. Merry { 286d043c564SKenneth D. Merry uint32_t UniqueId; 287d043c564SKenneth D. Merry } mps_fw_diag_unregister_t; 288d043c564SKenneth D. Merry 289d043c564SKenneth D. Merry #define MPS_FW_DIAG_FLAG_APP_OWNED (0x0001) 290d043c564SKenneth D. Merry #define MPS_FW_DIAG_FLAG_BUFFER_VALID (0x0002) 291d043c564SKenneth D. Merry #define MPS_FW_DIAG_FLAG_FW_BUFFER_ACCESS (0x0004) 292d043c564SKenneth D. Merry 293d043c564SKenneth D. Merry typedef struct mps_fw_diag_query 294d043c564SKenneth D. Merry { 295d043c564SKenneth D. Merry uint8_t ExtendedType; 296d043c564SKenneth D. Merry uint8_t BufferType; 297d043c564SKenneth D. Merry uint16_t ApplicationFlags; 298d043c564SKenneth D. Merry uint32_t DiagnosticFlags; 299d043c564SKenneth D. Merry uint32_t ProductSpecific[23]; 300d043c564SKenneth D. Merry uint32_t TotalBufferSize; 301d043c564SKenneth D. Merry uint32_t DriverAddedBufferSize; 302d043c564SKenneth D. Merry uint32_t UniqueId; 303d043c564SKenneth D. Merry } mps_fw_diag_query_t; 304d043c564SKenneth D. Merry 305d043c564SKenneth D. Merry typedef struct mps_fw_diag_release 306d043c564SKenneth D. Merry { 307d043c564SKenneth D. Merry uint32_t UniqueId; 308d043c564SKenneth D. Merry } mps_fw_diag_release_t; 309d043c564SKenneth D. Merry 310d043c564SKenneth D. Merry #define MPS_FW_DIAG_FLAG_REREGISTER (0x0001) 311d043c564SKenneth D. Merry #define MPS_FW_DIAG_FLAG_FORCE_RELEASE (0x0002) 312d043c564SKenneth D. Merry 313d043c564SKenneth D. Merry typedef struct mps_diag_read_buffer 314d043c564SKenneth D. Merry { 315d043c564SKenneth D. Merry uint8_t Status; 316d043c564SKenneth D. Merry uint8_t Reserved; 317d043c564SKenneth D. Merry uint16_t Flags; 318d043c564SKenneth D. Merry uint32_t StartingOffset; 319d043c564SKenneth D. Merry uint32_t BytesToRead; 320d043c564SKenneth D. Merry uint32_t UniqueId; 321d043c564SKenneth D. Merry uint64_t PtrDataBuffer; 322d043c564SKenneth D. Merry } mps_diag_read_buffer_t; 323d043c564SKenneth D. Merry 324d043c564SKenneth D. Merry /* 325d043c564SKenneth D. Merry * Register Access 326d043c564SKenneth D. Merry */ 327d043c564SKenneth D. Merry #define REG_IO_READ 1 328d043c564SKenneth D. Merry #define REG_IO_WRITE 2 329d043c564SKenneth D. Merry #define REG_MEM_READ 3 330d043c564SKenneth D. Merry #define REG_MEM_WRITE 4 331d043c564SKenneth D. Merry 332d043c564SKenneth D. Merry typedef struct mps_reg_access 333d043c564SKenneth D. Merry { 334d043c564SKenneth D. Merry uint32_t Command; 335d043c564SKenneth D. Merry uint32_t RegOffset; 336d043c564SKenneth D. Merry uint32_t RegData; 337d043c564SKenneth D. Merry } mps_reg_access_t; 338d043c564SKenneth D. Merry 339d043c564SKenneth D. Merry typedef struct mps_btdh_mapping 340d043c564SKenneth D. Merry { 341d043c564SKenneth D. Merry uint16_t TargetID; 342d043c564SKenneth D. Merry uint16_t Bus; 343d043c564SKenneth D. Merry uint16_t DevHandle; 344d043c564SKenneth D. Merry uint16_t Reserved; 345d043c564SKenneth D. Merry } mps_btdh_mapping_t; 346d043c564SKenneth D. Merry 347d3c7b9a0SKenneth D. Merry #define MPSIO_MPS_COMMAND_FLAG_VERBOSE 0x01 348d3c7b9a0SKenneth D. Merry #define MPSIO_MPS_COMMAND_FLAG_DEBUG 0x02 349d3c7b9a0SKenneth D. Merry #define MPSIO_READ_CFG_HEADER _IOWR('M', 200, struct mps_cfg_page_req) 350d3c7b9a0SKenneth D. Merry #define MPSIO_READ_CFG_PAGE _IOWR('M', 201, struct mps_cfg_page_req) 351d3c7b9a0SKenneth D. Merry #define MPSIO_READ_EXT_CFG_HEADER _IOWR('M', 202, struct mps_ext_cfg_page_req) 352d3c7b9a0SKenneth D. Merry #define MPSIO_READ_EXT_CFG_PAGE _IOWR('M', 203, struct mps_ext_cfg_page_req) 353d3c7b9a0SKenneth D. Merry #define MPSIO_WRITE_CFG_PAGE _IOWR('M', 204, struct mps_cfg_page_req) 354d3c7b9a0SKenneth D. Merry #define MPSIO_RAID_ACTION _IOWR('M', 205, struct mps_raid_action) 355d3c7b9a0SKenneth D. Merry #define MPSIO_MPS_COMMAND _IOWR('M', 210, struct mps_usr_command) 356d3c7b9a0SKenneth D. Merry 357*8fae77f5SScott Long #ifndef MPTIOCTL 358d043c564SKenneth D. Merry #define MPTIOCTL ('I') 359d043c564SKenneth D. Merry #define MPTIOCTL_GET_ADAPTER_DATA _IOWR(MPTIOCTL, 1,\ 360d043c564SKenneth D. Merry struct mps_adapter_data) 361d043c564SKenneth D. Merry #define MPTIOCTL_UPDATE_FLASH _IOWR(MPTIOCTL, 2,\ 362d043c564SKenneth D. Merry struct mps_update_flash) 363d043c564SKenneth D. Merry #define MPTIOCTL_RESET_ADAPTER _IO(MPTIOCTL, 3) 364d043c564SKenneth D. Merry #define MPTIOCTL_PASS_THRU _IOWR(MPTIOCTL, 4,\ 365d043c564SKenneth D. Merry struct mps_pass_thru) 366d043c564SKenneth D. Merry #define MPTIOCTL_EVENT_QUERY _IOWR(MPTIOCTL, 5,\ 367d043c564SKenneth D. Merry struct mps_event_query) 368d043c564SKenneth D. Merry #define MPTIOCTL_EVENT_ENABLE _IOWR(MPTIOCTL, 6,\ 369d043c564SKenneth D. Merry struct mps_event_enable) 370d043c564SKenneth D. Merry #define MPTIOCTL_EVENT_REPORT _IOWR(MPTIOCTL, 7,\ 371d043c564SKenneth D. Merry struct mps_event_report) 372d043c564SKenneth D. Merry #define MPTIOCTL_GET_PCI_INFO _IOWR(MPTIOCTL, 8,\ 373d043c564SKenneth D. Merry struct mps_pci_info) 374d043c564SKenneth D. Merry #define MPTIOCTL_DIAG_ACTION _IOWR(MPTIOCTL, 9,\ 375d043c564SKenneth D. Merry struct mps_diag_action) 376d043c564SKenneth D. Merry #define MPTIOCTL_REG_ACCESS _IOWR(MPTIOCTL, 10,\ 377d043c564SKenneth D. Merry struct mps_reg_access) 378d043c564SKenneth D. Merry #define MPTIOCTL_BTDH_MAPPING _IOWR(MPTIOCTL, 11,\ 379d043c564SKenneth D. Merry struct mps_btdh_mapping) 380*8fae77f5SScott Long #endif /* MPTIOCTL */ 381d043c564SKenneth D. Merry 382d3c7b9a0SKenneth D. Merry #endif /* !_MPS_IOCTL_H_ */ 383