linux/arch/s390/include/asm/stp.h
Sven Schnelle b2539aa0d7 s390/stp: add support for leap seconds
In the current implementation, leap seconds are only synchronized
during the bootup process when the STP clock is synced. If the Leap
second offset (LSO) changes the machine must be rebooted, which is
not desired. This patch adds the required code to handle Leap second
changes during runtime. If the Leap second changes, a Configuration
change machine check is triggered. The STP code than schedules a Leap
second insertion/deletion with do_adjtimex().

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Alexander Egorenkov <egorenar@linux.ibm.com>
Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
2020-09-26 15:51:21 +02:00

99 lines
1.7 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright IBM Corp. 2006
* Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
*/
#ifndef __S390_STP_H
#define __S390_STP_H
#include <linux/compiler.h>
/* notifier for syncs */
extern struct atomic_notifier_head s390_epoch_delta_notifier;
/* STP interruption parameter */
struct stp_irq_parm {
u32 : 14;
u32 tsc : 1; /* Timing status change */
u32 lac : 1; /* Link availability change */
u32 tcpc : 1; /* Time control parameter change */
u32 : 15;
} __packed;
#define STP_OP_SYNC 1
#define STP_OP_CTRL 3
struct stp_sstpi {
u32 : 32;
u32 tu : 1;
u32 lu : 1;
u32 : 6;
u32 stratum : 8;
u32 vbits : 16;
u32 leaps : 16;
u32 tmd : 4;
u32 ctn : 4;
u32 : 3;
u32 c : 1;
u32 tst : 4;
u32 tzo : 16;
u32 dsto : 16;
u32 ctrl : 16;
u32 : 16;
u32 tto;
u32 : 32;
u32 ctnid[3];
u32 : 32;
u32 todoff[4];
u32 rsvd[48];
} __packed;
struct stp_tzib {
u32 tzan : 16;
u32 : 16;
u32 tzo : 16;
u32 dsto : 16;
u32 stn;
u32 dstn;
u64 dst_on_alg;
u64 dst_off_alg;
} __packed;
struct stp_tcpib {
u32 atcode : 4;
u32 ntcode : 4;
u32 d : 1;
u32 : 23;
s32 tto;
struct stp_tzib atzib;
struct stp_tzib ntzib;
s32 adst_offset : 16;
s32 ndst_offset : 16;
u32 rsvd1;
u64 ntzib_update;
u64 ndsto_update;
} __packed;
struct stp_lsoib {
u32 p : 1;
u32 : 31;
s32 also : 16;
s32 nlso : 16;
u64 nlsout;
} __packed;
struct stp_stzi {
u32 rsvd0[3];
u64 data_ts;
u32 rsvd1[22];
struct stp_tcpib tcpib;
struct stp_lsoib lsoib;
} __packed;
/* Functions needed by the machine check handler */
int stp_sync_check(void);
int stp_island_check(void);
void stp_queue_work(void);
#endif /* __S390_STP_H */