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