Commit 56c5c683 authored by Harald Freudenberger's avatar Harald Freudenberger Committed by Heiko Carstens

s390/zcrypt: Rework struct ap_qact_ap_info.

The ap_qact_ap_info struct can get more easy handled when the fields
in there can be accessed by their names but also the struct as a whole
with just an unsigned long value. This patch reworks this struct to be
a union and adapt the using code accordingly.
Signed-off-by: default avatarHarald Freudenberger <freude@linux.vnet.ibm.com>
Signed-off-by: default avatarHeiko Carstens <heiko.carstens@de.ibm.com>
parent a401917b
...@@ -117,45 +117,45 @@ static inline int ap_qci(void *config) ...@@ -117,45 +117,45 @@ static inline int ap_qci(void *config)
} }
/* /*
* struct ap_qact_ap_info - used together with the * union ap_qact_ap_info - used together with the
* ap_aqic() function to provide a convenient way * ap_aqic() function to provide a convenient way
* to handle the ap info needed by the qact function. * to handle the ap info needed by the qact function.
*/ */
struct ap_qact_ap_info { union ap_qact_ap_info {
unsigned int _res1 : 3; unsigned long val;
struct {
unsigned int : 3;
unsigned int mode : 3; unsigned int mode : 3;
unsigned int _res2 : 26; unsigned int : 26;
unsigned int cat : 8; unsigned int cat : 8;
unsigned int _res3 : 8; unsigned int : 8;
unsigned char ver[2]; unsigned char ver[2];
};
}; };
/** /**
* ap_qact(): Query AP combatibility type. * ap_qact(): Query AP combatibility type.
* @qid: The AP queue number * @qid: The AP queue number
* @apinfo: On input the info about the AP queue (content of GR1 * @apinfo: On input the info about the AP queue. On output the
* according to the AR). On output the alternate AP queue * alternate AP queue info provided by the qact function
* info provided by the qact function in GR2 is stored in. * in GR2 is stored in.
* *
* Returns AP queue status. Check response_code field for failures. * Returns AP queue status. Check response_code field for failures.
*/ */
static inline struct ap_queue_status ap_qact(ap_qid_t qid, int ifbit, static inline struct ap_queue_status ap_qact(ap_qid_t qid, int ifbit,
struct ap_qact_ap_info *apinfo) union ap_qact_ap_info *apinfo)
{ {
register unsigned long reg0 asm ("0") = qid | (5UL << 24) register unsigned long reg0 asm ("0") = qid | (5UL << 24)
| ((ifbit & 0x01) << 22); | ((ifbit & 0x01) << 22);
register struct ap_qact_ap_info reg1_in asm ("1") = *apinfo; register unsigned long reg1_in asm ("1") = apinfo->val;
register struct ap_queue_status reg1_out asm ("1"); register struct ap_queue_status reg1_out asm ("1");
register unsigned long reg2_in asm ("2") = 0; register unsigned long reg2 asm ("2") = 0;
register struct ap_qact_ap_info reg2_out asm ("2");
asm volatile( asm volatile(
".long 0xb2af0000" /* PQAP(QACT) */ ".long 0xb2af0000" /* PQAP(QACT) */
: "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), : "+d" (reg0), "+d" (reg1_in), "=d" (reg1_out), "+d" (reg2)
"+d" (reg2_in), "=d" (reg2_out) : : "cc");
: apinfo->val = reg2;
: "cc");
*apinfo = reg2_out;
return reg1_out; return reg1_out;
} }
......
...@@ -1021,7 +1021,7 @@ static int ap_get_compatible_type(ap_qid_t qid, int rawtype, unsigned int func) ...@@ -1021,7 +1021,7 @@ static int ap_get_compatible_type(ap_qid_t qid, int rawtype, unsigned int func)
*/ */
if (ap_qact_available()) { if (ap_qact_available()) {
struct ap_queue_status status; struct ap_queue_status status;
struct ap_qact_ap_info apinfo = {0}; union ap_qact_ap_info apinfo = {0};
apinfo.mode = (func >> 26) & 0x07; apinfo.mode = (func >> 26) & 0x07;
apinfo.cat = AP_DEVICE_TYPE_CEX6; apinfo.cat = AP_DEVICE_TYPE_CEX6;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment