1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright IBM Corp. 2006 4*4882a593Smuzhiyun * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com) 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun #ifndef __S390_STP_H 7*4882a593Smuzhiyun #define __S390_STP_H 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun #include <linux/compiler.h> 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun /* notifier for syncs */ 12*4882a593Smuzhiyun extern struct atomic_notifier_head s390_epoch_delta_notifier; 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun /* STP interruption parameter */ 15*4882a593Smuzhiyun struct stp_irq_parm { 16*4882a593Smuzhiyun u32 : 14; 17*4882a593Smuzhiyun u32 tsc : 1; /* Timing status change */ 18*4882a593Smuzhiyun u32 lac : 1; /* Link availability change */ 19*4882a593Smuzhiyun u32 tcpc : 1; /* Time control parameter change */ 20*4882a593Smuzhiyun u32 : 15; 21*4882a593Smuzhiyun } __packed; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun #define STP_OP_SYNC 1 24*4882a593Smuzhiyun #define STP_OP_CTRL 3 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun struct stp_sstpi { 27*4882a593Smuzhiyun u32 : 32; 28*4882a593Smuzhiyun u32 tu : 1; 29*4882a593Smuzhiyun u32 lu : 1; 30*4882a593Smuzhiyun u32 : 6; 31*4882a593Smuzhiyun u32 stratum : 8; 32*4882a593Smuzhiyun u32 vbits : 16; 33*4882a593Smuzhiyun u32 leaps : 16; 34*4882a593Smuzhiyun u32 tmd : 4; 35*4882a593Smuzhiyun u32 ctn : 4; 36*4882a593Smuzhiyun u32 : 3; 37*4882a593Smuzhiyun u32 c : 1; 38*4882a593Smuzhiyun u32 tst : 4; 39*4882a593Smuzhiyun u32 tzo : 16; 40*4882a593Smuzhiyun u32 dsto : 16; 41*4882a593Smuzhiyun u32 ctrl : 16; 42*4882a593Smuzhiyun u32 : 16; 43*4882a593Smuzhiyun u32 tto; 44*4882a593Smuzhiyun u32 : 32; 45*4882a593Smuzhiyun u32 ctnid[3]; 46*4882a593Smuzhiyun u32 : 32; 47*4882a593Smuzhiyun u32 todoff[4]; 48*4882a593Smuzhiyun u32 rsvd[48]; 49*4882a593Smuzhiyun } __packed; 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun struct stp_tzib { 52*4882a593Smuzhiyun u32 tzan : 16; 53*4882a593Smuzhiyun u32 : 16; 54*4882a593Smuzhiyun u32 tzo : 16; 55*4882a593Smuzhiyun u32 dsto : 16; 56*4882a593Smuzhiyun u32 stn; 57*4882a593Smuzhiyun u32 dstn; 58*4882a593Smuzhiyun u64 dst_on_alg; 59*4882a593Smuzhiyun u64 dst_off_alg; 60*4882a593Smuzhiyun } __packed; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun struct stp_tcpib { 63*4882a593Smuzhiyun u32 atcode : 4; 64*4882a593Smuzhiyun u32 ntcode : 4; 65*4882a593Smuzhiyun u32 d : 1; 66*4882a593Smuzhiyun u32 : 23; 67*4882a593Smuzhiyun s32 tto; 68*4882a593Smuzhiyun struct stp_tzib atzib; 69*4882a593Smuzhiyun struct stp_tzib ntzib; 70*4882a593Smuzhiyun s32 adst_offset : 16; 71*4882a593Smuzhiyun s32 ndst_offset : 16; 72*4882a593Smuzhiyun u32 rsvd1; 73*4882a593Smuzhiyun u64 ntzib_update; 74*4882a593Smuzhiyun u64 ndsto_update; 75*4882a593Smuzhiyun } __packed; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun struct stp_lsoib { 78*4882a593Smuzhiyun u32 p : 1; 79*4882a593Smuzhiyun u32 : 31; 80*4882a593Smuzhiyun s32 also : 16; 81*4882a593Smuzhiyun s32 nlso : 16; 82*4882a593Smuzhiyun u64 nlsout; 83*4882a593Smuzhiyun } __packed; 84*4882a593Smuzhiyun 85*4882a593Smuzhiyun struct stp_stzi { 86*4882a593Smuzhiyun u32 rsvd0[3]; 87*4882a593Smuzhiyun u64 data_ts; 88*4882a593Smuzhiyun u32 rsvd1[22]; 89*4882a593Smuzhiyun struct stp_tcpib tcpib; 90*4882a593Smuzhiyun struct stp_lsoib lsoib; 91*4882a593Smuzhiyun } __packed; 92*4882a593Smuzhiyun 93*4882a593Smuzhiyun /* Functions needed by the machine check handler */ 94*4882a593Smuzhiyun int stp_sync_check(void); 95*4882a593Smuzhiyun int stp_island_check(void); 96*4882a593Smuzhiyun void stp_queue_work(void); 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun #endif /* __S390_STP_H */ 99