cregit-Linux how code gets into the kernel

Release 4.14 arch/s390/include/asm/ap.h

/*
 * 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 <akrowia@linux.vnet.ibm.com>
 *            Martin Schwidefsky <schwidefsky@de.ibm.com>
 *            Harald Freudenberger <freude@de.ibm.com>
 */

#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_ */

Overall Contributors

PersonTokensPropCommitsCommitProp
Harald Freudenberger20366.12%266.67%
Tony Krowiak10433.88%133.33%
Total307100.00%3100.00%
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.