FreeBSD kernel CAM code
ctl_util.c File Reference
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/types.h>
#include <sys/malloc.h>
#include <sys/sbuf.h>
#include <sys/queue.h>
#include <sys/callout.h>
#include <cam/scsi/scsi_all.h>
#include <cam/ctl/ctl_io.h>
#include <cam/ctl/ctl_scsi_all.h>
#include <cam/ctl/ctl_util.h>
Include dependency graph for ctl_util.c:

Go to the source code of this file.

Data Structures

struct  ctl_status_desc
 
struct  ctl_task_desc
 

Functions

 __FBSDID ("$FreeBSD$")
 
void ctl_scsi_tur (union ctl_io *io, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_inquiry (union ctl_io *io, uint8_t *data_ptr, int32_t data_len, uint8_t byte2, uint8_t page_code, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_request_sense (union ctl_io *io, uint8_t *data_ptr, int32_t data_len, uint8_t byte2, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_report_luns (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, uint8_t select_report, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_read_write_buffer (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, int read_buffer, uint8_t mode, uint8_t buffer_id, uint32_t buffer_offset, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_read_write (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, int read_op, uint8_t byte2, int minimum_cdb_size, uint64_t lba, uint32_t num_blocks, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_write_same (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, uint8_t byte2, uint64_t lba, uint32_t num_blocks, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_read_capacity (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, uint32_t addr, int reladr, int pmi, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_read_capacity_16 (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, uint64_t addr, int reladr, int pmi, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_mode_sense (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, int dbd, int llbaa, uint8_t page_code, uint8_t pc, uint8_t subpage, int minimum_cdb_size, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_start_stop (union ctl_io *io, int start, int load_eject, int immediate, int power_conditions, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_sync_cache (union ctl_io *io, int immed, int reladr, int minimum_cdb_size, uint64_t starting_lba, uint32_t block_count, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_persistent_res_in (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, int action, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_persistent_res_out (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, int action, int type, uint64_t key, uint64_t sa_key, ctl_tag_type tag_type, uint8_t control)
 
void ctl_scsi_maintenance_in (union ctl_io *io, uint8_t *data_ptr, uint32_t data_len, uint8_t action, ctl_tag_type tag_type, uint8_t control)
 
const char * ctl_scsi_task_string (struct ctl_taskio *taskio)
 
void ctl_io_sbuf (union ctl_io *io, struct sbuf *sb)
 
void ctl_io_error_sbuf (union ctl_io *io, struct scsi_inquiry_data *inq_data, struct sbuf *sb)
 
char * ctl_io_string (union ctl_io *io, char *str, int str_len)
 
char * ctl_io_error_string (union ctl_io *io, struct scsi_inquiry_data *inq_data, char *str, int str_len)
 
void ctl_io_print (union ctl_io *io)
 
void ctl_io_error_print (union ctl_io *io, struct scsi_inquiry_data *inq_data)
 
void ctl_data_print (union ctl_io *io)
 

Variables

static struct ctl_status_desc ctl_status_table []
 
static struct ctl_task_desc ctl_task_table []
 

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ ctl_data_print()

void ctl_data_print ( union ctl_io io)

◆ ctl_io_error_print()

void ctl_io_error_print ( union ctl_io io,
struct scsi_inquiry_data inq_data 
)

Definition at line 845 of file ctl_util.c.

References ctl_io_error_string().

Referenced by ctl_process_done(), and ctlfe_dump_queue().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ctl_io_error_sbuf()

void ctl_io_error_sbuf ( union ctl_io io,
struct scsi_inquiry_data inq_data,
struct sbuf *  sb 
)

◆ ctl_io_error_string()

char * ctl_io_error_string ( union ctl_io io,
struct scsi_inquiry_data inq_data,
char *  str,
int  str_len 
)

Definition at line 823 of file ctl_util.c.

References ctl_io_error_sbuf().

Referenced by ctl_io_error_print().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ctl_io_print()

void ctl_io_print ( union ctl_io io)

Definition at line 837 of file ctl_util.c.

References ctl_io_string().

Referenced by ctl_queue(), and ctl_run().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ctl_io_sbuf()

void ctl_io_sbuf ( union ctl_io io,
struct sbuf *  sb 
)

◆ ctl_io_string()

char * ctl_io_string ( union ctl_io io,
char *  str,
int  str_len 
)

Definition at line 812 of file ctl_util.c.

References ctl_io_sbuf().

Referenced by ctl_io_print().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ctl_scsi_inquiry()

◆ ctl_scsi_maintenance_in()

◆ ctl_scsi_mode_sense()

◆ ctl_scsi_persistent_res_in()

◆ ctl_scsi_persistent_res_out()

◆ ctl_scsi_read_capacity()

◆ ctl_scsi_read_capacity_16()

◆ ctl_scsi_read_write()

◆ ctl_scsi_read_write_buffer()

◆ ctl_scsi_report_luns()

◆ ctl_scsi_request_sense()

◆ ctl_scsi_start_stop()

◆ ctl_scsi_sync_cache()

◆ ctl_scsi_task_string()

const char * ctl_scsi_task_string ( struct ctl_taskio taskio)

Definition at line 717 of file ctl_util.c.

References ctl_task_table, ctl_taskio::task_action, ctl_task_desc::task_action, and ctl_io::taskio.

Referenced by ctl_io_sbuf().

Here is the caller graph for this function:

◆ ctl_scsi_tur()

◆ ctl_scsi_write_same()

void ctl_scsi_write_same ( union ctl_io io,
uint8_t *  data_ptr,
uint32_t  data_len,
uint8_t  byte2,
uint64_t  lba,
uint32_t  num_blocks,
ctl_tag_type  tag_type,
uint8_t  control 
)

Variable Documentation

◆ ctl_status_table

struct ctl_status_desc ctl_status_table[]
static
Initial value:
= {
{CTL_STATUS_NONE, "No Status"},
{CTL_SUCCESS, "Command Completed Successfully"},
{CTL_CMD_TIMEOUT, "Command Timed Out"},
{CTL_SEL_TIMEOUT, "Selection Timeout"},
{CTL_ERROR, "Command Failed"},
{CTL_SCSI_ERROR, "SCSI Error"},
{CTL_CMD_ABORTED, "Command Aborted"},
}
@ CTL_SUCCESS
Definition: ctl_io.h:70
@ CTL_SCSI_ERROR
Definition: ctl_io.h:74
@ CTL_CMD_ABORTED
Definition: ctl_io.h:75
@ CTL_ERROR
Definition: ctl_io.h:73
@ CTL_SEL_TIMEOUT
Definition: ctl_io.h:72
@ CTL_CMD_TIMEOUT
Definition: ctl_io.h:71
@ CTL_STATUS_NONE
Definition: ctl_io.h:69

Definition at line 74 of file ctl_util.c.

Referenced by ctl_io_error_sbuf().

◆ ctl_task_table

struct ctl_task_desc ctl_task_table[]
static
Initial value:
= {
{CTL_TASK_ABORT_TASK, "Abort Task"},
{CTL_TASK_ABORT_TASK_SET, "Abort Task Set"},
{CTL_TASK_CLEAR_ACA, "Clear ACA"},
{CTL_TASK_CLEAR_TASK_SET, "Clear Task Set"},
{CTL_TASK_I_T_NEXUS_RESET, "I_T Nexus Reset"},
{CTL_TASK_LUN_RESET, "LUN Reset"},
{CTL_TASK_TARGET_RESET, "Target Reset"},
{CTL_TASK_BUS_RESET, "Bus Reset"},
{CTL_TASK_PORT_LOGIN, "Port Login"},
{CTL_TASK_PORT_LOGOUT, "Port Logout"},
{CTL_TASK_QUERY_TASK, "Query Task"},
{CTL_TASK_QUERY_TASK_SET, "Query Task Set"},
{CTL_TASK_QUERY_ASYNC_EVENT, "Query Async Event"}
}
@ CTL_TASK_LUN_RESET
Definition: ctl_io.h:348
@ CTL_TASK_QUERY_ASYNC_EVENT
Definition: ctl_io.h:355
@ CTL_TASK_BUS_RESET
Definition: ctl_io.h:350
@ CTL_TASK_QUERY_TASK_SET
Definition: ctl_io.h:354
@ CTL_TASK_PORT_LOGIN
Definition: ctl_io.h:351
@ CTL_TASK_PORT_LOGOUT
Definition: ctl_io.h:352
@ CTL_TASK_CLEAR_ACA
Definition: ctl_io.h:345
@ CTL_TASK_ABORT_TASK
Definition: ctl_io.h:343
@ CTL_TASK_CLEAR_TASK_SET
Definition: ctl_io.h:346
@ CTL_TASK_TARGET_RESET
Definition: ctl_io.h:349
@ CTL_TASK_ABORT_TASK_SET
Definition: ctl_io.h:344
@ CTL_TASK_QUERY_TASK
Definition: ctl_io.h:353
@ CTL_TASK_I_T_NEXUS_RESET
Definition: ctl_io.h:347

Definition at line 84 of file ctl_util.c.

Referenced by ctl_scsi_task_string().