#ifndef _SYS_SCSI_IMPL_SCSI_SAS_H
#define _SYS_SCSI_IMPL_SCSI_SAS_H
#include <sys/types.h>
#include <sys/scsi/impl/usmp.h>
#ifdef __cplusplus
extern "C" {
#endif
#if defined(_KERNEL)
typedef struct __sas_phymap sas_phymap_t;
typedef enum { PHYMAP_MODE_SIMPLE } sas_phymap_mode_t;
typedef void (*sas_phymap_activate_cb_t)
(void *phymap_priv, char *ua, void **ua_privp);
typedef void (*sas_phymap_deactivate_cb_t)
(void *phymap_priv, char *ua, void *ua_priv);
extern int sas_phymap_create(dev_info_t *hba_dip,
int settle_usec,
sas_phymap_mode_t mode,
void *mode_argument,
void *phymap_priv,
sas_phymap_activate_cb_t activate_cb,
sas_phymap_deactivate_cb_t deactivate_cb,
sas_phymap_t **phymapp);
void sas_phymap_destroy(sas_phymap_t *phymap);
extern int sas_phymap_phy_add(sas_phymap_t *phymap,
int phy,
uint64_t local_sas_address,
uint64_t remote_sas_address);
extern int sas_phymap_phy_rem(sas_phymap_t *phymap,
int phy);
extern char *sas_phymap_lookup_ua(sas_phymap_t *phymap,
uint64_t local_sas_address,
uint64_t remote_sas_address);
extern void *sas_phymap_lookup_uapriv(sas_phymap_t *phymap,
char *ua);
extern char *sas_phymap_phy2ua(sas_phymap_t *phymap,
int phy);
void sas_phymap_ua_free(char *);
extern int sas_phymap_uahasphys(sas_phymap_t *phymap,
char *ua);
typedef struct __sas_phymap_phys sas_phymap_phys_t;
extern sas_phymap_phys_t *sas_phymap_ua2phys(sas_phymap_t *phymap,
char *ua);
extern int sas_phymap_phys_next(sas_phymap_phys_t *phys);
void sas_phymap_phys_free(sas_phymap_phys_t *phys);
#endif
#define KSTAT_SAS_PHY_CLASS "SAS_phy_stat"
typedef struct sas_port_protocol_stats {
kstat_named_t seconds_since_last_reset;
kstat_named_t input_requests;
kstat_named_t output_requests;
kstat_named_t control_requests;
kstat_named_t input_megabytes;
kstat_named_t output_megabytes;
} sas_port_protocol_stats_t;
typedef struct sas_port_stats {
kstat_named_t seconds_since_last_reset;
kstat_named_t tx_frames;
kstat_named_t tx_words;
kstat_named_t rx_frames;
kstat_named_t rx_words;
} sas_port_stats_t;
typedef struct sas_phy_stats {
kstat_named_t seconds_since_last_reset;
kstat_named_t tx_frames;
kstat_named_t tx_words;
kstat_named_t rx_frames;
kstat_named_t rx_words;
kstat_named_t invalid_dword_count;
kstat_named_t running_disparity_error_count;
kstat_named_t loss_of_dword_sync_count;
kstat_named_t phy_reset_problem_count;
} sas_phy_stats_t;
#define SAS_PROTOCOL_SSP 0x00000001
#define SAS_PROTOCOL_STP 0x00000010
#define SAS_PROTOCOL_SMP 0x00000100
#define SAS_PROTOCOL_SATA 0x00001000
#define SAS_LINK_RATE_UNKNOWN 0x0
#define SAS_LINK_RATE_DISABLED 0x1
#define SAS_LINK_RATE_FAILED 0x2
#define SAS_LINK_RATE_SATASPINUP 0x3
#define SAS_LINK_RATE_SATAPORTSEL 0x4
#define SAS_LINK_RATE_RESET_IN_PROGRESS 0x5
#define SAS_LINK_RATE_PHY_UNSUPPORTED 0x6
#define SAS_LINK_RATE_RESERVED 0x7
#define SAS_LINK_RATE_1_5GBIT 0x8
#define SAS_LINK_RATE_3GBIT 0x9
#define SAS_LINK_RATE_6GBIT 0xA
#define SAS_PHY_INFO "phy-info"
#define SAS_PHY_INFO_NVL "phy-info-nvl"
#define SAS_PHY_ID "PhyIdentifier"
#define SAS_NEG_LINK_RATE "NegotiatedLinkRate"
#define SAS_PROG_MIN_LINK_RATE "ProgrammedMinLinkRate"
#define SAS_HW_MIN_LINK_RATE "HardwareMinLinkRate"
#define SAS_PROG_MAX_LINK_RATE "ProgrammedMaxLinkRate"
#define SAS_HW_MAX_LINK_RATE "HardwareMaxLinkRate"
#define SCSI_ADDR_PROP_TARGET_PORT_PM "target-port-pm"
#define SCSI_ADDR_PROP_ATTACHED_PORT_PM "attached-port-pm"
#define SCSI_HBA_PROP_RECEPTACLE_PM "receptacle-pm"
#define SCSI_ADDR_PROP_TARGET_PORT_DEPTH "target-port-depth"
#define EC_HBA "EC_hba"
#define ESC_SAS_HBA_PORT_BROADCAST "ESC_sas_hba_port_broadcast"
#define SAS_PORT_BROADCAST_CHANGE "port_broadcast_change"
#define SAS_PORT_BROADCAST_SES "port_broadcast_ses"
#define SAS_PORT_BROADCAST_D24_0 "port_broadcast_d24_0"
#define SAS_PORT_BROADCAST_D27_4 "port_broadcast_d27_4"
#define SAS_PORT_BROADCAST_D01_4 "port_broadcast_d01_4"
#define SAS_PORT_BROADCAST_D04_7 "port_broadcast_d04_7"
#define SAS_PORT_BROADCAST_D16_7 "port_broadcast_d16_7"
#define SAS_PORT_BROADCAST_D29_7 "port_broadcast_d29_7"
#define ESC_SAS_PHY_EVENT "ESC_sas_phy_event"
#define SAS_PHY_ONLINE "port_online"
#define SAS_PHY_OFFLINE "port_offline"
#define SAS_PHY_REMOVE "port_remove"
#define SAS_DRV_INST "driver_instance"
#define SAS_PORT_ADDR "port_address"
#define SAS_DEVFS_PATH "devfs_path"
#define SAS_EVENT_TYPE "event_type"
#define SAS_LINK_RATE "link_rate"
#ifdef __cplusplus
}
#endif
#endif