source: rtems/c/src/libnetworking/sys/kernel.h @ 9b05600

4.104.114.84.95
Last change on this file since 9b05600 was 39e6e65a, checked in by Joel Sherrill <joel.sherrill@…>, on 08/19/98 at 21:32:28

Base files

  • Property mode set to 100644
File size: 9.0 KB
Line 
1/*-
2 * Copyright (c) 1995 Terrence R. Lambert
3 * All rights reserved.
4 *
5 * Copyright (c) 1990, 1993
6 *      The Regents of the University of California.  All rights reserved.
7 * (c) UNIX System Laboratories, Inc.
8 * All or some portions of this file are derived from material licensed
9 * to the University of California by American Telephone and Telegraph
10 * Co. or Unix System Laboratories, Inc. and are reproduced herein with
11 * the permission of UNIX System Laboratories, Inc.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 *    notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 *    notice, this list of conditions and the following disclaimer in the
20 *    documentation and/or other materials provided with the distribution.
21 * 3. All advertising materials mentioning features or use of this software
22 *    must display the following acknowledgement:
23 *      This product includes software developed by the University of
24 *      California, Berkeley and its contributors.
25 * 4. Neither the name of the University nor the names of its contributors
26 *    may be used to endorse or promote products derived from this software
27 *    without specific prior written permission.
28 *
29 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
30 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
32 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
33 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
35 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
36 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
37 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
38 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
39 * SUCH DAMAGE.
40 *
41 *      @(#)kernel.h    8.3 (Berkeley) 1/21/94
42 * $Id$
43 */
44
45#ifndef _SYS_KERNEL_H_
46#define _SYS_KERNEL_H_
47
48/* Global variables for the kernel. */
49
50/* 1.1 */
51extern long hostid;
52extern char hostname[MAXHOSTNAMELEN];
53extern int hostnamelen;
54extern char domainname[MAXHOSTNAMELEN];
55extern int domainnamelen;
56extern char kernelname[MAXPATHLEN];
57
58/* 1.2 */
59extern volatile struct timeval mono_time;
60extern struct timeval boottime;
61extern struct timeval runtime;
62/* extern volatile struct timeval time; */
63extern struct timezone tz;                      /* XXX */
64
65extern int tick;                        /* usec per tick (1000000 / hz) */
66extern int hz;                          /* system clock's frequency */
67extern int psratio;                     /* ratio: prof / stat */
68extern int stathz;                      /* statistics clock's frequency */
69extern int profhz;                      /* profiling clock's frequency */
70extern int ticks;
71extern int lbolt;                       /* once a second sleep address */
72extern int tickdelta;
73extern long timedelta;
74
75/*
76 * The following macros are used to declare global sets of objects, which
77 * are collected by the linker into a `struct linker_set' as defined below.
78 *
79 * NB: the constants defined below must match those defined in
80 * ld/ld.h.  Since their calculation requires arithmetic, we
81 * can't name them symbolically (e.g., 23 is N_SETT | N_EXT).
82 */
83#define MAKE_SET(set, sym, type)
84#define TEXT_SET(set, sym) MAKE_SET(set, sym, 23)
85#define DATA_SET(set, sym) MAKE_SET(set, sym, 25)
86#define BSS_SET(set, sym)  MAKE_SET(set, sym, 27)
87#define ABS_SET(set, sym)  MAKE_SET(set, sym, 21)
88
89
90/*
91 * Enumerated types for known system startup interfaces.
92 *
93 * Startup occurs in ascending numeric order; the list entries are
94 * sorted prior to attempting startup to guarantee order.  Items
95 * of the same level are arbitrated for order based on the 'order'
96 * element.
97 *
98 * These numbers are arbitrary and are chosen ONLY for ordering; the
99 * enumeration values are explicit rather than implicit to provide
100 * for binary compatibility with inserted elements.
101 *
102 * The SI_SUB_RUN_SCHEDULER value must have the highest lexical value.
103 *
104 * The SI_SUB_CONSOLE and SI_SUB_SWAP values represent values used by
105 * the BSD 4.4Lite but not by FreeBSD; they are maintained in dependent
106 * order to support porting.
107 *
108 * The SI_SUB_PROTO_BEGIN and SI_SUB_PROTO_END bracket a range of
109 * initializations to take place at splimp().  This is a historical
110 * wart that should be removed -- probably running everything at
111 * splimp() until the first init that doesn't want it is the correct
112 * fix.  They are currently present to ensure historical behavior.
113 */
114enum sysinit_sub_id {
115        SI_SUB_DUMMY            = 0x00000000,   /* not executed; for linker*/
116        SI_SUB_CONSOLE          = 0x08000000,   /* console*/
117        SI_SUB_COPYRIGHT        = 0x08000001,   /* first use of console*/
118        SI_SUB_VM               = 0x10000000,   /* virtual memory system init*/
119        SI_SUB_KMEM             = 0x18000000,   /* kernel memory*/
120        SI_SUB_CPU              = 0x20000000,   /* CPU resource(s)*/
121        SI_SUB_DEVFS            = 0x22000000,   /* get DEVFS ready */
122        SI_SUB_DRIVERS          = 0x23000000,   /* Let Drivers initialize */
123        SI_SUB_CONFIGURE        = 0x24000000,   /* Configure devices */
124        SI_SUB_INTRINSIC        = 0x28000000,   /* proc 0*/
125        SI_SUB_RUN_QUEUE        = 0x30000000,   /* the run queue*/
126        SI_SUB_VM_CONF          = 0x38000000,   /* config VM, set limits*/
127        SI_SUB_VFS              = 0x40000000,   /* virtual file system*/
128        SI_SUB_CLOCKS           = 0x48000000,   /* real time and stat clocks*/
129        SI_SUB_MBUF             = 0x50000000,   /* mbufs*/
130        SI_SUB_CLIST            = 0x58000000,   /* clists*/
131        SI_SUB_SYSV_SHM         = 0x64000000,   /* System V shared memory*/
132        SI_SUB_SYSV_SEM         = 0x68000000,   /* System V semaphores*/
133        SI_SUB_SYSV_MSG         = 0x6C000000,   /* System V message queues*/
134        SI_SUB_PSEUDO           = 0x70000000,   /* pseudo devices*/
135        SI_SUB_PROTO_BEGIN      = 0x80000000,   /* XXX: set splimp (kludge)*/
136        SI_SUB_PROTO_IF         = 0x84000000,   /* interfaces*/
137        SI_SUB_PROTO_DOMAIN     = 0x88000000,   /* domains (address families?)*/
138        SI_SUB_PROTO_END        = 0x8fffffff,   /* XXX: set splx (kludge)*/
139        SI_SUB_KPROF            = 0x90000000,   /* kernel profiling*/
140        SI_SUB_KICK_SCHEDULER   = 0xa0000000,   /* start the timeout events*/
141        SI_SUB_ROOT             = 0xb0000000,   /* root mount*/
142        SI_SUB_ROOT_FDTAB       = 0xb8000000,   /* root vnode in fd table...*/
143        SI_SUB_SWAP             = 0xc0000000,   /* swap*/
144        SI_SUB_INTRINSIC_POST   = 0xd0000000,   /* proc 0 cleanup*/
145        SI_SUB_KTHREAD_INIT     = 0xe0000000,   /* init process*/
146        SI_SUB_KTHREAD_PAGE     = 0xe4000000,   /* pageout daemon*/
147        SI_SUB_KTHREAD_VM       = 0xe8000000,   /* vm daemon*/
148        SI_SUB_KTHREAD_UPDATE   = 0xec000000,   /* update daemon*/
149        SI_SUB_RUN_SCHEDULER    = 0xffffffff    /* scheduler: no return*/
150};
151
152
153/*
154 * Some enumerated orders; "ANY" sorts last.
155 */
156enum sysinit_elem_order {
157        SI_ORDER_FIRST          = 0x00000000,   /* first*/
158        SI_ORDER_SECOND         = 0x00000001,   /* second*/
159        SI_ORDER_THIRD          = 0x00000002,   /* third*/
160        SI_ORDER_MIDDLE         = 0x10000000,   /* somewhere in the middle */
161        SI_ORDER_ANY            = 0xffffffff    /* last*/
162};
163
164
165/*
166 * System initialization call types; currently two are supported... one
167 * to do a simple function call and one to cause a process to be started
168 * by the kernel on the callers behalf.
169 */
170typedef enum sysinit_elem_type {
171        SI_TYPE_DEFAULT         = 0x00000000,   /* No special processing*/
172        SI_TYPE_KTHREAD         = 0x00000001    /* start kernel thread*/
173} si_elem_t;
174
175
176/*
177 * A system initialization call instance
178 *
179 * The subsystem
180 */
181struct sysinit {
182        unsigned int    subsystem;              /* subsystem identifier*/
183        unsigned int    order;                  /* init order within subsystem*/
184        void            (*func) __P((void *));  /* init function*/
185        void            *udata;                 /* multiplexer/argument */
186        si_elem_t       type;                   /* sysinit_elem_type*/
187};
188
189
190/*
191 * Default: no special processing
192 */
193#define SYSINIT(uniquifier, subsystem, order, func, ident)     
194
195/*
196 * Call 'fork()' before calling '(*func)(ident)';
197 * for making a kernel 'thread' (or builtin process.)
198 */
199#define SYSINIT_KT(uniquifier, subsystem, order, func, ident)
200
201
202/*
203 * A kernel process descriptor; used to start "internal" daemons
204 *
205 * Note: global_procpp may be NULL for no global save area
206 */
207struct kproc_desc {
208        char            *arg0;                  /* arg 0 (for 'ps' listing)*/
209        void            (*func) __P((void));    /* "main" for kernel process*/
210        struct proc     **global_procpp;        /* ptr to proc ptr save area*/
211};
212
213void    kproc_start __P((void *udata));
214
215#ifdef PSEUDO_LKM
216#include <sys/conf.h>
217#include <sys/exec.h>
218#include <sys/sysent.h>
219#include <sys/lkm.h>
220
221#define PSEUDO_SET(init, name) \
222        extern struct linker_set MODVNOPS; \
223        MOD_MISC(name); \
224        static int \
225        name ## _load(struct lkm_table *lkmtp, int cmd) \
226                { init((void *)NULL /* XXX unused (?) */); return 0; } \
227        static int \
228        name ## _unload(struct lkm_table *lkmtp, int cmd) \
229                { return EINVAL; } \
230        int \
231        name ## _mod(struct lkm_table *lkmtp, int cmd, int ver) { \
232                DISPATCH(lkmtp, cmd, ver, name ## _load, name ## _unload, \
233                         lkm_nullcmd); }
234#else /* PSEUDO_LKM */
235
236/*
237 * Compatibility.  To be deprecated after LKM is updated.
238 */
239#define PSEUDO_SET(sym, name)   SYSINIT(ps, SI_SUB_PSEUDO, SI_ORDER_ANY, sym, 0)
240
241#endif /* PSEUDO_LKM */
242
243struct linker_set {
244        int             ls_length;
245        const void      *ls_items[1];           /* really ls_length of them,
246                                                 * trailing NULL */
247};
248
249extern struct linker_set execsw_set;
250
251#endif /* !_SYS_KERNEL_H_*/
Note: See TracBrowser for help on using the repository browser.