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) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 23 */ 24 /* 25 * Copyright 2011, Nexenta Systems, Inc. All rights reserved. 26 * Copyright (c) 2013 by Delphix. All rights reserved. 27 */ 28 #ifndef _STMF_STATE_H 29 #define _STMF_STATE_H 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 typedef struct stmf_state { 36 kmutex_t stmf_lock; 37 kcondvar_t stmf_cv; 38 dev_info_t *stmf_dip; 39 stmf_i_lu_provider_t *stmf_ilplist; 40 stmf_i_port_provider_t *stmf_ipplist; 41 stmf_i_lu_t *stmf_ilulist; 42 stmf_i_local_port_t *stmf_ilportlist; 43 id_space_t *stmf_ilport_inst_space; 44 avl_tree_t stmf_irportlist; 45 id_space_t *stmf_irport_inst_space; 46 int stmf_nlps; 47 int stmf_npps; 48 int stmf_nlus; 49 int stmf_nlports; 50 uint8_t stmf_service_running:1, 51 stmf_inventory_locked:1, 52 stmf_exclusive_open:1, 53 stmf_opened:1, 54 stmf_process_initial_luns:1, 55 rsvd:3; 56 uint8_t stmf_config_state; /* See stmf_ioctl.h */ 57 uint8_t stmf_alua_state; 58 uint16_t stmf_alua_node; 59 uint8_t stmf_default_lu_state; 60 uint8_t stmf_default_lport_state; 61 ddi_taskq_t *stmf_svc_taskq; 62 uint32_t stmf_svc_flags; 63 stmf_i_lu_t *stmf_svc_ilu_draining; 64 stmf_i_lu_t *stmf_svc_ilu_timing; 65 struct stmf_svc_req *stmf_svc_active; 66 struct stmf_svc_req **stmf_svc_tailp; 67 68 stmf_id_list_t stmf_hg_list; 69 stmf_id_list_t stmf_tg_list; 70 stmf_id_list_t stmf_luid_list; 71 72 stmf_ver_tg_t *stmf_ver_tg_head; 73 74 stmf_pp_data_t *stmf_ppdlist; 75 } stmf_state_t; 76 77 /* 78 * svc flags 79 */ 80 #define STMF_SVC_STARTED 1 81 #define STMF_SVC_ACTIVE 2 82 #define STMF_SVC_TERMINATE 4 83 84 /* 85 * svc request. We probably have to modify it once more services (and probably 86 * different types of services) are added to the stmf_svc_thread. 87 */ 88 typedef struct stmf_svc_req { 89 struct stmf_svc_req *svc_next; 90 int svc_req_alloc_size; 91 int svc_cmd; 92 void *svc_obj; 93 struct stmf_state_change_info svc_info; 94 } stmf_svc_req_t; 95 96 extern stmf_state_t stmf_state; 97 98 #ifdef __cplusplus 99 } 100 #endif 101 102 #endif /* _STMF_STATE_H */ 103