110696SDavid.Hollister@Sun.COM /* 210696SDavid.Hollister@Sun.COM * CDDL HEADER START 310696SDavid.Hollister@Sun.COM * 410696SDavid.Hollister@Sun.COM * The contents of this file are subject to the terms of the 510696SDavid.Hollister@Sun.COM * Common Development and Distribution License (the "License"). 610696SDavid.Hollister@Sun.COM * You may not use this file except in compliance with the License. 710696SDavid.Hollister@Sun.COM * 810696SDavid.Hollister@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 910696SDavid.Hollister@Sun.COM * or http://www.opensolaris.org/os/licensing. 1010696SDavid.Hollister@Sun.COM * See the License for the specific language governing permissions 1110696SDavid.Hollister@Sun.COM * and limitations under the License. 1210696SDavid.Hollister@Sun.COM * 1310696SDavid.Hollister@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1410696SDavid.Hollister@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1510696SDavid.Hollister@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1610696SDavid.Hollister@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1710696SDavid.Hollister@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1810696SDavid.Hollister@Sun.COM * 1910696SDavid.Hollister@Sun.COM * CDDL HEADER END 2010696SDavid.Hollister@Sun.COM */ 2110696SDavid.Hollister@Sun.COM 2210696SDavid.Hollister@Sun.COM /* 23*12207SChris.Horne@Sun.COM * Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. 2410696SDavid.Hollister@Sun.COM */ 2510696SDavid.Hollister@Sun.COM 2610696SDavid.Hollister@Sun.COM #ifndef _SYS_DAMAP_H 2710696SDavid.Hollister@Sun.COM #define _SYS_DAMAP_H 2810696SDavid.Hollister@Sun.COM 2910696SDavid.Hollister@Sun.COM #ifdef __cplusplus 3010696SDavid.Hollister@Sun.COM extern "C" { 3110696SDavid.Hollister@Sun.COM #endif 3210696SDavid.Hollister@Sun.COM 3310696SDavid.Hollister@Sun.COM /* 3410696SDavid.Hollister@Sun.COM * Delta (device) Address Map Interfaces 3510696SDavid.Hollister@Sun.COM * 3610696SDavid.Hollister@Sun.COM * These interfaces provide time-stablized sets of 'addresses', 3710696SDavid.Hollister@Sun.COM * where addresses are string representations of device 3810696SDavid.Hollister@Sun.COM * or bus-specific address. The mechanisms include interfaces to 3910696SDavid.Hollister@Sun.COM * report and remove address from a map, time stabilization, callouts 4010696SDavid.Hollister@Sun.COM * to higher-level configuration and unconfiguration actions, and 4110696SDavid.Hollister@Sun.COM * address lookup functions. 4210696SDavid.Hollister@Sun.COM * 4310696SDavid.Hollister@Sun.COM * Per Address Reports 4410696SDavid.Hollister@Sun.COM * With per-address reporting, the caller reports the addition and removal 4510696SDavid.Hollister@Sun.COM * each address visible to it. Each report is independently time stabilized; 4610696SDavid.Hollister@Sun.COM * Once a report has stabilized, the reported address is either 4710696SDavid.Hollister@Sun.COM * activated & configured, or unconfigured & released. 4810696SDavid.Hollister@Sun.COM * 4910696SDavid.Hollister@Sun.COM * Full Set Reports 5010696SDavid.Hollister@Sun.COM * When using fullset reporting, the report provider enumerates the entire 5110696SDavid.Hollister@Sun.COM * set of addresses visible to the provider at a given point in time. 5210696SDavid.Hollister@Sun.COM * The entire set is then stabilized. 5310696SDavid.Hollister@Sun.COM * Upon stabilizing, any newly reported addresses are activated & configured 5410696SDavid.Hollister@Sun.COM * and any previously active addresses which are no longer visible are 5510696SDavid.Hollister@Sun.COM * automatically unconfigured and released, freeing the provider from 5610696SDavid.Hollister@Sun.COM * the need to explicitly unconfigure addresses no longer present. 5710696SDavid.Hollister@Sun.COM * 5810696SDavid.Hollister@Sun.COM * Stabilization 5910696SDavid.Hollister@Sun.COM * Once an address has been reported (or reported as removed), the report 6010696SDavid.Hollister@Sun.COM * is time stabilized before the framework initiates a configuration 6110696SDavid.Hollister@Sun.COM * or unconfiguration action. If the address is re-reported while undergoing 6210696SDavid.Hollister@Sun.COM * stabilization, the timer is reset for either the address or the full 6310696SDavid.Hollister@Sun.COM * set of addresses reported to the map. 6410696SDavid.Hollister@Sun.COM * 6510696SDavid.Hollister@Sun.COM * Activation/Release 6610696SDavid.Hollister@Sun.COM * Once a reported address has passed its stabilization, the address is 6710696SDavid.Hollister@Sun.COM * 'activated' by the framework. Once activated, the address is passed 6810696SDavid.Hollister@Sun.COM * to a configuration callout to perform whatever actions are necessary. 6910696SDavid.Hollister@Sun.COM * If a reported address is deleted or fails to stabilize, the address 7010696SDavid.Hollister@Sun.COM * is released by the map. 7110696SDavid.Hollister@Sun.COM * A report provider may register callback functions to be invoked 7210696SDavid.Hollister@Sun.COM * as part of the address activation & release process. In addition to 7310696SDavid.Hollister@Sun.COM * the callbacks, a provider can also supply a handle to provider-private 7410696SDavid.Hollister@Sun.COM * data at the time an address is reported. This handle is returned to 7510696SDavid.Hollister@Sun.COM * provider as an argument to the activation & release callbacks. 7610696SDavid.Hollister@Sun.COM * 7710696SDavid.Hollister@Sun.COM * Lookup/Access 7810696SDavid.Hollister@Sun.COM * The set of stable addresses contained in a map can be obtained by 7910696SDavid.Hollister@Sun.COM * calling interfaces to lookup either a single address or the full 8010696SDavid.Hollister@Sun.COM * list of stable addresses. 8110696SDavid.Hollister@Sun.COM */ 8210696SDavid.Hollister@Sun.COM 8310696SDavid.Hollister@Sun.COM /* 8410696SDavid.Hollister@Sun.COM * damap_t: Handle to a delta address map 8510696SDavid.Hollister@Sun.COM * damap_id_t: Handle to an entry of damap_t 8610696SDavid.Hollister@Sun.COM */ 8710696SDavid.Hollister@Sun.COM typedef struct __damap_dm *damap_t; 8811068SJohn.Danielson@Sun.COM typedef id_t damap_id_t; 8911068SJohn.Danielson@Sun.COM 9011068SJohn.Danielson@Sun.COM /* 9111068SJohn.Danielson@Sun.COM * damap_id_list_t: List of damap_id_handles 9211068SJohn.Danielson@Sun.COM * NB. Not Used 9311068SJohn.Danielson@Sun.COM */ 9410696SDavid.Hollister@Sun.COM typedef struct __damap_id_list *damap_id_list_t; 9510696SDavid.Hollister@Sun.COM 9610696SDavid.Hollister@Sun.COM #define NODAM (damap_id_t)0 9710696SDavid.Hollister@Sun.COM 9810696SDavid.Hollister@Sun.COM /* 9910696SDavid.Hollister@Sun.COM * activate_cb: Provider callback when reported address is activated 10010696SDavid.Hollister@Sun.COM * deactivate_cb: Provider callback when address has been released 10110696SDavid.Hollister@Sun.COM * 10210696SDavid.Hollister@Sun.COM * configure_cb: Class callout to configure newly activated addresses 10310696SDavid.Hollister@Sun.COM * unconfig_cb: Class callout to unconfigure deactivated addresses 10410696SDavid.Hollister@Sun.COM */ 10511363SReed.Liu@Sun.COM typedef enum { 10611363SReed.Liu@Sun.COM DAMAP_DEACT_RSN_GONE = 0, 10711601SDavid.Hollister@Sun.COM DAMAP_DEACT_RSN_CFG_FAIL, 10811601SDavid.Hollister@Sun.COM DAMAP_DEACT_RSN_UNSTBL 10911363SReed.Liu@Sun.COM } damap_deact_rsn_t; 11011363SReed.Liu@Sun.COM 11110696SDavid.Hollister@Sun.COM typedef void (*damap_activate_cb_t)(void *, char *, int, void **); 11211363SReed.Liu@Sun.COM typedef void (*damap_deactivate_cb_t)(void *, char *, int, void *, 11311363SReed.Liu@Sun.COM damap_deact_rsn_t); 11410696SDavid.Hollister@Sun.COM 11511068SJohn.Danielson@Sun.COM typedef int (*damap_configure_cb_t)(void *, damap_t *, damap_id_t); 11611068SJohn.Danielson@Sun.COM typedef int (*damap_unconfig_cb_t)(void *, damap_t *, damap_id_t); 11710696SDavid.Hollister@Sun.COM 11810696SDavid.Hollister@Sun.COM /* 11910696SDavid.Hollister@Sun.COM * Map reporting mode 12010696SDavid.Hollister@Sun.COM */ 12110696SDavid.Hollister@Sun.COM typedef enum {DAMAP_REPORT_PERADDR, DAMAP_REPORT_FULLSET} damap_rptmode_t; 12210696SDavid.Hollister@Sun.COM 12311068SJohn.Danielson@Sun.COM /* 12411068SJohn.Danielson@Sun.COM * Map create options flags 12511068SJohn.Danielson@Sun.COM * DAMAP_SERIALCONFIG - serialize activate/deactivate operations 12611068SJohn.Danielson@Sun.COM * DAMAP_MTCONFIG - multithread config/unconfg operations 12711068SJohn.Danielson@Sun.COM */ 12811068SJohn.Danielson@Sun.COM #define DAMAP_SERIALCONFIG 0 12911068SJohn.Danielson@Sun.COM #define DAMAP_MTCONFIG 1 13010696SDavid.Hollister@Sun.COM 131*12207SChris.Horne@Sun.COM int damap_create(char *, damap_rptmode_t, int, int, 13210696SDavid.Hollister@Sun.COM void *, damap_activate_cb_t, damap_deactivate_cb_t, 13310696SDavid.Hollister@Sun.COM void *, damap_configure_cb_t, damap_unconfig_cb_t, 13410696SDavid.Hollister@Sun.COM damap_t **); 13510696SDavid.Hollister@Sun.COM void damap_destroy(damap_t *); 13610696SDavid.Hollister@Sun.COM 13710696SDavid.Hollister@Sun.COM char *damap_name(damap_t *); 138*12207SChris.Horne@Sun.COM int damap_size(damap_t *); 139*12207SChris.Horne@Sun.COM int damap_is_empty(damap_t *); 140*12207SChris.Horne@Sun.COM int damap_sync(damap_t *, int); 14110696SDavid.Hollister@Sun.COM 14210696SDavid.Hollister@Sun.COM int damap_addr_add(damap_t *, char *, damap_id_t *, nvlist_t *, void *); 14310696SDavid.Hollister@Sun.COM int damap_addr_del(damap_t *, char *); 14410696SDavid.Hollister@Sun.COM int damap_addrid_del(damap_t *, int); 14510696SDavid.Hollister@Sun.COM 14611068SJohn.Danielson@Sun.COM /* 14711068SJohn.Danielson@Sun.COM * modifiers to damap_addrset_end() 14811068SJohn.Danielson@Sun.COM */ 14911068SJohn.Danielson@Sun.COM #define DAMAP_END_RESET 1 15011068SJohn.Danielson@Sun.COM #define DAMAP_END_ABORT 2 15110696SDavid.Hollister@Sun.COM 15211068SJohn.Danielson@Sun.COM int damap_addrset_begin(damap_t *); 15311068SJohn.Danielson@Sun.COM int damap_addrset_add(damap_t *, char *, damap_id_t *, 15411068SJohn.Danielson@Sun.COM nvlist_t *, void *); 15511068SJohn.Danielson@Sun.COM int damap_addrset_end(damap_t *, int); 15612000SReed.Liu@Sun.COM int damap_addrset_flush(damap_t *); 15711068SJohn.Danielson@Sun.COM int damap_addrset_reset(damap_t *, int); 15810696SDavid.Hollister@Sun.COM damap_id_t damap_id_next(damap_t *, damap_id_list_t, damap_id_t); 15910696SDavid.Hollister@Sun.COM char *damap_id2addr(damap_t *, damap_id_t); 16010696SDavid.Hollister@Sun.COM nvlist_t *damap_id2nvlist(damap_t *, damap_id_t); 16110696SDavid.Hollister@Sun.COM int damap_id_hold(damap_t *, damap_id_t); 16210696SDavid.Hollister@Sun.COM void damap_id_rele(damap_t *, damap_id_t); 16310696SDavid.Hollister@Sun.COM int damap_id_ref(damap_t *, damap_id_t); 16410696SDavid.Hollister@Sun.COM void damap_id_list_rele(damap_t *, damap_id_list_t); 16510696SDavid.Hollister@Sun.COM void *damap_id_priv_get(damap_t *, damap_id_t); 16610696SDavid.Hollister@Sun.COM void damap_id_priv_set(damap_t *, damap_id_t, void *); 16710696SDavid.Hollister@Sun.COM damap_id_t damap_lookup(damap_t *, char *); 16810696SDavid.Hollister@Sun.COM int damap_lookup_all(damap_t *, damap_id_list_t *); 16910696SDavid.Hollister@Sun.COM 17010696SDavid.Hollister@Sun.COM #define DAM_SUCCESS 0 17110696SDavid.Hollister@Sun.COM #define DAM_EEXIST 1 17210696SDavid.Hollister@Sun.COM #define DAM_MAPFULL 2 17310696SDavid.Hollister@Sun.COM #define DAM_EINVAL 3 17410696SDavid.Hollister@Sun.COM #define DAM_FAILURE 4 17510696SDavid.Hollister@Sun.COM #define DAM_SHAME 5 17610696SDavid.Hollister@Sun.COM 17710696SDavid.Hollister@Sun.COM #ifdef __cplusplus 17810696SDavid.Hollister@Sun.COM } 17910696SDavid.Hollister@Sun.COM #endif 18010696SDavid.Hollister@Sun.COM 18110696SDavid.Hollister@Sun.COM #endif /* _SYS_DAMAP_H */ 182