17c478bd9Sstevel@tonic-gate /* 27c478bd9Sstevel@tonic-gate * CDDL HEADER START 37c478bd9Sstevel@tonic-gate * 47c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*f0089e39SRichard Lowe * Common Development and Distribution License (the "License"). 6*f0089e39SRichard Lowe * You may not use this file except in compliance with the License. 77c478bd9Sstevel@tonic-gate * 87c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 107c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 117c478bd9Sstevel@tonic-gate * and limitations under the License. 127c478bd9Sstevel@tonic-gate * 137c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 147c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 167c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 177c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 187c478bd9Sstevel@tonic-gate * 197c478bd9Sstevel@tonic-gate * CDDL HEADER END 207c478bd9Sstevel@tonic-gate */ 21*f0089e39SRichard Lowe /* Copyright (c) 1990, 1991 UNIX System Laboratories, Inc. */ 22*f0089e39SRichard Lowe /* Copyright (c) 1984, 1986, 1987, 1988, 1989, 1990 AT&T */ 23*f0089e39SRichard Lowe /* All Rights Reserved */ 24*f0089e39SRichard Lowe 257c478bd9Sstevel@tonic-gate /* 26*f0089e39SRichard Lowe * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 277c478bd9Sstevel@tonic-gate * Use is subject to license terms. 287c478bd9Sstevel@tonic-gate */ 297c478bd9Sstevel@tonic-gate 307c478bd9Sstevel@tonic-gate #ifndef _SYS_PSW_H 317c478bd9Sstevel@tonic-gate #define _SYS_PSW_H 327c478bd9Sstevel@tonic-gate 33*f0089e39SRichard Lowe #ifdef __cplusplus 34*f0089e39SRichard Lowe extern "C" { 35*f0089e39SRichard Lowe #endif 36*f0089e39SRichard Lowe 37*f0089e39SRichard Lowe #ifndef _ASM 38*f0089e39SRichard Lowe 39*f0089e39SRichard Lowe /* Flags Register */ 40*f0089e39SRichard Lowe 41*f0089e39SRichard Lowe typedef struct flags { 42*f0089e39SRichard Lowe uint_t fl_cf : 1, /* carry/borrow */ 43*f0089e39SRichard Lowe : 1, /* reserved */ 44*f0089e39SRichard Lowe fl_pf : 1, /* parity */ 45*f0089e39SRichard Lowe : 1, /* reserved */ 46*f0089e39SRichard Lowe fl_af : 1, /* carry/borrow */ 47*f0089e39SRichard Lowe : 1, /* reserved */ 48*f0089e39SRichard Lowe fl_zf : 1, /* zero */ 49*f0089e39SRichard Lowe fl_sf : 1, /* sign */ 50*f0089e39SRichard Lowe fl_tf : 1, /* trace */ 51*f0089e39SRichard Lowe fl_if : 1, /* interrupt enable */ 52*f0089e39SRichard Lowe fl_df : 1, /* direction */ 53*f0089e39SRichard Lowe fl_of : 1, /* overflow */ 54*f0089e39SRichard Lowe fl_iopl : 2, /* I/O privilege level */ 55*f0089e39SRichard Lowe fl_nt : 1, /* nested task */ 56*f0089e39SRichard Lowe : 1, /* reserved */ 57*f0089e39SRichard Lowe fl_rf : 1, /* reset */ 58*f0089e39SRichard Lowe fl_vm : 1, /* virtual 86 mode */ 59*f0089e39SRichard Lowe fl_res : 14; /* reserved */ 60*f0089e39SRichard Lowe } flags_t; 61*f0089e39SRichard Lowe 62*f0089e39SRichard Lowe #endif /* !_ASM */ 63*f0089e39SRichard Lowe 64*f0089e39SRichard Lowe #define PS_C 0x0001 /* carry bit */ 65*f0089e39SRichard Lowe #define PS_MB1 0x0002 /* unused; must be 1. */ 66*f0089e39SRichard Lowe #define PS_P 0x0004 /* parity bit */ 67*f0089e39SRichard Lowe #define PS_AC 0x0010 /* auxiliary carry bit */ 68*f0089e39SRichard Lowe #define PS_Z 0x0040 /* zero bit */ 69*f0089e39SRichard Lowe #define PS_N 0x0080 /* negative bit */ 70*f0089e39SRichard Lowe #define PS_T 0x0100 /* trace enable bit */ 71*f0089e39SRichard Lowe #define PS_IE 0x0200 /* interrupt enable bit */ 72*f0089e39SRichard Lowe #define PS_D 0x0400 /* direction bit */ 73*f0089e39SRichard Lowe #define PS_V 0x0800 /* overflow bit */ 74*f0089e39SRichard Lowe #define PS_IOPL 0x3000 /* I/O privilege level */ 75*f0089e39SRichard Lowe #define PS_NT 0x4000 /* nested task flag */ 76*f0089e39SRichard Lowe #define PS_RF 0x10000 /* restore flag */ 77*f0089e39SRichard Lowe #define PS_VM 0x20000 /* virtual 86 mode flag */ 78*f0089e39SRichard Lowe #define PS_ACHK 0x40000 /* alignment check enable (486) */ 79*f0089e39SRichard Lowe #define PS_VINT 0x80000 /* virtual interrupt flag */ 80*f0089e39SRichard Lowe #define PS_VINTP 0x100000 /* virtual interrupt pending */ 81*f0089e39SRichard Lowe #define PS_ID 0x200000 /* ID flag */ 82*f0089e39SRichard Lowe 83*f0089e39SRichard Lowe #define PS_ICC (PS_C|PS_AC|PS_Z|PS_N) /* integer condition codes */ 84*f0089e39SRichard Lowe 85*f0089e39SRichard Lowe #define FMT_FLAGS_REG \ 86*f0089e39SRichard Lowe "\20\26id\25vip\24vif\23ac\22vm\21rf" \ 87*f0089e39SRichard Lowe "\17nt\14of\13df\12if\11tf\10sf\7zf\5af\3pf\1cf" 88*f0089e39SRichard Lowe 89*f0089e39SRichard Lowe #define PSL_USER 0x202 /* initial user FLAGS */ 90*f0089e39SRichard Lowe 91*f0089e39SRichard Lowe /* user variable PS bits */ 92*f0089e39SRichard Lowe #define PSL_USERMASK (PS_ICC|PS_D|PS_T|PS_V|PS_P|PS_ACHK|PS_NT) 93*f0089e39SRichard Lowe 94*f0089e39SRichard Lowe /* PS bits changeable by the sahf instruction */ 95*f0089e39SRichard Lowe #define PSL_LSAHFMASK (PS_ICC|PS_P) 96*f0089e39SRichard Lowe 97*f0089e39SRichard Lowe /* 98*f0089e39SRichard Lowe * kernel flags settings 99*f0089e39SRichard Lowe * 100*f0089e39SRichard Lowe * Note that the kernel's SMAP protection relies on PS_ACHK not being present in 101*f0089e39SRichard Lowe * the following two definitions. See uts/intel/ml/copy.s for more 102*f0089e39SRichard Lowe * information on SMAP. 103*f0089e39SRichard Lowe */ 104*f0089e39SRichard Lowe #define F_OFF 0x2 /* interrupts off */ 105*f0089e39SRichard Lowe #define F_ON 0x202 /* interrupts on */ 106*f0089e39SRichard Lowe 107*f0089e39SRichard Lowe #ifndef _ASM 108*f0089e39SRichard Lowe typedef int psw_t; 109*f0089e39SRichard Lowe #endif 110*f0089e39SRichard Lowe 111*f0089e39SRichard Lowe #include <sys/tss.h> 112*f0089e39SRichard Lowe #include <sys/segments.h> /* selector definitions */ 1137c478bd9Sstevel@tonic-gate 114*f0089e39SRichard Lowe #define USERMODE(cs) ((uint16_t)(cs) != KCS_SEL) 1157c478bd9Sstevel@tonic-gate 116*f0089e39SRichard Lowe #include <sys/spl.h> 1177c478bd9Sstevel@tonic-gate 118*f0089e39SRichard Lowe #ifdef __cplusplus 119*f0089e39SRichard Lowe } 1207c478bd9Sstevel@tonic-gate #endif 1217c478bd9Sstevel@tonic-gate 1227c478bd9Sstevel@tonic-gate #endif /* _SYS_PSW_H */ 123