linux-old/drivers/fc4/fc.h
<<
>>
Prefs
   1/* fc.h: Definitions for Fibre Channel Physical and Signaling Interface.
   2 *
   3 * Copyright (C) 1996-1997,1999 Jakub Jelinek (jj@ultra.linux.cz)
   4 *
   5 * Sources:
   6 *      Fibre Channel Physical & Signaling Interface (FC-PH), dpANS, 1994
   7 *      dpANS Fibre Channel Protocol for SCSI (X3.269-199X), Rev. 012, 1995
   8 */
   9
  10#ifndef __FC_H
  11#define __FC_H
  12
  13/* World Wide Name */
  14#define NAAID_IEEE              1
  15#define NAAID_IEEE_EXT          2
  16#define NAAID_LOCAL             3
  17#define NAAID_IP                4
  18#define NAAID_IEEE_REG          5
  19#define NAAID_IEEE_REG_EXT      6
  20#define NAAID_CCITT             12
  21#define NAAID_CCITT_GRP         14
  22
  23/* This is NAAID_IEEE_EXT scheme */
  24typedef struct {
  25        u32     naaid:4;
  26        u32     nportid:12;
  27        u32     hi:16;
  28        u32     lo;
  29} fc_wwn;
  30
  31/* Frame header for FC-PH frames */
  32
  33/* r_ctl field */
  34#define R_CTL_DEVICE_DATA       0x00    /* FC4 Device_Data frame */
  35#define R_CTL_EXTENDED_SVC      0x20    /* Extended Link_Data frame */
  36#define R_CTL_FC4_SVC           0x30    /* FC4 Link_Data frame */
  37#define R_CTL_VIDEO             0x40    /* Video_Data frame */
  38#define R_CTL_BASIC_SVC         0x80    /* Basic Link_Data frame */
  39#define R_CTL_LINK_CTL          0xc0    /* Link_Control frame */
  40/* FC4 Device_Data frames */
  41#define R_CTL_UNCATEGORIZED     0x00
  42#define R_CTL_SOLICITED_DATA    0x01
  43#define R_CTL_UNSOL_CONTROL     0x02
  44#define R_CTL_SOLICITED_CONTROL 0x03
  45#define R_CTL_UNSOL_DATA        0x04
  46#define R_CTL_XFER_RDY          0x05
  47#define R_CTL_COMMAND           0x06
  48#define R_CTL_STATUS            0x07
  49/* Basic Link_Data frames */
  50#define R_CTL_LS_NOP            0x80
  51#define R_CTL_LS_ABTS           0x81
  52#define R_CTL_LS_RMC            0x82
  53#define R_CTL_LS_BA_ACC         0x84
  54#define R_CTL_LS_BA_RJT         0x85
  55/* Extended Link_Data frames */
  56#define R_CTL_ELS_REQ           0x22
  57#define R_CTL_ELS_RSP           0x23
  58/* Link_Control frames */
  59#define R_CTL_ACK_1             0xc0
  60#define R_CTL_ACK_N             0xc1
  61#define R_CTL_P_RJT             0xc2
  62#define R_CTL_F_RJT             0xc3
  63#define R_CTL_P_BSY             0xc4
  64#define R_CTL_F_BSY_DF          0xc5
  65#define R_CTL_F_BSY_LC          0xc6
  66#define R_CTL_LCR               0xc7
  67
  68/* type field */
  69#define TYPE_BASIC_LS           0x00
  70#define TYPE_EXTENDED_LS        0x01
  71#define TYPE_IS8802             0x04
  72#define TYPE_IS8802_SNAP        0x05
  73#define TYPE_SCSI_FCP           0x08
  74#define TYPE_SCSI_GPP           0x09
  75#define TYPE_HIPP_FP            0x0a
  76#define TYPE_IPI3_MASTER        0x11
  77#define TYPE_IPI3_SLAVE         0x12
  78#define TYPE_IPI3_PEER          0x13
  79
  80/* f_ctl field */
  81#define F_CTL_FILL_BYTES        0x000003
  82#define F_CTL_XCHG_REASSEMBLE   0x000004
  83#define F_CTL_RO_PRESENT        0x000008
  84#define F_CTL_ABORT_SEQ         0x000030
  85#define F_CTL_CONTINUE_SEQ      0x0000c0
  86#define F_CTL_INVALIDATE_XID    0x004000
  87#define F_CTL_XID_REASSIGNED    0x008000
  88#define F_CTL_SEQ_INITIATIVE    0x010000
  89#define F_CTL_CHAINED_SEQ       0x020000
  90#define F_CTL_END_CONNECT       0x040000
  91#define F_CTL_END_SEQ           0x080000
  92#define F_CTL_LAST_SEQ          0x100000
  93#define F_CTL_FIRST_SEQ         0x200000
  94#define F_CTL_SEQ_CONTEXT       0x400000
  95#define F_CTL_XCHG_CONTEXT      0x800000
  96
  97typedef struct {
  98        u32     r_ctl:8,        did:24;
  99        u32     xxx1:8,         sid:24;
 100        u32     type:8,         f_ctl:24;
 101        u32     seq_id:8,       df_ctl:8,       seq_cnt:16;
 102        u16     ox_id,          rx_id;
 103        u32     param;
 104} fc_hdr;
 105/* The following are ugly macros to make setup of this structure faster */
 106#define FILL_FCHDR_RCTL_DID(fch, r_ctl, did) *(u32 *)(fch) = ((r_ctl) << 24) | (did);
 107#define FILL_FCHDR_SID(fch, sid) *((u32 *)(fch)+1) = (sid);
 108#define FILL_FCHDR_TYPE_FCTL(fch, type, f_ctl) *((u32 *)(fch)+2) = ((type) << 24) | (f_ctl);
 109#define FILL_FCHDR_SEQ_DF_SEQ(fch, seq_id, df_ctl, seq_cnt) *((u32 *)(fch)+3) = ((seq_id) << 24) | ((df_ctl) << 16) | (seq_cnt);
 110#define FILL_FCHDR_OXRX(fch, ox_id, rx_id) *((u32 *)(fch)+4) = ((ox_id) << 16) | (rx_id);
 111
 112/* Well known addresses */
 113#define FS_GENERAL_MULTICAST    0xfffff7
 114#define FS_WELL_KNOWN_MULTICAST 0xfffff8
 115#define FS_HUNT_GROUP           0xfffff9
 116#define FS_MANAGEMENT_SERVER    0xfffffa
 117#define FS_TIME_SERVER          0xfffffb
 118#define FS_NAME_SERVER          0xfffffc
 119#define FS_FABRIC_CONTROLLER    0xfffffd
 120#define FS_FABRIC_F_PORT        0xfffffe
 121#define FS_BROADCAST            0xffffff
 122
 123/* Reject frames */
 124/* The param field should be cast to this structure */
 125typedef struct {
 126        u8      action;
 127        u8      reason;
 128        u8      xxx;
 129        u8      vendor_unique;
 130} rjt_param;
 131
 132/* Reject action codes */
 133#define RJT_RETRY                       0x01
 134#define RJT_NONRETRY                    0x02
 135
 136/* Reject reason codes */
 137#define RJT_INVALID_DID                 0x01
 138#define RJT_INVALID_SID                 0x02
 139#define RJT_NPORT_NOT_AVAIL_TEMP        0x03
 140#define RJT_NPORT_NOT_AVAIL_PERM        0x04
 141#define RJT_CLASS_NOT_SUPPORTED         0x05
 142#define RJT_DELIMITER_ERROR             0x06
 143#define RJT_TYPE_NOT_SUPPORTED          0x07
 144#define RJT_INVALID_LINK_CONTROL        0x08
 145#define RJT_INVALID_R_CTL               0x09
 146#define RJT_INVALID_F_CTL               0x0a
 147#define RJT_INVALID_OX_ID               0x0b
 148#define RJT_INVALID_RX_ID               0x0c
 149#define RJT_INVALID_SEQ_ID              0x0d
 150#define RJT_INVALID_DF_CTL              0x0e
 151#define RJT_INVALID_SEQ_CNT             0x0f
 152#define RJT_INVALID_PARAMETER           0x10
 153#define RJT_EXCHANGE_ERROR              0x11
 154#define RJT_PROTOCOL_ERROR              0x12
 155#define RJT_INCORRECT_LENGTH            0x13
 156#define RJT_UNEXPECTED_ACK              0x14
 157#define RJT_UNEXPECTED_LINK_RESP        0x15
 158#define RJT_LOGIN_REQUIRED              0x16
 159#define RJT_EXCESSIVE_SEQUENCES         0x17
 160#define RJT_CANT_ESTABLISH_EXCHANGE     0x18
 161#define RJT_SECURITY_NOT_SUPPORTED      0x19
 162#define RJT_FABRIC_NA                   0x1a
 163#define RJT_VENDOR_UNIQUE               0xff
 164
 165
 166#define SP_F_PORT_LOGIN                 0x10
 167
 168/* Extended SVC commands */
 169#define LS_RJT                  0x01000000
 170#define LS_ACC                  0x02000000
 171#define LS_PRLI_ACC             0x02100014
 172#define LS_PLOGI                0x03000000
 173#define LS_FLOGI                0x04000000
 174#define LS_LOGO                 0x05000000
 175#define LS_ABTX                 0x06000000
 176#define LS_RCS                  0x07000000
 177#define LS_RES                  0x08000000
 178#define LS_RSS                  0x09000000
 179#define LS_RSI                  0x0a000000
 180#define LS_ESTS                 0x0b000000
 181#define LS_ESTC                 0x0c000000
 182#define LS_ADVC                 0x0d000000
 183#define LS_RTV                  0x0e000000
 184#define LS_RLS                  0x0f000000
 185#define LS_ECHO                 0x10000000
 186#define LS_TEST                 0x11000000
 187#define LS_RRQ                  0x12000000
 188#define LS_IDENT                0x20000000
 189#define LS_PRLI                 0x20100014
 190#define LS_DISPLAY              0x21000000
 191#define LS_PRLO                 0x21100014
 192#define LS_PDISC                0x50000000
 193#define LS_ADISC                0x52000000
 194
 195typedef struct {
 196        u8      fcph_hi, fcph_lo;
 197        u16     buf2buf_credit;
 198        u8      common_features;
 199        u8      xxx1;
 200        u16     buf2buf_size;
 201        u8      xxx2;
 202        u8      total_concurrent;
 203        u16     off_by_info;
 204        u32     e_d_tov;
 205} common_svc_parm;
 206
 207typedef struct {
 208        u16     serv_opts;
 209        u16     initiator_ctl;
 210        u16     rcpt_ctl;
 211        u16     recv_size;
 212        u8      xxx1;
 213        u8      concurrent_seqs;
 214        u16     end2end_credit;
 215        u16     open_seqs_per_xchg;
 216        u16     xxx2;
 217} svc_parm;
 218
 219/* Login */
 220typedef struct {
 221        u32             code;
 222        common_svc_parm common;
 223        fc_wwn          nport_wwn;
 224        fc_wwn          node_wwn;
 225        svc_parm        class1;
 226        svc_parm        class2;
 227        svc_parm        class3;
 228} logi;
 229
 230#endif /* !(__FC_H) */
 231
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.