1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright (c) 1993, 2010, Oracle and/or its affiliates. All rights reserved. 23 */ 24 25 #ifndef _CMD_MODLOAD_ADDREM_H 26 #define _CMD_MODLOAD_ADDREM_H 27 28 #include <sys/modctl.h> 29 #include <device_info.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 /* defines for add_drv.c, update_drv.c, and rem_drv.c */ 36 37 #define SUCCESS 0 38 #define FAILURE -1 39 #define NOERR 0 40 #define ERROR -1 41 #define UNIQUE -2 42 #define NOT_UNIQUE -3 43 #define NONE_FOUND -4 44 45 #define MAX_CMD_LINE 256 46 #define MAX_N2M_ALIAS_LINE FILENAME_MAX + FILENAME_MAX + 1 47 #define MAXLEN_NAM_TO_MAJ_ENT FILENAME_MAX + MAX_STR_MAJOR + 1 48 #define OPT_LEN 128 49 #define CADDR_HEX_STR 16 50 #define UINT_STR 10 51 #define MODLINE_ENT_MAX (4 * UINT_STR) + CADDR_HEX_STR + MODMAXNAMELEN 52 #define MAX_STR_MAJOR UINT_STR 53 #define STR_LONG 10 54 #define PERM_STR 4 55 #define MAX_PERM_ENTRY (2 * STR_LONG) + PERM_STR + (2 * FILENAME_MAX) + 1 56 #define MAX_DBFILE_ENTRY MAX_PERM_ENTRY 57 58 #define CLEAN_MINOR_PERM 0x00000001 59 #define CLEAN_DRV_ALIAS 0x00000002 60 #define CLEAN_NAM_MAJ 0x00000004 61 #define CLEAN_DRV_CLASSES 0x00000010 62 #define CLEAN_DEV_POLICY 0x00000020 63 #define CLEAN_DRV_PRIV 0x00000040 64 #define CLEAN_ALL (CLEAN_MINOR_PERM | CLEAN_DRV_ALIAS | \ 65 CLEAN_NAM_MAJ | CLEAN_DRV_CLASSES | \ 66 CLEAN_DEV_POLICY | CLEAN_DRV_PRIV) 67 68 /* add_drv/rem_drv database files */ 69 #define DRIVER_ALIAS "/etc/driver_aliases" 70 #define DRIVER_CLASSES "/etc/driver_classes" 71 #define MINOR_PERM "/etc/minor_perm" 72 #define NAM_TO_MAJ "/etc/name_to_major" 73 #define REM_NAM_TO_MAJ "/etc/rem_name_to_major" 74 75 #define ADD_REM_LOCK "/var/run/AdDrEm.lck" 76 77 #if defined(__x86) 78 #define DRVDIR64 "amd64" 79 #elif defined(__sparc) 80 #define DRVDIR64 "sparcv9" 81 #endif 82 83 /* pointers to add_drv/rem_drv database files */ 84 char *driver_aliases; 85 char *driver_classes; 86 char *minor_perm; 87 char *name_to_major; 88 char *rem_name_to_major; 89 char *device_policy; 90 char *extra_privs; 91 92 /* devfs root string */ 93 char *devfs_root; 94 95 /* module path searching structure */ 96 struct drvmod_dir { 97 char direc[FILENAME_MAX + 1]; 98 struct drvmod_dir *next; 99 }; 100 101 struct drvmod_dir *moddir; 102 103 /* names of things: directories, commands, files */ 104 #define KERNEL_DRV "/kernel/drv" 105 #define USR_KERNEL_DRV "/usr/kernel/drv" 106 #define DRVCONFIG_PATH "/usr/sbin/drvconfig" 107 #define DRVCONFIG "drvconfig" 108 #define DEVFSADM_PATH "/usr/sbin/devfsadm" 109 #define DEVFSADM "devfsadm" 110 #define DEVFS_ROOT "/devices" 111 #define RECONFIGURE "/reconfigure" 112 #define MODUNLOAD_PATH "/usr/sbin/modunload" 113 114 extern void log_minorperm_error(minorperm_err_t, int); 115 extern void remove_entry(int, char *); 116 extern char *get_next_entry(char *, char *); 117 extern char *get_perm_entry(char *, char *); 118 extern int check_perms_aliases(int, int); 119 extern int check_name_to_major(int); 120 extern void enter_lock(void); 121 extern void err_exit(void); 122 extern void exit_unlock(void); 123 extern char *get_entry(char *, char *, char, int); 124 extern int build_filenames(char *); 125 extern int append_to_file(char *, char *, char *, char, char *, int); 126 extern int append_to_minor_perm(char *, char *, char *); 127 extern int get_major_no(char *, char *); 128 extern int get_driver_name(int, char *, char *); 129 extern int delete_entry(char *, char *, char *, char *); 130 extern int check_space_within_quote(char *); 131 extern void list_entry(char *, char *, char *); 132 extern int update_minor_entry(char *, char *); 133 extern int check_perm_opts(char *); 134 extern int update_name_to_major(char *, major_t *, int); 135 extern int do_the_update(char *, char *); 136 extern int fill_n2m_array(char *, char **, int *); 137 extern int aliases_unique(char *); 138 extern int aliases_exist(char *); 139 extern int aliases_paths_exist(char *); 140 extern int update_driver_aliases(char *, char *); 141 extern int unique_driver_name(char *, char *, int *); 142 extern int unique_drv_alias(char *); 143 extern int check_duplicate_driver_alias(char *, char *); 144 extern int trim_duplicate_aliases(char *, char *, char **); 145 extern int get_max_major(char *); 146 extern void get_modid(char *, int *); 147 extern int config_driver(char *, major_t, char *, char *, int, int); 148 extern int unconfig_driver(char *, major_t, char *, int); 149 extern void load_driver(char *, int); 150 extern int create_reconfig(char *); 151 extern void cleanup_moddir(void); 152 153 /* drvsubr.c */ 154 #define XEND ".XXXXXX" 155 #define MAXMODPATHS 1024 156 157 /* module path list separators */ 158 #define MOD_SEP " :" 159 #define DIR_SEP "/" 160 161 /* [un]config_driver flags */ 162 #define CONFIG_DRV_VERBOSE 0x01 /* verbose */ 163 #define CONFIG_DRV_FORCE 0x02 /* unconfig even if in use */ 164 #define CONFIG_DRV_UPDATE_ONLY 0x04 /* -u update only */ 165 166 #ifdef __cplusplus 167 } 168 #endif 169 170 #endif /* _CMD_MODLOAD_ADDREM_H */ 171