42#ifndef _CTL_PRIVATE_H_
43#define _CTL_PRIVATE_H_
52#define CTL_VENDOR "FREEBSD "
53#define CTL_DIRECT_PRODUCT "CTLDISK "
54#define CTL_PROCESSOR_PRODUCT "CTLPROCESSOR "
55#define CTL_CDROM_PRODUCT "CTLCDROM "
56#define CTL_UNKNOWN_PRODUCT "CTLDEVICE "
58#define CTL_POOL_ENTRIES_OTHER_SC 200
175#define CTL_DEFAULT_SECTORS_PER_TRACK 63
176#define CTL_DEFAULT_HEADS 255
180#define CTL_DEFAULT_SECTORS_PER_TRACK 63
181#define CTL_DEFAULT_HEADS 16
185#define CTL_DEFAULT_SECTORS_PER_TRACK 512
186#define CTL_DEFAULT_HEADS 64
223#define CTL_DEFAULT_SECTORS_PER_TRACK 256
224#define CTL_DEFAULT_HEADS 128
226#define CTL_DEFAULT_ROTATION_RATE SVPD_NON_ROTATING
255#define CTL_PAGE_CURRENT 0x00
256#define CTL_PAGE_CHANGEABLE 0x01
257#define CTL_PAGE_DEFAULT 0x02
258#define CTL_PAGE_SAVED 0x03
260#define CTL_NUM_LBP_PARAMS 4
261#define CTL_NUM_LBP_THRESH 4
262#define CTL_LBP_EXPONENT 11
263#define CTL_LBP_PERIOD 10
264#define CTL_LBP_UA_PERIOD 300
298#define CTL_NUM_MODE_PAGES sizeof(page_index_template)/ \
299 sizeof(page_index_template[0])
315#define MODE_RWER mode_pages.rw_er_page[CTL_PAGE_CURRENT]
316#define MODE_FMT mode_pages.format_page[CTL_PAGE_CURRENT]
317#define MODE_RDISK mode_pages.rigid_disk_page[CTL_PAGE_CURRENT]
318#define MODE_VER mode_pages.verify_er_page[CTL_PAGE_CURRENT]
319#define MODE_CACHING mode_pages.caching_page[CTL_PAGE_CURRENT]
320#define MODE_CTRL mode_pages.control_page[CTL_PAGE_CURRENT]
321#define MODE_CTRLE mode_pages.control_ext_page[CTL_PAGE_CURRENT]
322#define MODE_IE mode_pages.ie_page[CTL_PAGE_CURRENT]
323#define MODE_LBP mode_pages.lbp_page[CTL_PAGE_CURRENT]
324#define MODE_CDDVD mode_pages.cddvd_page[CTL_PAGE_CURRENT]
341#define CTL_NUM_LOG_PAGES sizeof(log_page_index_template)/ \
342 sizeof(log_page_index_template[0])
365#define CTL_PR_ALL_REGISTRANTS 0xFFFFFFFF
366#define CTL_PR_NO_RESERVATION 0xFFFFFFF0
373#define NUM_HA_SHELVES 2
375#define CTL_WRITE_BUFFER_SIZE 262144
389 sbintime_t idle_time;
390 sbintime_t last_busy;
396 uint8_t ua_tpt_info[8];
402 struct callout ie_callout;
423#define CTL_MAX_THREADS 16
426 struct mtx_padalign queue_lock;
450 struct sysctl_ctx_list sysctl_ctx;
487 uint32_t total_ctl_io,
void **npool);
int ctl_ie_page_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, uint8_t *page_ptr)
int ctl_lbp_log_sense_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, int pc)
int ctl_ie_log_sense_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, int pc)
int ctl_sap_log_sense_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, int pc)
int ctl_default_page_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, uint8_t *page_ptr)
int ctl_temp_log_sense_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, int pc)
void ctl_tpc_lun_init(struct ctl_lun *lun)
int ctl_lun_map_set(struct ctl_port *port, uint32_t plun, uint32_t glun)
int ctl_copy_operation_abort(struct ctl_scsiio *ctsio)
int ctl_report_all_rod_tokens(struct ctl_scsiio *ctsio)
int ctl_get_lba_status(struct ctl_scsiio *ctsio)
int ctl_report_tagret_port_groups(struct ctl_scsiio *ctsio)
int ctl_modesen_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, int pc)
int ctl_prevent_allow(struct ctl_scsiio *ctsio)
int ctl_request_sense(struct ctl_scsiio *ctsio)
uint32_t ctl_lun_map_from_port(struct ctl_port *port, uint32_t plun)
int ctl_report_supported_opcodes(struct ctl_scsiio *ctsio)
int ctl_opfunc(struct ctl_scsiio *ctsio)
int ctl_write_same(struct ctl_scsiio *ctsio)
#define CTL_NUM_LBP_PARAMS
void ctl_tpc_lun_clear(struct ctl_lun *lun, uint32_t initidx)
int ctl_report_ident_info(struct ctl_scsiio *ctsio)
int ctl_lun_map_init(struct ctl_port *port)
int ctl_lun_map_deinit(struct ctl_port *port)
int ctl_start_stop(struct ctl_scsiio *ctsio)
int ctl_cnw(struct ctl_scsiio *ctsio)
int ctl_persistent_reserve_out(struct ctl_scsiio *ctsio)
int ctl_persistent_reserve_in(struct ctl_scsiio *ctsio)
void ctl_tpc_lun_shutdown(struct ctl_lun *lun)
int ctl_scsi_release(struct ctl_scsiio *ctsio)
int ctl_read_write(struct ctl_scsiio *ctsio)
int ctl_read_buffer(struct ctl_scsiio *ctsio)
int ctl_write_buffer(struct ctl_scsiio *ctsio)
uint32_t ctl_get_initindex(struct ctl_nexus *nexus)
int ctl_mechanism_status(struct ctl_scsiio *ctsio)
int ctl_receive_copy_status_lid4(struct ctl_scsiio *ctsio)
int ctl_inquiry_evpd_tpc(struct ctl_scsiio *ctsio, int alloc_len)
int ctl_receive_rod_token_information(struct ctl_scsiio *ctsio)
int ctl_extended_copy_lid1(struct ctl_scsiio *ctsio)
int ctl_read_defect(struct ctl_scsiio *ctsio)
int ctl_read_toc(struct ctl_scsiio *ctsio)
uint32_t ctl_lun_map_to_port(struct ctl_port *port, uint32_t glun)
int ctl_log_sense(struct ctl_scsiio *ctsio)
int ctl_format(struct ctl_scsiio *ctsio)
int ctl_receive_copy_failure_details(struct ctl_scsiio *ctsio)
int ctl_lun_map_unset(struct ctl_port *port, uint32_t plun)
int ctl_get_config(struct ctl_scsiio *ctsio)
static const struct ctl_page_index page_index_template[]
@ CTL_CMD_FLAG_OK_ON_CDROM
@ CTL_CMD_FLAG_OK_ON_NO_MEDIA
@ CTL_CMD_FLAG_ALLOW_ON_PR_RESV
@ CTL_CMD_FLAG_OK_ON_DIRECT
@ CTL_CMD_FLAG_OK_ON_STANDBY
@ CTL_CMD_FLAG_OK_ON_PROC
@ CTL_CMD_FLAG_OK_ON_NO_LUN
@ CTL_CMD_FLAG_OK_ON_UNAVAIL
@ CTL_CMD_FLAG_ALLOW_ON_PR_WRESV
@ CTL_CMD_FLAG_OK_ON_BOTH
@ CTL_CMD_FLAG_ALLOW_ON_RESV
int ctl_report_luns(struct ctl_scsiio *ctsio)
int ctl_receive_copy_operating_parameters(struct ctl_scsiio *ctsio)
void ctl_tpc_init(struct ctl_softc *softc)
void ctl_tpc_shutdown(struct ctl_softc *softc)
@ CTL_LUN_PEER_SC_PRIMARY
int ctl_read_capacity_16(struct ctl_scsiio *ctsio)
int ctl_receive_copy_status_lid1(struct ctl_scsiio *ctsio)
int ctl_read_capacity(struct ctl_scsiio *ctsio)
int ctl_tur(struct ctl_scsiio *ctsio)
int ctl_report_timestamp(struct ctl_scsiio *ctsio)
int ctl_mode_sense(struct ctl_scsiio *ctsio)
int ctl_report_supported_tmf(struct ctl_scsiio *ctsio)
int ctl_unmap(struct ctl_scsiio *ctsio)
void ctl_pool_free(struct ctl_io_pool *pool)
int ctl_mode_select(struct ctl_scsiio *ctsio)
#define CTL_NUM_LBP_THRESH
#define CTL_NUM_MODE_PAGES
const struct ctl_cmd_entry ctl_cmd_table[256]
int ctl_write_using_token(struct ctl_scsiio *ctsio)
int ctl_get_event_status(struct ctl_scsiio *ctsio)
int ctl_modesel_handler(struct ctl_scsiio *ctsio, struct ctl_page_index *page_index, uint8_t *page_ptr)
static const struct ctl_page_index log_page_index_template[]
int ctl_populate_token(struct ctl_scsiio *ctsio)
int ctl_extended_copy_lid4(struct ctl_scsiio *ctsio)
int ctl_pool_create(struct ctl_softc *ctl_softc, const char *pool_name, uint32_t total_ctl_io, void **npool)
int ctl_sync_cache(struct ctl_scsiio *ctsio)
int ctl_verify(struct ctl_scsiio *ctsio)
int ctl_scsi_reserve(struct ctl_scsiio *ctsio)
#define CTL_NUM_LOG_PAGES
int ctl_inquiry(struct ctl_scsiio *ctsio)
static void tpc_timeout(void *arg)
#define SLS_SUPPORTED_SUBPAGES_SUBPAGE
#define SMS_INFO_EXCEPTIONS_PAGE
#define SLS_SUPPORTED_PAGES_PAGE
#define SLS_LOGICAL_BLOCK_PROVISIONING
#define SMS_CONTROL_MODE_PAGE
#define SMS_FORMAT_DEVICE_PAGE
#define SLS_STAT_AND_PERF
#define SMS_CDDVD_CAPS_PAGE
#define SMS_RW_ERROR_RECOVERY_PAGE
#define SMS_VERIFY_ERROR_RECOVERY_PAGE
#define SMS_RIGID_DISK_PAGE
ctl_lun_error_pattern pattern
struct ctl_softc * ctl_softc
struct scsi_logical_block_provisioning_page main
struct scsi_logical_block_provisioning_page_descr descr[CTL_NUM_LBP_THRESH]
ctl_delay_type datamove_type
LIST_HEAD(ctl_ooaq, ctl_io_hdr) ooa_queue
struct ctl_devid * lun_devid
ctl_ua_type ** pending_ua
TAILQ_HEAD(tpc_lists, tpc_list) tpc_lists
STAILQ_ENTRY(ctl_lun) links
struct ctl_softc * ctl_softc
struct scsi_sense_data ** pending_sense
struct ctl_be_lun * be_lun
struct ctl_backend_driver * backend
STAILQ_HEAD(, ctl_error_desc) error_list
ctl_modesel_handler * select_handler
ctl_modesen_handler * sense_handler
ctl_page_flags page_flags
struct ctl_lun ** ctl_luns
TAILQ_HEAD(tpc_tokens, tpc_token) tpc_tokens
STAILQ_HEAD(, ctl_lun) lun_list
struct uma_zone * io_zone
STAILQ_HEAD(, ctl_backend_driver) be_list
ctl_ha_link_state ha_link
struct sysctl_oid * sysctl_tree
STAILQ_HEAD(, ctl_frontend) fe_list
STAILQ_HEAD(, ctl_port) port_list
struct ctl_port ** ctl_ports
struct thread * thresh_thread
STAILQ_HEAD(, ctl_io_hdr) isc_queue
struct ctl_softc * ctl_softc
STAILQ_HEAD(, ctl_io_hdr) done_queue
STAILQ_HEAD(, ctl_io_hdr) incoming_queue
STAILQ_HEAD(, ctl_io_hdr) rtr_queue
struct ctlblock_softc * ctlblock_softc
struct ctl_softc * ctl_softc