13ccda647Slclee /* 23ccda647Slclee * CDDL HEADER START 33ccda647Slclee * 43ccda647Slclee * The contents of this file are subject to the terms of the 5*e8fb11a1Sshidokht * Common Development and Distribution License (the "License"). 6*e8fb11a1Sshidokht * You may not use this file except in compliance with the License. 73ccda647Slclee * 83ccda647Slclee * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 93ccda647Slclee * or http://www.opensolaris.org/os/licensing. 103ccda647Slclee * See the License for the specific language governing permissions 113ccda647Slclee * and limitations under the License. 123ccda647Slclee * 133ccda647Slclee * When distributing Covered Code, include this CDDL HEADER in each 143ccda647Slclee * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 153ccda647Slclee * If applicable, add the following below this CDDL HEADER, with the 163ccda647Slclee * fields enclosed by brackets "[]" replaced with your own identifying 173ccda647Slclee * information: Portions Copyright [yyyy] [name of copyright owner] 183ccda647Slclee * 193ccda647Slclee * CDDL HEADER END 203ccda647Slclee */ 213ccda647Slclee /* 22*e8fb11a1Sshidokht * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 233ccda647Slclee * Use is subject to license terms. 243ccda647Slclee */ 253ccda647Slclee 263ccda647Slclee #ifndef _SYS_CMLB_H 273ccda647Slclee #define _SYS_CMLB_H 283ccda647Slclee 293ccda647Slclee #pragma ident "%Z%%M% %I% %E% SMI" 303ccda647Slclee 313ccda647Slclee #ifdef __cplusplus 323ccda647Slclee extern "C" { 333ccda647Slclee #endif 343ccda647Slclee 353ccda647Slclee #include <sys/dktp/fdisk.h> 363ccda647Slclee 373ccda647Slclee /* 383ccda647Slclee * structure used for getting phygeom and virtgeom from target driver 393ccda647Slclee */ 403ccda647Slclee typedef struct cmlb_geom { 413ccda647Slclee unsigned int g_ncyl; 423ccda647Slclee unsigned short g_acyl; 433ccda647Slclee unsigned short g_nhead; 443ccda647Slclee unsigned short g_nsect; 453ccda647Slclee unsigned short g_secsize; 463ccda647Slclee diskaddr_t g_capacity; 473ccda647Slclee unsigned short g_intrlv; 483ccda647Slclee unsigned short g_rpm; 493ccda647Slclee } cmlb_geom_t; 503ccda647Slclee 513ccda647Slclee 523ccda647Slclee typedef struct tg_attribute { 533ccda647Slclee int media_is_writable; 543ccda647Slclee } tg_attribute_t; 553ccda647Slclee 563ccda647Slclee 573ccda647Slclee 58*e8fb11a1Sshidokht /* bit definitions for alter_behavior passed to cmlb_attach */ 593ccda647Slclee 603ccda647Slclee #define CMLB_CREATE_ALTSLICE_VTOC_16_DTYPE_DIRECT 0x00000001 613ccda647Slclee #define CMLB_FAKE_GEOM_LABEL_IOCTLS_VTOC8 0x00000002 62*e8fb11a1Sshidokht #define CMLB_OFF_BY_ONE 0x00000004 63*e8fb11a1Sshidokht 64*e8fb11a1Sshidokht 65*e8fb11a1Sshidokht /* bit definitions of flag passed to cmlb_validate */ 66*e8fb11a1Sshidokht #define CMLB_SILENT 0x00000001 67*e8fb11a1Sshidokht 68*e8fb11a1Sshidokht /* version for tg_ops */ 69*e8fb11a1Sshidokht #define TG_DK_OPS_VERSION_0 0 70*e8fb11a1Sshidokht #define TG_DK_OPS_VERSION_1 1 71*e8fb11a1Sshidokht 72*e8fb11a1Sshidokht /* definitions for cmd passed to tg_rdwr */ 73*e8fb11a1Sshidokht #define TG_READ 0 74*e8fb11a1Sshidokht #define TG_WRITE 1 75*e8fb11a1Sshidokht 76*e8fb11a1Sshidokht /* definitions for cmd passed to tg_getinfo */ 77*e8fb11a1Sshidokht #define TG_GETPHYGEOM 1 78*e8fb11a1Sshidokht #define TG_GETVIRTGEOM 2 79*e8fb11a1Sshidokht #define TG_GETCAPACITY 3 80*e8fb11a1Sshidokht #define TG_GETBLOCKSIZE 4 81*e8fb11a1Sshidokht #define TG_GETATTR 5 82*e8fb11a1Sshidokht 833ccda647Slclee 843ccda647Slclee /* 853ccda647Slclee * Ops vector including utility functions into target driver that cmlb uses. 863ccda647Slclee */ 873ccda647Slclee typedef struct cmlb_tg_ops { 88*e8fb11a1Sshidokht int tg_version; 89*e8fb11a1Sshidokht 903ccda647Slclee /* 913ccda647Slclee * tg_rdwr: 923ccda647Slclee * perform read/write on target device associated with devi. 93*e8fb11a1Sshidokht * 943ccda647Slclee * Arguments: 95*e8fb11a1Sshidokht * 963ccda647Slclee * devi: pointer to device's dev_info structure. 97*e8fb11a1Sshidokht * 983ccda647Slclee * cmd: operation to perform. 993ccda647Slclee * Possible values: TG_READ, TG_WRITE 100*e8fb11a1Sshidokht * 1013ccda647Slclee * bufp: pointer to allocated buffer for transfer 102*e8fb11a1Sshidokht * 1033ccda647Slclee * start_block: starting block number to read/write (based on 1043ccda647Slclee * system blocksize, DEV_BSIZE) 1053ccda647Slclee * 1063ccda647Slclee * reqlength: requested transfer length (in bytes) 1073ccda647Slclee * 108*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to 109*e8fb11a1Sshidokht * target driver when we call back to it through 110*e8fb11a1Sshidokht * tg_ops. 111*e8fb11a1Sshidokht * 1123ccda647Slclee * Note: It is the responsibility of caller to make sure 1133ccda647Slclee * length of buffer pointed to by bufp is at least equal to 1143ccda647Slclee * requested transfer length 1153ccda647Slclee * 1163ccda647Slclee * Return values: 1173ccda647Slclee * 0 success 1183ccda647Slclee * ENOMEM can not allocate memory 1193ccda647Slclee * EACCESS reservation conflict 1203ccda647Slclee * EIO I/O error 1213ccda647Slclee * EFAULT copyin/copyout error 1223ccda647Slclee * ENXIO internal error/ invalid devi 1233ccda647Slclee * EINVAL invalid command value. 1243ccda647Slclee */ 1253ccda647Slclee int (*tg_rdwr)(dev_info_t *devi, uchar_t cmd, void *bufp, 126*e8fb11a1Sshidokht diskaddr_t start_block, size_t reqlength, void *tg_cookie); 1273ccda647Slclee 1283ccda647Slclee /* 129*e8fb11a1Sshidokht * tg_getinfo: 1303ccda647Slclee * Report the information requested on device/media and 131*e8fb11a1Sshidokht * store the requested info in area pointed to by arg. 1323ccda647Slclee * 1333ccda647Slclee * Arguments: 1343ccda647Slclee * devi: pointer to device's dev_info structure. 135*e8fb11a1Sshidokht * 136*e8fb11a1Sshidokht * cmd: operation to perform 137*e8fb11a1Sshidokht * 138*e8fb11a1Sshidokht * arg: arg for the operation for result. 139*e8fb11a1Sshidokht * 140*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to 141*e8fb11a1Sshidokht * target driver when we call back to it through 142*e8fb11a1Sshidokht * tg_ops. 143*e8fb11a1Sshidokht * 144*e8fb11a1Sshidokht * Possible commands and the interpretation of arg: 145*e8fb11a1Sshidokht * 146*e8fb11a1Sshidokht * cmd: 147*e8fb11a1Sshidokht * TG_GETPHYGEOM 148*e8fb11a1Sshidokht * Obtain raw physical geometry from target, 149*e8fb11a1Sshidokht * and store in structure pointed to by arg, 150*e8fb11a1Sshidokht * a cmlb_geom_t structure. 151*e8fb11a1Sshidokht * 152*e8fb11a1Sshidokht * TG_GETVIRTGEOM: 153*e8fb11a1Sshidokht * Obtain HBA geometry for the target and 154*e8fb11a1Sshidokht * store in struct pointed to by arg, 155*e8fb11a1Sshidokht * a cmlb_geom_t structure. 156*e8fb11a1Sshidokht * 157*e8fb11a1Sshidokht * TG_GETCAPACITY: 158*e8fb11a1Sshidokht * Report the capacity of the target (in system 159*e8fb11a1Sshidokht * blocksize (DEV_BSIZE) and store in the 160*e8fb11a1Sshidokht * space pointed to by arg, a diskaddr_t. 161*e8fb11a1Sshidokht * 162*e8fb11a1Sshidokht * TG_GETBLOCKSIZE: 163*e8fb11a1Sshidokht * Report the block size of the target 164*e8fb11a1Sshidokht * in the space pointed to by arg, a uint32_t. 165*e8fb11a1Sshidokht * 166*e8fb11a1Sshidokht * TG_GETATTR: 167*e8fb11a1Sshidokht * Report the information requested on 168*e8fb11a1Sshidokht * device/media and store in area pointed to by 169*e8fb11a1Sshidokht * arg, a tg_attribute_t structure. 170*e8fb11a1Sshidokht * Return values: 1713ccda647Slclee * 1723ccda647Slclee * Return values: 1733ccda647Slclee * 0 success 174*e8fb11a1Sshidokht * 1753ccda647Slclee * EACCESS reservation conflict 1763ccda647Slclee * 1773ccda647Slclee * ENXIO internal error/invalid devi 178*e8fb11a1Sshidokht * 179*e8fb11a1Sshidokht * EINVAL When command is TG_GETPHYGEOM or 180*e8fb11a1Sshidokht * TG_GETVIRTGEOM, or TG_GETATTR, this return code 181*e8fb11a1Sshidokht * indicates the operation is not applicable to 182*e8fb11a1Sshidokht * target. 183*e8fb11a1Sshidokht * In case of TG_GETCAP, this return code 184*e8fb11a1Sshidokht * indicates no media in the drive. 185*e8fb11a1Sshidokht * 186*e8fb11a1Sshidokht * EIO An error occured during obtaining info 187*e8fb11a1Sshidokht * from device/media. 188*e8fb11a1Sshidokht * 189*e8fb11a1Sshidokht * ENOTSUP In case of TG_GETCAP, target does not 190*e8fb11a1Sshidokht * support getting capacity info. 191*e8fb11a1Sshidokht * 192*e8fb11a1Sshidokht * ENOTTY Unknown command. 193*e8fb11a1Sshidokht * 194*e8fb11a1Sshidokht * 1953ccda647Slclee */ 196*e8fb11a1Sshidokht int (*tg_getinfo)(dev_info_t *devi, int cmd, void *arg, 197*e8fb11a1Sshidokht void *tg_cookie); 198*e8fb11a1Sshidokht 1993ccda647Slclee } cmlb_tg_ops_t; 2003ccda647Slclee 2013ccda647Slclee 2023ccda647Slclee typedef struct __cmlb_handle *cmlb_handle_t; 2033ccda647Slclee 2043ccda647Slclee /* 2053ccda647Slclee * 2063ccda647Slclee * Functions exported from cmlb 2073ccda647Slclee * 2083ccda647Slclee * Note: Most these functions can callback to target driver through the 2093ccda647Slclee * tg_ops functions. Target driver should consider this for synchronization. 2103ccda647Slclee * Any functions that may adjust minor nodes should be called when 2113ccda647Slclee * the target driver ensures it is safe to do so. 2123ccda647Slclee */ 2133ccda647Slclee 2143ccda647Slclee /* 2153ccda647Slclee * cmlb_alloc_handle: 2163ccda647Slclee * 2173ccda647Slclee * Allocates a handle. 2183ccda647Slclee * 2193ccda647Slclee * Arguments: 2203ccda647Slclee * cmlbhandlep pointer to handle 2213ccda647Slclee * 2223ccda647Slclee * Notes: 2233ccda647Slclee * Allocates a handle and stores the allocated handle in the area 2243ccda647Slclee * pointed to by cmlbhandlep 2253ccda647Slclee * 2263ccda647Slclee * Context: 2273ccda647Slclee * Kernel thread only (can sleep). 2283ccda647Slclee */ 2293ccda647Slclee void 2303ccda647Slclee cmlb_alloc_handle(cmlb_handle_t *cmlbhandlep); 2313ccda647Slclee 2323ccda647Slclee 2333ccda647Slclee /* 2343ccda647Slclee * cmlb_attach: 2353ccda647Slclee * 2363ccda647Slclee * Attach handle to device, create minor nodes for device. 2373ccda647Slclee * 2383ccda647Slclee * 2393ccda647Slclee * Arguments: 2403ccda647Slclee * devi pointer to device's dev_info structure. 2413ccda647Slclee * tgopsp pointer to array of functions cmlb can use to callback 2423ccda647Slclee * to target driver. 2433ccda647Slclee * 2443ccda647Slclee * device_type Peripheral device type as defined in 2453ccda647Slclee * scsi/generic/inquiry.h 2463ccda647Slclee * 2473ccda647Slclee * is_removable whether or not device is removable. 2483ccda647Slclee * 0 non-removable, 1 removable. 2493ccda647Slclee * 250*e8fb11a1Sshidokht * is_hotpluggable whether or not device is hotpluggable. 251*e8fb11a1Sshidokht * 0 non-hotpluggable, 1 hotpluggable. 252*e8fb11a1Sshidokht * 2533ccda647Slclee * node_type minor node type (as used by ddi_create_minor_node) 2543ccda647Slclee * 2553ccda647Slclee * alter_behavior 2563ccda647Slclee * bit flags: 2573ccda647Slclee * 2583ccda647Slclee * CMLB_CREATE_ALTSLICE_VTOC_16_DTYPE_DIRECT: create 2593ccda647Slclee * an alternate slice for the default label, if 2603ccda647Slclee * device type is DTYPE_DIRECT an architectures default 2613ccda647Slclee * label type is VTOC16. 2623ccda647Slclee * Otherwise alternate slice will no be created. 2633ccda647Slclee * 2643ccda647Slclee * 2653ccda647Slclee * CMLB_FAKE_GEOM_LABEL_IOCTLS_VTOC8: report a default 2663ccda647Slclee * geometry and label for DKIOCGGEOM and DKIOCGVTOC 2673ccda647Slclee * on architecture with VTOC 8 label types. 2683ccda647Slclee * 269*e8fb11a1Sshidokht * CMLB_OFF_BY_ONE: do the workaround for legacy off-by- 270*e8fb11a1Sshidokht * one bug in obtaining capacity (used for sd). 271*e8fb11a1Sshidokht * 2723ccda647Slclee * 2733ccda647Slclee * cmlbhandle cmlb handle associated with device 2743ccda647Slclee * 275*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 276*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 277*e8fb11a1Sshidokht * 278*e8fb11a1Sshidokht * cmlb does not interpret the values. It is currently 279*e8fb11a1Sshidokht * used for sd to indicate whether retries are allowed 280*e8fb11a1Sshidokht * on commands or not. e.g when cmlb entries are called 281*e8fb11a1Sshidokht * from interrupt context on removable media, sd rather 282*e8fb11a1Sshidokht * not have retries done. 283*e8fb11a1Sshidokht * 284*e8fb11a1Sshidokht * 285*e8fb11a1Sshidokht * 2863ccda647Slclee * Notes: 2873ccda647Slclee * Assumes a default label based on capacity for non-removable devices. 2883ccda647Slclee * If capacity > 1TB, EFI is assumed otherwise VTOC (default VTOC 2893ccda647Slclee * for the architecture). 2903ccda647Slclee * For removable devices, default label type is assumed to be VTOC 2913ccda647Slclee * type. Create minor nodes based on a default label type. 2923ccda647Slclee * Label on the media is not validated. 2933ccda647Slclee * minor number consists of: 2943ccda647Slclee * if _SUNOS_VTOC_8 is defined 2953ccda647Slclee * lowest 3 bits is taken as partition number 2963ccda647Slclee * the rest is instance number 2973ccda647Slclee * if _SUNOS_VTOC_16 is defined 2983ccda647Slclee * lowest 6 bits is taken as partition number 2993ccda647Slclee * the rest is instance number 3003ccda647Slclee * 3013ccda647Slclee * 3023ccda647Slclee * Return values: 3033ccda647Slclee * 0 Success 3043ccda647Slclee * ENXIO creating minor nodes failed. 305*e8fb11a1Sshidokht * EINVAL invalid arg, unsupported tg_ops version 3063ccda647Slclee * 3073ccda647Slclee */ 3083ccda647Slclee int 3093ccda647Slclee cmlb_attach(dev_info_t *devi, cmlb_tg_ops_t *tgopsp, int device_type, 310*e8fb11a1Sshidokht int is_removable, int is_hotpluggable, char *node_type, 311*e8fb11a1Sshidokht int alter_behavior, cmlb_handle_t cmlbhandle, void *tg_cookie); 3123ccda647Slclee 3133ccda647Slclee 3143ccda647Slclee /* 3153ccda647Slclee * cmlb_validate: 3163ccda647Slclee * 3173ccda647Slclee * Validates label. 3183ccda647Slclee * 3193ccda647Slclee * Arguments 3203ccda647Slclee * cmlbhandle cmlb handle associated with device. 3213ccda647Slclee * 322*e8fb11a1Sshidokht * int flags 323*e8fb11a1Sshidokht * currently used for verbosity control. 324*e8fb11a1Sshidokht * CMLB_SILENT is the only current definition for it 325*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 326*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 3273ccda647Slclee * Notes: 3283ccda647Slclee * If new label type is different from the current, adjust minor nodes 3293ccda647Slclee * accordingly. 3303ccda647Slclee * 3313ccda647Slclee * Return values: 3323ccda647Slclee * 0 success 3333ccda647Slclee * Note: having fdisk but no solaris partition is assumed 3343ccda647Slclee * success. 3353ccda647Slclee * 3363ccda647Slclee * ENOMEM memory allocation failed 3373ccda647Slclee * EIO i/o errors during read or get capacity 3383ccda647Slclee * EACCESS reservation conflicts 3393ccda647Slclee * EINVAL label was corrupt, or no default label was assumed 3403ccda647Slclee * ENXIO invalid handle 3413ccda647Slclee * 3423ccda647Slclee */ 3433ccda647Slclee int 344*e8fb11a1Sshidokht cmlb_validate(cmlb_handle_t cmlbhandle, int flags, void *tg_cookie); 3453ccda647Slclee 3463ccda647Slclee /* 3473ccda647Slclee * cmlb_invalidate: 3483ccda647Slclee * Invalidate in core label data 3493ccda647Slclee * 3503ccda647Slclee * Arguments: 3513ccda647Slclee * cmlbhandle cmlb handle associated with device. 352*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 353*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 3543ccda647Slclee */ 3553ccda647Slclee void 356*e8fb11a1Sshidokht cmlb_invalidate(cmlb_handle_t cmlbhandle, void *tg_cookie); 3573ccda647Slclee 3583ccda647Slclee 359*e8fb11a1Sshidokht 360*e8fb11a1Sshidokht /* 361*e8fb11a1Sshidokht * cmlb_is_valid 362*e8fb11a1Sshidokht * Get status on whether the incore label/geom data is valid 363*e8fb11a1Sshidokht * 364*e8fb11a1Sshidokht * Arguments: 365*e8fb11a1Sshidokht * cmlbhandle cmlb handle associated with device. 366*e8fb11a1Sshidokht * 367*e8fb11a1Sshidokht * Return values: 368*e8fb11a1Sshidokht * TRUE if valid 369*e8fb11a1Sshidokht * FALSE otherwise. 370*e8fb11a1Sshidokht * 371*e8fb11a1Sshidokht */ 372*e8fb11a1Sshidokht int 373*e8fb11a1Sshidokht cmlb_is_valid(cmlb_handle_t cmlbhandle); 374*e8fb11a1Sshidokht 3753ccda647Slclee /* 3763ccda647Slclee * cmlb_partinfo: 3773ccda647Slclee * Get partition info for specified partition number. 3783ccda647Slclee * 3793ccda647Slclee * Arguments: 3803ccda647Slclee * cmlbhandle cmlb handle associated with device. 3813ccda647Slclee * part partition number 382*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 3833ccda647Slclee * nblocksp pointer to number of blocks 3843ccda647Slclee * startblockp pointer to starting block 3853ccda647Slclee * partnamep pointer to name of partition 3863ccda647Slclee * tagp pointer to tag info 387*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 3883ccda647Slclee * 3893ccda647Slclee * Notes: 3903ccda647Slclee * If in-core label is not valid, this functions tries to revalidate 3913ccda647Slclee * the label. If label is valid, it stores the total number of blocks 3923ccda647Slclee * in this partition in the area pointed to by nblocksp, starting 3933ccda647Slclee * block number in area pointed to by startblockp, pointer to partition 3943ccda647Slclee * name in area pointed to by partnamep, and tag value in area 3953ccda647Slclee * pointed by tagp. 3963ccda647Slclee * For EFI labels, tag value will be set to 0. 3973ccda647Slclee * 3983ccda647Slclee * For all nblocksp, startblockp and partnamep, tagp, a value of NULL 3993ccda647Slclee * indicates the corresponding info is not requested. 4003ccda647Slclee * 4013ccda647Slclee * 4023ccda647Slclee * Return values: 4033ccda647Slclee * 0 success 4043ccda647Slclee * EINVAL no valid label or requested partition number is invalid. 4053ccda647Slclee * 4063ccda647Slclee */ 4073ccda647Slclee int 4083ccda647Slclee cmlb_partinfo(cmlb_handle_t cmlbhandle, int part, diskaddr_t *nblocksp, 409*e8fb11a1Sshidokht diskaddr_t *startblockp, char **partnamep, uint16_t *tagp, void *tg_cookie); 4103ccda647Slclee 4113ccda647Slclee 4123ccda647Slclee /* 4133ccda647Slclee * cmlb_ioctl: 4143ccda647Slclee * Ioctls for label handling will be handled by this function. 4153ccda647Slclee * These are: 4163ccda647Slclee * DKIOCGGEOM 4173ccda647Slclee * DKIOCSGEOM 4183ccda647Slclee * DKIOCGAPART 4193ccda647Slclee * DKIOCSAPART 4203ccda647Slclee * DKIOCGVTOC 4213ccda647Slclee * DKIOCGETEFI 4223ccda647Slclee * DKIOCPARTITION 4233ccda647Slclee * DKIOCSVTOC 4243ccda647Slclee * DKIOCSETEFI 4253ccda647Slclee * DKIOCGMBOOT 4263ccda647Slclee * DKIOCSMBOOT 4273ccda647Slclee * DKIOCG_PHYGEOM 4283ccda647Slclee * DKIOCG_VIRTGEOM 4293ccda647Slclee * DKIOCPARTINFO 4303ccda647Slclee * 4313ccda647Slclee * 4323ccda647Slclee * Arguments: 4333ccda647Slclee * cmlbhandle handle associated with device. 4343ccda647Slclee * cmd ioctl operation to be performed 4353ccda647Slclee * arg user argument, contains data to be set or reference 4363ccda647Slclee * parameter for get 4373ccda647Slclee * flag bit flag, indicating open settings, 32/64 bit type 4383ccda647Slclee * cred_p user credential pointer (not currently used) 4393ccda647Slclee * rval_p not currently used 440*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 441*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 442*e8fb11a1Sshidokht * 4433ccda647Slclee * 4443ccda647Slclee * 4453ccda647Slclee * Return values: 4463ccda647Slclee * 0 4473ccda647Slclee * EINVAL 4483ccda647Slclee * ENOTTY 4493ccda647Slclee * ENXIO 4503ccda647Slclee * EIO 4513ccda647Slclee * EFAULT 4523ccda647Slclee * ENOTSUP 4533ccda647Slclee * EPERM 4543ccda647Slclee */ 4553ccda647Slclee int 456*e8fb11a1Sshidokht cmlb_ioctl(cmlb_handle_t cmlbhandle, dev_t dev, int cmd, 457*e8fb11a1Sshidokht intptr_t arg, int flag, cred_t *cred_p, int *rval_p, void *tg_cookie); 4583ccda647Slclee 4593ccda647Slclee /* 4603ccda647Slclee * cmlb_get_devid_block: 4613ccda647Slclee * get the block number where device id is stored. 4623ccda647Slclee * 4633ccda647Slclee * Arguments: 4643ccda647Slclee * cmlbhandle cmlb handle associated with device. 4653ccda647Slclee * devidblockp pointer to block number. 466*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 467*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 4683ccda647Slclee * 4693ccda647Slclee * Notes: 4703ccda647Slclee * It stores the block number of device id in the area pointed to 4713ccda647Slclee * by devidblockp. 4723ccda647Slclee * 4733ccda647Slclee * Return values: 4743ccda647Slclee * 0 success 4753ccda647Slclee * EINVAL device id does not apply to current label type. 4763ccda647Slclee */ 4773ccda647Slclee int 478*e8fb11a1Sshidokht cmlb_get_devid_block(cmlb_handle_t cmlbhandle, diskaddr_t *devidblockp, 479*e8fb11a1Sshidokht void *tg_cookie); 4803ccda647Slclee 4813ccda647Slclee 4823ccda647Slclee /* 4833ccda647Slclee * cmlb_close: 4843ccda647Slclee * 4853ccda647Slclee * Close the device, revert to a default label minor node for the device, 4863ccda647Slclee * if it is removable. 4873ccda647Slclee * 4883ccda647Slclee * Arguments: 4893ccda647Slclee * cmlbhandle cmlb handle associated with device. 4903ccda647Slclee * 491*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 492*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 4933ccda647Slclee * Return values: 4943ccda647Slclee * 0 Success 4953ccda647Slclee * ENXIO Re-creating minor node failed. 4963ccda647Slclee */ 4973ccda647Slclee int 498*e8fb11a1Sshidokht cmlb_close(cmlb_handle_t cmlbhandle, void *tg_cookie); 4993ccda647Slclee 5003ccda647Slclee /* 5013ccda647Slclee * cmlb_detach: 5023ccda647Slclee * 5033ccda647Slclee * Invalidate in-core labeling data and remove all minor nodes for 5043ccda647Slclee * the device associate with handle. 5053ccda647Slclee * 5063ccda647Slclee * Arguments: 5073ccda647Slclee * cmlbhandle cmlb handle associated with device. 508*e8fb11a1Sshidokht * tg_cookie cookie from target driver to be passed back to target 509*e8fb11a1Sshidokht * driver when we call back to it through tg_ops. 5103ccda647Slclee * 5113ccda647Slclee */ 5123ccda647Slclee void 513*e8fb11a1Sshidokht cmlb_detach(cmlb_handle_t cmlbhandle, void *tg_cookie); 5143ccda647Slclee 5153ccda647Slclee /* 5163ccda647Slclee * cmlb_free_handle 5173ccda647Slclee * 5183ccda647Slclee * Frees handle. 5193ccda647Slclee * 5203ccda647Slclee * Arguments: 5213ccda647Slclee * cmlbhandlep pointer to handle 5223ccda647Slclee * 5233ccda647Slclee */ 5243ccda647Slclee void 5253ccda647Slclee cmlb_free_handle(cmlb_handle_t *cmlbhandlep); 5263ccda647Slclee 5273ccda647Slclee #ifdef __cplusplus 5283ccda647Slclee } 5293ccda647Slclee #endif 5303ccda647Slclee 5313ccda647Slclee #endif /* _SYS_CMLB_H */ 532