forked from torvalds/linux
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…
…/git/s390/linux Pull more s390 updates from Martin Schwidefsky: "The second patch set for the 4.14 merge window: - Convert the dasd device driver to the blk-mq interface. - Provide three zcrypt interfaces for vfio_ap. These will be required for KVM guest access to the crypto cards attached via the AP bus. - A couple of memory management bug fixes." * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/s390/linux: s390/dasd: blk-mq conversion s390/mm: use a single lock for the fields in mm_context_t s390/mm: fix race on mm->context.flush_mm s390/mm: fix local TLB flushing vs. detach of an mm address space s390/zcrypt: externalize AP queue interrupt control s390/zcrypt: externalize AP config info query s390/zcrypt: externalize test AP queue s390/mm: use VM_BUG_ON in crst_table_[upgrade|downgrade]
- Loading branch information
Showing
13 changed files
with
416 additions
and
274 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,126 @@ | ||
/* | ||
* Adjunct processor (AP) interfaces | ||
* | ||
* Copyright IBM Corp. 2017 | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License (version 2 only) | ||
* as published by the Free Software Foundation. | ||
* | ||
* Author(s): Tony Krowiak <[email protected]> | ||
* Martin Schwidefsky <[email protected]> | ||
* Harald Freudenberger <[email protected]> | ||
*/ | ||
|
||
#ifndef _ASM_S390_AP_H_ | ||
#define _ASM_S390_AP_H_ | ||
|
||
/** | ||
* The ap_qid_t identifier of an ap queue. | ||
* If the AP facilities test (APFT) facility is available, | ||
* card and queue index are 8 bit values, otherwise | ||
* card index is 6 bit and queue index a 4 bit value. | ||
*/ | ||
typedef unsigned int ap_qid_t; | ||
|
||
#define AP_MKQID(_card, _queue) (((_card) & 63) << 8 | ((_queue) & 255)) | ||
#define AP_QID_CARD(_qid) (((_qid) >> 8) & 63) | ||
#define AP_QID_QUEUE(_qid) ((_qid) & 255) | ||
|
||
/** | ||
* struct ap_queue_status - Holds the AP queue status. | ||
* @queue_empty: Shows if queue is empty | ||
* @replies_waiting: Waiting replies | ||
* @queue_full: Is 1 if the queue is full | ||
* @irq_enabled: Shows if interrupts are enabled for the AP | ||
* @response_code: Holds the 8 bit response code | ||
* | ||
* 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. | ||
*/ | ||
struct ap_queue_status { | ||
unsigned int queue_empty : 1; | ||
unsigned int replies_waiting : 1; | ||
unsigned int queue_full : 1; | ||
unsigned int _pad1 : 4; | ||
unsigned int irq_enabled : 1; | ||
unsigned int response_code : 8; | ||
unsigned int _pad2 : 16; | ||
}; | ||
|
||
/** | ||
* ap_test_queue(): Test adjunct processor queue. | ||
* @qid: The AP queue number | ||
* @tbit: Test facilities bit | ||
* @info: Pointer to queue descriptor | ||
* | ||
* Returns AP queue status structure. | ||
*/ | ||
struct ap_queue_status ap_test_queue(ap_qid_t qid, | ||
int tbit, | ||
unsigned long *info); | ||
|
||
struct ap_config_info { | ||
unsigned int apsc : 1; /* S bit */ | ||
unsigned int apxa : 1; /* N bit */ | ||
unsigned int qact : 1; /* C bit */ | ||
unsigned int rc8a : 1; /* R bit */ | ||
unsigned char _reserved1 : 4; | ||
unsigned char _reserved2[3]; | ||
unsigned char Na; /* max # of APs - 1 */ | ||
unsigned char Nd; /* max # of Domains - 1 */ | ||
unsigned char _reserved3[10]; | ||
unsigned int apm[8]; /* AP ID mask */ | ||
unsigned int aqm[8]; /* AP queue mask */ | ||
unsigned int adm[8]; /* AP domain mask */ | ||
unsigned char _reserved4[16]; | ||
} __aligned(8); | ||
|
||
/* | ||
* ap_query_configuration(): Fetch cryptographic config info | ||
* | ||
* Returns the ap configuration info fetched via PQAP(QCI). | ||
* On success 0 is returned, on failure a negative errno | ||
* is returned, e.g. if the PQAP(QCI) instruction is not | ||
* available, the return value will be -EOPNOTSUPP. | ||
*/ | ||
int ap_query_configuration(struct ap_config_info *info); | ||
|
||
/* | ||
* struct ap_qirq_ctrl - convenient struct for easy invocation | ||
* of the ap_queue_irq_ctrl() function. This struct is passed | ||
* as GR1 parameter to the PQAP(AQIC) instruction. For details | ||
* please see the AR documentation. | ||
*/ | ||
struct ap_qirq_ctrl { | ||
unsigned int _res1 : 8; | ||
unsigned int zone : 8; /* zone info */ | ||
unsigned int ir : 1; /* ir flag: enable (1) or disable (0) irq */ | ||
unsigned int _res2 : 4; | ||
unsigned int gisc : 3; /* guest isc field */ | ||
unsigned int _res3 : 6; | ||
unsigned int gf : 2; /* gisa format */ | ||
unsigned int _res4 : 1; | ||
unsigned int gisa : 27; /* gisa origin */ | ||
unsigned int _res5 : 1; | ||
unsigned int isc : 3; /* irq sub class */ | ||
}; | ||
|
||
/** | ||
* ap_queue_irq_ctrl(): Control interruption on a AP queue. | ||
* @qid: The AP queue number | ||
* @qirqctrl: struct ap_qirq_ctrl, see above | ||
* @ind: The notification indicator byte | ||
* | ||
* Returns AP queue status. | ||
* | ||
* Control interruption on the given AP queue. | ||
* Just a simple wrapper function for the low level PQAP(AQIC) | ||
* instruction available for other kernel modules. | ||
*/ | ||
struct ap_queue_status ap_queue_irq_ctrl(ap_qid_t qid, | ||
struct ap_qirq_ctrl qirqctrl, | ||
void *ind); | ||
|
||
#endif /* _ASM_S390_AP_H_ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.