root/arch/s390/include/asm/stp.h
/* 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;
        u64 todoff;
        u32 rsvd[50];
} __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);
bool stp_enabled(void);

#endif /* __S390_STP_H */