zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

kern_control.h (5417B) - Raw


      1 /*
      2  * Copyright (c) 2000-2004, 2012-2016 Apple Inc. All rights reserved.
      3  *
      4  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
      5  *
      6  * This file contains Original Code and/or Modifications of Original Code
      7  * as defined in and that are subject to the Apple Public Source License
      8  * Version 2.0 (the 'License'). You may not use this file except in
      9  * compliance with the License. The rights granted to you under the License
     10  * may not be used to create, or enable the creation or redistribution of,
     11  * unlawful or unlicensed copies of an Apple operating system, or to
     12  * circumvent, violate, or enable the circumvention or violation of, any
     13  * terms of an Apple operating system software license agreement.
     14  *
     15  * Please obtain a copy of the License at
     16  * http://www.opensource.apple.com/apsl/ and read it before using this file.
     17  *
     18  * The Original Code and all software distributed under the License are
     19  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
     20  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
     21  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
     22  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
     23  * Please see the License for the specific language governing rights and
     24  * limitations under the License.
     25  *
     26  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
     27  */
     28 /*!
     29  *       @header kern_control.h
     30  *       This header defines an API to communicate between a kernel
     31  *       extension and a process outside of the kernel.
     32  */
     33 
     34 #ifndef KPI_KERN_CONTROL_H
     35 #define KPI_KERN_CONTROL_H
     36 
     37 
     38 #include <sys/appleapiopts.h>
     39 #include <sys/_types/_u_char.h>
     40 #include <sys/_types/_u_int16_t.h>
     41 #include <sys/_types/_u_int32_t.h>
     42 #include <sys/_types/_u_int64_t.h>
     43 
     44 /*
     45  * Define Controller event subclass, and associated events.
     46  * Subclass of KEV_SYSTEM_CLASS
     47  */
     48 
     49 /*!
     50  *       @defined KEV_CTL_SUBCLASS
     51  *   @discussion The kernel event subclass for kernel control events.
     52  */
     53 #define KEV_CTL_SUBCLASS        2
     54 
     55 /*!
     56  *       @defined KEV_CTL_REGISTERED
     57  *   @discussion The event code indicating a new controller was
     58  *       registered. The data portion will contain a ctl_event_data.
     59  */
     60 #define KEV_CTL_REGISTERED      1       /* a new controller appears */
     61 
     62 /*!
     63  *       @defined KEV_CTL_DEREGISTERED
     64  *   @discussion The event code indicating a controller was unregistered.
     65  *       The data portion will contain a ctl_event_data.
     66  */
     67 #define KEV_CTL_DEREGISTERED    2       /* a controller disappears */
     68 
     69 /*!
     70  *       @struct ctl_event_data
     71  *       @discussion This structure is used for KEV_CTL_SUBCLASS kernel
     72  *               events.
     73  *       @field ctl_id The kernel control id.
     74  *       @field ctl_unit The kernel control unit.
     75  */
     76 struct ctl_event_data {
     77 	u_int32_t   ctl_id;             /* Kernel Controller ID */
     78 	u_int32_t   ctl_unit;
     79 };
     80 
     81 /*
     82  * Controls destined to the Controller Manager.
     83  */
     84 
     85 /*!
     86  *       @defined CTLIOCGCOUNT
     87  *   @discussion The CTLIOCGCOUNT ioctl can be used to determine the
     88  *       number of kernel controllers registered.
     89  */
     90 #define CTLIOCGCOUNT    _IOR('N', 2, int)               /* get number of control structures registered */
     91 
     92 /*!
     93  *       @defined CTLIOCGINFO
     94  *   @discussion The CTLIOCGINFO ioctl can be used to convert a kernel
     95  *       control name to a kernel control id.
     96  */
     97 #define CTLIOCGINFO     _IOWR('N', 3, struct ctl_info)  /* get id from name */
     98 
     99 
    100 /*!
    101  *       @defined MAX_KCTL_NAME
    102  *   @discussion Kernel control names must be no longer than
    103  *       MAX_KCTL_NAME.
    104  */
    105 #define MAX_KCTL_NAME   96
    106 
    107 /*
    108  * Controls destined to the Controller Manager.
    109  */
    110 
    111 /*!
    112  *       @struct ctl_info
    113  *       @discussion This structure is used with the CTLIOCGINFO ioctl to
    114  *               translate from a kernel control name to a control id.
    115  *       @field ctl_id The kernel control id, filled out upon return.
    116  *       @field ctl_name The kernel control name to find.
    117  */
    118 struct ctl_info {
    119 	u_int32_t   ctl_id;                             /* Kernel Controller ID  */
    120 	char        ctl_name[MAX_KCTL_NAME];            /* Kernel Controller Name (a C string) */
    121 };
    122 
    123 
    124 /*!
    125  *       @struct sockaddr_ctl
    126  *       @discussion The controller address structure is used to establish
    127  *               contact between a user client and a kernel controller. The
    128  *               sc_id/sc_unit uniquely identify each controller. sc_id is a
    129  *               unique identifier assigned to the controller. The identifier can
    130  *               be assigned by the system at registration time or be a 32-bit
    131  *               creator code obtained from Apple Computer. sc_unit is a unit
    132  *               number for this sc_id, and is privately used by the kernel
    133  *               controller to identify several instances of the controller.
    134  *       @field sc_len The length of the structure.
    135  *       @field sc_family AF_SYSTEM.
    136  *       @field ss_sysaddr AF_SYS_KERNCONTROL.
    137  *       @field sc_id Controller unique identifier.
    138  *       @field sc_unit Kernel controller private unit number.
    139  *       @field sc_reserved Reserved, must be set to zero.
    140  */
    141 struct sockaddr_ctl {
    142 	u_char      sc_len;     /* depends on size of bundle ID string */
    143 	u_char      sc_family;  /* AF_SYSTEM */
    144 	u_int16_t   ss_sysaddr; /* AF_SYS_KERNCONTROL */
    145 	u_int32_t   sc_id;      /* Controller unique identifier  */
    146 	u_int32_t   sc_unit;    /* Developer private unit number */
    147 	u_int32_t   sc_reserved[5];
    148 };
    149 
    150 
    151 
    152 #endif /* KPI_KERN_CONTROL_H */