The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/mps/mps_ioctl.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

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

Cache object: 1e97b6ab205e367957d48a58620cacda


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.