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 2007 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 /* 27 * WARNING: 28 * The interfaces defined in this header file are for Sun private use only. 29 * The contents of this file are subject to change without notice in 30 * future releases. 31 */ 32 33 #ifndef _DEVICE_INFO_H 34 #define _DEVICE_INFO_H 35 36 #pragma ident "%Z%%M% %I% %E% SMI" 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 /* error return values */ 43 #define DEVFS_ERR -1 /* operation not successful */ 44 #define DEVFS_INVAL -2 /* invalid argument */ 45 #define DEVFS_NOMEM -3 /* out of memory */ 46 #define DEVFS_PERM -4 /* permission denied - not root */ 47 #define DEVFS_NOTSUP -5 /* operation not supported */ 48 #define DEVFS_LIMIT -6 /* exceeded maximum size of property value */ 49 #define DEVFS_NOTFOUND -7 /* request not found */ 50 51 /* 52 * for devfs_set_boot_dev() 53 * default behavior is to translate the input logical device name 54 * to most compact prom name(i.e. a prom alias, if one exists) 55 * as possible. And to prepend the new entry to the existing 56 * list. 57 */ 58 59 /* perform no translation on the input device path */ 60 #define BOOTDEV_LITERAL 0x1 61 /* convert the input device path only a prom device path; not an alias */ 62 #define BOOTDEV_PROMDEV 0x2 63 /* overwrite the existing entry in boot-device - default is to prepend */ 64 #define BOOTDEV_OVERWRITE 0x4 65 66 /* 67 * for devfs_get_prom_names() 68 * returns a list of prom names for a given logical device name. 69 * the list is sorted first in order of exact aliases, inexact alias 70 * matches (where an option override was needed), and finally the 71 * equivalent prom device path. Each sublist is sorted in collating 72 * order. 73 */ 74 #define BOOTDEV_NO_PROM_PATH 0x1 75 #define BOOTDEV_NO_INEXACT_ALIAS 0x2 76 #define BOOTDEV_NO_EXACT_ALIAS 0x4 77 78 /* for devfs_get_boot_dev() */ 79 struct boot_dev { 80 char *bootdev_element; /* an entry from the boot-device variable */ 81 char **bootdev_trans; /* 0 or more logical dev translations */ 82 }; 83 84 /* for devfs_get_all_prom_names() */ 85 struct devfs_prom_path { 86 char *obp_path; 87 char **alias_list; 88 struct devfs_prom_path *next; 89 }; 90 91 /* prototypes */ 92 93 /* return the driver for a given device path */ 94 extern int devfs_path_to_drv(char *devfs_path, char *drv_buf); 95 96 /* convert a logical or physical device name to the equivalent prom path */ 97 extern int devfs_dev_to_prom_name(char *, char *); 98 99 /* return the driver name after resolving any aliases */ 100 extern char *devfs_resolve_aliases(char *drv); 101 102 /* set the boot-device configuration variable */ 103 extern int devfs_bootdev_set_list(const char *, const uint_t); 104 105 /* is the boot-device variable modifiable on this platform? */ 106 extern int devfs_bootdev_modifiable(void); 107 108 /* 109 * retrieve the boot-device config variable and corresponding logical 110 * device names 111 */ 112 extern int devfs_bootdev_get_list(const char *, struct boot_dev ***); 113 /* 114 * free a list of bootdev structs 115 */ 116 extern void devfs_bootdev_free_list(struct boot_dev **); 117 /* 118 * given a logical device name, return a list of equivalent 119 * prom names (aliases and device paths) 120 */ 121 extern int devfs_get_prom_names(const char *, uint_t, char ***); 122 /* 123 * like devfs_get_prom_names(), but deals with 1 to many mappings 124 * introduced by mpxio devices 125 */ 126 extern int devfs_get_all_prom_names(const char *, uint_t, 127 struct devfs_prom_path **); 128 /* 129 * free a list of devfs_prom_path structures 130 */ 131 extern void devfs_free_all_prom_names(struct devfs_prom_path *); 132 133 /* 134 * map a device name from install OS environment to target OS environment or 135 * vice-versa. 136 */ 137 extern int devfs_target2install(const char *, const char *, char *, size_t); 138 extern int devfs_install2target(const char *, const char *, char *, size_t); 139 140 /* 141 * Minor perm parsing library support for devfsadm, add_drv etc. 142 */ 143 #define MINOR_PERM_FILE "/etc/minor_perm" 144 #define MAX_MINOR_PERM_LINE 256 145 #define DEFAULT_DEV_USER "root" 146 #define DEFAULT_DEV_GROUP "sys" 147 148 /* 149 * Possible errors the callers of devfs_read_minor_perm() need 150 * to be prepared to deal with via callback. 151 */ 152 typedef enum { 153 MP_FOPEN_ERR, 154 MP_FCLOSE_ERR, 155 MP_IGNORING_LINE_ERR, 156 MP_ALLOC_ERR, 157 MP_NVLIST_ERR, 158 MP_CANT_FIND_USER_ERR, 159 MP_CANT_FIND_GROUP_ERR 160 } minorperm_err_t; 161 162 163 /* 164 * Create/free mperm list of minor perm entries 165 */ 166 extern struct mperm *devfs_read_minor_perm(void (*)(minorperm_err_t, int)); 167 extern void devfs_free_minor_perm(struct mperm *); 168 169 /* 170 * Load all minor perm entries, and add/remove minor perm entry 171 */ 172 extern int devfs_load_minor_perm(struct mperm *, 173 void (*)(minorperm_err_t, int)); 174 extern int devfs_add_minor_perm(char *, void (*)(minorperm_err_t, int)); 175 extern int devfs_rm_minor_perm(char *, void (*)(minorperm_err_t, int)); 176 177 /* devfsadm dca_flags values: some are used by libdevinfo devlink_create() */ 178 #define DCA_CREATE_LINK 0x000000001 179 #define DCA_FREE_LIST 0x000000002 180 #define DCA_LOAD_DRV 0x000000004 181 #define DCA_CHECK_TYPE 0x000000010 182 #define DCA_NOTIFY_RCM 0x000000020 183 #define DCA_FLUSH_PATHINST 0x000000040 184 #define DCA_HOT_PLUG 0x000000080 185 #define DCA_DEVLINK_SYNC 0x000000100 186 #define DCA_DEVLINK_CACHE 0x000000200 187 188 #ifdef __cplusplus 189 } 190 #endif 191 192 #endif /* _DEVICE_INFO_H */ 193