On Mon, 18 May 2020 18:07:26 +0200 Pierre Morel <pmorel@xxxxxxxxxxxxx> wrote: > Provide some definitions and library routines that can be used by > tests targeting the channel subsystem. > > Debug function can be activated by defining DEBUG_CSS before the > inclusion of the css.h header file. > > Signed-off-by: Pierre Morel <pmorel@xxxxxxxxxxxxx> > --- > lib/s390x/css.h | 259 +++++++++++++++++++++++++++++++++++++++++++ > lib/s390x/css_dump.c | 157 ++++++++++++++++++++++++++ > s390x/Makefile | 1 + > 3 files changed, 417 insertions(+) > create mode 100644 lib/s390x/css.h > create mode 100644 lib/s390x/css_dump.c > (...) > +struct ccw1 { > + unsigned char code; > + unsigned char flags; > + unsigned short count; I'm wondering why you're using unsigned {char,short} here, instead of the uint*_t types everywhere else? It's not wrong, but probably better to be consistent? > + uint32_t data_address; > +} __attribute__ ((aligned(4))); > + > +#define SID_ONE 0x00010000 > + I think it would be beneficial for the names to somewhat match the naming in Linux and/or QEMU -- or more speaking names (as you do for some), which is also good. > +#define ORB_M_KEY 0xf0000000 > +#define ORB_F_SUSPEND 0x08000000 > +#define ORB_F_STREAMING 0x04000000 > +#define ORB_F_MODIFCTRL 0x02000000 > +#define ORB_F_SYNC 0x01000000 > +#define ORB_F_FORMAT 0x00800000 > +#define ORB_F_PREFETCH 0x00400000 > +#define ORB_F_INIT_IRQ 0x00200000 ORB_F_ISIC? (As it does not refer to 'initialization', but 'initial'.) > +#define ORB_F_ADDRLIMIT 0x00100000 > +#define ORB_F_SUSP_IRQ 0x00080000 ORB_F_SSIC? (As it deals with suppression.) > +#define ORB_F_TRANSPORT 0x00040000 > +#define ORB_F_IDAW2 0x00020000 ORB_F_IDAW_FMT2? Or following Linux/QEMU, use ORB_F_C64 for a certain retro appeal :) > +#define ORB_F_IDAW_2K 0x00010000 > +#define ORB_M_LPM 0x0000ff00 > +#define ORB_F_LPM_DFLT 0x00008000 That's a default lpm of 0x80, right? It's a bit buried between the orb definitions, and it also seems to be more of a implementation choice -- move it out from the flags here? > +#define ORB_F_ILSM 0x00000080 ORB_F_ILS? > +#define ORB_F_CCW_IND 0x00000040 ORB_F_MIDAW? I had a hard time figuring out that one :) > +#define ORB_F_ORB_EXT 0x00000001 (...) > +/* > + * Try o have a more human representation of the PMCW flags s/o/to/ > + * each letter in the string represent the first s/represent/represents/ > + * letter of the associated bit in the flag fields. > + */ (...) Generally, looks good to me.