]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
s390/ap: Extend struct ap_queue_status with some convenience fields
authorHarald Freudenberger <freude@linux.ibm.com>
Fri, 17 Oct 2025 10:14:14 +0000 (12:14 +0200)
committerHeiko Carstens <hca@linux.ibm.com>
Tue, 21 Oct 2025 09:09:21 +0000 (11:09 +0200)
Sometimes there is a different view of the AP status word
needed. So here is slight rework of the struct ap_queue_status
to open up the possibility to have different ways of accessing
the AP status bits and fields.

The new struct ap_queue_status

struct ap_queue_status {
union {
unsigned int value : 32;
struct {
unsigned int status_bits : 8;
unsigned int rc : 8;
unsigned int : 16;
};
struct {
unsigned int queue_empty : 1;
unsigned int replies_waiting : 1;
unsigned int queue_full : 1;
unsigned int : 3;
unsigned int async : 1;
unsigned int irq_enabled : 1;
unsigned int response_code : 8;
unsigned int : 16;
};
};
};

comprises the old struct ap_queue_status but extends it
to have this also accessible as an unsigned int required
for example for a simple print or trace of the whole value.

Note that this rework is fully backward compatible to the
existing code exploiting the struct ap_queue_status.

Signed-off-by: Harald Freudenberger <freude@linux.ibm.com>
Reviewed-by: Anthony Krowiak <akrowiak@linux.ibm.com>
Reviewed-by: Holger Dengler <dengler@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
arch/s390/include/asm/ap.h

index 56817990c73db50cc7b1f4d669fe7646d3fd28f6..b24459f692faa8ab8d955c4fe7f56370062488ec 100644 (file)
@@ -38,16 +38,30 @@ typedef unsigned int ap_qid_t;
  * The ap queue status word is returned by all three AP functions
  * (PQAP, NQAP and DQAP).  There's a set of flags in the first
  * byte, followed by a 1 byte response code.
+ *
+ * For convenience the 'value' field is a 32 bit access of the
+ * whole status and the 'status_bits' and 'rc' fields comprise
+ * the leftmost 8 status bits and the response_code.
  */
 struct ap_queue_status {
-       unsigned int queue_empty        : 1;
-       unsigned int replies_waiting    : 1;
-       unsigned int queue_full         : 1;
-       unsigned int                    : 3;
-       unsigned int async              : 1;
-       unsigned int irq_enabled        : 1;
-       unsigned int response_code      : 8;
-       unsigned int                    : 16;
+       union {
+               unsigned int value                      : 32;
+               struct {
+                       unsigned int status_bits        : 8;
+                       unsigned int rc                 : 8;
+                       unsigned int                    : 16;
+               };
+               struct {
+                       unsigned int queue_empty        : 1;
+                       unsigned int replies_waiting    : 1;
+                       unsigned int queue_full         : 1;
+                       unsigned int                    : 3;
+                       unsigned int async              : 1;
+                       unsigned int irq_enabled        : 1;
+                       unsigned int response_code      : 8;
+                       unsigned int                    : 16;
+               };
+       };
 };
 
 /*