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