1 /**
2  * D header file for the Solaris priocntl(2) and priocntlset(2) functions.
3  *
4  * Copyright:   Copyright 2014 Jason King.
5  * License:     $(HTTP www.boost.org/LICENSE_1.0.txt, Boost License 1.0).
6  * Authors:     Jason King
7  */
8 
9 /*
10  * Copyright 2014 Jason King.
11  * Distributed under the Boost Software License, Version 1.0.
12  * See accompanying file LICENSE or copy at
13  *  http://www.boost.org/LICENSE_1_0.txt
14  */
15 module core.sys.solaris.sys.priocntl;
16 
17 version (Solaris):
18 nothrow:
19 @nogc:
20 extern (C):
21 
22 import core.sys.posix.sys.types : caddr_t, id_t;
23 import core.sys.posix.sys.wait : idtype_t;
24 import core.stdc.config : c_long;
25 import core.sys.solaris.sys.procset;
26 import core.sys.solaris.sys.types : pri_t;
27 
28 c_long priocntl(idtype_t, id_t, int, ...);
29 c_long priocntlset(procset_t*, int, ...);
30 
31 
32 enum PC_GETCID       = 0;       /* Get class ID */
33 enum PC_GETCLINFO    = 1;       /* Get info about a configured class */
34 enum PC_SETPARMS     = 2;       /* Set scheduling parameters */
35 enum PC_GETPARMS     = 3;       /* Get scheduling parameters */
36 enum PC_ADMIN        = 4;       /* Scheduler administration (used by */
37                                 /* dispadmin(1M), not for general use) */
38 enum PC_GETPRIRANGE  = 5;       /* Get priority range for a class */
39                                 /* posix.4; scheduling, not for general use */
40 enum PC_DONICE       = 6;       /* Set or get nice value */
41 enum PC_SETXPARMS    = 7;       /* Set extended scheduling parameters */
42 enum PC_GETXPARMS    = 8;       /* Get extended scheduling parameters */
43 enum PC_SETDFLCL     = 9;       /* Set default class, not for general use */
44 enum PC_GETDFLCL     = 10;      /* Get default class, not for general use */
45 enum PC_DOPRIO       = 11;      /* Set or get priority, not for general use */
46 
47 enum PC_CLNULL       = -1;
48 
49 enum PC_CLNMSZ       = 16;
50 enum PC_CLINFOSZ     = (32 / int.sizeof);
51 enum PC_CLPARMSZ     = (32 / int.sizeof);
52 
53 enum PC_GETNICE = 0;
54 enum PC_SETNICE = 1;
55 
56 enum PC_GETPRIO      = 0;
57 enum PC_SETPRIO      = 1;
58 
59 struct pcinfo_t
60 {
61     id_t                pc_cid;     // class id
62     char[PC_CLNMSZ]     pc_clname=0;// class name
63     int[PC_CLINFOSZ]    pc_clinfo;  // class information
64 }
65 
66 struct pcparms_t
67 {
68     id_t                pc_cid;     // process class
69     int[PC_CLPARMSZ]    pc_clparms; //class specific parameters
70 }
71 
72 struct pcnice_t
73 {
74     int pc_val; // nice value
75     int pc_op;  // type of operation, set or get
76 }
77 
78 struct pcprio_t
79 {
80     int     pc_op;  // type of operation, set or get
81     id_t    pc_cid; // class id
82     int     pc_val; // priority value
83 }
84 
85 // Used by the priocntl varargs interface
86 // PC_SETXPARMS and PC_GETXPARMS
87 enum PC_VAPARMCNT = 8;  // max # of kv pairs
88 enum PC_KY_NULL   = 0;  // kv chain terminator
89 enum PC_KY_CLNAME = 1;  // get the class name of a process or LWP
90 
91 struct pc_vaparm_t
92 {
93     int     pc_key;
94     ulong   pc_parm;
95 }
96 
97 struct pc_vaparms_t
98 {
99     int                         pc_vaparmscnt; // # of kv pairs
100     pc_vaparm_t[PC_VAPARMCNT]   pc_parm;
101 }
102 
103 // Not for general use
104 struct pcpri_t
105 {
106     id_t    pc_cid;
107     pri_t   pc_clpmax;
108     pri_t   pc_clpmin;
109 }
110 
111 struct pcadmin_t
112 {
113     id_t    pc_cid;
114     caddr_t pc_cladmin;
115 }