mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
[S390] Move stfle to header file.
stfle will be needed by the ap_bus module to figure out wether the AP queue adapter interruption facility is installed. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
ca9fc75a68
commit
320c04c068
@ -12,6 +12,7 @@
|
|||||||
#define __ASM_SYSTEM_H
|
#define __ASM_SYSTEM_H
|
||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
#include <asm/types.h>
|
#include <asm/types.h>
|
||||||
#include <asm/ptrace.h>
|
#include <asm/ptrace.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
@ -413,8 +414,6 @@ __set_psw_mask(unsigned long mask)
|
|||||||
#define local_mcck_enable() __set_psw_mask(psw_kernel_bits)
|
#define local_mcck_enable() __set_psw_mask(psw_kernel_bits)
|
||||||
#define local_mcck_disable() __set_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK)
|
#define local_mcck_disable() __set_psw_mask(psw_kernel_bits & ~PSW_MASK_MCHECK)
|
||||||
|
|
||||||
int stfle(unsigned long long *list, int doublewords);
|
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
|
|
||||||
extern void smp_ctl_set_bit(int cr, int bit);
|
extern void smp_ctl_set_bit(int cr, int bit);
|
||||||
@ -438,6 +437,23 @@ static inline unsigned int stfl(void)
|
|||||||
return S390_lowcore.stfl_fac_list;
|
return S390_lowcore.stfl_fac_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int __stfle(unsigned long long *list, int doublewords)
|
||||||
|
{
|
||||||
|
typedef struct { unsigned long long _[doublewords]; } addrtype;
|
||||||
|
register unsigned long __nr asm("0") = doublewords - 1;
|
||||||
|
|
||||||
|
asm volatile(".insn s,0xb2b00000,%0" /* stfle */
|
||||||
|
: "=m" (*(addrtype *) list), "+d" (__nr) : : "cc");
|
||||||
|
return __nr + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int stfle(unsigned long long *list, int doublewords)
|
||||||
|
{
|
||||||
|
if (!(stfl() & (1UL << 24)))
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
return __stfle(list, doublewords);
|
||||||
|
}
|
||||||
|
|
||||||
static inline unsigned short stap(void)
|
static inline unsigned short stap(void)
|
||||||
{
|
{
|
||||||
unsigned short cpu_address;
|
unsigned short cpu_address;
|
||||||
|
@ -651,23 +651,6 @@ setup_memory(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init __stfle(unsigned long long *list, int doublewords)
|
|
||||||
{
|
|
||||||
typedef struct { unsigned long long _[doublewords]; } addrtype;
|
|
||||||
register unsigned long __nr asm("0") = doublewords - 1;
|
|
||||||
|
|
||||||
asm volatile(".insn s,0xb2b00000,%0" /* stfle */
|
|
||||||
: "=m" (*(addrtype *) list), "+d" (__nr) : : "cc");
|
|
||||||
return __nr + 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int __init stfle(unsigned long long *list, int doublewords)
|
|
||||||
{
|
|
||||||
if (!(stfl() & (1UL << 24)))
|
|
||||||
return -EOPNOTSUPP;
|
|
||||||
return __stfle(list, doublewords);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Setup hardware capabilities.
|
* Setup hardware capabilities.
|
||||||
*/
|
*/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user