s390/ap: Extend struct ap_queue_status with some convenience fields

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>
This commit is contained in:
Harald Freudenberger
2025-10-17 12:14:14 +02:00
committed by Heiko Carstens
parent 507cff242a
commit 7f124d78d4

View 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;
};
};
};
/*