18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef _PARISC_PSW_H 38c2ecf20Sopenharmony_ci#define _PARISC_PSW_H 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#define PSW_I 0x00000001 68c2ecf20Sopenharmony_ci#define PSW_D 0x00000002 78c2ecf20Sopenharmony_ci#define PSW_P 0x00000004 88c2ecf20Sopenharmony_ci#define PSW_Q 0x00000008 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#define PSW_R 0x00000010 118c2ecf20Sopenharmony_ci#define PSW_F 0x00000020 128c2ecf20Sopenharmony_ci#define PSW_G 0x00000040 /* PA1.x only */ 138c2ecf20Sopenharmony_ci#define PSW_O 0x00000080 /* PA2.0 only */ 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci/* ssm/rsm instructions number PSW_W and PSW_E differently */ 168c2ecf20Sopenharmony_ci#define PSW_SM_I PSW_I /* Enable External Interrupts */ 178c2ecf20Sopenharmony_ci#define PSW_SM_D PSW_D 188c2ecf20Sopenharmony_ci#define PSW_SM_P PSW_P 198c2ecf20Sopenharmony_ci#define PSW_SM_Q PSW_Q /* Enable Interrupt State Collection */ 208c2ecf20Sopenharmony_ci#define PSW_SM_R PSW_R /* Enable Recover Counter Trap */ 218c2ecf20Sopenharmony_ci#define PSW_SM_W 0x200 /* PA2.0 only : Enable Wide Mode */ 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_ci#define PSW_SM_QUIET PSW_SM_R+PSW_SM_Q+PSW_SM_P+PSW_SM_D+PSW_SM_I 248c2ecf20Sopenharmony_ci 258c2ecf20Sopenharmony_ci#define PSW_CB 0x0000ff00 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci#define PSW_M 0x00010000 288c2ecf20Sopenharmony_ci#define PSW_V 0x00020000 298c2ecf20Sopenharmony_ci#define PSW_C 0x00040000 308c2ecf20Sopenharmony_ci#define PSW_B 0x00080000 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci#define PSW_X 0x00100000 338c2ecf20Sopenharmony_ci#define PSW_N 0x00200000 348c2ecf20Sopenharmony_ci#define PSW_L 0x00400000 358c2ecf20Sopenharmony_ci#define PSW_H 0x00800000 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci#define PSW_T 0x01000000 388c2ecf20Sopenharmony_ci#define PSW_S 0x02000000 398c2ecf20Sopenharmony_ci#define PSW_E 0x04000000 408c2ecf20Sopenharmony_ci#define PSW_W 0x08000000 /* PA2.0 only */ 418c2ecf20Sopenharmony_ci#define PSW_W_BIT 36 /* PA2.0 only */ 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci#define PSW_Z 0x40000000 /* PA1.x only */ 448c2ecf20Sopenharmony_ci#define PSW_Y 0x80000000 /* PA1.x only */ 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci#ifdef CONFIG_64BIT 478c2ecf20Sopenharmony_ci# define PSW_HI_CB 0x000000ff /* PA2.0 only */ 488c2ecf20Sopenharmony_ci#endif 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci#ifdef CONFIG_64BIT 518c2ecf20Sopenharmony_ci# define USER_PSW_HI_MASK PSW_HI_CB 528c2ecf20Sopenharmony_ci# define WIDE_PSW PSW_W 538c2ecf20Sopenharmony_ci#else 548c2ecf20Sopenharmony_ci# define WIDE_PSW 0 558c2ecf20Sopenharmony_ci#endif 568c2ecf20Sopenharmony_ci 578c2ecf20Sopenharmony_ci/* Used when setting up for rfi */ 588c2ecf20Sopenharmony_ci#define KERNEL_PSW (WIDE_PSW | PSW_C | PSW_Q | PSW_P | PSW_D) 598c2ecf20Sopenharmony_ci#define REAL_MODE_PSW (WIDE_PSW | PSW_Q) 608c2ecf20Sopenharmony_ci#define USER_PSW_MASK (WIDE_PSW | PSW_T | PSW_N | PSW_X | PSW_B | PSW_V | PSW_CB) 618c2ecf20Sopenharmony_ci#define USER_PSW (PSW_C | PSW_Q | PSW_P | PSW_D | PSW_I) 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci#ifndef __ASSEMBLY__ 648c2ecf20Sopenharmony_ci 658c2ecf20Sopenharmony_ci/* The program status word as bitfields. */ 668c2ecf20Sopenharmony_cistruct pa_psw { 678c2ecf20Sopenharmony_ci unsigned int y:1; 688c2ecf20Sopenharmony_ci unsigned int z:1; 698c2ecf20Sopenharmony_ci unsigned int rv:2; 708c2ecf20Sopenharmony_ci unsigned int w:1; 718c2ecf20Sopenharmony_ci unsigned int e:1; 728c2ecf20Sopenharmony_ci unsigned int s:1; 738c2ecf20Sopenharmony_ci unsigned int t:1; 748c2ecf20Sopenharmony_ci 758c2ecf20Sopenharmony_ci unsigned int h:1; 768c2ecf20Sopenharmony_ci unsigned int l:1; 778c2ecf20Sopenharmony_ci unsigned int n:1; 788c2ecf20Sopenharmony_ci unsigned int x:1; 798c2ecf20Sopenharmony_ci unsigned int b:1; 808c2ecf20Sopenharmony_ci unsigned int c:1; 818c2ecf20Sopenharmony_ci unsigned int v:1; 828c2ecf20Sopenharmony_ci unsigned int m:1; 838c2ecf20Sopenharmony_ci 848c2ecf20Sopenharmony_ci unsigned int cb:8; 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci unsigned int o:1; 878c2ecf20Sopenharmony_ci unsigned int g:1; 888c2ecf20Sopenharmony_ci unsigned int f:1; 898c2ecf20Sopenharmony_ci unsigned int r:1; 908c2ecf20Sopenharmony_ci unsigned int q:1; 918c2ecf20Sopenharmony_ci unsigned int p:1; 928c2ecf20Sopenharmony_ci unsigned int d:1; 938c2ecf20Sopenharmony_ci unsigned int i:1; 948c2ecf20Sopenharmony_ci}; 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ci#ifdef CONFIG_64BIT 978c2ecf20Sopenharmony_ci#define pa_psw(task) ((struct pa_psw *) ((char *) (task) + TASK_PT_PSW + 4)) 988c2ecf20Sopenharmony_ci#else 998c2ecf20Sopenharmony_ci#define pa_psw(task) ((struct pa_psw *) ((char *) (task) + TASK_PT_PSW)) 1008c2ecf20Sopenharmony_ci#endif 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci#endif /* !__ASSEMBLY__ */ 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci#endif 105