etr.h

来自「linux 内核源代码」· C头文件 代码 · 共 220 行

H
220
字号
/* *  include/asm-s390/etr.h * *  Copyright IBM Corp. 2006 *  Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) */#ifndef __S390_ETR_H#define __S390_ETR_H/* ETR attachment control register */struct etr_eacr {	unsigned int e0		: 1;	/* port 0 stepping control */	unsigned int e1		: 1;	/* port 1 stepping control */	unsigned int _pad0	: 5;	/* must be 00100 */	unsigned int dp		: 1;	/* data port control */	unsigned int p0		: 1;	/* port 0 change recognition control */	unsigned int p1		: 1;	/* port 1 change recognition control */	unsigned int _pad1	: 3;	/* must be 000 */	unsigned int ea		: 1;	/* ETR alert control */	unsigned int es		: 1;	/* ETR sync check control */	unsigned int sl		: 1;	/* switch to local control */} __attribute__ ((packed));/* Port state returned by steai */enum etr_psc {	etr_psc_operational = 0,	etr_psc_semi_operational = 1,	etr_psc_protocol_error =  4,	etr_psc_no_symbols = 8,	etr_psc_no_signal = 12,	etr_psc_pps_mode = 13};/* Logical port state returned by stetr */enum etr_lpsc {	etr_lpsc_operational_step = 0,	etr_lpsc_operational_alt = 1,	etr_lpsc_semi_operational = 2,	etr_lpsc_protocol_error =  4,	etr_lpsc_no_symbol_sync = 8,	etr_lpsc_no_signal = 12,	etr_lpsc_pps_mode = 13};/* ETR status words */struct etr_esw {	struct etr_eacr eacr;		/* attachment control register */	unsigned int y		: 1;	/* stepping mode */	unsigned int _pad0	: 5;	/* must be 00000 */	unsigned int p		: 1;	/* stepping port number */	unsigned int q		: 1;	/* data port number */	unsigned int psc0	: 4;	/* port 0 state code */	unsigned int psc1	: 4;	/* port 1 state code */} __attribute__ ((packed));/* Second level data register status word */struct etr_slsw {	unsigned int vv1	: 1;	/* copy of validity bit data frame 1 */	unsigned int vv2	: 1;	/* copy of validity bit data frame 2 */	unsigned int vv3	: 1;	/* copy of validity bit data frame 3 */	unsigned int vv4	: 1;	/* copy of validity bit data frame 4 */	unsigned int _pad0	: 19;	/* must by all zeroes */	unsigned int n		: 1;	/* EAF port number */	unsigned int v1		: 1;	/* validity bit ETR data frame 1 */	unsigned int v2		: 1;	/* validity bit ETR data frame 2 */	unsigned int v3		: 1;	/* validity bit ETR data frame 3 */	unsigned int v4		: 1;	/* validity bit ETR data frame 4 */	unsigned int _pad1	: 4;	/* must be 0000 */} __attribute__ ((packed));/* ETR data frames */struct etr_edf1 {	unsigned int u		: 1;	/* untuned bit */	unsigned int _pad0	: 1;	/* must be 0 */	unsigned int r		: 1;	/* service request bit */	unsigned int _pad1	: 4;	/* must be 0000 */	unsigned int a		: 1;	/* time adjustment bit */	unsigned int net_id	: 8;	/* ETR network id */	unsigned int etr_id	: 8;	/* id of ETR which sends data frames */	unsigned int etr_pn	: 8;	/* port number of ETR output port */} __attribute__ ((packed));struct etr_edf2 {	unsigned int etv	: 32;	/* Upper 32 bits of TOD. */} __attribute__ ((packed));struct etr_edf3 {	unsigned int rc		: 8;	/* failure reason code */	unsigned int _pad0	: 3;	/* must be 000 */	unsigned int c		: 1;	/* ETR coupled bit */	unsigned int tc		: 4;	/* ETR type code */	unsigned int blto	: 8;	/* biased local time offset */					/* (blto - 128) * 15 = minutes */	unsigned int buo	: 8;	/* biased utc offset */					/* (buo - 128) = leap seconds */} __attribute__ ((packed));struct etr_edf4 {	unsigned int ed		: 8;	/* ETS device dependent data */	unsigned int _pad0	: 1;	/* must be 0 */	unsigned int buc	: 5;	/* biased ut1 correction */					/* (buc - 16) * 0.1 seconds */	unsigned int em		: 6;	/* ETS error magnitude */	unsigned int dc		: 6;	/* ETS drift code */	unsigned int sc		: 6;	/* ETS steering code */} __attribute__ ((packed));/* * ETR attachment information block, two formats * format 1 has 4 reserved words with a size of 64 bytes * format 2 has 16 reserved words with a size of 96 bytes */struct etr_aib {	struct etr_esw esw;	struct etr_slsw slsw;	unsigned long long tsp;	struct etr_edf1 edf1;	struct etr_edf2 edf2;	struct etr_edf3 edf3;	struct etr_edf4 edf4;	unsigned int reserved[16];} __attribute__ ((packed,aligned(8)));/* ETR interruption parameter */struct etr_interruption_parameter {	unsigned int _pad0	: 8;	unsigned int pc0	: 1;	/* port 0 state change */	unsigned int pc1	: 1;	/* port 1 state change */	unsigned int _pad1	: 3;	unsigned int eai	: 1;	/* ETR alert indication */	unsigned int _pad2	: 18;} __attribute__ ((packed));/* Query TOD offset result */struct etr_ptff_qto {	unsigned long long physical_clock;	unsigned long long tod_offset;	unsigned long long logical_tod_offset;	unsigned long long tod_epoch_difference;} __attribute__ ((packed));/* Inline assembly helper functions */static inline int etr_setr(struct etr_eacr *ctrl){	int rc = -ENOSYS;	asm volatile(		"	.insn	s,0xb2160000,0(%2)\n"		"0:	la	%0,0\n"		"1:\n"		EX_TABLE(0b,1b)		: "+d" (rc) : "m" (*ctrl), "a" (ctrl));	return rc;}/* Stores a format 1 aib with 64 bytes */static inline int etr_stetr(struct etr_aib *aib){	int rc = -ENOSYS;	asm volatile(		"	.insn	s,0xb2170000,0(%2)\n"		"0:	la	%0,0\n"		"1:\n"		EX_TABLE(0b,1b)		: "+d" (rc) : "m" (*aib), "a" (aib));	return rc;}/* Stores a format 2 aib with 96 bytes for specified port */static inline int etr_steai(struct etr_aib *aib, unsigned int func){	register unsigned int reg0 asm("0") = func;	int rc = -ENOSYS;	asm volatile(		"	.insn	s,0xb2b30000,0(%2)\n"		"0:	la	%0,0\n"		"1:\n"		EX_TABLE(0b,1b)		: "+d" (rc) : "m" (*aib), "a" (aib), "d" (reg0));	return rc;}/* Function codes for the steai instruction. */#define ETR_STEAI_STEPPING_PORT		0x10#define ETR_STEAI_ALTERNATE_PORT	0x11#define ETR_STEAI_PORT_0		0x12#define ETR_STEAI_PORT_1		0x13static inline int etr_ptff(void *ptff_block, unsigned int func){	register unsigned int reg0 asm("0") = func;	register unsigned long reg1 asm("1") = (unsigned long) ptff_block;	int rc = -ENOSYS;	asm volatile(		"	.word	0x0104\n"		"	ipm	%0\n"		"	srl	%0,28\n"		: "=d" (rc), "=m" (ptff_block)		: "d" (reg0), "d" (reg1), "m" (ptff_block) : "cc");	return rc;}/* Function codes for the ptff instruction. */#define ETR_PTFF_QAF	0x00	/* query available functions */#define ETR_PTFF_QTO	0x01	/* query tod offset */#define ETR_PTFF_QSI	0x02	/* query steering information */#define ETR_PTFF_ATO	0x40	/* adjust tod offset */#define ETR_PTFF_STO	0x41	/* set tod offset */#define ETR_PTFF_SFS	0x42	/* set fine steering rate */#define ETR_PTFF_SGS	0x43	/* set gross steering rate *//* Functions needed by the machine check handler */extern void etr_switch_to_local(void);extern void etr_sync_check(void);#endif /* __S390_ETR_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?