linux/drivers/scsi/dpt/dpti_i2o.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2#ifndef _SCSI_I2O_H
   3#define _SCSI_I2O_H
   4
   5/* I2O kernel space accessible structures/APIs
   6 *
   7 * (c) Copyright 1999, 2000 Red Hat Software
   8 *
   9 *************************************************************************
  10 *
  11 * This header file defined the I2O APIs/structures for use by
  12 * the I2O kernel modules.
  13 */
  14
  15#ifdef __KERNEL__       /* This file to be included by kernel only */
  16
  17#include <linux/i2o-dev.h>
  18
  19#include <linux/notifier.h>
  20#include <linux/atomic.h>
  21
  22
  23/*
  24 *      Tunable parameters first
  25 */
  26
  27/* How many different OSM's are we allowing */
  28#define MAX_I2O_MODULES         64
  29
  30#define I2O_EVT_CAPABILITY_OTHER                0x01
  31#define I2O_EVT_CAPABILITY_CHANGED              0x02
  32
  33#define I2O_EVT_SENSOR_STATE_CHANGED            0x01
  34
  35//#ifdef __KERNEL__   /* ioctl stuff only thing exported to users */
  36
  37#define I2O_MAX_MANAGERS        4
  38
  39/*
  40 *      I2O Interface Objects
  41 */
  42
  43#include <linux/wait.h>
  44typedef wait_queue_head_t adpt_wait_queue_head_t;
  45#define ADPT_DECLARE_WAIT_QUEUE_HEAD(wait) DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait)
  46typedef wait_queue_entry_t adpt_wait_queue_entry_t;
  47
  48/*
  49 * message structures
  50 */
  51
  52struct i2o_message
  53{
  54        u8      version_offset;
  55        u8      flags;
  56        u16     size;
  57        u32     target_tid:12;
  58        u32     init_tid:12;
  59        u32     function:8;
  60        u32     initiator_context;
  61        /* List follows */
  62};
  63
  64struct adpt_device;
  65struct _adpt_hba;
  66struct i2o_device
  67{
  68        struct i2o_device *next;        /* Chain */
  69        struct i2o_device *prev;
  70
  71        char dev_name[8];               /* linux /dev name if available */
  72        i2o_lct_entry lct_data;/* Device LCT information */
  73        u32 flags;
  74        struct proc_dir_entry* proc_entry;      /* /proc dir */
  75        struct adpt_device *owner;
  76        struct _adpt_hba *controller;   /* Controlling IOP */
  77};
  78
  79/*
  80 *      Each I2O controller has one of these objects
  81 */
  82
  83struct i2o_controller
  84{
  85        char name[16];
  86        int unit;
  87        int type;
  88        int enabled;
  89
  90        struct notifier_block *event_notifer;   /* Events */
  91        atomic_t users;
  92        struct i2o_device *devices;             /* I2O device chain */
  93        struct i2o_controller *next;            /* Controller chain */
  94
  95};
  96
  97/*
  98 * I2O System table entry
  99 */
 100struct i2o_sys_tbl_entry
 101{
 102        u16     org_id;
 103        u16     reserved1;
 104        u32     iop_id:12;
 105        u32     reserved2:20;
 106        u16     seg_num:12;
 107        u16     i2o_version:4;
 108        u8      iop_state;
 109        u8      msg_type;
 110        u16     frame_size;
 111        u16     reserved3;
 112        u32     last_changed;
 113        u32     iop_capabilities;
 114        u32     inbound_low;
 115        u32     inbound_high;
 116};
 117
 118struct i2o_sys_tbl
 119{
 120        u8      num_entries;
 121        u8      version;
 122        u16     reserved1;
 123        u32     change_ind;
 124        u32     reserved2;
 125        u32     reserved3;
 126        struct i2o_sys_tbl_entry iops[0];
 127};
 128
 129/*
 130 *      I2O classes / subclasses
 131 */
 132
 133/*  Class ID and Code Assignments
 134 *  (LCT.ClassID.Version field)
 135 */
 136#define    I2O_CLASS_VERSION_10                        0x00
 137#define    I2O_CLASS_VERSION_11                        0x01
 138
 139/*  Class code names
 140 *  (from v1.5 Table 6-1 Class Code Assignments.)
 141 */
 142
 143#define    I2O_CLASS_EXECUTIVE                         0x000
 144#define    I2O_CLASS_DDM                               0x001
 145#define    I2O_CLASS_RANDOM_BLOCK_STORAGE              0x010
 146#define    I2O_CLASS_SEQUENTIAL_STORAGE                0x011
 147#define    I2O_CLASS_LAN                               0x020
 148#define    I2O_CLASS_WAN                               0x030
 149#define    I2O_CLASS_FIBRE_CHANNEL_PORT                0x040
 150#define    I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL          0x041
 151#define    I2O_CLASS_SCSI_PERIPHERAL                   0x051
 152#define    I2O_CLASS_ATE_PORT                          0x060
 153#define    I2O_CLASS_ATE_PERIPHERAL                    0x061
 154#define    I2O_CLASS_FLOPPY_CONTROLLER                 0x070
 155#define    I2O_CLASS_FLOPPY_DEVICE                     0x071
 156#define    I2O_CLASS_BUS_ADAPTER_PORT                  0x080
 157#define    I2O_CLASS_PEER_TRANSPORT_AGENT              0x090
 158#define    I2O_CLASS_PEER_TRANSPORT                    0x091
 159
 160/*  Rest of 0x092 - 0x09f reserved for peer-to-peer classes
 161 */
 162
 163#define    I2O_CLASS_MATCH_ANYCLASS                    0xffffffff
 164
 165/*  Subclasses
 166 */
 167
 168#define    I2O_SUBCLASS_i960                           0x001
 169#define    I2O_SUBCLASS_HDM                            0x020
 170#define    I2O_SUBCLASS_ISM                            0x021
 171
 172/* Operation functions */
 173
 174#define I2O_PARAMS_FIELD_GET    0x0001
 175#define I2O_PARAMS_LIST_GET     0x0002
 176#define I2O_PARAMS_MORE_GET     0x0003
 177#define I2O_PARAMS_SIZE_GET     0x0004
 178#define I2O_PARAMS_TABLE_GET    0x0005
 179#define I2O_PARAMS_FIELD_SET    0x0006
 180#define I2O_PARAMS_LIST_SET     0x0007
 181#define I2O_PARAMS_ROW_ADD      0x0008
 182#define I2O_PARAMS_ROW_DELETE   0x0009
 183#define I2O_PARAMS_TABLE_CLEAR  0x000A
 184
 185/*
 186 *      I2O serial number conventions / formats
 187 *      (circa v1.5)
 188 */
 189
 190#define    I2O_SNFORMAT_UNKNOWN                        0
 191#define    I2O_SNFORMAT_BINARY                         1
 192#define    I2O_SNFORMAT_ASCII                          2
 193#define    I2O_SNFORMAT_UNICODE                        3
 194#define    I2O_SNFORMAT_LAN48_MAC                      4
 195#define    I2O_SNFORMAT_WAN                            5
 196
 197/* Plus new in v2.0 (Yellowstone pdf doc)
 198 */
 199
 200#define    I2O_SNFORMAT_LAN64_MAC                      6
 201#define    I2O_SNFORMAT_DDM                            7
 202#define    I2O_SNFORMAT_IEEE_REG64                     8
 203#define    I2O_SNFORMAT_IEEE_REG128                    9
 204#define    I2O_SNFORMAT_UNKNOWN2                       0xff
 205
 206/* Transaction Reply Lists (TRL) Control Word structure */
 207
 208#define TRL_SINGLE_FIXED_LENGTH         0x00
 209#define TRL_SINGLE_VARIABLE_LENGTH      0x40
 210#define TRL_MULTIPLE_FIXED_LENGTH       0x80
 211
 212/*
 213 *      Messaging API values
 214 */
 215
 216#define I2O_CMD_ADAPTER_ASSIGN          0xB3
 217#define I2O_CMD_ADAPTER_READ            0xB2
 218#define I2O_CMD_ADAPTER_RELEASE         0xB5
 219#define I2O_CMD_BIOS_INFO_SET           0xA5
 220#define I2O_CMD_BOOT_DEVICE_SET         0xA7
 221#define I2O_CMD_CONFIG_VALIDATE         0xBB
 222#define I2O_CMD_CONN_SETUP              0xCA
 223#define I2O_CMD_DDM_DESTROY             0xB1
 224#define I2O_CMD_DDM_ENABLE              0xD5
 225#define I2O_CMD_DDM_QUIESCE             0xC7
 226#define I2O_CMD_DDM_RESET               0xD9
 227#define I2O_CMD_DDM_SUSPEND             0xAF
 228#define I2O_CMD_DEVICE_ASSIGN           0xB7
 229#define I2O_CMD_DEVICE_RELEASE          0xB9
 230#define I2O_CMD_HRT_GET                 0xA8
 231#define I2O_CMD_ADAPTER_CLEAR           0xBE
 232#define I2O_CMD_ADAPTER_CONNECT         0xC9
 233#define I2O_CMD_ADAPTER_RESET           0xBD
 234#define I2O_CMD_LCT_NOTIFY              0xA2
 235#define I2O_CMD_OUTBOUND_INIT           0xA1
 236#define I2O_CMD_PATH_ENABLE             0xD3
 237#define I2O_CMD_PATH_QUIESCE            0xC5
 238#define I2O_CMD_PATH_RESET              0xD7
 239#define I2O_CMD_STATIC_MF_CREATE        0xDD
 240#define I2O_CMD_STATIC_MF_RELEASE       0xDF
 241#define I2O_CMD_STATUS_GET              0xA0
 242#define I2O_CMD_SW_DOWNLOAD             0xA9
 243#define I2O_CMD_SW_UPLOAD               0xAB
 244#define I2O_CMD_SW_REMOVE               0xAD
 245#define I2O_CMD_SYS_ENABLE              0xD1
 246#define I2O_CMD_SYS_MODIFY              0xC1
 247#define I2O_CMD_SYS_QUIESCE             0xC3
 248#define I2O_CMD_SYS_TAB_SET             0xA3
 249
 250#define I2O_CMD_UTIL_NOP                0x00
 251#define I2O_CMD_UTIL_ABORT              0x01
 252#define I2O_CMD_UTIL_CLAIM              0x09
 253#define I2O_CMD_UTIL_RELEASE            0x0B
 254#define I2O_CMD_UTIL_PARAMS_GET         0x06
 255#define I2O_CMD_UTIL_PARAMS_SET         0x05
 256#define I2O_CMD_UTIL_EVT_REGISTER       0x13
 257#define I2O_CMD_UTIL_EVT_ACK            0x14
 258#define I2O_CMD_UTIL_CONFIG_DIALOG      0x10
 259#define I2O_CMD_UTIL_DEVICE_RESERVE     0x0D
 260#define I2O_CMD_UTIL_DEVICE_RELEASE     0x0F
 261#define I2O_CMD_UTIL_LOCK               0x17
 262#define I2O_CMD_UTIL_LOCK_RELEASE       0x19
 263#define I2O_CMD_UTIL_REPLY_FAULT_NOTIFY 0x15
 264
 265#define I2O_CMD_SCSI_EXEC               0x81
 266#define I2O_CMD_SCSI_ABORT              0x83
 267#define I2O_CMD_SCSI_BUSRESET           0x27
 268
 269#define I2O_CMD_BLOCK_READ              0x30
 270#define I2O_CMD_BLOCK_WRITE             0x31
 271#define I2O_CMD_BLOCK_CFLUSH            0x37
 272#define I2O_CMD_BLOCK_MLOCK             0x49
 273#define I2O_CMD_BLOCK_MUNLOCK           0x4B
 274#define I2O_CMD_BLOCK_MMOUNT            0x41
 275#define I2O_CMD_BLOCK_MEJECT            0x43
 276
 277#define I2O_PRIVATE_MSG                 0xFF
 278
 279/*
 280 *      Init Outbound Q status
 281 */
 282
 283#define I2O_CMD_OUTBOUND_INIT_IN_PROGRESS       0x01
 284#define I2O_CMD_OUTBOUND_INIT_REJECTED          0x02
 285#define I2O_CMD_OUTBOUND_INIT_FAILED            0x03
 286#define I2O_CMD_OUTBOUND_INIT_COMPLETE          0x04
 287
 288/*
 289 *      I2O Get Status State values
 290 */
 291
 292#define ADAPTER_STATE_INITIALIZING              0x01
 293#define ADAPTER_STATE_RESET                     0x02
 294#define ADAPTER_STATE_HOLD                      0x04
 295#define ADAPTER_STATE_READY                     0x05
 296#define ADAPTER_STATE_OPERATIONAL               0x08
 297#define ADAPTER_STATE_FAILED                    0x10
 298#define ADAPTER_STATE_FAULTED                   0x11
 299
 300/* I2O API function return values */
 301
 302#define I2O_RTN_NO_ERROR                        0
 303#define I2O_RTN_NOT_INIT                        1
 304#define I2O_RTN_FREE_Q_EMPTY                    2
 305#define I2O_RTN_TCB_ERROR                       3
 306#define I2O_RTN_TRANSACTION_ERROR               4
 307#define I2O_RTN_ADAPTER_ALREADY_INIT            5
 308#define I2O_RTN_MALLOC_ERROR                    6
 309#define I2O_RTN_ADPTR_NOT_REGISTERED            7
 310#define I2O_RTN_MSG_REPLY_TIMEOUT               8
 311#define I2O_RTN_NO_STATUS                       9
 312#define I2O_RTN_NO_FIRM_VER                     10
 313#define I2O_RTN_NO_LINK_SPEED                   11
 314
 315/* Reply message status defines for all messages */
 316
 317#define I2O_REPLY_STATUS_SUCCESS                        0x00
 318#define I2O_REPLY_STATUS_ABORT_DIRTY                    0x01
 319#define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER         0x02
 320#define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER         0x03
 321#define I2O_REPLY_STATUS_ERROR_DIRTY                    0x04
 322#define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER         0x05
 323#define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER         0x06
 324#define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY            0x08
 325#define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x09
 326#define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x0A
 327#define I2O_REPLY_STATUS_TRANSACTION_ERROR              0x0B
 328#define I2O_REPLY_STATUS_PROGRESS_REPORT                0x80
 329
 330/* Status codes and Error Information for Parameter functions */
 331
 332#define I2O_PARAMS_STATUS_SUCCESS               0x00
 333#define I2O_PARAMS_STATUS_BAD_KEY_ABORT         0x01
 334#define I2O_PARAMS_STATUS_BAD_KEY_CONTINUE      0x02
 335#define I2O_PARAMS_STATUS_BUFFER_FULL           0x03
 336#define I2O_PARAMS_STATUS_BUFFER_TOO_SMALL      0x04
 337#define I2O_PARAMS_STATUS_FIELD_UNREADABLE      0x05
 338#define I2O_PARAMS_STATUS_FIELD_UNWRITEABLE     0x06
 339#define I2O_PARAMS_STATUS_INSUFFICIENT_FIELDS   0x07
 340#define I2O_PARAMS_STATUS_INVALID_GROUP_ID      0x08
 341#define I2O_PARAMS_STATUS_INVALID_OPERATION     0x09
 342#define I2O_PARAMS_STATUS_NO_KEY_FIELD          0x0A
 343#define I2O_PARAMS_STATUS_NO_SUCH_FIELD         0x0B
 344#define I2O_PARAMS_STATUS_NON_DYNAMIC_GROUP     0x0C
 345#define I2O_PARAMS_STATUS_OPERATION_ERROR       0x0D
 346#define I2O_PARAMS_STATUS_SCALAR_ERROR          0x0E
 347#define I2O_PARAMS_STATUS_TABLE_ERROR           0x0F
 348#define I2O_PARAMS_STATUS_WRONG_GROUP_TYPE      0x10
 349
 350/* DetailedStatusCode defines for Executive, DDM, Util and Transaction error
 351 * messages: Table 3-2 Detailed Status Codes.*/
 352
 353#define I2O_DSC_SUCCESS                        0x0000
 354#define I2O_DSC_BAD_KEY                        0x0002
 355#define I2O_DSC_TCL_ERROR                      0x0003
 356#define I2O_DSC_REPLY_BUFFER_FULL              0x0004
 357#define I2O_DSC_NO_SUCH_PAGE                   0x0005
 358#define I2O_DSC_INSUFFICIENT_RESOURCE_SOFT     0x0006
 359#define I2O_DSC_INSUFFICIENT_RESOURCE_HARD     0x0007
 360#define I2O_DSC_CHAIN_BUFFER_TOO_LARGE         0x0009
 361#define I2O_DSC_UNSUPPORTED_FUNCTION           0x000A
 362#define I2O_DSC_DEVICE_LOCKED                  0x000B
 363#define I2O_DSC_DEVICE_RESET                   0x000C
 364#define I2O_DSC_INAPPROPRIATE_FUNCTION         0x000D
 365#define I2O_DSC_INVALID_INITIATOR_ADDRESS      0x000E
 366#define I2O_DSC_INVALID_MESSAGE_FLAGS          0x000F
 367#define I2O_DSC_INVALID_OFFSET                 0x0010
 368#define I2O_DSC_INVALID_PARAMETER              0x0011
 369#define I2O_DSC_INVALID_REQUEST                0x0012
 370#define I2O_DSC_INVALID_TARGET_ADDRESS         0x0013
 371#define I2O_DSC_MESSAGE_TOO_LARGE              0x0014
 372#define I2O_DSC_MESSAGE_TOO_SMALL              0x0015
 373#define I2O_DSC_MISSING_PARAMETER              0x0016
 374#define I2O_DSC_TIMEOUT                        0x0017
 375#define I2O_DSC_UNKNOWN_ERROR                  0x0018
 376#define I2O_DSC_UNKNOWN_FUNCTION               0x0019
 377#define I2O_DSC_UNSUPPORTED_VERSION            0x001A
 378#define I2O_DSC_DEVICE_BUSY                    0x001B
 379#define I2O_DSC_DEVICE_NOT_AVAILABLE           0x001C
 380
 381/* Device Claim Types */
 382#define I2O_CLAIM_PRIMARY                                       0x01000000
 383#define I2O_CLAIM_MANAGEMENT                                    0x02000000
 384#define I2O_CLAIM_AUTHORIZED                                    0x03000000
 385#define I2O_CLAIM_SECONDARY                                     0x04000000
 386
 387/* Message header defines for VersionOffset */
 388#define I2OVER15        0x0001
 389#define I2OVER20        0x0002
 390/* Default is 1.5, FIXME: Need support for both 1.5 and 2.0 */
 391#define I2OVERSION      I2OVER15
 392#define SGL_OFFSET_0    I2OVERSION
 393#define SGL_OFFSET_4    (0x0040 | I2OVERSION)
 394#define SGL_OFFSET_5    (0x0050 | I2OVERSION)
 395#define SGL_OFFSET_6    (0x0060 | I2OVERSION)
 396#define SGL_OFFSET_7    (0x0070 | I2OVERSION)
 397#define SGL_OFFSET_8    (0x0080 | I2OVERSION)
 398#define SGL_OFFSET_9    (0x0090 | I2OVERSION)
 399#define SGL_OFFSET_10   (0x00A0 | I2OVERSION)
 400#define SGL_OFFSET_12   (0x00C0 | I2OVERSION)
 401
 402#define TRL_OFFSET_5    (0x0050 | I2OVERSION)
 403#define TRL_OFFSET_6    (0x0060 | I2OVERSION)
 404
 405 /* msg header defines for MsgFlags */
 406#define MSG_STATIC      0x0100
 407#define MSG_64BIT_CNTXT 0x0200
 408#define MSG_MULTI_TRANS 0x1000
 409#define MSG_FAIL        0x2000
 410#define MSG_LAST        0x4000
 411#define MSG_REPLY       0x8000
 412
 413 /* minimum size msg */
 414#define THREE_WORD_MSG_SIZE     0x00030000
 415#define FOUR_WORD_MSG_SIZE      0x00040000
 416#define FIVE_WORD_MSG_SIZE      0x00050000
 417#define SIX_WORD_MSG_SIZE       0x00060000
 418#define SEVEN_WORD_MSG_SIZE     0x00070000
 419#define EIGHT_WORD_MSG_SIZE     0x00080000
 420#define NINE_WORD_MSG_SIZE      0x00090000
 421#define TEN_WORD_MSG_SIZE       0x000A0000
 422#define I2O_MESSAGE_SIZE(x)     ((x)<<16)
 423
 424
 425/* Special TID Assignments */
 426
 427#define ADAPTER_TID             0
 428#define HOST_TID                1
 429
 430#define MSG_FRAME_SIZE          128
 431#define NMBR_MSG_FRAMES         128
 432
 433#define MSG_POOL_SIZE           16384
 434
 435#define I2O_POST_WAIT_OK        0
 436#define I2O_POST_WAIT_TIMEOUT   -ETIMEDOUT
 437
 438
 439#endif /* __KERNEL__ */
 440
 441#endif /* _SCSI_I2O_H */
 442