1917e476dSPeter Dufault /*-
2df57947fSPedro F. Giffuni * SPDX-License-Identifier: BSD-4-Clause
3df57947fSPedro F. Giffuni *
4917e476dSPeter Dufault * Copyright (c) 1998
5917e476dSPeter Dufault * HD Associates, Inc. All rights reserved.
6917e476dSPeter Dufault *
7917e476dSPeter Dufault * Redistribution and use in source and binary forms, with or without
8917e476dSPeter Dufault * modification, are permitted provided that the following conditions
9917e476dSPeter Dufault * are met:
10917e476dSPeter Dufault * 1. Redistributions of source code must retain the above copyright
11917e476dSPeter Dufault * notice, this list of conditions and the following disclaimer.
12917e476dSPeter Dufault * 2. Redistributions in binary form must reproduce the above copyright
13917e476dSPeter Dufault * notice, this list of conditions and the following disclaimer in the
14917e476dSPeter Dufault * documentation and/or other materials provided with the distribution.
15917e476dSPeter Dufault * 3. All advertising materials mentioning features or use of this software
16917e476dSPeter Dufault * must display the following acknowledgement:
17917e476dSPeter Dufault * This product includes software developed by HD Associates, Inc
18917e476dSPeter Dufault * 4. Neither the name of the author nor the names of any co-contributors
19917e476dSPeter Dufault * may be used to endorse or promote products derived from this software
20917e476dSPeter Dufault * without specific prior written permission.
21917e476dSPeter Dufault *
22917e476dSPeter Dufault * THIS SOFTWARE IS PROVIDED BY HD ASSOCIATES AND CONTRIBUTORS ``AS IS'' AND
23917e476dSPeter Dufault * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24917e476dSPeter Dufault * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25917e476dSPeter Dufault * ARE DISCLAIMED. IN NO EVENT SHALL HD ASSOCIATES OR CONTRIBUTORS BE LIABLE
26917e476dSPeter Dufault * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27917e476dSPeter Dufault * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28917e476dSPeter Dufault * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29917e476dSPeter Dufault * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30917e476dSPeter Dufault * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31917e476dSPeter Dufault * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32917e476dSPeter Dufault * SUCH DAMAGE.
33917e476dSPeter Dufault */
34917e476dSPeter Dufault
35917e476dSPeter Dufault #include <sys/param.h>
36aec0fb7bSPoul-Henning Kamp #include <sys/systm.h>
37917e476dSPeter Dufault #include <sys/kernel.h>
38ce02431fSDoug Rabson #include <sys/queue.h>
39917e476dSPeter Dufault #include <sys/sysctl.h>
40c7047e52SGarrett Wollman #include <sys/vnode.h>
41bedc1c9cSTom Rhodes #include <sys/proc.h>
42bdd04ab1STom Rhodes #include <sys/posix4.h>
43917e476dSPeter Dufault
448a6472b7SPeter Dufault static int facility[CTL_P1003_1B_MAXID - 1];
45f51c1e89SAlfred Perlstein static int facility_initialized[CTL_P1003_1B_MAXID - 1];
46917e476dSPeter Dufault
4732863754SKonstantin Belousov static int p31b_sysctl_proc(SYSCTL_HANDLER_ARGS);
4832863754SKonstantin Belousov
498a6472b7SPeter Dufault /* OID_AUTO isn't working with sysconf(3). I guess I'd have to
508a6472b7SPeter Dufault * modify it to do a lookup by name from the index.
518a6472b7SPeter Dufault * For now I've left it a top-level sysctl.
52917e476dSPeter Dufault */
538a6472b7SPeter Dufault
548a6472b7SPeter Dufault #if 1
558a6472b7SPeter Dufault
56ce02431fSDoug Rabson SYSCTL_DECL(_p1003_1b);
57ce02431fSDoug Rabson
588a6472b7SPeter Dufault #define P1B_SYSCTL(num, name) \
59ff66f6a4SRobert Watson SYSCTL_INT(_p1003_1b, num, name, CTLFLAG_RD | CTLFLAG_CAPRD, \
60ff66f6a4SRobert Watson facility + num - 1, 0, "");
6132863754SKonstantin Belousov #define P1B_SYSCTL_RW(num, name) \
62*7029da5cSPawel Biernacki SYSCTL_PROC(_p1003_1b, num, name, \
63*7029da5cSPawel Biernacki CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, NULL, num, \
6432863754SKonstantin Belousov p31b_sysctl_proc, "I", "");
658a6472b7SPeter Dufault
668a6472b7SPeter Dufault #else
678a6472b7SPeter Dufault
68ce02431fSDoug Rabson SYSCTL_DECL(_kern_p1003_1b);
69ce02431fSDoug Rabson
708a6472b7SPeter Dufault #define P1B_SYSCTL(num, name) \
71ff66f6a4SRobert Watson SYSCTL_INT(_kern_p1003_1b, OID_AUTO, name, CTLFLAG_RD | CTLFLAG_CAPRD, \
7232863754SKonstantin Belousov facility + num - 1, 0, "");
7332863754SKonstantin Belousov #define P1B_SYSCTL_RW(num, name) \
7432863754SKonstantin Belousov SYSCTL_PROC(_p1003_1b, OID_AUTO, name, CTLTYPE_INT | CTLFLAG_RW, NULL, \
7532863754SKonstantin Belousov num, p31b_sysctl_proc, "I", "");
76*7029da5cSPawel Biernacki SYSCTL_NODE(_kern, OID_AUTO, p1003_1b, CTLFLAG_RW | CTLFLAG_MPSAFE, 0,
77*7029da5cSPawel Biernacki "P1003.1B");
788a6472b7SPeter Dufault
798a6472b7SPeter Dufault #endif
808a6472b7SPeter Dufault
81399e8c17SJohn Baldwin P1B_SYSCTL(CTL_P1003_1B_ASYNCHRONOUS_IO, asynchronous_io);
828a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_MAPPED_FILES, mapped_files);
838a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_MEMLOCK, memlock);
848a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_MEMLOCK_RANGE, memlock_range);
858a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_MEMORY_PROTECTION, memory_protection);
868a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_MESSAGE_PASSING, message_passing);
878a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_PRIORITIZED_IO, prioritized_io);
888a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_PRIORITY_SCHEDULING, priority_scheduling);
898a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_REALTIME_SIGNALS, realtime_signals);
908a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_SEMAPHORES, semaphores);
918a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_FSYNC, fsync);
928a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_SHARED_MEMORY_OBJECTS, shared_memory_objects);
938a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_SYNCHRONIZED_IO, synchronized_io);
948a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_TIMERS, timers);
958a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_AIO_MAX, aio_max);
968a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, aio_prio_delta_max);
978a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_DELAYTIMER_MAX, delaytimer_max);
988a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_MQ_OPEN_MAX, mq_open_max);
998a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_PAGESIZE, pagesize);
1008a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_RTSIG_MAX, rtsig_max);
10132863754SKonstantin Belousov P1B_SYSCTL_RW(CTL_P1003_1B_SEM_NSEMS_MAX, sem_nsems_max);
1028a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_SEM_VALUE_MAX, sem_value_max);
1038a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_SIGQUEUE_MAX, sigqueue_max);
1048a6472b7SPeter Dufault P1B_SYSCTL(CTL_P1003_1B_TIMER_MAX, timer_max);
1058a6472b7SPeter Dufault
106f51c1e89SAlfred Perlstein #define P31B_VALID(num) ((num) >= 1 && (num) < CTL_P1003_1B_MAXID)
107f51c1e89SAlfred Perlstein
10832863754SKonstantin Belousov static int
p31b_sysctl_proc(SYSCTL_HANDLER_ARGS)10932863754SKonstantin Belousov p31b_sysctl_proc(SYSCTL_HANDLER_ARGS)
11032863754SKonstantin Belousov {
11132863754SKonstantin Belousov int error, num, val;
11232863754SKonstantin Belousov
11332863754SKonstantin Belousov num = arg2;
11432863754SKonstantin Belousov if (!P31B_VALID(num))
11532863754SKonstantin Belousov return (EINVAL);
116da95a2aeSConrad Meyer val = facility_initialized[num - 1] ? facility[num - 1] : 0;
11732863754SKonstantin Belousov error = sysctl_handle_int(oidp, &val, 0, req);
118da95a2aeSConrad Meyer if (error == 0 && req->newptr != NULL && facility_initialized[num - 1])
11932863754SKonstantin Belousov facility[num - 1] = val;
12032863754SKonstantin Belousov return (error);
12132863754SKonstantin Belousov }
12232863754SKonstantin Belousov
1238a6472b7SPeter Dufault /* p31b_setcfg: Set the configuration
1248a6472b7SPeter Dufault */
1256d5dec35SAlfred Perlstein void
p31b_setcfg(int num,int value)1266d5dec35SAlfred Perlstein p31b_setcfg(int num, int value)
127917e476dSPeter Dufault {
1286d5dec35SAlfred Perlstein
129f51c1e89SAlfred Perlstein if (P31B_VALID(num)) {
130917e476dSPeter Dufault facility[num - 1] = value;
131f51c1e89SAlfred Perlstein facility_initialized[num - 1] = 1;
132f51c1e89SAlfred Perlstein }
133917e476dSPeter Dufault }
1344505fec8SGarrett Wollman
13532863754SKonstantin Belousov void
p31b_unsetcfg(int num)13632863754SKonstantin Belousov p31b_unsetcfg(int num)
13732863754SKonstantin Belousov {
13832863754SKonstantin Belousov
13932863754SKonstantin Belousov facility[num - 1] = 0;
14032863754SKonstantin Belousov facility_initialized[num - 1] = 0;
14132863754SKonstantin Belousov }
14232863754SKonstantin Belousov
1436d5dec35SAlfred Perlstein int
p31b_getcfg(int num)1446d5dec35SAlfred Perlstein p31b_getcfg(int num)
1456d5dec35SAlfred Perlstein {
1466d5dec35SAlfred Perlstein
147f51c1e89SAlfred Perlstein if (P31B_VALID(num))
1486d5dec35SAlfred Perlstein return (facility[num - 1]);
1496d5dec35SAlfred Perlstein return (0);
1506d5dec35SAlfred Perlstein }
1516d5dec35SAlfred Perlstein
152f51c1e89SAlfred Perlstein int
p31b_iscfg(int num)153f51c1e89SAlfred Perlstein p31b_iscfg(int num)
154f51c1e89SAlfred Perlstein {
155f51c1e89SAlfred Perlstein
156f51c1e89SAlfred Perlstein if (P31B_VALID(num))
157f51c1e89SAlfred Perlstein return (facility_initialized[num - 1]);
158f51c1e89SAlfred Perlstein return (0);
159f51c1e89SAlfred Perlstein }
160f51c1e89SAlfred Perlstein
1614505fec8SGarrett Wollman /*
1624505fec8SGarrett Wollman * Turn on indications for standard (non-configurable) kernel features.
1634505fec8SGarrett Wollman */
1644505fec8SGarrett Wollman static void
p31b_set_standard(void * dummy)1654505fec8SGarrett Wollman p31b_set_standard(void *dummy)
1664505fec8SGarrett Wollman {
16734c1c599SJohn Baldwin
16834c1c599SJohn Baldwin p31b_setcfg(CTL_P1003_1B_FSYNC, 200112L);
16934c1c599SJohn Baldwin p31b_setcfg(CTL_P1003_1B_MAPPED_FILES, 200112L);
17034c1c599SJohn Baldwin p31b_setcfg(CTL_P1003_1B_SHARED_MEMORY_OBJECTS, 200112L);
1714505fec8SGarrett Wollman p31b_setcfg(CTL_P1003_1B_PAGESIZE, PAGE_SIZE);
1724505fec8SGarrett Wollman }
1734505fec8SGarrett Wollman
1744505fec8SGarrett Wollman SYSINIT(p31b_set_standard, SI_SUB_P1003_1B, SI_ORDER_ANY, p31b_set_standard,
175891cf3edSEd Maste NULL);
176