#ifndef _DISK_H
#define _DISK_H
#include <sys/fm/protocol.h>
#include <fm/topo_mod.h>
#include <libdevinfo.h>
#ifdef __cplusplus
extern "C" {
#endif
#define DISK_VERSION TOPO_VERSION
#define DEVID_MAX 48
#if defined(__i386) || defined(__amd64)
#define PHYS_EXTN ":q,raw"
#elif defined(__sparc) || defined(__sparcv9)
#define PHYS_EXTN ":c,raw"
#else
#error Unknown architecture
#endif
#define TOPO_PGROUP_STORAGE "storage"
#define TOPO_STORAGE_LOGICAL_DISK_NAME "logical-disk"
#define TOPO_STORAGE_MODEL "model"
#define TOPO_STORAGE_MANUFACTURER "manufacturer"
#define TOPO_STORAGE_SERIAL_NUM "serial-number"
#define TOPO_STORAGE_FIRMWARE_REV "firmware-revision"
#define TOPO_STORAGE_CAPACITY "capacity-in-bytes"
#define TOPO_STORAGE_RPM "speed-in-rpm"
#define TOPO_STORAGE_LOG_BLOCK_SIZE "logical-block-size"
#define TOPO_STORAGE_PHYS_BLOCK_SIZE "physical-block-size"
static const topo_pgroup_info_t io_pgroup = {
TOPO_PGROUP_IO,
TOPO_STABILITY_PRIVATE,
TOPO_STABILITY_PRIVATE,
1
};
static const topo_pgroup_info_t disk_auth_pgroup = {
FM_FMRI_AUTHORITY,
TOPO_STABILITY_PRIVATE,
TOPO_STABILITY_PRIVATE,
1
};
static const topo_pgroup_info_t storage_pgroup = {
TOPO_PGROUP_STORAGE,
TOPO_STABILITY_PRIVATE,
TOPO_STABILITY_PRIVATE,
1
};
typedef struct dev_di_node {
topo_list_t ddn_list;
char *ddn_devid;
char *ddn_dpath;
char **ddn_ppath;
int ddn_ppath_count;
char *ddn_lpath;
char *ddn_mfg;
char *ddn_model;
char *ddn_serial;
char *ddn_firm;
char *ddn_cap;
uchar_t ddn_dtype;
char **ddn_target_port;
char **ddn_attached_port;
char **ddn_bridge_port;
} dev_di_node_t;
struct topo_list;
extern int dev_list_gather(topo_mod_t *, struct topo_list *);
extern void dev_list_free(topo_mod_t *, struct topo_list *);
extern int disk_declare_non_enumerated(topo_mod_t *, tnode_t *, tnode_t **);
extern int disk_declare_path(topo_mod_t *, tnode_t *,
struct topo_list *, const char *);
extern int disk_declare_addr(topo_mod_t *, tnode_t *,
struct topo_list *, const char *, tnode_t **);
extern int disk_declare_bridge(topo_mod_t *, tnode_t *,
struct topo_list *, const char *, tnode_t **);
extern char *disk_auth_clean(topo_mod_t *, const char *);
#ifdef __cplusplus
}
#endif
#endif