Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ sysi86(S) — OpenDesktop Software Development System 3.0.0

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

pathconf(S)

pipe(S)

uname(S)

pipe(ADM)

swap(ADM)


 sysi86(S)                      6 January 1993                      sysi86(S)


 Name

    sysi86 - machine-specific functions

 Syntax


    cc  . . .  -lc


    #include <sys/sysi86.h>

    long sysi86 (cmd, arg)
    int cmd;


 Description

    The sysi86 system call implements machine-specific functions.  The cmd
    argument determines the function to be performed.  The types of the argu-
    ments expected depend on the function.

    RTODC       When cmd is RTODC, the expected argument is the address of a
                structure rtct (from the header file <sys/rtc.h>):

                   struct rtc_t {
                           char rtc_sec, rtc_asec, rtc_min, rtc_amin,
                           rtc_hr, rtc_ahr, rtc_dow, rtc_dom,
                           rtc_mon, rtc_yr, rtc_statusg,
                           rtc_statusb, rtc_statusc, rtc_statusd;
                   };

                This function reads the hardware time-of-day clock and
                returns the data in the structure referenced by the argument.
                This command is available only to root.

    RDUBLK      This command reads the u-block (per process user information
                as defined by the user structure in the <sys/user.h> header
                file) for a given process.  When cmd is RDUBLK, sysi86 takes
                three additional arguments: the process ID, the address of a
                buffer, and the number of bytes to read:

                   sysi86(RDUBLK, pid, buf, n)
                           int  pid;
                           char *buf;
                           ind  n;


    SI86FPHW    This command expects the address of an integer as its argu-
                ment.  After successful return from the system call, the
                integer specifies how floating-point computation is sup-
                ported.

                The low-order byte of the integer contains the value of
                fpkind, a variable specifying whether an 80287 or 80387
                floating-point co-processor is present, emulated in software,
                or not supported.  The values are defined in the header file
                <sys/fp.h>.

                     FP_NO     no fp chip, no emulator (no fp support)

                     FP_SW     no fp chip, using software emulator

                     FP_HW     chip present bit

                     FP_28     80287 chip present

                     FP_38     80387 chip present


    SETNAME     This cmd, which is only available to root, expects an argu-
                ment of type char * pointing to a NULL terminated string of
                at most 7 characters.  The command changes the running
                system's sysname and nodename to this string.  See uname(S).

    STIME       When cmd is STIME, an argument of type long is expected.
                This function sets the system time and date (not the hardware
                clock).  The argument contains the time as measured in
                seconds from 00:00:00 GMT January 1, 1970. Note that this
                command is only available to root.

    SI86DSCR    This command sets a segment or gate descriptor in the kernel.
                The following descriptor types are accepted:

                +  executable and data segments in the LDT at DPL 3

                +  a call gate in the GDT at DPL 3 pointing to a segment in
                   the LDT

                The argument is a pointer to a request structure that con-
                tains the values to be placed in the descriptor.  The request
                structure is declared in the <sys/sysi86.h> header file.

    SI86MEM     This command returns the size of available memory in bytes.

    SI86SETPIPE The argument is the name of a file.  If the filesystem on
                which that file resides is mounted read/write, then that
                filesystem becomes the ``pipe filesystem.''  Anonymous pipes
                created with pipe(S) use i-nodes and blocks on this pipe
                filesystem for temporary storage of the data passing through
                the pipe.

                If the argument is the NULL pointer, then the pipe filesystem
                is disabled.  This causes all subsequent pipe() calls to fail
                with error ENODEV.  Existing anonymous pipes are not
                affected.

                Named pipes use the filesystem on which they reside, not the
                pipe filesystem, and so are never affected by SI86SETPIPE.

                Only root can set or disable the pipe filesystem.  Upon suc-
                cessful completion a value of 0 is returned.  Otherwise, a
                value of -1 is returned and errno is set the indicate the
                error:


                [EPERM]     The effective user ID is not root (the
                            superuser).

                [ENOENT]    The named file does not exist.

                [ENOTDIR]   A component of file's path prefix is not a direc-
                            tory.

                [EROFS]     The filesystem is mounted read-only.

                [ENODEV]    The filesystem is incapable of supporting pipes.

    SI86GETPIPE This command, which does not take an argument, returns the
                device number of the block special file containing the
                current pipe filesystem.  (See command SI86SETPIPE for the
                definition of the ``pipe filesystem''.)  Otherwise, -1 is
                returned and errno set to indicate the error:

                [ENODEV]    No pipe filesystem currently exists.

    SI86SWPI    When cmd is SI86SWPI, individual swapping areas may be added,
                deleted or the current areas determined.  The address of an
                appropriately primed swap buffer is passed as the only argu-
                ment.  Refer to <sys/swap.h> header file for details on load-
                ing the buffer.

                The format of the swap buffer is:

                typedef struct swapint {
                        char    si_cmd;      /* One of the command codes     */
                                             /* listed below.                */
                        char    *si_buf;     /* For an SI_LIST function, this*/
                                             /* is a pointer to a buffer of  */
                                             /* sizeof(swpt_t)*MSFILES bytes.*/
                                             /* For the other cases, it is a */
                                             /* pointer to a pathname of a   */
                                             /* swap file.                   */
                        int     si_swplo;    /* The first block number of the*/
                                             /* swap file.  Used only for    */
                                             /* SI_ADD and SI_DEL.           */
                        int     si_nblks;    /* The size of the swap file in */
                                             /* blocks.  Used only for an    */
                                             /* SI_ADD request.              */
                } swpi_t;

                /*       The following are the possible values for si_cmd.   */

                #define SI_LIST         0    /* List the currently active    */
                                             /* swap files.                  */
                #define SI_ADD          1    /* Add a new swap file.         */
                #define SI_DEL          2    /* Delete one of the currently  */
                                             /* active swap files.           */


                Note that the add and delete options of the command may only
                be used by root.

                Typically, a swap area is added by a single call to sysi86.
                First, the swap buffer is primed with appropriate entries for
                the structure members.  Then sysi86 is invoked.

                   #include <sys/sysi86.h>
                   #include <sys/swap.h>

                   struct swapint swapbuf;  /*swap into buffer ptr*/

                   sysi86(SI86SWPI, &swapbuf);


                If this command succeeds, it returns 0 to the calling pro-
                cess.  This command fails, returning -1, if one or more of
                the following is true:

                [EEXIST]    Swap area specified has already been added

                [EFAULT]    1. swapbuf points to an invalid address
                            2. swapbuf.sibuf points to an invalid address

                [EINVAL]    Bad arguments

                [ENOMEM]    1. Tried to delete last remaining swap area
                            2. No place to put swapped pages when deleting a
                            swap area

                [ENOSPC]    Too many swap areas in use (if adding).

                [ENOTBLK]   Swap area specified is not a block special device


 Return value

    Upon error, -1 is returned and errno is set to indicate the error.  When
    the cmd is invalid, errno is set to EINVAL.

 Notes

    Normally after booting, the pipe filesystem is initially and automatical-
    ly set by the system to be the root filesystem.  However, if the system
    is booted with a read-only root, which is normally done only for instal-
    lation (see boot(HW)), then there is no initial pipe filesystem and the
    pipe(ADM) command should be used once a suitable filesystem is mounted.

    pathconf(S) can be used to determine whether or not a filesystem supports
    pipes.

 See also

    pathconf(S), pipe(S), uname(S), pipe(ADM), swap(ADM)

 Standards conformance

    The sysi86 system call is not part of any currently supported standard;
    it is an extension of AT&T System V provided by The Santa Cruz Operation,
    Inc.


Typewritten Software • bear@typewritten.org • Edmonds, WA 98026