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 /*
  23  * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
  24  */
  25 /*
  26  * Copyright (c) 2013, Joyent, Inc.  All rights reserved.
  27  */
  28 
  29 #ifndef _DISK_H
  30 #define _DISK_H
  31 
  32 #include <fm/topo_mod.h>
  33 #include <libdevinfo.h>
  34 
  35 #ifdef __cplusplus
  36 extern "C" {
  37 #endif
  38 
  39 /* Topo plugin version */
  40 #define DISK_VERSION                    TOPO_VERSION
  41 
  42 /* Max. number of devices for thumper */
  43 #define DEVID_MAX               48
  44 
  45 /* Properties added to the "storage" pgroup: */
  46 #define TOPO_PGROUP_STORAGE             "storage"
  47 #define TOPO_STORAGE_LOGICAL_DISK_NAME  "logical-disk"
  48 #define TOPO_STORAGE_MODEL              "model"
  49 #define TOPO_STORAGE_MANUFACTURER       "manufacturer"
  50 #define TOPO_STORAGE_SERIAL_NUM         "serial-number"
  51 #define TOPO_STORAGE_FIRMWARE_REV       "firmware-revision"
  52 #define TOPO_STORAGE_CAPACITY           "capacity-in-bytes"
  53 
  54 /*
  55  * Properties for binding group: The binding group required in platform
  56  * specific xml that describes 'bay' nodes containing internal disks.
  57  */
  58 #define TOPO_PGROUP_BINDING             "binding"
  59 #define TOPO_BINDING_OCCUPANT           "occupant-path"
  60 #define TOPO_BINDING_DRIVER             "driver"
  61 
  62 /*
  63  * The binding group required in platform specific xml that describes 'bay'
  64  * nodes containing disks attached to an HBA using the 'mpt_sas' driver.
  65  */
  66 #define TOPO_BINDING_DEVCTL             "devctl"
  67 #define TOPO_BINDING_ENCLOSURE          "enclosure"
  68 #define TOPO_BINDING_SLOT               "slot"
  69 
  70 /*
  71  * device node information.
  72  */
  73 typedef struct dev_di_node {
  74         topo_list_t     ddn_list;       /* list of devices */
  75 
  76         /* the following two fields are always defined */
  77         char            *ddn_devid;     /* devid of device */
  78         char            *ddn_dpath;     /* path to devinfo (may be vhci) */
  79         char            **ddn_ppath;    /* physical path to device (phci) */
  80         /*
  81          * the ppath count also indicates number of target port and
  82          * possible number of attached port and bridge port.
  83          */
  84         int             ddn_ppath_count;
  85 
  86         char            *ddn_lpath;     /* logical path (public /dev name) */
  87 
  88         char            *ddn_mfg;       /* misc information about device */
  89         char            *ddn_model;
  90         char            *ddn_serial;
  91         char            *ddn_firm;
  92         char            *ddn_cap;
  93         uchar_t         ddn_dtype;      /* scsi inquiry device type. */
  94 
  95         char            **ddn_target_port;  /* target-port devinfo prop */
  96         char            **ddn_attached_port; /* attached-port devinfo prop */
  97         char            **ddn_bridge_port;  /* bridge-port devinfo prop */
  98 } dev_di_node_t;
  99 
 100 struct topo_list;
 101 
 102 /* Methods shared with the ses module (disk_common.c) */
 103 extern int dev_list_gather(topo_mod_t *, struct topo_list *);
 104 extern void dev_list_free(topo_mod_t *, struct topo_list *);
 105 extern int disk_declare_non_enumerated(topo_mod_t *, tnode_t *, tnode_t **);
 106 extern int disk_declare_path(topo_mod_t *, tnode_t *,
 107     struct topo_list *, const char *);
 108 extern int disk_declare_addr(topo_mod_t *, tnode_t *,
 109     struct topo_list *, const char *, tnode_t **);
 110 extern char *disk_auth_clean(topo_mod_t *, const char *);
 111 
 112 #ifdef __cplusplus
 113 }
 114 #endif
 115 
 116 #endif /* _DISK_H */