home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-s390 / cio.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  8.0 KB  |  282 lines

  1. /*
  2.  *  include/asm-s390/cio.h
  3.  *  include/asm-s390x/cio.h
  4.  *
  5.  * Common interface for I/O on S/390
  6.  */
  7. #ifndef _ASM_S390_CIO_H_
  8. #define _ASM_S390_CIO_H_
  9.  
  10. #include <linux/spinlock.h>
  11. #include <asm/types.h>
  12.  
  13. #ifdef __KERNEL__
  14.  
  15. #define LPM_ANYPATH 0xff
  16.  
  17. /*
  18.  * subchannel status word
  19.  */
  20. struct scsw {
  21.     __u32 key  : 4;        /* subchannel key */
  22.     __u32 sctl : 1;     /* suspend control */
  23.     __u32 eswf : 1;     /* ESW format */
  24.     __u32 cc   : 2;     /* deferred condition code */
  25.     __u32 fmt  : 1;     /* format */
  26.     __u32 pfch : 1;     /* prefetch */
  27.     __u32 isic : 1;     /* initial-status interruption control */
  28.     __u32 alcc : 1;     /* address-limit checking control */
  29.     __u32 ssi  : 1;     /* supress-suspended interruption */
  30.     __u32 zcc  : 1;     /* zero condition code */
  31.     __u32 ectl : 1;     /* extended control */
  32.     __u32 pno  : 1;            /* path not operational */
  33.     __u32 res  : 1;            /* reserved */
  34.     __u32 fctl : 3;            /* function control */
  35.     __u32 actl : 7;            /* activity control */
  36.     __u32 stctl : 5;        /* status control */
  37.     __u32 cpa;            /* channel program address */
  38.     __u32 dstat : 8;        /* device status */
  39.     __u32 cstat : 8;        /* subchannel status */
  40.     __u32 count : 16;       /* residual count */
  41. } __attribute__ ((packed));
  42.  
  43. #define SCSW_FCTL_CLEAR_FUNC     0x1
  44. #define SCSW_FCTL_HALT_FUNC     0x2
  45. #define SCSW_FCTL_START_FUNC     0x4
  46.  
  47. #define SCSW_ACTL_SUSPENDED     0x1
  48. #define SCSW_ACTL_DEVACT     0x2
  49. #define SCSW_ACTL_SCHACT     0x4
  50. #define SCSW_ACTL_CLEAR_PEND     0x8
  51. #define SCSW_ACTL_HALT_PEND     0x10
  52. #define SCSW_ACTL_START_PEND     0x20
  53. #define SCSW_ACTL_RESUME_PEND     0x40
  54.  
  55. #define SCSW_STCTL_STATUS_PEND     0x1
  56. #define SCSW_STCTL_SEC_STATUS     0x2
  57. #define SCSW_STCTL_PRIM_STATUS     0x4
  58. #define SCSW_STCTL_INTER_STATUS     0x8
  59. #define SCSW_STCTL_ALERT_STATUS     0x10
  60.  
  61. #define DEV_STAT_ATTENTION     0x80
  62. #define DEV_STAT_STAT_MOD     0x40
  63. #define DEV_STAT_CU_END         0x20
  64. #define DEV_STAT_BUSY         0x10
  65. #define DEV_STAT_CHN_END     0x08
  66. #define DEV_STAT_DEV_END     0x04
  67. #define DEV_STAT_UNIT_CHECK     0x02
  68. #define DEV_STAT_UNIT_EXCEP     0x01
  69.  
  70. #define SCHN_STAT_PCI         0x80
  71. #define SCHN_STAT_INCORR_LEN     0x40
  72. #define SCHN_STAT_PROG_CHECK     0x20
  73. #define SCHN_STAT_PROT_CHECK     0x10
  74. #define SCHN_STAT_CHN_DATA_CHK     0x08
  75. #define SCHN_STAT_CHN_CTRL_CHK     0x04
  76. #define SCHN_STAT_INTF_CTRL_CHK     0x02
  77. #define SCHN_STAT_CHAIN_CHECK     0x01
  78.  
  79. /*
  80.  * architectured values for first sense byte
  81.  */
  82. #define SNS0_CMD_REJECT        0x80
  83. #define SNS_CMD_REJECT        SNS0_CMD_REJEC
  84. #define SNS0_INTERVENTION_REQ    0x40
  85. #define SNS0_BUS_OUT_CHECK    0x20
  86. #define SNS0_EQUIPMENT_CHECK    0x10
  87. #define SNS0_DATA_CHECK        0x08
  88. #define SNS0_OVERRUN        0x04
  89. #define SNS0_INCOMPL_DOMAIN    0x01
  90.  
  91. /*
  92.  * architectured values for second sense byte
  93.  */
  94. #define SNS1_PERM_ERR        0x80
  95. #define SNS1_INV_TRACK_FORMAT    0x40
  96. #define SNS1_EOC        0x20
  97. #define SNS1_MESSAGE_TO_OPER    0x10
  98. #define SNS1_NO_REC_FOUND    0x08
  99. #define SNS1_FILE_PROTECTED    0x04
  100. #define SNS1_WRITE_INHIBITED    0x02
  101. #define SNS1_INPRECISE_END    0x01
  102.  
  103. /*
  104.  * architectured values for third sense byte
  105.  */
  106. #define SNS2_REQ_INH_WRITE    0x80
  107. #define SNS2_CORRECTABLE    0x40
  108. #define SNS2_FIRST_LOG_ERR    0x20
  109. #define SNS2_ENV_DATA_PRESENT    0x10
  110. #define SNS2_INPRECISE_END    0x04
  111.  
  112. struct ccw1 {
  113.     __u8  cmd_code;        /* command code */
  114.     __u8  flags;           /* flags, like IDA addressing, etc. */
  115.     __u16 count;           /* byte count */
  116.     __u32 cda;             /* data address */
  117. } __attribute__ ((packed,aligned(8)));
  118.  
  119. #define CCW_FLAG_DC        0x80
  120. #define CCW_FLAG_CC        0x40
  121. #define CCW_FLAG_SLI        0x20
  122. #define CCW_FLAG_SKIP        0x10
  123. #define CCW_FLAG_PCI        0x08
  124. #define CCW_FLAG_IDA        0x04
  125. #define CCW_FLAG_SUSPEND    0x02
  126.  
  127. #define CCW_CMD_READ_IPL    0x02
  128. #define CCW_CMD_NOOP        0x03
  129. #define CCW_CMD_BASIC_SENSE    0x04
  130. #define CCW_CMD_TIC        0x08
  131. #define CCW_CMD_STLCK           0x14
  132. #define CCW_CMD_SENSE_PGID    0x34
  133. #define CCW_CMD_SUSPEND_RECONN    0x5B
  134. #define CCW_CMD_RDC        0x64
  135. #define CCW_CMD_RELEASE        0x94
  136. #define CCW_CMD_SET_PGID    0xAF
  137. #define CCW_CMD_SENSE_ID    0xE4
  138. #define CCW_CMD_DCTL        0xF3
  139.  
  140. #define SENSE_MAX_COUNT        0x20
  141.  
  142. struct erw {
  143.     __u32 res0  : 3;      /* reserved */
  144.     __u32 auth  : 1;    /* Authorization check */
  145.     __u32 pvrf  : 1;      /* path-verification-required flag */
  146.     __u32 cpt   : 1;      /* channel-path timeout */
  147.     __u32 fsavf : 1;      /* Failing storage address validity flag */
  148.     __u32 cons  : 1;      /* concurrent-sense */
  149.     __u32 scavf : 1;    /* Secondary ccw address validity flag */
  150.     __u32 fsaf  : 1;    /* Failing storage address format */
  151.     __u32 scnt  : 6;      /* sense count if cons == 1 */
  152.     __u32 res16 : 16;     /* reserved */
  153. } __attribute__ ((packed));
  154.  
  155. /*
  156.  * subchannel logout area
  157.  */
  158. struct sublog {
  159.     __u32 res0  : 1;      /* reserved */
  160.     __u32 esf   : 7;      /* extended status flags */
  161.     __u32 lpum  : 8;      /* last path used mask */
  162.     __u32 arep  : 1;      /* ancillary report */
  163.     __u32 fvf   : 5;      /* field-validity flags */
  164.     __u32 sacc  : 2;      /* storage access code */
  165.     __u32 termc : 2;      /* termination code */
  166.     __u32 devsc : 1;      /* device-status check */
  167.     __u32 serr  : 1;      /* secondary error */
  168.     __u32 ioerr : 1;      /* i/o-error alert */
  169.     __u32 seqc  : 3;      /* sequence code */
  170. } __attribute__ ((packed));
  171.  
  172. /*
  173.  * Format 0 Extended Status Word (ESW)
  174.  */
  175. struct esw0 {
  176.     struct sublog sublog;    /* subchannel logout */
  177.     struct erw erw;            /* extended report word */
  178.     __u32  faddr[2];        /* failing storage address */
  179.     __u32  saddr;          /* secondary ccw address */
  180. } __attribute__ ((packed));
  181.  
  182. /*
  183.  * Format 1 Extended Status Word (ESW)
  184.  */
  185. struct esw1 {
  186.     __u8  zero0;        /* reserved zeros */
  187.     __u8  lpum;        /* last path used mask */
  188.     __u16 zero16;        /* reserved zeros */
  189.     struct erw erw;        /* extended report word */
  190.     __u32 zeros[3];     /* 2 fullwords of zeros */
  191. } __attribute__ ((packed));
  192.  
  193. /*
  194.  * Format 2 Extended Status Word (ESW)
  195.  */
  196. struct esw2 {
  197.     __u8  zero0;        /* reserved zeros */
  198.     __u8  lpum;        /* last path used mask */
  199.     __u16 dcti;        /* device-connect-time interval */
  200.     struct erw erw;        /* extended report word */
  201.     __u32 zeros[3];     /* 2 fullwords of zeros */
  202. } __attribute__ ((packed));
  203.  
  204. /*
  205.  * Format 3 Extended Status Word (ESW)
  206.  */
  207. struct esw3 {
  208.     __u8  zero0;        /* reserved zeros */
  209.     __u8  lpum;        /* last path used mask */
  210.     __u16 res;        /* reserved */
  211.     struct erw erw;        /* extended report word */
  212.     __u32 zeros[3];     /* 2 fullwords of zeros */
  213. } __attribute__ ((packed));
  214.  
  215. /*
  216.  * interruption response block
  217.  */
  218. struct irb {
  219.     struct scsw scsw;    /* subchannel status word */
  220.     union {            /* extended status word, 4 formats */
  221.         struct esw0 esw0;
  222.         struct esw1 esw1;
  223.         struct esw2 esw2;
  224.         struct esw3 esw3;
  225.     } esw;
  226.     __u8   ecw[32];        /* extended control word */
  227. } __attribute__ ((packed,aligned(4)));
  228.  
  229. /*
  230.  * command information word  (CIW) layout
  231.  */
  232. struct ciw {
  233.     __u32 et       :  2;     /* entry type */
  234.     __u32 reserved :  2;     /* reserved */
  235.     __u32 ct       :  4;     /* command type */
  236.     __u32 cmd      :  8;     /* command */
  237.     __u32 count    : 16;     /* coun */
  238. } __attribute__ ((packed));
  239.  
  240. #define CIW_TYPE_RCD    0x0        /* read configuration data */
  241. #define CIW_TYPE_SII    0x1        /* set interface identifier */
  242. #define CIW_TYPE_RNI    0x2        /* read node identifier */
  243.  
  244. /*
  245.  * Flags used as input parameters for do_IO()
  246.  */
  247. #define DOIO_ALLOW_SUSPEND     0x0001 /* allow for channel prog. suspend */
  248. #define DOIO_DENY_PREFETCH     0x0002 /* don't allow for CCW prefetch */
  249. #define DOIO_SUPPRESS_INTER     0x0004 /* suppress intermediate inter. */
  250.                     /* ... for suspended CCWs */
  251. /* Device or subchannel gone. */
  252. #define CIO_GONE       0x0001
  253. /* No path to device. */
  254. #define CIO_NO_PATH    0x0002
  255. /* Device has appeared. */
  256. #define CIO_OPER       0x0004
  257. /* Sick revalidation of device. */
  258. #define CIO_REVALIDATE 0x0008
  259.  
  260. struct diag210 {
  261.     __u16 vrdcdvno : 16;   /* device number (input) */
  262.     __u16 vrdclen  : 16;   /* data block length (input) */
  263.     __u32 vrdcvcla : 8;    /* virtual device class (output) */
  264.     __u32 vrdcvtyp : 8;    /* virtual device type (output) */
  265.     __u32 vrdcvsta : 8;    /* virtual device status (output) */
  266.     __u32 vrdcvfla : 8;    /* virtual device flags (output) */
  267.     __u32 vrdcrccl : 8;    /* real device class (output) */
  268.     __u32 vrdccrty : 8;    /* real device type (output) */
  269.     __u32 vrdccrmd : 8;    /* real device model (output) */
  270.     __u32 vrdccrft : 8;    /* real device feature (output) */
  271. } __attribute__ ((packed,aligned(4)));
  272.  
  273. extern int diag210(struct diag210 *addr);
  274.  
  275. extern void wait_cons_dev(void);
  276.  
  277. extern void clear_all_subchannels(void);
  278.  
  279. #endif
  280.  
  281. #endif
  282.