FreeBSD kernel CAM code
|
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/conf.h>
#include <sys/errno.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/mutex.h>
#include <sys/queue.h>
#include <sys/sx.h>
#include <sys/systm.h>
#include <sys/sysctl.h>
#include <sys/types.h>
#include <cam/cam.h>
#include <cam/cam_ccb.h>
#include <cam/cam_periph.h>
#include <cam/scsi/scsi_enc.h>
#include <cam/scsi/scsi_enc_internal.h>
#include <cam/scsi/scsi_message.h>
Go to the source code of this file.
Data Structures | |
struct | safte_control_request |
struct | scfg |
Macros | |
#define | ALL_ENC_STAT |
#define | SAFTE_RD_RDCFG 0x00 /* read enclosure configuration */ |
#define | SAFTE_RD_RDESTS 0x01 /* read enclosure status */ |
#define | SAFTE_RD_RDDSTS 0x04 /* read drive slot status */ |
#define | SAFTE_RD_RDGFLG 0x05 /* read global flags */ |
#define | SAFTE_WT_DSTAT 0x10 /* write device slot status */ |
#define | SAFTE_WT_SLTOP 0x12 /* perform slot operation */ |
#define | SAFTE_WT_FANSPD 0x13 /* set fan speed */ |
#define | SAFTE_WT_ACTPWS 0x14 /* turn on/off power supply */ |
#define | SAFTE_WT_GLOBAL 0x15 /* send global command */ |
#define | SAFT_SCRATCH 64 |
#define | SCSZ 0x8000 |
#define | SAFT_ALARM_OFFSET(cc) (cc)->slotoff - 1 |
#define | SAFT_FLG1_ALARM 0x1 |
#define | SAFT_FLG1_GLOBFAIL 0x2 |
#define | SAFT_FLG1_GLOBWARN 0x4 |
#define | SAFT_FLG1_ENCPWROFF 0x8 |
#define | SAFT_FLG1_ENCFANFAIL 0x10 |
#define | SAFT_FLG1_ENCPWRFAIL 0x20 |
#define | SAFT_FLG1_ENCDRVFAIL 0x40 |
#define | SAFT_FLG1_ENCDRVWARN 0x80 |
#define | SAFT_FLG2_LOCKDOOR 0x4 |
#define | SAFT_PRIVATE sizeof (struct scfg) |
#define | SAFT_BAIL(r, x) |
#define | DEVON(x) |
#define | IDON(x) (!!((x)[2] & SESCTL_RQSID)) |
Typedefs | |
typedef struct safte_control_request | safte_control_request_t |
typedef struct safte_control_reqlist | safte_control_reqlist_t |
Enumerations | |
enum | safte_update_action { SAFTE_UPDATE_NONE , SAFTE_UPDATE_READCONFIG , SAFTE_UPDATE_READGFLAGS , SAFTE_UPDATE_READENCSTATUS , SAFTE_UPDATE_READSLOTSTATUS , SAFTE_PROCESS_CONTROL_REQS , SAFTE_NUM_UPDATE_STATES } |
enum | { SES_SETSTATUS_ENC_IDX = -1 } |
Functions | |
__FBSDID ("$FreeBSD$") | |
static int | safte_set_enc_status (enc_softc_t *enc, uint8_t encstat, int slpflag) |
TAILQ_HEAD (safte_control_reqlist, safte_control_request) | |
static void | safte_terminate_control_requests (safte_control_reqlist_t *reqlist, int result) |
SYSCTL_INT (_kern_cam_enc, OID_AUTO, emulate_array_devices, CTLFLAG_RWTUN, &emulate_array_devices, 0, "Emulate Array Devices for SAF-TE") | |
static int | safte_fill_read_buf_io (enc_softc_t *enc, struct enc_fsm_state *state, union ccb *ccb, uint8_t *buf) |
static int | safte_process_config (enc_softc_t *enc, struct enc_fsm_state *state, union ccb *ccb, uint8_t **bufp, int error, int xfer_len) |
static int | safte_process_gflags (enc_softc_t *enc, struct enc_fsm_state *state, union ccb *ccb, uint8_t **bufp, int error, int xfer_len) |
static int | safte_process_status (enc_softc_t *enc, struct enc_fsm_state *state, union ccb *ccb, uint8_t **bufp, int error, int xfer_len) |
static int | safte_process_slotstatus (enc_softc_t *enc, struct enc_fsm_state *state, union ccb *ccb, uint8_t **bufp, int error, int xfer_len) |
static int | safte_fill_control_request (enc_softc_t *enc, struct enc_fsm_state *state, union ccb *ccb, uint8_t *buf) |
static int | safte_process_control_request (enc_softc_t *enc, struct enc_fsm_state *state, union ccb *ccb, uint8_t **bufp, int error, int xfer_len) |
static void | safte_softc_invalidate (enc_softc_t *enc) |
static void | safte_softc_cleanup (enc_softc_t *enc) |
static int | safte_init_enc (enc_softc_t *enc) |
static int | safte_get_elm_status (enc_softc_t *enc, encioc_elm_status_t *elms, int slpflg) |
static int | safte_set_elm_status (enc_softc_t *enc, encioc_elm_status_t *elms, int slpflag) |
static void | safte_poll_status (enc_softc_t *enc) |
int | safte_softc_init (enc_softc_t *enc) |
Variables | |
static fsm_fill_handler_t | safte_fill_read_buf_io |
static fsm_fill_handler_t | safte_fill_control_request |
static fsm_done_handler_t | safte_process_config |
static fsm_done_handler_t | safte_process_gflags |
static fsm_done_handler_t | safte_process_status |
static fsm_done_handler_t | safte_process_slotstatus |
static fsm_done_handler_t | safte_process_control_request |
static struct enc_fsm_state | enc_fsm_states [SAFTE_NUM_UPDATE_STATES] |
static char * | safte_2little = "Too Little Data Returned (%d) at line %d\n" |
int | emulate_array_devices = 1 |
static struct enc_vec | safte_enc_vec |
#define ALL_ENC_STAT |
Definition at line 59 of file scsi_enc_safte.c.
#define DEVON | ( | x | ) |
#define IDON | ( | x | ) | (!!((x)[2] & SESCTL_RQSID)) |
#define SAFT_ALARM_OFFSET | ( | cc | ) | (cc)->slotoff - 1 |
Definition at line 198 of file scsi_enc_safte.c.
#define SAFT_BAIL | ( | r, | |
x | |||
) |
Definition at line 223 of file scsi_enc_safte.c.
#define SAFT_FLG1_ALARM 0x1 |
Definition at line 210 of file scsi_enc_safte.c.
#define SAFT_FLG1_ENCDRVFAIL 0x40 |
Definition at line 216 of file scsi_enc_safte.c.
#define SAFT_FLG1_ENCDRVWARN 0x80 |
Definition at line 217 of file scsi_enc_safte.c.
#define SAFT_FLG1_ENCFANFAIL 0x10 |
Definition at line 214 of file scsi_enc_safte.c.
#define SAFT_FLG1_ENCPWRFAIL 0x20 |
Definition at line 215 of file scsi_enc_safte.c.
#define SAFT_FLG1_ENCPWROFF 0x8 |
Definition at line 213 of file scsi_enc_safte.c.
#define SAFT_FLG1_GLOBFAIL 0x2 |
Definition at line 211 of file scsi_enc_safte.c.
#define SAFT_FLG1_GLOBWARN 0x4 |
Definition at line 212 of file scsi_enc_safte.c.
#define SAFT_FLG2_LOCKDOOR 0x4 |
Definition at line 219 of file scsi_enc_safte.c.
#define SAFT_PRIVATE sizeof (struct scfg) |
Definition at line 220 of file scsi_enc_safte.c.
#define SAFT_SCRATCH 64 |
Definition at line 82 of file scsi_enc_safte.c.
#define SAFTE_RD_RDCFG 0x00 /* read enclosure configuration */ |
Definition at line 68 of file scsi_enc_safte.c.
#define SAFTE_RD_RDDSTS 0x04 /* read drive slot status */ |
Definition at line 70 of file scsi_enc_safte.c.
#define SAFTE_RD_RDESTS 0x01 /* read enclosure status */ |
Definition at line 69 of file scsi_enc_safte.c.
#define SAFTE_RD_RDGFLG 0x05 /* read global flags */ |
Definition at line 71 of file scsi_enc_safte.c.
#define SAFTE_WT_ACTPWS 0x14 /* turn on/off power supply */ |
Definition at line 79 of file scsi_enc_safte.c.
#define SAFTE_WT_DSTAT 0x10 /* write device slot status */ |
Definition at line 76 of file scsi_enc_safte.c.
#define SAFTE_WT_FANSPD 0x13 /* set fan speed */ |
Definition at line 78 of file scsi_enc_safte.c.
#define SAFTE_WT_GLOBAL 0x15 /* send global command */ |
Definition at line 80 of file scsi_enc_safte.c.
#define SAFTE_WT_SLTOP 0x12 /* perform slot operation */ |
Definition at line 77 of file scsi_enc_safte.c.
#define SCSZ 0x8000 |
Definition at line 83 of file scsi_enc_safte.c.
typedef struct safte_control_reqlist safte_control_reqlist_t |
Definition at line 160 of file scsi_enc_safte.c.
typedef struct safte_control_request safte_control_request_t |
anonymous enum |
Enumerator | |
---|---|
SES_SETSTATUS_ENC_IDX |
Definition at line 161 of file scsi_enc_safte.c.
enum safte_update_action |
Enumerator | |
---|---|
SAFTE_UPDATE_NONE | |
SAFTE_UPDATE_READCONFIG | |
SAFTE_UPDATE_READGFLAGS | |
SAFTE_UPDATE_READENCSTATUS | |
SAFTE_UPDATE_READSLOTSTATUS | |
SAFTE_PROCESS_CONTROL_REQS | |
SAFTE_NUM_UPDATE_STATES |
Definition at line 85 of file scsi_enc_safte.c.
__FBSDID | ( | "$FreeBSD$" | ) |
|
static |
Definition at line 733 of file scsi_enc_safte.c.
References scfg::adm_status, ALL_ENC_STAT, ccb::ataio, ccb::csio, scfg::current_request, scfg::current_request_stage, scfg::current_request_stages, DEVON, safte_control_request::elm_idx, enc_cache::elm_map, safte_control_request::elm_stat, enc_element::elm_type, ELMTYP_ALARM, ELMTYP_ARRAY_DEV, ELMTYP_DEVICE, ELMTYP_DOORLOCK, ELMTYP_FAN, ELMTYP_POWER, enc_softc::enc_cache, enc_softc::enc_private, ENC_SEMB_SAFT, enc_softc::enc_type, enc_update_request(), enc_element::encstat, scfg::flag1, scfg::flag2, IDON, MSG_SIMPLE_Q_TAG, enc_cache::nelms, scfg::Nslots, enc_element::priv, scfg::pwroff, scfg::requests, SAFT_FLG1_ALARM, SAFT_FLG1_ENCFANFAIL, SAFT_FLG1_ENCPWRFAIL, SAFT_FLG1_GLOBFAIL, SAFT_FLG1_GLOBWARN, SAFT_FLG2_LOCKDOOR, SAFTE_UPDATE_READCONFIG, SAFTE_WT_ACTPWS, SAFTE_WT_DSTAT, SAFTE_WT_FANSPD, SAFTE_WT_GLOBAL, SAFTE_WT_SLTOP, scsi_write_buffer(), semb_write_buffer(), SES_ENCSTAT_CRITICAL, SES_ENCSTAT_NONCRITICAL, SES_ENCSTAT_UNRECOV, SES_SETSTATUS_ENC_IDX, SESCTL_DISABLE, SESCTL_PRDFAIL, SESCTL_RQSFLT, SESCTL_RQSID, SESCTL_RQSTFAIL, SESCTL_RQSTON, scfg::slotoff, SSD_FULL_SIZE, and enc_fsm_state::timeout.
|
static |
Definition at line 234 of file scsi_enc_safte.c.
References ccb::ataio, enc_fsm_state::buf_size, ccb::csio, enc_softc::enc_cache, ENC_SEMB_SAFT, enc_softc::enc_type, enc_update_request(), MSG_SIMPLE_Q_TAG, enc_cache::nelms, enc_fsm_state::page_code, SAFTE_RD_RDCFG, SAFTE_UPDATE_READCONFIG, scsi_read_buffer(), semb_read_buffer(), SSD_FULL_SIZE, and enc_fsm_state::timeout.
|
static |
Definition at line 1048 of file scsi_enc_safte.c.
References encioc_elm_status::cstat, encioc_elm_status::elm_idx, enc_cache::elm_map, enc_softc::enc_cache, and enc_element::encstat.
|
static |
Definition at line 1005 of file scsi_enc_safte.c.
References enc_softc::enc_private, enc_runcmd(), scfg::flag1, scfg::flag2, safte_set_enc_status(), and SEND_DIAGNOSTIC.
|
static |
Definition at line 1085 of file scsi_enc_safte.c.
References enc_update_request(), SAFTE_UPDATE_READENCSTATUS, and SAFTE_UPDATE_READSLOTSTATUS.
|
static |
Definition at line 259 of file scsi_enc_safte.c.
References scfg::DoorLock, enc_cache::elm_map, enc_element::elm_type, ELMTYP_ALARM, ELMTYP_ARRAY_DEV, ELMTYP_DEVICE, ELMTYP_DOORLOCK, ELMTYP_FAN, ELMTYP_POWER, ELMTYP_THERM, emulate_array_devices, enc_softc::enc_cache, ENC_FREE_AND_NULL, enc_softc::enc_private, enc_update_request(), ENC_VLOG, enc_cache::nelms, scfg::Nfans, scfg::Npwr, scfg::Nslots, scfg::Nspkrs, scfg::Ntherm, scfg::Ntstats, scfg::pwroff, SAFTE_UPDATE_READENCSTATUS, SAFTE_UPDATE_READGFLAGS, SAFTE_UPDATE_READSLOTSTATUS, and scfg::slotoff.
|
static |
Definition at line 954 of file scsi_enc_safte.c.
References scfg::current_request, scfg::current_request_stage, scfg::current_request_stages, safte_control_request::elm_idx, enc_cache::elm_map, enc_element::elm_type, ELMTYP_ARRAY_DEV, ELMTYP_DEVICE, enc_softc::enc_cache, enc_softc::enc_private, enc_update_request(), safte_control_request::result, SAFTE_PROCESS_CONTROL_REQS, SAFTE_UPDATE_READENCSTATUS, SAFTE_UPDATE_READSLOTSTATUS, and SES_SETSTATUS_ENC_IDX.
|
static |
Definition at line 330 of file scsi_enc_safte.c.
References scfg::adm_status, enc_softc::enc_private, scfg::flag1, scfg::flag2, SAFT_BAIL, SAFT_FLG1_GLOBFAIL, SAFT_FLG1_GLOBWARN, SES_ENCSTAT_CRITICAL, and SES_ENCSTAT_NONCRITICAL.
|
static |
Definition at line 664 of file scsi_enc_safte.c.
References scfg::adm_status, enc_cache::elm_map, enc_element::elm_type, ELMTYP_ARRAY_DEV, enc_softc::enc_cache, enc_softc::enc_private, enc_cache::enc_status, scfg::enc_status, enc_element::encstat, scfg::Nslots, SAFT_BAIL, SES_ENCSTAT_CRITICAL, SES_ENCSTAT_NONCRITICAL, SES_OBJSTAT_CRIT, SES_OBJSTAT_NONCRIT, SES_OBJSTAT_NOTINSTALLED, SES_OBJSTAT_OK, SESCTL_DEVOFF, SESCTL_PRDFAIL, SESCTL_RQSFLT, SESCTL_RQSID, SESCTL_RQSINS, SESCTL_RQSRMV, scfg::slot_status, scfg::slotoff, and enc_element::svalid.
|
static |
Definition at line 355 of file scsi_enc_safte.c.
References scfg::adm_status, scfg::DoorLock, enc_cache::elm_map, enc_element::elm_type, ELMTYP_DEVICE, enc_softc::enc_cache, enc_softc::enc_private, enc_cache::enc_status, scfg::enc_status, ENC_VLOG, enc_element::encstat, scfg::flag1, scfg::Nfans, scfg::Npwr, scfg::Nslots, scfg::Nspkrs, scfg::Ntherm, scfg::Ntstats, SAFT_BAIL, SAFT_FLG1_ENCFANFAIL, SES_ENCSTAT_CRITICAL, SES_ENCSTAT_INFO, SES_ENCSTAT_NONCRITICAL, SES_OBJSTAT_CRIT, SES_OBJSTAT_NONCRIT, SES_OBJSTAT_NOTAVAIL, SES_OBJSTAT_NOTINSTALLED, SES_OBJSTAT_OK, SES_OBJSTAT_UNKNOWN, SES_OBJSTAT_UNSUPPORTED, SESCTL_DISABLE, scfg::slot_status, scfg::slotoff, and enc_element::svalid.
|
static |
Definition at line 1060 of file scsi_enc_safte.c.
References cam_periph_sleep, encioc_elm_status::cstat, encioc_elm_status::elm_idx, safte_control_request::elm_idx, safte_control_request::elm_stat, enc_softc::enc_private, enc_update_request(), enc_softc::periph, scfg::requests, safte_control_request::result, SAFTE_PROCESS_CONTROL_REQS, and SESCTL_CSEL.
|
static |
Definition at line 1027 of file scsi_enc_safte.c.
References cam_periph_sleep, safte_control_request::elm_idx, safte_control_request::elm_stat, enc_softc::enc_private, enc_update_request(), enc_softc::periph, scfg::requests, safte_control_request::result, SAFTE_PROCESS_CONTROL_REQS, and SES_SETSTATUS_ENC_IDX.
Referenced by safte_init_enc().
|
static |
Definition at line 996 of file scsi_enc_safte.c.
References enc_cache::elm_map, enc_softc::enc_cache, ENC_FREE_AND_NULL, enc_softc::enc_private, and enc_cache::nelms.
int safte_softc_init | ( | enc_softc_t * | enc | ) |
Definition at line 1104 of file scsi_enc_safte.c.
References enc_softc::enc_cache, enc_softc::enc_fsm_states, enc_fsm_states, ENC_MALLOCZ, enc_softc::enc_private, enc_cache::enc_status, enc_softc::enc_vec, enc_cache::nelms, scfg::requests, SAFT_PRIVATE, and safte_enc_vec.
|
static |
Definition at line 987 of file scsi_enc_safte.c.
References enc_softc::enc_private, scfg::requests, and safte_terminate_control_requests().
|
static |
Definition at line 166 of file scsi_enc_safte.c.
References safte_control_request::result.
Referenced by safte_softc_invalidate().
SYSCTL_INT | ( | _kern_cam_enc | , |
OID_AUTO | , | ||
emulate_array_devices | , | ||
CTLFLAG_RWTUN | , | ||
& | emulate_array_devices, | ||
0 | , | ||
"Emulate Array Devices for SAF-TE" | |||
) |
TAILQ_HEAD | ( | safte_control_reqlist | , |
safte_control_request | |||
) |
int emulate_array_devices = 1 |
Definition at line 229 of file scsi_enc_safte.c.
Referenced by safte_process_config().
|
static |
Definition at line 103 of file scsi_enc_safte.c.
Referenced by safte_softc_init().
|
static |
Definition at line 222 of file scsi_enc_safte.c.
|
static |
Definition at line 1092 of file scsi_enc_safte.c.
Referenced by safte_softc_init().
|
static |
Definition at line 96 of file scsi_enc_safte.c.
|
static |
Definition at line 95 of file scsi_enc_safte.c.
|
static |
Definition at line 97 of file scsi_enc_safte.c.
|
static |
Definition at line 101 of file scsi_enc_safte.c.
|
static |
Definition at line 98 of file scsi_enc_safte.c.
|
static |
Definition at line 100 of file scsi_enc_safte.c.
|
static |
Definition at line 99 of file scsi_enc_safte.c.