#ifndef _G_STATE_H
#define _G_STATE_H
#ifdef __cplusplus
extern "C" {
#endif
#include <libdevice.h>
#include <sys/fibre-channel/fcio.h>
#include <sys/sunmdi.h>
#define _SYS_FC4_FCAL_LINKAPP_H
#include <sys/fc4/fcio.h>
#include <sys/devctl.h>
#include <g_scsi.h>
#include <sys/scsi/generic/commands.h>
#include <libnvpair.h>
#include <libdevinfo.h>
#define MAXPATHSTATE 5
#include <gfc.h>
#define SENA 1
#define NON_SENA 0
#define HEX_ONLY 0
#define HEX_ASCII 1
#define ACTION_READ_KEYS 0x00
#define ACTION_READ_RESERV 0x01
#define ACTION_REGISTER 0x00
#define ACTION_RESERVE 0x01
#define ACTION_RELEASE 0x02
#define ACTION_CLEAR 0x03
#define ACTION_PREEMPT 0x04
#define ACTION_PREEMPT_CLR 0x05
#define AREA_DOMAIN_ID 0x00FFFF00
#define RETRY_FCIO_IOCTL 360
#define RETRY_FCP_IOCTL 360
#define RETRY_OBJECT_OPEN 5
#define RETRY_PATHLIST 1
#define WAIT_FCIO_IOCTL 250000
#define WAIT_FCP_IOCTL 250000
#define WAIT_OBJECT_OPEN 10000
#define PATH_PRIMARY 0x0
#define PATH_FAILOVER 0x1
#define FREE_DEV_ADDR(D_PTR) if (D_PTR != NULL) {\
free((void *)D_PTR);\
D_PTR = (gfc_port_dev_info_t *)NULL;\
}
#define SLASH "/"
#define DEV_PREFIX "/devices/"
#define DEV_PREFIX_LEN 9
#define DEVICES_DIR "/devices"
#define SSD_MINOR_NAME ":c,raw"
#define ST_MINOR_NAME ":n"
#define SSD_DRVR_NAME "ssd"
#define ST_DRVR_NAME "st"
#define PORT_WWN_PROP "port-wwn"
#define NODE_WWN_PROP "node-wwn"
#define LUN_GUID_PROP "client-guid"
#define LUN_PROP "lun"
typedef struct read_keys_struct {
int rk_generation;
int rk_length;
int rk_key[256];
} Read_keys;
typedef struct read_reserv_struct {
int rr_generation;
int rr_length;
} Read_reserv;
typedef struct mplist_struct {
char *devpath;
struct mplist_struct *next;
} Mplist;
typedef struct wwn_list_found_struct {
uchar_t node_wwn[WWN_SIZE];
uchar_t port_wwn[WWN_SIZE];
struct wwn_list_found_struct *wwn_next;
} WWN_list_found;
extern void *g_zalloc(int);
extern char *g_alloc_string(char *);
extern void g_destroy_data(void *);
extern void g_dump(char *, uchar_t *, int, int);
extern int g_object_open(char *, int);
extern char *g_scsi_find_command_name(int);
extern void g_scsi_printerr(struct uscsi_cmd *,
struct scsi_extended_sense *, int, char msg_string[], char *);
extern int g_get_machineArch(int *);
extern boolean_t g_enclDiskChk(char *, char *);
extern void g_ll_to_str(uchar_t *, char *);
extern void g_free_hotplug_dlist(struct hotplug_disk_list **);
extern int g_string_to_wwn(uchar_t *, uchar_t *);
extern int g_get_perf_statistics(char *, uchar_t *);
extern int g_get_port_multipath(char *, struct dlist **, int);
extern int g_device_in_map(gfc_map_t *, int);
extern int g_start(char *);
extern int g_stop(char *, int);
extern int g_reserve(char *);
extern int g_release(char *);
extern int g_issue_fcio_ioctl(int, fcio_t *, int);
extern void g_sort_wwn_list(struct wwn_list_struct **);
extern void g_free_wwn_list_found(struct wwn_list_found_struct **);
extern int cmd(int, struct uscsi_cmd *, int);
extern int g_scsi_persistent_reserve_in_cmd(int, uchar_t *, int, uchar_t);
extern int g_scsi_send_diag_cmd(int, uchar_t *, int);
extern int g_scsi_rec_diag_cmd(int, uchar_t *, int, uchar_t);
extern int g_scsi_writebuffer_cmd(int, int, uchar_t *, int, int, int);
extern int g_scsi_readbuffer_cmd(int, uchar_t *, int, int);
extern int g_scsi_inquiry_cmd(int, uchar_t *, int);
extern int g_scsi_log_sense_cmd(int, uchar_t *, int, uchar_t);
extern int g_scsi_mode_select_cmd(int, uchar_t *, int, uchar_t);
extern int g_scsi_mode_sense_cmd(int, uchar_t *, int, uchar_t, uchar_t);
extern int g_scsi_read_capacity_cmd(int, uchar_t *, int);
extern int g_scsi_read_capacity_1016_cmd(int, struct scsi_capacity_16 *,
int);
extern int g_scsi_release_cmd(int);
extern int g_scsi_reserve_cmd(int);
extern int g_scsi_start_cmd(int);
extern int g_scsi_stop_cmd(int, int);
extern int g_scsi_tur(int);
extern int g_scsi_reset(int);
extern int g_devid_get(char *, ddi_devid_t *, di_node_t root,
const char *);
extern int g_get_lun_str(char *, char *, int);
extern int g_get_lun_number(char *);
extern int g_get_pathcount(char *);
extern int g_devices_get_all(struct wwn_list_struct **);
#ifdef __cplusplus
}
#endif
#endif