/** * struct ccw1 - channel command word * @cmd_code: command code * @flags: flags, like IDA addressing, etc. * @count: byte count * @cda: data address * * The ccw is the basic structure to build channel programs that perform * operations with the device or the control unit. Only Format-1 channel * command words are supported.
*/ struct ccw1 {
__u8 cmd_code;
__u8 flags;
__u16 count;
dma32_t cda;
} __attribute__ ((packed,aligned(8)));
/** * struct ccw0 - channel command word * @cmd_code: command code * @cda: data address * @flags: flags, like IDA addressing, etc. * @reserved: will be ignored * @count: byte count * * The format-0 ccw structure.
*/ struct ccw0 {
__u8 cmd_code;
__u32 cda : 24;
__u8 flags;
__u8 reserved;
__u16 count;
} __packed __aligned(8);
/** * struct irb - interruption response block * @scsw: subchannel status word * @esw: extended status word * @ecw: extended control word * * The irb that is handed to the device driver when an interrupt occurs. For * solicited interrupts, the common I/O layer already performs checks whether * a field is valid; a field not being valid is always passed as %0. * If a unit check occurred, @ecw may contain sense data; this is retrieved * by the common I/O layer itself if the device doesn't support concurrent * sense (so that the device driver never needs to perform basic sense itself). * For unsolicited interrupts, the irb is passed as-is (expect for sense data, * if applicable).
*/ struct irb { union scsw scsw; union { struct esw0 esw0; struct esw1 esw1; struct esw2 esw2; struct esw3 esw3; struct esw_eadm eadm;
} esw;
__u8 ecw[32];
} __attribute__ ((packed,aligned(4)));
/* * Flags used as input parameters for do_IO()
*/ #define DOIO_ALLOW_SUSPEND 0x0001 /* allow for channel prog. suspend */ #define DOIO_DENY_PREFETCH 0x0002 /* don't allow for CCW prefetch */ #define DOIO_SUPPRESS_INTER 0x0004 /* suppress intermediate inter. */ /* ... for suspended CCWs */ /* Device or subchannel gone. */ #define CIO_GONE 0x0001 /* No path to device. */ #define CIO_NO_PATH 0x0002 /* Device has appeared. */ #define CIO_OPER 0x0004 /* Sick revalidation of device. */ #define CIO_REVALIDATE 0x0008 /* Device did not respond in time. */ #define CIO_BOXED 0x0010
/** * struct ccw_dev_id - unique identifier for ccw devices * @ssid: subchannel set id * @devno: device number * * This structure is not directly based on any hardware structure. The * hardware identifies a device by its device number and its subchannel, * which is in turn identified by its id. In order to get a unique identifier * for ccw devices across subchannel sets, @struct ccw_dev_id has been * introduced.
*/ struct ccw_dev_id {
u8 ssid;
u16 devno;
};
/** * ccw_dev_id_is_equal() - compare two ccw_dev_ids * @dev_id1: a ccw_dev_id * @dev_id2: another ccw_dev_id * Returns: * %1 if the two structures are equal field-by-field, * %0 if not. * Context: * any
*/ staticinlineint ccw_dev_id_is_equal(struct ccw_dev_id *dev_id1, struct ccw_dev_id *dev_id2)
{ if ((dev_id1->ssid == dev_id2->ssid) &&
(dev_id1->devno == dev_id2->devno)) return 1; return 0;
}
/** * pathmask_to_pos() - find the position of the left-most bit in a pathmask * @mask: pathmask with at least one bit set
*/ staticinline u8 pathmask_to_pos(u8 mask)
{ return 8 - ffs(mask);
}
/* Function from drivers/s390/cio/chsc.c */ int chsc_sstpc(void *page, unsignedint op, u16 ctrl, long *clock_delta); int chsc_sstpi(void *page, void *result, size_t size); int chsc_stzi(void *page, void *result, size_t size); int chsc_sgib(u32 origin); int chsc_scud(u16 cu, u64 *esm, u8 *esm_valid);
#endif
Messung V0.5
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.