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