usr/src/uts/common/sys/modctl.h
author cth
Wed, 13 Sep 2006 15:20:10 -0700
changeset 2723 200331b43252
parent 2712 f74a135872bc
child 4845 357e8e7542af
permissions -rw-r--r--
PSARC/2006/519 Metadevice Names in iostat/vmstat Output 4981132 iostat -Ecte header mal-formed 6402814 Solaris 10 vmstat performance degradation, due to excessive calls to libdevinfo 6464368 iostat and mpstat call kstat_open, but not kstat_close 6466406 kstat: default_kstat_snapshot() should only set lastupdate for incomplete transactions. 6467122 di_devlink_init leaks, missing free of db_dir in handle_free
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     1
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     2
 * CDDL HEADER START
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     3
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
     5
 * Common Development and Distribution License (the "License").
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
     6
 * You may not use this file except in compliance with the License.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     7
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    11
 * and limitations under the License.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    12
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    18
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    19
 * CDDL HEADER END
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    20
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    21
/*
1218
da9792769ae8 4988141 modunload(1M) can race with di_ioctl(DINFOLODRV)
cth
parents: 878
diff changeset
    22
 * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    23
 * Use is subject to license terms.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    24
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    25
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    26
#ifndef	_SYS_MODCTL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    27
#define	_SYS_MODCTL_H
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    29
#pragma ident	"%Z%%M%	%I%	%E% SMI"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    30
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    31
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    32
 * loadable module support.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    33
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    34
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    35
#include <sys/types.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    36
#include <sys/ioccom.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    37
#include <sys/nexusdefs.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    38
#include <sys/thread.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    39
#include <sys/t_lock.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    40
#include <sys/dditypes.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    41
#include <sys/hwconf.h>
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    42
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    43
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    44
extern "C" {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    45
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    46
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    47
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    48
 * The following structure defines the operations used by modctl
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    49
 * to load and unload modules.  Each supported loadable module type
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    50
 * requires a set of mod_ops.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    51
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    52
struct mod_ops {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    53
	int		(*modm_install)();	/* install module in kernel */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    54
	int		(*modm_remove)();	/* remove from kernel */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    55
	int		(*modm_info)();		/* module info */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    56
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    57
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    58
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    59
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    60
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    61
 * The defined set of mod_ops structures for each loadable module type
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    62
 * Defined in modctl.c
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    63
 */
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
    64
extern struct mod_ops mod_brandops;
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
    65
#if defined(__i386) || defined(__amd64)
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
    66
extern struct mod_ops mod_cpuops;
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
    67
#endif
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    68
extern struct mod_ops mod_cryptoops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    69
extern struct mod_ops mod_driverops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    70
extern struct mod_ops mod_execops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    71
extern struct mod_ops mod_fsops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    72
extern struct mod_ops mod_miscops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    73
extern struct mod_ops mod_schedops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    74
extern struct mod_ops mod_strmodops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    75
extern struct mod_ops mod_syscallops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    76
#ifdef _SYSCALL32_IMPL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    77
extern struct mod_ops mod_syscallops32;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    78
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    79
extern struct mod_ops mod_dacfops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    80
extern struct mod_ops mod_ippops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    81
extern struct mod_ops mod_pcbeops;
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
    82
extern struct mod_ops mod_devfsops;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    83
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    84
#endif /* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    85
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    86
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    87
 * Definitions for the module specific linkage structures.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    88
 * The first two fields are the same in all of the structures.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    89
 * The linkinfo is for informational purposes only and is returned by
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    90
 * modctl with the MODINFO cmd.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    91
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    92
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    93
/* For drivers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    94
struct modldrv {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    95
	struct mod_ops		*drv_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    96
	char			*drv_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    97
	struct dev_ops		*drv_dev_ops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    98
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
    99
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   100
/* For system calls */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   101
struct modlsys {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   102
	struct mod_ops		*sys_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   103
	char			*sys_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   104
	struct sysent		*sys_sysent;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   105
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   106
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   107
/* For filesystems */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   108
struct modlfs {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   109
	struct mod_ops		*fs_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   110
	char			*fs_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   111
	struct vfsdef_v3	*fs_vfsdef;	/* version may actually vary */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   112
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   113
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   114
#if defined(__i386) || defined(__amd64)
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   115
struct cmi_ops;
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   116
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   117
/* For CPU modules */
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   118
struct modlcpu {
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   119
	struct mod_ops		*cpu_modops;
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   120
	char			*cpu_linkinfo;
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   121
	struct cmi_ops		*cpu_cmiops;
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   122
};
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   123
#endif
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   124
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   125
/* For cryptographic providers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   126
struct modlcrypto {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   127
	struct mod_ops		*crypto_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   128
	char			*crypto_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   129
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   130
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   131
/* For misc */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   132
struct modlmisc {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   133
	struct mod_ops		*misc_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   134
	char			*misc_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   135
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   136
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   137
/* For IP Modules */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   138
struct modlipp {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   139
	struct mod_ops		*ipp_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   140
	char			*ipp_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   141
	struct ipp_ops		*ipp_ops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   142
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   143
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   144
/* For Streams Modules. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   145
struct modlstrmod {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   146
	struct mod_ops		*strmod_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   147
	char			*strmod_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   148
	struct fmodsw		*strmod_fmodsw;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   149
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   150
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   151
/* For Scheduling classes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   152
struct modlsched {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   153
	struct mod_ops		*sched_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   154
	char			*sched_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   155
	struct sclass		*sched_class;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   156
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   157
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   158
/* For Exec file type (like ELF, ...) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   159
struct modlexec {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   160
	struct mod_ops		*exec_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   161
	char			*exec_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   162
	struct execsw		*exec_execsw;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   163
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   164
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   165
/* For dacf modules */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   166
struct modldacf {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   167
	struct mod_ops		*dacf_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   168
	char			*dacf_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   169
	struct dacfsw		*dacf_dacfsw;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   170
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   171
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   172
/* For PCBE modules */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   173
struct modlpcbe {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   174
	struct mod_ops		*pcbe_modops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   175
	char			*pcbe_linkinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   176
	struct __pcbe_ops	*pcbe_ops;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   177
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   178
2712
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
   179
/* For Brand modules */
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
   180
struct modlbrand {
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
   181
	struct mod_ops		*brand_modops;
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
   182
	char			*brand_linkinfo;
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
   183
	struct brand		*brand_branddef;
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
   184
};
f74a135872bc PSARC/2005/471 BrandZ: Support for non-native zones
nn35248
parents: 2621
diff changeset
   185
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   186
/* for devname fs */
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   187
struct modldev {
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   188
	struct mod_ops		*dev_modops;
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   189
	char			*dev_linkinfo;
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   190
	struct devname_ops	*dev_ops;
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   191
};
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   192
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   193
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   194
 * Revision number of loadable modules support.  This is the value
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   195
 * that must be used in the modlinkage structure.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   196
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   197
#define	MODREV_1		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   198
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   199
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   200
 * The modlinkage structure is the structure that the module writer
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   201
 * provides to the routines to install, remove, and stat a module.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   202
 * The ml_linkage element is an array of pointers to linkage structures.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   203
 * For most modules there is only one linkage structure.  We allocate
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   204
 * enough space for 3 linkage structures which happens to be the most
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   205
 * we have in any sun supplied module.  For those modules with more
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   206
 * than 3 linkage structures (which is very unlikely), a modlinkage
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   207
 * structure must be kmem_alloc'd in the module wrapper to be big enough
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   208
 * for all of the linkage structures.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   209
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   210
struct modlinkage {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   211
	int		ml_rev;		/* rev of loadable modules system */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   212
#ifdef _LP64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   213
	void		*ml_linkage[7];	/* more space in 64-bit OS */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   214
#else
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   215
	void		*ml_linkage[4];	/* NULL terminated list of */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   216
					/* linkage structures */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   217
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   218
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   219
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   220
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   221
 * commands.  These are the commands supported by the modctl system call.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   222
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   223
#define	MODLOAD			0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   224
#define	MODUNLOAD		1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   225
#define	MODINFO			2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   226
#define	MODRESERVED		3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   227
#define	MODSETMINIROOT		4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   228
#define	MODADDMAJBIND		5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   229
#define	MODGETPATH		6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   230
#define	MODREADSYSBIND		7
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   231
#define	MODGETMAJBIND		8
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   232
#define	MODGETNAME		9
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   233
#define	MODSIZEOF_DEVID		10
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   234
#define	MODGETDEVID		11
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   235
#define	MODSIZEOF_MINORNAME	12
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   236
#define	MODGETMINORNAME		13
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   237
#define	MODGETPATHLEN		14
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   238
#define	MODEVENTS		15
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   239
#define	MODGETFBNAME		16
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   240
#define	MODREREADDACF		17
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   241
#define	MODLOADDRVCONF		18
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   242
#define	MODUNLOADDRVCONF	19
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   243
#define	MODREMMAJBIND		20
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   244
#define	MODDEVT2INSTANCE	21
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   245
#define	MODGETDEVFSPATH_LEN	22
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   246
#define	MODGETDEVFSPATH		23
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   247
#define	MODDEVID2PATHS		24
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   248
#define	MODSETDEVPOLICY		26
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   249
#define	MODGETDEVPOLICY		27
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   250
#define	MODALLOCPRIV		28
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   251
#define	MODGETDEVPOLICYBYNAME	29
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   252
#define	MODLOADMINORPERM	31
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   253
#define	MODADDMINORPERM		32
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   254
#define	MODREMMINORPERM		33
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   255
#define	MODREMDRVCLEANUP	34
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   256
#define	MODDEVEXISTS		35
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   257
#define	MODDEVREADDIR		36
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   258
#define	MODDEVNAME		37
2723
200331b43252 PSARC/2006/519 Metadevice Names in iostat/vmstat Output
cth
parents: 2712
diff changeset
   259
#define	MODGETDEVFSPATH_MI_LEN	38
200331b43252 PSARC/2006/519 Metadevice Names in iostat/vmstat Output
cth
parents: 2712
diff changeset
   260
#define	MODGETDEVFSPATH_MI	39
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   261
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   262
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   263
 * sub cmds for MODEVENTS
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   264
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   265
#define	MODEVENTS_FLUSH				0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   266
#define	MODEVENTS_FLUSH_DUMP			1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   267
#define	MODEVENTS_SET_DOOR_UPCALL_FILENAME	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   268
#define	MODEVENTS_GETDATA			3
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   269
#define	MODEVENTS_FREEDATA			4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   270
#define	MODEVENTS_POST_EVENT			5
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   271
#define	MODEVENTS_REGISTER_EVENT		6
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   272
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   273
/*
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   274
 * devname subcmds for MODDEVNAME
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   275
 */
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   276
#define	MODDEVNAME_LOOKUPDOOR	0
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   277
#define	MODDEVNAME_DEVFSADMNODE	1
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   278
#define	MODDEVNAME_NSMAPS	2
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   279
#define	MODDEVNAME_PROFILE	3
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   280
#define	MODDEVNAME_RECONFIG	4
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   281
#define	MODDEVNAME_SYSAVAIL	5
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   282
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   283
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   284
/*
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   285
 * Data structure passed to modconfig command in kernel to build devfs tree
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   286
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   287
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   288
struct aliases {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   289
	struct aliases *a_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   290
	char *a_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   291
	int a_len;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   292
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   293
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   294
#define	MAXMODCONFNAME	256
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   295
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   296
struct modconfig {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   297
	char drvname[MAXMODCONFNAME];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   298
	char drvclass[MAXMODCONFNAME];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   299
	int major;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   300
	int num_aliases;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   301
	struct aliases *ap;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   302
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   303
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   304
#if defined(_SYSCALL32)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   305
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   306
struct aliases32 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   307
	caddr32_t a_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   308
	caddr32_t a_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   309
	int32_t a_len;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   310
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   311
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   312
struct modconfig32 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   313
	char drvname[MAXMODCONFNAME];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   314
	char drvclass[MAXMODCONFNAME];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   315
	int32_t major;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   316
	int32_t num_aliases;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   317
	caddr32_t ap;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   318
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   319
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   320
#endif /* _SYSCALL32 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   321
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   322
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   323
 * Max module path length
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   324
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   325
#define	MOD_MAXPATH	256
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   326
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   327
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   328
 * Default search path for modules ADDITIONAL to the directory
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   329
 * where the kernel components we booted from are.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   330
 *
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   331
 * Most often, this will be "/platform/{platform}/kernel /kernel /usr/kernel",
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   332
 * but we don't wire it down here.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   333
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   334
#define	MOD_DEFPATH	"/kernel /usr/kernel"
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   335
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   336
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   337
 * Default file name extension for autoloading modules.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   338
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   339
#define	MOD_DEFEXT	""
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   340
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   341
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   342
 * Parameters for modinfo
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   343
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   344
#define	MODMAXNAMELEN 32		/* max module name length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   345
#define	MODMAXLINKINFOLEN 32		/* max link info length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   346
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   347
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   348
 * Module specific information.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   349
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   350
struct modspecific_info {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   351
	char	msi_linkinfo[MODMAXLINKINFOLEN]; /* name in linkage struct */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   352
	int	msi_p0;			/* module specific information */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   353
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   354
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   355
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   356
 * Structure returned by modctl with MODINFO command.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   357
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   358
#define	MODMAXLINK 10			/* max linkages modinfo can handle */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   359
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   360
struct modinfo {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   361
	int		   mi_info;		/* Flags for info wanted */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   362
	int		   mi_state;		/* Flags for module state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   363
	int		   mi_id;		/* id of this loaded module */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   364
	int		   mi_nextid;		/* id of next module or -1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   365
	caddr_t		   mi_base;		/* virtual addr of text */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   366
	size_t		   mi_size;		/* size of module in bytes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   367
	int		   mi_rev;		/* loadable modules rev */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   368
	int		   mi_loadcnt;		/* # of times loaded */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   369
	char		   mi_name[MODMAXNAMELEN]; /* name of module */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   370
	struct modspecific_info mi_msinfo[MODMAXLINK];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   371
						/* mod specific info */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   372
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   373
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   374
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   375
#if defined(_SYSCALL32)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   376
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   377
#define	MODMAXNAMELEN32 32		/* max module name length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   378
#define	MODMAXLINKINFOLEN32 32		/* max link info length */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   379
#define	MODMAXLINK32 10			/* max linkages modinfo can handle */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   380
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   381
struct modspecific_info32 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   382
	char	msi_linkinfo[MODMAXLINKINFOLEN32]; /* name in linkage struct */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   383
	int32_t	msi_p0;			/* module specific information */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   384
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   385
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   386
struct modinfo32 {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   387
	int32_t		   mi_info;		/* Flags for info wanted */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   388
	int32_t		   mi_state;		/* Flags for module state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   389
	int32_t		   mi_id;		/* id of this loaded module */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   390
	int32_t		   mi_nextid;		/* id of next module or -1 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   391
	caddr32_t	   mi_base;		/* virtual addr of text */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   392
	uint32_t	   mi_size;		/* size of module in bytes */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   393
	int32_t		   mi_rev;		/* loadable modules rev */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   394
	int32_t		   mi_loadcnt;		/* # of times loaded */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   395
	char		   mi_name[MODMAXNAMELEN32]; /* name of module */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   396
	struct modspecific_info32 mi_msinfo[MODMAXLINK32];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   397
						/* mod specific info */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   398
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   399
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   400
#endif /* _SYSCALL32 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   401
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   402
/* Values for mi_info flags */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   403
#define	MI_INFO_ONE	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   404
#define	MI_INFO_ALL	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   405
#define	MI_INFO_CNT	4
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   406
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   407
#define	MI_INFO_LINKAGE	8	/* used internally to extract modlinkage */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   408
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   409
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   410
 * MI_INFO_NOBASE indicates caller does not need mi_base. Failure to use this
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   411
 * flag may lead 32-bit apps to receive an EOVERFLOW error from modctl(MODINFO)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   412
 * when used with a 64-bit kernel.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   413
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   414
#define	MI_INFO_NOBASE	16
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   415
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   416
/* Values for mi_state */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   417
#define	MI_LOADED	1
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   418
#define	MI_INSTALLED	2
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   419
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   420
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   421
 * Macros to vector to the appropriate module specific routine.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   422
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   423
#define	MODL_INSTALL(MODL, MODLP) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   424
	(*(MODL)->misc_modops->modm_install)(MODL, MODLP)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   425
#define	MODL_REMOVE(MODL, MODLP) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   426
	(*(MODL)->misc_modops->modm_remove)(MODL, MODLP)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   427
#define	MODL_INFO(MODL, MODLP, P0) \
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   428
	(*(MODL)->misc_modops->modm_info)(MODL, MODLP, P0)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   429
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   430
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   431
 * Definitions for stubs
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   432
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   433
struct mod_stub_info {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   434
	uintptr_t mods_func_adr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   435
	struct mod_modinfo *mods_modinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   436
	uintptr_t mods_stub_adr;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   437
	int (*mods_errfcn)();
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   438
	int mods_flag;			/* flags defined below */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   439
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   440
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   441
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   442
 * Definitions for mods_flag.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   443
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   444
#define	MODS_WEAK	0x01		/* weak stub (not loaded if called) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   445
#define	MODS_NOUNLOAD	0x02		/* module not unloadable (no _fini()) */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   446
#define	MODS_INSTALLED	0x10		/* module installed */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   447
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   448
struct mod_modinfo {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   449
	char *modm_module_name;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   450
	struct modctl *mp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   451
	struct mod_stub_info modm_stubs[1];
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   452
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   453
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   454
struct modctl_list {
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   455
	struct modctl_list *modl_next;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   456
	struct modctl *modl_modp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   457
};
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   458
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   459
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   460
 * Structure to manage a loadable module.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   461
 * Note: the module (mod_mp) structure's "text" and "text_size" information
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   462
 * are replicated in the modctl structure so that mod_containing_pc()
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   463
 * doesn't have to grab any locks (modctls are persistent; modules are not.)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   464
 */
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   465
typedef struct modctl {
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   466
	struct modctl	*mod_next;	/* &modules based list */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   467
	struct modctl	*mod_prev;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   468
	int		mod_id;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   469
	void		*mod_mp;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   470
	kthread_t	*mod_inprogress_thread;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   471
	struct mod_modinfo *mod_modinfo;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   472
	struct modlinkage *mod_linkage;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   473
	char		*mod_filename;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   474
	char		*mod_modname;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   475
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   476
	char		mod_busy;	/* inprogress_thread has locked */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   477
	char		mod_want;	/* someone waiting for unlock */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   478
	char		mod_prim;	/* primary module */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   479
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   480
	int		mod_ref;	/* ref count - from dependent or stub */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   481
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   482
	char		mod_loaded;	/* module in memory */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   483
	char		mod_installed;	/* post _init pre _fini */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   484
	char		mod_loadflags;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   485
	char		mod_delay_unload;	/* deferred unload */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   486
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   487
	struct modctl_list *mod_requisites;	/* mods this one depends on. */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   488
	void		*__unused;	/* NOTE: reuse (same size) is OK, */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   489
					/* deletion causes mdb.vs.core issues */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   490
	int		mod_loadcnt;	/* number of times mod was loaded */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   491
	int		mod_nenabled;	/* # of enabled DTrace probes in mod */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   492
	char		*mod_text;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   493
	size_t		mod_text_size;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   494
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   495
	int		mod_gencount;	/* # times loaded/unloaded */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   496
	struct modctl	*mod_requisite_loading;	/* mod circular dependency */
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   497
} modctl_t;
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   498
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   499
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   500
 * mod_loadflags
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   501
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   502
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   503
#define	MOD_NOAUTOUNLOAD	0x1	/* Auto mod-unloader skips this mod */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   504
#define	MOD_NONOTIFY		0x2	/* No krtld notifications on (un)load */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   505
#define	MOD_NOUNLOAD		0x4	/* Assume EBUSY for all _fini's */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   506
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   507
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   508
#ifdef _KERNEL
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   509
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   510
#define	MOD_BIND_HASHSIZE	64
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   511
#define	MOD_BIND_HASHMASK	(MOD_BIND_HASHSIZE-1)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   512
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   513
typedef int modid_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   514
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   515
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   516
 * global function and data declarations
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   517
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   518
extern kmutex_t mod_lock;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   519
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   520
extern char *systemfile;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   521
extern char **syscallnames;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   522
extern int moddebug;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   523
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   524
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   525
 * this is the head of a doubly linked list.  Only the next and prev
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   526
 * pointers are used
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   527
 */
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   528
extern modctl_t modules;
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   529
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   530
extern int modload_qualified(const char *,
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   531
    const char *, const char *, const char *, uint_t[], int);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   532
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   533
extern void	mod_setup(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   534
extern int	modload(char *, char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   535
extern int	modloadonly(char *, char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   536
extern int	modunload(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   537
extern int	mod_hold_stub(struct mod_stub_info *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   538
extern void	modunload_disable(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   539
extern void	modunload_enable(void);
1218
da9792769ae8 4988141 modunload(1M) can race with di_ioctl(DINFOLODRV)
cth
parents: 878
diff changeset
   540
extern void	modunload_begin(void);
da9792769ae8 4988141 modunload(1M) can race with di_ioctl(DINFOLODRV)
cth
parents: 878
diff changeset
   541
extern void	modunload_end(void);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   542
extern int	mod_remove_by_name(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   543
extern int	mod_sysvar(const char *, const char *, u_longlong_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   544
extern int	mod_sysctl(int, void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   545
struct sysparam;
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   546
extern int	mod_hold_by_modctl(modctl_t *, int);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   547
#define		MOD_WAIT_ONCE		0x01
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   548
#define		MOD_WAIT_FOREVER	0x02
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   549
#define		MOD_LOCK_HELD		0x04
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   550
#define		MOD_LOCK_NOT_HELD	0x08
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   551
extern int	mod_sysctl_type(int, int (*)(struct sysparam *, void *),
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   552
    void *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   553
extern void	mod_read_system_file(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   554
extern void	mod_release_stub(struct mod_stub_info *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   555
extern void	mod_askparams(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   556
extern void	mod_uninstall_daemon(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   557
extern void	modreap(void);
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   558
extern modctl_t *mod_hold_by_id(modid_t);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   559
extern modctl_t *mod_hold_by_name(const char *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   560
extern void	mod_release_mod(modctl_t *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   561
extern uintptr_t modlookup(const char *, const char *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   562
extern uintptr_t modlookup_by_modctl(modctl_t *, const char *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   563
extern char	*modgetsymname(uintptr_t, unsigned long *);
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   564
extern void	mod_release_requisites(modctl_t *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   565
extern modctl_t *mod_load_requisite(modctl_t *, char *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   566
extern modctl_t *mod_find_by_filename(char *, char *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   567
extern uintptr_t	modgetsymvalue(char *, int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   568
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   569
extern void	mod_rele_dev_by_major(major_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   570
extern struct dev_ops *mod_hold_dev_by_major(major_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   571
extern struct dev_ops *mod_hold_dev_by_devi(dev_info_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   572
extern void	mod_rele_dev_by_devi(dev_info_t *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   573
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   574
extern int make_devname(char *, major_t);
2621
4ea88858d952 PSARC/2003/246 Filesystem Driven Device Naming
llai1
parents: 1414
diff changeset
   575
extern int gmatch(const char *, const char *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   576
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   577
struct bind;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   578
extern void make_aliases(struct bind **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   579
extern int read_binding_file(char *, struct bind **,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   580
    int (*line_parser)(char *, int, char *, struct bind **));
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   581
extern void clear_binding_hash(struct bind **);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   582
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   583
extern void read_class_file(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   584
extern void setbootpath(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   585
extern void setbootfstype(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   586
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   587
extern int install_stubs_by_name(modctl_t *, char *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   588
extern void install_stubs(modctl_t *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   589
extern void uninstall_stubs(modctl_t *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   590
extern void reset_stubs(modctl_t *);
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   591
extern modctl_t *mod_getctl(struct modlinkage *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   592
extern major_t mod_name_to_major(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   593
extern modid_t mod_name_to_modid(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   594
extern char *mod_major_to_name(major_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   595
extern void init_devnamesp(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   596
extern void init_syscallnames(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   597
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   598
extern char *mod_getsysname(int);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   599
extern int mod_getsysnum(char *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   600
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   601
extern char *mod_containing_pc(caddr_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   602
extern int mod_in_autounload(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   603
extern char	*mod_modname(struct modlinkage *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   604
1414
b4126407ac5b PSARC 2006/020 FMA for Athlon 64 and Opteron Processors
cindi
parents: 1218
diff changeset
   605
extern int dev_minorperm(dev_info_t *, char *, mperm_t *);
0
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   606
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   607
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   608
 * Declarations used for dynamic linking support routines.  Interfaces
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   609
 * are marked with the pragma "unknown_control_flow" to prevent tail call
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   610
 * optimization, so that implementations can reliably use caller() to
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   611
 * determine initiating module.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   612
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   613
#define	KRTLD_MODE_FIRST	0x0001
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   614
typedef	struct __ddi_modhandle	*ddi_modhandle_t;
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   615
extern ddi_modhandle_t		ddi_modopen(const char *,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   616
				    int, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   617
extern void			*ddi_modsym(ddi_modhandle_t,
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   618
				    const char *, int *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   619
extern int			ddi_modclose(ddi_modhandle_t);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   620
#pragma	unknown_control_flow(ddi_modopen, ddi_modsym, ddi_modclose)
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   621
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   622
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   623
 * Only the following are part of the DDI/DKI
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   624
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   625
extern int	_init(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   626
extern int	_fini(void);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   627
extern int	_info(struct modinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   628
extern int	mod_install(struct modlinkage *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   629
extern int	mod_remove(struct modlinkage *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   630
extern int	mod_info(struct modlinkage *, struct modinfo *);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   631
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   632
#else	/* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   633
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   634
extern int modctl(int, ...);
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   635
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   636
#endif	/* _KERNEL */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   637
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   638
/*
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   639
 * bit definitions for moddebug.
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   640
 */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   641
#define	MODDEBUG_LOADMSG	0x80000000	/* print "[un]loading..." msg */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   642
#define	MODDEBUG_ERRMSG		0x40000000	/* print detailed error msgs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   643
#define	MODDEBUG_LOADMSG2	0x20000000	/* print 2nd level msgs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   644
#define	MODDEBUG_FINI_EBUSY	0x00020000	/* pretend fini returns EBUSY */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   645
#define	MODDEBUG_NOAUL_IPP	0x00010000	/* no Autounloading ipp mods */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   646
#define	MODDEBUG_NOAUL_DACF	0x00008000	/* no Autounloading dacf mods */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   647
#define	MODDEBUG_KEEPTEXT	0x00004000	/* keep text after unloading */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   648
#define	MODDEBUG_NOAUL_DRV	0x00001000	/* no Autounloading Drivers */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   649
#define	MODDEBUG_NOAUL_EXEC	0x00000800	/* no Autounloading Execs */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   650
#define	MODDEBUG_NOAUL_FS	0x00000400	/* no Autounloading File sys */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   651
#define	MODDEBUG_NOAUL_MISC	0x00000200	/* no Autounloading misc */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   652
#define	MODDEBUG_NOAUL_SCHED	0x00000100	/* no Autounloading scheds */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   653
#define	MODDEBUG_NOAUL_STR	0x00000080	/* no Autounloading streams */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   654
#define	MODDEBUG_NOAUL_SYS	0x00000040	/* no Autounloading syscalls */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   655
#define	MODDEBUG_NOCTF		0x00000020	/* do not load CTF debug data */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   656
#define	MODDEBUG_NOAUTOUNLOAD	0x00000010	/* no autounloading at all */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   657
#define	MODDEBUG_DDI_MOD	0x00000008	/* ddi_mod{open,sym,close} */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   658
#define	MODDEBUG_MP_MATCH	0x00000004	/* dev_minorperm */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   659
#define	MODDEBUG_MINORPERM	0x00000002	/* minor perm modctls */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   660
#define	MODDEBUG_USERDEBUG	0x00000001	/* bpt after init_module() */
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   661
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   662
#ifdef	__cplusplus
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   663
}
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   664
#endif
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   665
68f95e015346 OpenSolaris Launch
stevel@tonic-gate
parents:
diff changeset
   666
#endif	/* _SYS_MODCTL_H */