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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* 23 * Copyright 2003 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 #ifndef _LAYOUT_DEVICE_UTIL_H 28 #define _LAYOUT_DEVICE_UTIL_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 #include <libdiskmgt.h> 37 38 extern boolean_t is_alt_slice_name(char *name); 39 extern boolean_t is_did_name(char *name); 40 extern boolean_t is_did_slice_name(char *name); 41 extern boolean_t is_did_disk_name(char *name); 42 extern boolean_t is_ctd_name(char *name); 43 extern boolean_t is_ctd_slice_name(char *name); 44 extern boolean_t is_ctd_disk_name(char *name); 45 extern boolean_t is_ctd_target_name(char *name); 46 extern boolean_t is_ctd_ctrl_name(char *name); 47 48 extern int set_display_name(dm_descriptor_t desc, char *name); 49 extern int get_display_name(dm_descriptor_t slice, char **name); 50 51 extern int slice_get_by_name(char *name, dm_descriptor_t *slicep); 52 extern int disk_get_by_name(char *name, dm_descriptor_t *diskp); 53 extern int hba_get_by_name(char *name, dm_descriptor_t *hbap); 54 55 extern int extract_diskname(char *slicename, char **diskname); 56 extern int extract_hbaname(char *slicename, char **hbaname); 57 58 extern int get_disk_for_named_slice(char *slicename, 59 dm_descriptor_t *diskp); 60 61 /* 62 * functions to manipulate devices 63 */ 64 extern int group_similar_hbas(dlist_t *hbas, dlist_t **list); 65 extern int hba_is_multiplex(dm_descriptor_t hba, boolean_t *bool); 66 67 extern int hba_set_n_avail_disks(dm_descriptor_t hba, uint16_t val); 68 extern int hba_get_n_avail_disks(dm_descriptor_t hba, uint16_t *val); 69 70 extern int hba_get_type(dm_descriptor_t hba, char **type); 71 extern int hba_is_fast(dm_descriptor_t hba, boolean_t *bool); 72 extern int hba_is_fast_20(dm_descriptor_t hba, boolean_t *bool); 73 extern int hba_is_fast_40(dm_descriptor_t hba, boolean_t *bool); 74 extern int hba_is_fast_80(dm_descriptor_t hba, boolean_t *bool); 75 extern int hba_supports_protocol( 76 dm_descriptor_t hba, char *attr, boolean_t *bool); 77 extern int hba_supports_wide(dm_descriptor_t hba, boolean_t *bool); 78 79 extern int disk_get_available_slice_index( 80 dm_descriptor_t diskp, uint32_t *index); 81 82 extern int disk_get_hbas(dm_descriptor_t disk, dlist_t **list); 83 extern int disk_get_paths(dm_descriptor_t disk, dlist_t **list); 84 extern int disk_get_slices(dm_descriptor_t disk, dlist_t **list); 85 extern int disk_get_aliases(dm_descriptor_t disk, dlist_t **list); 86 extern int disk_get_blocksize(dm_descriptor_t disk, uint64_t *val); 87 extern int disk_get_ncylinders(dm_descriptor_t disk, uint64_t *val); 88 extern int disk_get_size_in_blocks(dm_descriptor_t disk, uint64_t *val); 89 extern int disk_get_start_block(dm_descriptor_t disk, uint64_t *val); 90 extern int disk_get_nheads(dm_descriptor_t disk, uint64_t *val); 91 extern int disk_get_nsectors(dm_descriptor_t disk, uint64_t *val); 92 extern int disk_get_is_efi(dm_descriptor_t disk, boolean_t *val); 93 extern int disk_get_has_fdisk(dm_descriptor_t disk, boolean_t *val); 94 extern int disk_get_has_solaris_partition(dm_descriptor_t disk, 95 boolean_t *val); 96 extern int disk_get_is_online(dm_descriptor_t disk, boolean_t *val); 97 extern int disk_get_drive_type(dm_descriptor_t disk, uint32_t *val); 98 extern int disk_get_media_type(dm_descriptor_t disk, uint32_t *type); 99 extern int disk_reserve_index(dm_descriptor_t disk, uint16_t index); 100 extern int disk_release_index(dm_descriptor_t disk, uint16_t index); 101 102 extern int slice_get_hbas(dm_descriptor_t slice, dlist_t **list); 103 extern int slice_get_disk(dm_descriptor_t slice, dm_descriptor_t *diskp); 104 extern int slice_get_size(dm_descriptor_t slice, uint64_t *val); 105 extern int slice_get_index(dm_descriptor_t slice, uint32_t *val); 106 extern int slice_get_size_in_blocks(dm_descriptor_t slice, uint64_t *val); 107 extern int slice_get_start_block(dm_descriptor_t slice, uint64_t *val); 108 extern int slice_get_start(dm_descriptor_t slice, uint64_t *val); 109 110 extern int slice_set_size(dm_descriptor_t slice, uint64_t size); 111 extern int slice_set_size_in_blocks(dm_descriptor_t slice, uint64_t size); 112 extern int slice_set_start_block(dm_descriptor_t slice, uint64_t start); 113 114 /* 115 * virtual slice utilities. 116 */ 117 extern int create_virtual_slices(dlist_t *unused); 118 extern int add_virtual_slice(char *name, uint32_t index, 119 uint64_t startblk, uint64_t sizeblks, dm_descriptor_t disk); 120 121 extern void release_virtual_slices(); 122 extern int get_virtual_slices(dlist_t **list); 123 extern boolean_t is_virtual_slice(dm_descriptor_t slice); 124 125 /* 126 * shared error output functions for dm_descriptor_t objects 127 */ 128 extern void print_get_assoc_desc_error( 129 dm_descriptor_t desc, char *which, int error); 130 extern void print_get_desc_attr_error( 131 dm_descriptor_t desc, char *devtype, char *attr, int error); 132 133 extern void print_set_desc_attr_error( 134 dm_descriptor_t desc, char *devtype, char *attr, int error); 135 136 #ifdef __cplusplus 137 } 138 #endif 139 140 #endif /* _LAYOUT_DEVICE_UTIL_H */ 141