16316Seschrock /* 26316Seschrock * CDDL HEADER START 36316Seschrock * 46316Seschrock * The contents of this file are subject to the terms of the 56316Seschrock * Common Development and Distribution License (the "License"). 66316Seschrock * You may not use this file except in compliance with the License. 76316Seschrock * 86316Seschrock * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 96316Seschrock * or http://www.opensolaris.org/os/licensing. 106316Seschrock * See the License for the specific language governing permissions 116316Seschrock * and limitations under the License. 126316Seschrock * 136316Seschrock * When distributing Covered Code, include this CDDL HEADER in each 146316Seschrock * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 156316Seschrock * If applicable, add the following below this CDDL HEADER, with the 166316Seschrock * fields enclosed by brackets "[]" replaced with your own identifying 176316Seschrock * information: Portions Copyright [yyyy] [name of copyright owner] 186316Seschrock * 196316Seschrock * CDDL HEADER END 206316Seschrock */ 216316Seschrock 226316Seschrock /* 23*12632SHyon.Kim@Sun.COM * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. 246316Seschrock */ 256316Seschrock 266316Seschrock #ifndef _LIBSES_H 276316Seschrock #define _LIBSES_H 286316Seschrock 296316Seschrock #ifdef __cplusplus 306316Seschrock extern "C" { 316316Seschrock #endif 326316Seschrock 336316Seschrock #include <sys/types.h> 346316Seschrock 356316Seschrock #include <stdarg.h> 366316Seschrock #include <libnvpair.h> 376316Seschrock #include <pthread.h> 386316Seschrock 396316Seschrock #include <scsi/libscsi.h> 406316Seschrock #include <scsi/plugins/ses/framework/ses2.h> 416316Seschrock #include <scsi/plugins/ses/framework/libses.h> 426316Seschrock 436316Seschrock #define LIBSES_VERSION 1 446316Seschrock 45*12632SHyon.Kim@Sun.COM /* 46*12632SHyon.Kim@Sun.COM * element type prop can be created by any plugin. The ses2 plugin created 47*12632SHyon.Kim@Sun.COM * SES-2 defined element types and SUN plugin defines vendor specific types. 48*12632SHyon.Kim@Sun.COM */ 49*12632SHyon.Kim@Sun.COM #define SES_PROP_ELEMENT_TYPE "ses-element-type" 50*12632SHyon.Kim@Sun.COM 516316Seschrock typedef enum ses_node_type { 526316Seschrock SES_NODE_NONE = 0x0, 536316Seschrock SES_NODE_TARGET = 0x1, 546316Seschrock SES_NODE_ENCLOSURE = 0x2, 556316Seschrock SES_NODE_AGGREGATE = 0x4, 566316Seschrock SES_NODE_ELEMENT = 0x8 576316Seschrock } ses_node_type_t; 586316Seschrock 596316Seschrock typedef enum ses_errno { 606316Seschrock ESES_NONE, /* no error */ 616316Seschrock ESES_NOMEM, /* no memory */ 626316Seschrock ESES_ZERO_LENGTH, /* zero-length allocation requested */ 636316Seschrock ESES_VERSION, /* library version mismatch */ 646316Seschrock ESES_NVL, /* nvlist manipulation error */ 656316Seschrock ESES_BAD_NODE, /* bad node */ 666316Seschrock ESES_INVALID_OP, /* invalid operation */ 676316Seschrock ESES_RANGE, /* value out of range */ 686316Seschrock ESES_INVALID_PROP, /* nonexistent or immutable property */ 696316Seschrock ESES_BAD_TYPE, /* incorrect property type */ 706316Seschrock ESES_BAD_PAGE, /* bad page number */ 716316Seschrock ESES_BAD_RESPONSE, /* bad response from target */ 726316Seschrock ESES_BUSY, /* target busy */ 736316Seschrock ESES_TOOMUCHCHANGE, /* target configuration changing too rapidly */ 746316Seschrock ESES_LIBSCSI, /* SCSI error */ 756316Seschrock ESES_NOTSUP, /* operation not supported */ 766316Seschrock ESES_UNKNOWN, /* error of unknown type */ 776316Seschrock ESES_CHANGED, /* generation count has changed */ 786316Seschrock ESES_PLUGIN, /* invalid or missing plugin */ 796316Seschrock ESES_MAX /* maximum libses errno value */ 806316Seschrock } ses_errno_t; 816316Seschrock 826316Seschrock struct ses_target; 836316Seschrock typedef struct ses_target ses_target_t; 846316Seschrock 856316Seschrock struct ses_snap; 866316Seschrock typedef struct ses_snap ses_snap_t; 876316Seschrock 886316Seschrock struct ses_node; 896316Seschrock typedef struct ses_node ses_node_t; 906316Seschrock 916316Seschrock extern ses_target_t *ses_open(uint_t, const char *); 926316Seschrock extern ses_target_t *ses_open_scsi(uint_t, libscsi_target_t *); 936316Seschrock extern void ses_close(ses_target_t *); 946316Seschrock 956316Seschrock extern libscsi_target_t *ses_scsi_target(ses_target_t *); 966316Seschrock 976316Seschrock typedef enum ses_walk_action { 986316Seschrock SES_WALK_ACTION_CONTINUE, 996316Seschrock SES_WALK_ACTION_PRUNE, 1006316Seschrock SES_WALK_ACTION_TERMINATE 1016316Seschrock } ses_walk_action_t; 1026316Seschrock 1036316Seschrock typedef ses_walk_action_t (*ses_walk_f)(ses_node_t *, void *); 1046316Seschrock 1056316Seschrock extern uint64_t ses_node_id(ses_node_t *); 1066316Seschrock extern ses_node_t *ses_node_lookup(ses_snap_t *, uint64_t); 1076316Seschrock 1086316Seschrock extern ses_node_t *ses_root_node(ses_snap_t *); 1096316Seschrock extern ses_node_t *ses_node_sibling(ses_node_t *); 1106316Seschrock extern ses_node_t *ses_node_prev_sibling(ses_node_t *); 1116316Seschrock extern ses_node_t *ses_node_child(ses_node_t *); 1126316Seschrock extern ses_node_t *ses_node_parent(ses_node_t *); 1136316Seschrock extern int ses_walk(ses_snap_t *, ses_walk_f, void *); 1146316Seschrock 1156316Seschrock extern ses_snap_t *ses_snap_hold(ses_target_t *); 1166316Seschrock extern void ses_snap_rele(ses_snap_t *); 1176316Seschrock extern ses_snap_t *ses_snap_new(ses_target_t *); 1186316Seschrock extern uint32_t ses_snap_generation(ses_snap_t *); 1196316Seschrock 1206316Seschrock extern ses_node_type_t ses_node_type(ses_node_t *); 1216316Seschrock extern nvlist_t *ses_node_props(ses_node_t *); 1226316Seschrock extern int ses_node_ctl(ses_node_t *, const char *, nvlist_t *); 1236316Seschrock extern ses_snap_t *ses_node_snapshot(ses_node_t *); 1246316Seschrock extern ses_target_t *ses_node_target(ses_node_t *); 1256316Seschrock 1266316Seschrock extern ses_errno_t ses_errno(void); 1276316Seschrock extern const char *ses_errmsg(void); 1286316Seschrock extern const char *ses_strerror(ses_errno_t); 1296316Seschrock extern const char *ses_nv_error_member(void); 1306316Seschrock 1316846Sjmcp extern ses_node_t *ses_snap_primary_enclosure(ses_snap_t *); 1326846Sjmcp 1336316Seschrock #ifdef __cplusplus 1346316Seschrock } 1356316Seschrock #endif 1366316Seschrock 1376316Seschrock #endif /* _LIBSES_H */ 138