Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.2.
  1/*
  2 *  include/asm-s390/etr.h
  3 *
  4 *  Copyright IBM Corp. 2006
  5 *  Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
  6 */
  7#ifndef __S390_ETR_H
  8#define __S390_ETR_H
  9
 10/* ETR attachment control register */
 11struct etr_eacr {
 12	unsigned int e0		: 1;	/* port 0 stepping control */
 13	unsigned int e1		: 1;	/* port 1 stepping control */
 14	unsigned int _pad0	: 5;	/* must be 00100 */
 15	unsigned int dp		: 1;	/* data port control */
 16	unsigned int p0		: 1;	/* port 0 change recognition control */
 17	unsigned int p1		: 1;	/* port 1 change recognition control */
 18	unsigned int _pad1	: 3;	/* must be 000 */
 19	unsigned int ea		: 1;	/* ETR alert control */
 20	unsigned int es		: 1;	/* ETR sync check control */
 21	unsigned int sl		: 1;	/* switch to local control */
 22} __attribute__ ((packed));
 23
 24/* Port state returned by steai */
 25enum etr_psc {
 26	etr_psc_operational = 0,
 27	etr_psc_semi_operational = 1,
 28	etr_psc_protocol_error =  4,
 29	etr_psc_no_symbols = 8,
 30	etr_psc_no_signal = 12,
 31	etr_psc_pps_mode = 13
 32};
 33
 34/* Logical port state returned by stetr */
 35enum etr_lpsc {
 36	etr_lpsc_operational_step = 0,
 37	etr_lpsc_operational_alt = 1,
 38	etr_lpsc_semi_operational = 2,
 39	etr_lpsc_protocol_error =  4,
 40	etr_lpsc_no_symbol_sync = 8,
 41	etr_lpsc_no_signal = 12,
 42	etr_lpsc_pps_mode = 13
 43};
 44
 45/* ETR status words */
 46struct etr_esw {
 47	struct etr_eacr eacr;		/* attachment control register */
 48	unsigned int y		: 1;	/* stepping mode */
 49	unsigned int _pad0	: 5;	/* must be 00000 */
 50	unsigned int p		: 1;	/* stepping port number */
 51	unsigned int q		: 1;	/* data port number */
 52	unsigned int psc0	: 4;	/* port 0 state code */
 53	unsigned int psc1	: 4;	/* port 1 state code */
 54} __attribute__ ((packed));
 55
 56/* Second level data register status word */
 57struct etr_slsw {
 58	unsigned int vv1	: 1;	/* copy of validity bit data frame 1 */
 59	unsigned int vv2	: 1;	/* copy of validity bit data frame 2 */
 60	unsigned int vv3	: 1;	/* copy of validity bit data frame 3 */
 61	unsigned int vv4	: 1;	/* copy of validity bit data frame 4 */
 62	unsigned int _pad0	: 19;	/* must by all zeroes */
 63	unsigned int n		: 1;	/* EAF port number */
 64	unsigned int v1		: 1;	/* validity bit ETR data frame 1 */
 65	unsigned int v2		: 1;	/* validity bit ETR data frame 2 */
 66	unsigned int v3		: 1;	/* validity bit ETR data frame 3 */
 67	unsigned int v4		: 1;	/* validity bit ETR data frame 4 */
 68	unsigned int _pad1	: 4;	/* must be 0000 */
 69} __attribute__ ((packed));
 70
 71/* ETR data frames */
 72struct etr_edf1 {
 73	unsigned int u		: 1;	/* untuned bit */
 74	unsigned int _pad0	: 1;	/* must be 0 */
 75	unsigned int r		: 1;	/* service request bit */
 76	unsigned int _pad1	: 4;	/* must be 0000 */
 77	unsigned int a		: 1;	/* time adjustment bit */
 78	unsigned int net_id	: 8;	/* ETR network id */
 79	unsigned int etr_id	: 8;	/* id of ETR which sends data frames */
 80	unsigned int etr_pn	: 8;	/* port number of ETR output port */
 81} __attribute__ ((packed));
 82
 83struct etr_edf2 {
 84	unsigned int etv	: 32;	/* Upper 32 bits of TOD. */
 85} __attribute__ ((packed));
 86
 87struct etr_edf3 {
 88	unsigned int rc		: 8;	/* failure reason code */
 89	unsigned int _pad0	: 3;	/* must be 000 */
 90	unsigned int c		: 1;	/* ETR coupled bit */
 91	unsigned int tc		: 4;	/* ETR type code */
 92	unsigned int blto	: 8;	/* biased local time offset */
 93					/* (blto - 128) * 15 = minutes */
 94	unsigned int buo	: 8;	/* biased utc offset */
 95					/* (buo - 128) = leap seconds */
 96} __attribute__ ((packed));
 97
 98struct etr_edf4 {
 99	unsigned int ed		: 8;	/* ETS device dependent data */
100	unsigned int _pad0	: 1;	/* must be 0 */
101	unsigned int buc	: 5;	/* biased ut1 correction */
102					/* (buc - 16) * 0.1 seconds */
103	unsigned int em		: 6;	/* ETS error magnitude */
104	unsigned int dc		: 6;	/* ETS drift code */
105	unsigned int sc		: 6;	/* ETS steering code */
106} __attribute__ ((packed));
107
108/*
109 * ETR attachment information block, two formats
110 * format 1 has 4 reserved words with a size of 64 bytes
111 * format 2 has 16 reserved words with a size of 96 bytes
112 */
113struct etr_aib {
114	struct etr_esw esw;
115	struct etr_slsw slsw;
116	unsigned long long tsp;
117	struct etr_edf1 edf1;
118	struct etr_edf2 edf2;
119	struct etr_edf3 edf3;
120	struct etr_edf4 edf4;
121	unsigned int reserved[16];
122} __attribute__ ((packed,aligned(8)));
123
124/* ETR interruption parameter */
125struct etr_irq_parm {
126	unsigned int _pad0	: 8;
127	unsigned int pc0	: 1;	/* port 0 state change */
128	unsigned int pc1	: 1;	/* port 1 state change */
129	unsigned int _pad1	: 3;
130	unsigned int eai	: 1;	/* ETR alert indication */
131	unsigned int _pad2	: 18;
132} __attribute__ ((packed));
133
134/* Query TOD offset result */
135struct etr_ptff_qto {
136	unsigned long long physical_clock;
137	unsigned long long tod_offset;
138	unsigned long long logical_tod_offset;
139	unsigned long long tod_epoch_difference;
140} __attribute__ ((packed));
141
142/* Inline assembly helper functions */
143static inline int etr_setr(struct etr_eacr *ctrl)
144{
145	int rc = -ENOSYS;
146
147	asm volatile(
148		"	.insn	s,0xb2160000,%1\n"
149		"0:	la	%0,0\n"
150		"1:\n"
151		EX_TABLE(0b,1b)
152		: "+d" (rc) : "Q" (*ctrl));
153	return rc;
154}
155
156/* Stores a format 1 aib with 64 bytes */
157static inline int etr_stetr(struct etr_aib *aib)
158{
159	int rc = -ENOSYS;
160
161	asm volatile(
162		"	.insn	s,0xb2170000,%1\n"
163		"0:	la	%0,0\n"
164		"1:\n"
165		EX_TABLE(0b,1b)
166		: "+d" (rc) : "Q" (*aib));
167	return rc;
168}
169
170/* Stores a format 2 aib with 96 bytes for specified port */
171static inline int etr_steai(struct etr_aib *aib, unsigned int func)
172{
173	register unsigned int reg0 asm("0") = func;
174	int rc = -ENOSYS;
175
176	asm volatile(
177		"	.insn	s,0xb2b30000,%1\n"
178		"0:	la	%0,0\n"
179		"1:\n"
180		EX_TABLE(0b,1b)
181		: "+d" (rc) : "Q" (*aib), "d" (reg0));
182	return rc;
183}
184
185/* Function codes for the steai instruction. */
186#define ETR_STEAI_STEPPING_PORT		0x10
187#define ETR_STEAI_ALTERNATE_PORT	0x11
188#define ETR_STEAI_PORT_0		0x12
189#define ETR_STEAI_PORT_1		0x13
190
191static inline int etr_ptff(void *ptff_block, unsigned int func)
192{
193	register unsigned int reg0 asm("0") = func;
194	register unsigned long reg1 asm("1") = (unsigned long) ptff_block;
195	int rc = -ENOSYS;
196
197	asm volatile(
198		"	.word	0x0104\n"
199		"	ipm	%0\n"
200		"	srl	%0,28\n"
201		: "=d" (rc), "=m" (ptff_block)
202		: "d" (reg0), "d" (reg1), "m" (ptff_block) : "cc");
203	return rc;
204}
205
206/* Function codes for the ptff instruction. */
207#define ETR_PTFF_QAF	0x00	/* query available functions */
208#define ETR_PTFF_QTO	0x01	/* query tod offset */
209#define ETR_PTFF_QSI	0x02	/* query steering information */
210#define ETR_PTFF_ATO	0x40	/* adjust tod offset */
211#define ETR_PTFF_STO	0x41	/* set tod offset */
212#define ETR_PTFF_SFS	0x42	/* set fine steering rate */
213#define ETR_PTFF_SGS	0x43	/* set gross steering rate */
214
215/* Functions needed by the machine check handler */
216void etr_switch_to_local(void);
217void etr_sync_check(void);
218
219/* STP interruption parameter */
220struct stp_irq_parm {
221	unsigned int _pad0	: 14;
222	unsigned int tsc	: 1;	/* Timing status change */
223	unsigned int lac	: 1;	/* Link availability change */
224	unsigned int tcpc	: 1;	/* Time control parameter change */
225	unsigned int _pad2	: 15;
226} __attribute__ ((packed));
227
228#define STP_OP_SYNC	1
229#define STP_OP_CTRL	3
230
231struct stp_sstpi {
232	unsigned int rsvd0;
233	unsigned int rsvd1 : 8;
234	unsigned int stratum : 8;
235	unsigned int vbits : 16;
236	unsigned int leaps : 16;
237	unsigned int tmd : 4;
238	unsigned int ctn : 4;
239	unsigned int rsvd2 : 3;
240	unsigned int c : 1;
241	unsigned int tst : 4;
242	unsigned int tzo : 16;
243	unsigned int dsto : 16;
244	unsigned int ctrl : 16;
245	unsigned int rsvd3 : 16;
246	unsigned int tto;
247	unsigned int rsvd4;
248	unsigned int ctnid[3];
249	unsigned int rsvd5;
250	unsigned int todoff[4];
251	unsigned int rsvd6[48];
252} __attribute__ ((packed));
253
254/* Functions needed by the machine check handler */
255void stp_sync_check(void);
256void stp_island_check(void);
257
258#endif /* __S390_ETR_H */