1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License (the "License").
   6  * You may not use this file except in compliance with the License.
   7  *
   8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
   9  * or http://www.opensolaris.org/os/licensing.
  10  * See the License for the specific language governing permissions
  11  * and limitations under the License.
  12  *
  13  * When distributing Covered Code, include this CDDL HEADER in each
  14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  15  * If applicable, add the following below this CDDL HEADER, with the
  16  * fields enclosed by brackets "[]" replaced with your own identifying
  17  * information: Portions Copyright [yyyy] [name of copyright owner]
  18  *
  19  * CDDL HEADER END
  20  */
  21 
  22 /*
  23  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
  24  * Use is subject to license terms.
  25  */
  26 
  27 /*      Copyright (c) 1984, 1986, 1987, 1988, 1989 AT&T     */
  28 /*        All Rights Reserved   */
  29 
  30 
  31 #ifndef _SYS_TS_H
  32 #define _SYS_TS_H
  33 
  34 #include <sys/types.h>
  35 #include <sys/thread.h>
  36 #include <sys/cpucaps.h>
  37 
  38 #ifdef  __cplusplus
  39 extern "C" {
  40 #endif
  41 
  42 /*
  43  * time-sharing dispatcher parameter table entry
  44  */
  45 typedef struct tsdpent {
  46         pri_t   ts_globpri;     /* global (class independent) priority */
  47         int     ts_quantum;     /* time quantum given to procs at this level */
  48         pri_t   ts_tqexp;       /* ts_umdpri assigned when proc at this level */
  49                                 /*   exceeds its time quantum */
  50         pri_t   ts_slpret;      /* ts_umdpri assigned when proc at this level */
  51                                 /*  returns to user mode after sleeping */
  52         short   ts_maxwait;     /* bumped to ts_lwait if more than ts_maxwait */
  53                                 /*  secs elapse before receiving full quantum */
  54         short   ts_lwait;       /* ts_umdpri assigned if ts_dispwait exceeds  */
  55                                 /*  ts_maxwait */
  56 } tsdpent_t;
  57 
  58 #ifdef _KERNEL
  59 /*
  60  * time-sharing class specific thread structure
  61  */
  62 typedef struct tsproc {
  63         int     ts_timeleft;    /* time remaining in procs quantum      */
  64         uint_t  ts_dispwait;    /* wall clock seconds since start       */
  65                                 /* of quantum (not reset upon preempt)  */
  66         pri_t   ts_cpupri;      /* system controlled component of ts_umdpri */
  67         pri_t   ts_uprilim;     /* user priority limit                  */
  68         pri_t   ts_upri;        /* user priority                        */
  69         pri_t   ts_umdpri;      /* user mode priority within ts class   */
  70         pri_t   ts_scpri;       /* remembered priority, for schedctl    */
  71         char    ts_nice;        /* nice value for compatibility         */
  72         char    ts_boost;       /* interactive priority offset          */
  73         uchar_t ts_flags;       /* flags defined below                  */
  74         kthread_t *ts_tp;       /* pointer to thread                    */
  75         struct tsproc *ts_next; /* link to next tsproc on list          */
  76         struct tsproc *ts_prev; /* link to previous tsproc on list      */
  77         caps_sc_t ts_caps;      /* CPU caps specific data               */
  78 } tsproc_t;
  79 
  80 /* flags */
  81 #define TSKPRI          0x01    /* thread at kernel mode priority       */
  82 #define TSBACKQ         0x02    /* thread goes to back of dispq if preempted */
  83 #define TSIA            0x04    /* thread is interactive                */
  84 #define TSIASET         0x08    /* interactive thread is "on"           */
  85 #define TSIANICED       0x10    /* interactive thread has been niced    */
  86 #define TSRESTORE       0x20    /* thread was not preempted, due to schedctl */
  87                                 /* restore priority from ts_scpri       */
  88 
  89 #endif /* _KERNEL */
  90 
  91 #ifdef  __cplusplus
  92 }
  93 #endif
  94 
  95 #endif  /* _SYS_TS_H */