s390io.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:4k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  arch/s390/kernel/s390io.h
  3.  *
  4.  *  S390 version
  5.  *    Copyright (C) 1999,2000 IBM Deutschland Entwicklung GmbH, IBM Corporation
  6.  *    Author(s): Ingo Adlung (adlung@de.ibm.com)
  7.  */
  8. #ifndef __s390io_h
  9. #define __s390io_h
  10. /*
  11.  * IRQ data structure used by I/O subroutines
  12.  *
  13.  * Note : If bit flags are added, the "unused" value must be
  14.  *        decremented accordingly !
  15.  */
  16. typedef struct _ioinfo {
  17.      unsigned int  irq;           /* aka. subchannel number */
  18.      spinlock_t    irq_lock;      /* irq lock */
  19.      struct _ioinfo *prev;
  20.      struct _ioinfo *next;
  21.      union {
  22.         unsigned int info;
  23.         struct {
  24.            unsigned int  busy      : 1;  /* device currently in use */
  25.            unsigned int  oper      : 1;  /* device is operational */
  26.            unsigned int  fast      : 1;  /* post with "channel end", ...    */
  27.                                          /* ... don't wait for "device end" */
  28.                                          /* ... from do_IO() parameters     */
  29.            unsigned int  ready     : 1;  /* interrupt handler registered */
  30.            unsigned int  haltio    : 1;  /* halt_IO in process */
  31.            unsigned int  doio      : 1;  /* do_IO in process */
  32.            unsigned int  doio_q    : 1;  /* do_IO queued - only possible ... */
  33.                                          /* ... if 'fast' is set too */
  34.            unsigned int  w4final   : 1;  /* wait for final status, internally */
  35.                                          /* ... used with 'fast' setting only */
  36.            unsigned int  repall    : 1;  /* report every interrupt status */
  37.            unsigned int  unready   : 1;  /* deregister irq handler in process */
  38.            unsigned int  d_disable : 1;  /* delayed disabling required */
  39.            unsigned int  w4sense   : 1;  /* SENSE status pending */
  40.            unsigned int  syncio    : 1;  /* synchronous I/O requested */
  41.            unsigned int  consns    : 1;  /* concurrent sense is available */
  42.            unsigned int  delsense  : 1;  /* delayed SENSE required */
  43.            unsigned int  s_pend    : 1;  /* status pending condition */
  44.            unsigned int  pgid      : 1;  /* "path group ID" is valid */
  45.            unsigned int  pgid_supp : 1;  /* "path group ID" command is supported */
  46.            unsigned int  esid      : 1;  /* Ext. SenseID supported by HW */
  47.            unsigned int  rcd       : 1;  /* RCD supported by HW */
  48.            unsigned int  repnone   : 1;  /* don't call IRQ handler on interrupt */
  49.            unsigned int  newreq    : 1;  /* new register interface */
  50.            unsigned int  dval      : 1;  /* device number valid */
  51.            unsigned int  unknown   : 1;  /* unknown device - if SenseID failed */
  52.            unsigned int  unused    : (sizeof(unsigned int)*8 - 24); /* unused */
  53.               } __attribute__ ((packed)) flags;
  54.         } ui;
  55.      unsigned long u_intparm;     /* user interruption parameter */
  56.      senseid_t     senseid;       /* SenseID info */
  57.      irq_desc_t    irq_desc;      /* irq descriptor */
  58.      not_oper_handler_func_t nopfunc;  /* not oper handler */
  59.      __u8          ulpm;          /* logical path mask used for I/O */
  60.      __u8          opm;           /* path mask of operational paths */
  61.      __u16         devno;         /* device number */
  62.      pgid_t        pgid;          /* path group ID */
  63.      schib_t       schib;         /* subchannel information block */
  64.      orb_t         orb;           /* operation request block */
  65.      devstat_t     devstat;       /* device status */
  66.      ccw1_t       *qcpa;          /* queued channel program */
  67.      ccw1_t        senseccw;      /* ccw for sense command */
  68.      __u8          sense_data[32];/* buffer for basic sense */
  69.      unsigned int  stctl;         /* accumulated status control from irb */
  70.      unsigned long qintparm;      /* queued interruption parameter  */
  71.      unsigned long qflag;         /* queued flags */
  72.      __u8          qlpm;          /* queued logical path mask */
  73.    } __attribute__ ((aligned(8))) ioinfo_t;
  74. #define IOINFO_FLAGS_BUSY    0x80000000
  75. #define IOINFO_FLAGS_OPER    0x40000000
  76. #define IOINFO_FLAGS_FAST    0x20000000
  77. #define IOINFO_FLAGS_READY   0x10000000
  78. #define IOINFO_FLAGS_HALTIO  0x08000000
  79. #define IOINFO_FLAGS_DOIO    0x04000000
  80. #define IOINFO_FLAGS_DOIO_Q  0x02000000
  81. #define IOINFO_FLAGS_W4FINAL 0x01000000
  82. #define IOINFO_FLAGS_REPALL  0x00800000
  83. extern ioinfo_t *ioinfo[];
  84. #endif  /* __s390io_h */