FreeBSD kernel CAM code
scsi_da.c File Reference
#include <sys/cdefs.h>
#include <sys/param.h>
#include "opt_da.h"
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/bio.h>
#include <sys/sysctl.h>
#include <sys/taskqueue.h>
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/conf.h>
#include <sys/devicestat.h>
#include <sys/eventhandler.h>
#include <sys/malloc.h>
#include <sys/cons.h>
#include <sys/endian.h>
#include <sys/proc.h>
#include <sys/reboot.h>
#include <sys/sbuf.h>
#include <geom/geom.h>
#include <geom/geom_disk.h>
#include <machine/atomic.h>
#include <cam/cam.h>
#include <cam/cam_ccb.h>
#include <cam/cam_periph.h>
#include <cam/cam_xpt_periph.h>
#include <cam/cam_xpt_internal.h>
#include <cam/cam_sim.h>
#include <cam/cam_iosched.h>
#include <cam/scsi/scsi_message.h>
#include <cam/scsi/scsi_da.h>
Include dependency graph for scsi_da.c:

Go to the source code of this file.

Data Structures

struct  da_zone_desc
 
struct  disk_params
 
struct  da_softc
 
struct  da_quirk_entry
 

Macros

#define DA_FLAG_STRING
 
#define DA_Q_BIT_STRING
 
#define ccb_state   ppriv_field0
 
#define ccb_bp   ppriv_ptr1
 
#define UNMAP_RANGE_MAX   0xffffffff
 
#define UNMAP_HEAD_SIZE   8
 
#define UNMAP_RANGE_SIZE   16
 
#define UNMAP_MAX_RANGES   2048 /* Protocol Max is 4095 */
 
#define UNMAP_BUF_SIZE
 
#define WS10_MAX_BLKS   0xffff
 
#define WS16_MAX_BLKS   0xffffffff
 
#define ATA_TRIM_MAX_RANGES
 
#define DA_WORK_TUR   (1 << 16)
 
#define DA_ANNOUNCETMP_SZ   160
 
#define DA_ANNOUNCE_SZ   400
 
#define dadeleteflag(softc, delete_method, enable)
 
#define DA_DEFAULT_POLL_PERIOD   3
 
#define DA_DEFAULT_TIMEOUT   60 /* Timeout in seconds */
 
#define DA_DEFAULT_SOFTTIMEOUT   0
 
#define DA_DEFAULT_RETRY   4
 
#define DA_DEFAULT_SEND_ORDERED   1
 
#define DA_ORDEREDTAG_INTERVAL   4
 
#define da_periph_hold(periph, prio, token)   cam_periph_hold((periph), (prio))
 
#define da_periph_unhold(periph, token)   cam_periph_unhold((periph))
 
#define da_periph_acquire(periph, token)   cam_periph_acquire((periph))
 
#define da_periph_release(periph, token)   cam_periph_release((periph))
 
#define da_periph_release_locked(periph, token)   cam_periph_release_locked((periph))
 

Typedefs

typedef void da_delete_func_t(struct cam_periph *periph, union ccb *ccb, struct bio *bp)
 

Enumerations

enum  da_state {
  DA_STATE_PROBE_WP , DA_STATE_PROBE_RC , DA_STATE_PROBE_RC16 , DA_STATE_PROBE_LBP ,
  DA_STATE_PROBE_BLK_LIMITS , DA_STATE_PROBE_BDC , DA_STATE_PROBE_ATA , DA_STATE_PROBE_ATA_LOGDIR ,
  DA_STATE_PROBE_ATA_IDDIR , DA_STATE_PROBE_ATA_SUP , DA_STATE_PROBE_ATA_ZONE , DA_STATE_PROBE_ZONE ,
  DA_STATE_NORMAL
}
 
enum  da_flags {
  DA_FLAG_PACK_INVALID = 0x000001 , DA_FLAG_NEW_PACK = 0x000002 , DA_FLAG_PACK_LOCKED = 0x000004 , DA_FLAG_PACK_REMOVABLE = 0x000008 ,
  DA_FLAG_ROTATING = 0x000010 , DA_FLAG_NEED_OTAG = 0x000020 , DA_FLAG_WAS_OTAG = 0x000040 , DA_FLAG_RETRY_UA = 0x000080 ,
  DA_FLAG_OPEN = 0x000100 , DA_FLAG_SCTX_INIT = 0x000200 , DA_FLAG_CAN_RC16 = 0x000400 , DA_FLAG_PROBED = 0x000800 ,
  DA_FLAG_DIRTY = 0x001000 , DA_FLAG_ANNOUNCED = 0x002000 , DA_FLAG_CAN_ATA_DMA = 0x004000 , DA_FLAG_CAN_ATA_LOG = 0x008000 ,
  DA_FLAG_CAN_ATA_IDLOG = 0x010000 , DA_FLAG_CAN_ATA_SUPCAP = 0x020000 , DA_FLAG_CAN_ATA_ZONE = 0x040000 , DA_FLAG_TUR_PENDING = 0x080000 ,
  DA_FLAG_UNMAPPEDIO = 0x100000
}
 
enum  da_quirks {
  DA_Q_NONE = 0x00 , DA_Q_NO_SYNC_CACHE = 0x01 , DA_Q_NO_6_BYTE = 0x02 , DA_Q_NO_PREVENT = 0x04 ,
  DA_Q_4K = 0x08 , DA_Q_NO_RC16 = 0x10 , DA_Q_NO_UNMAP = 0x20 , DA_Q_RETRY_BUSY = 0x40 ,
  DA_Q_SMR_DM = 0x80 , DA_Q_STRICT_UNMAP = 0x100 , DA_Q_128KB = 0x200
}
 
enum  da_ccb_state {
  DA_CCB_PROBE_RC = 0x01 , DA_CCB_PROBE_RC16 = 0x02 , DA_CCB_PROBE_LBP = 0x03 , DA_CCB_PROBE_BLK_LIMITS = 0x04 ,
  DA_CCB_PROBE_BDC = 0x05 , DA_CCB_PROBE_ATA = 0x06 , DA_CCB_BUFFER_IO = 0x07 , DA_CCB_DUMP = 0x0A ,
  DA_CCB_DELETE = 0x0B , DA_CCB_TUR = 0x0C , DA_CCB_PROBE_ZONE = 0x0D , DA_CCB_PROBE_ATA_LOGDIR = 0x0E ,
  DA_CCB_PROBE_ATA_IDDIR = 0x0F , DA_CCB_PROBE_ATA_SUP = 0x10 , DA_CCB_PROBE_ATA_ZONE = 0x11 , DA_CCB_PROBE_WP = 0x12 ,
  DA_CCB_TYPE_MASK = 0x1F , DA_CCB_RETRY_UA = 0x20
}
 
enum  da_delete_methods {
  DA_DELETE_NONE , DA_DELETE_DISABLE , DA_DELETE_ATA_TRIM , DA_DELETE_UNMAP ,
  DA_DELETE_WS16 , DA_DELETE_WS10 , DA_DELETE_ZERO , DA_DELETE_MIN = DA_DELETE_ATA_TRIM ,
  DA_DELETE_MAX = DA_DELETE_ZERO
}
 
enum  da_zone_mode { DA_ZONE_NONE = 0x00 , DA_ZONE_DRIVE_MANAGED = 0x01 , DA_ZONE_HOST_AWARE = 0x02 , DA_ZONE_HOST_MANAGED = 0x03 }
 
enum  da_zone_interface { DA_ZONE_IF_SCSI , DA_ZONE_IF_ATA_PASS , DA_ZONE_IF_ATA_SAT }
 
enum  da_zone_flags {
  DA_ZONE_FLAG_RZ_SUP = 0x0001 , DA_ZONE_FLAG_OPEN_SUP = 0x0002 , DA_ZONE_FLAG_CLOSE_SUP = 0x0004 , DA_ZONE_FLAG_FINISH_SUP = 0x0008 ,
  DA_ZONE_FLAG_RWP_SUP = 0x0010 , DA_ZONE_FLAG_SUP_MASK , DA_ZONE_FLAG_URSWRZ = 0x0020 , DA_ZONE_FLAG_OPT_SEQ_SET = 0x0040 ,
  DA_ZONE_FLAG_OPT_NONSEQ_SET = 0x0080 , DA_ZONE_FLAG_MAX_SEQ_SET = 0x0100 , DA_ZONE_FLAG_SET_MASK
}
 
enum  da_ref_token {
  DA_REF_OPEN = 1 , DA_REF_OPEN_HOLD , DA_REF_CLOSE_HOLD , DA_REF_PROBE_HOLD ,
  DA_REF_TUR , DA_REF_GEOM , DA_REF_SYSCTL , DA_REF_REPROBE ,
  DA_REF_MAX
}
 

Functions

 __FBSDID ("$FreeBSD$")
 
static void daasync (void *callback_arg, u_int32_t code, struct cam_path *path, void *arg)
 
static void dasysctlinit (void *context, int pending)
 
static int dasysctlsofttimeout (SYSCTL_HANDLER_ARGS)
 
static int dacmdsizesysctl (SYSCTL_HANDLER_ARGS)
 
static int dadeletemethodsysctl (SYSCTL_HANDLER_ARGS)
 
static int dabitsysctl (SYSCTL_HANDLER_ARGS)
 
static int daflagssysctl (SYSCTL_HANDLER_ARGS)
 
static int dazonemodesysctl (SYSCTL_HANDLER_ARGS)
 
static int dazonesupsysctl (SYSCTL_HANDLER_ARGS)
 
static int dadeletemaxsysctl (SYSCTL_HANDLER_ARGS)
 
static void dadeletemethodset (struct da_softc *softc, da_delete_methods delete_method)
 
static off_t dadeletemaxsize (struct da_softc *softc, da_delete_methods delete_method)
 
static void dadeletemethodchoose (struct da_softc *softc, da_delete_methods default_method)
 
static void daprobedone (struct cam_periph *periph, union ccb *ccb)
 
static void dazonedone (struct cam_periph *periph, union ccb *ccb)
 
static void dadone (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probewp (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_proberc (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probelbp (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probeblklimits (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probebdc (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probeata (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probeatalogdir (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probeataiddir (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probeatasup (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probeatazone (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_probezone (struct cam_periph *periph, union ccb *done_ccb)
 
static void dadone_tur (struct cam_periph *periph, union ccb *done_ccb)
 
static int daerror (union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags)
 
static void daprevent (struct cam_periph *periph, int action)
 
static void dareprobe (struct cam_periph *periph)
 
static void dasetgeom (struct cam_periph *periph, uint32_t block_len, uint64_t maxsector, struct scsi_read_capacity_data_long *rcaplong, size_t rcap_size)
 
static void dashutdown (void *arg, int howto)
 
static SYSCTL_NODE (_kern_cam, OID_AUTO, da, CTLFLAG_RD|CTLFLAG_MPSAFE, 0, "CAM Direct Access Disk driver")
 
 SYSCTL_INT (_kern_cam_da, OID_AUTO, poll_period, CTLFLAG_RWTUN, &da_poll_period, 0, "Media polling period in seconds")
 
 SYSCTL_INT (_kern_cam_da, OID_AUTO, retry_count, CTLFLAG_RWTUN, &da_retry_count, 0, "Normal I/O retry count")
 
 SYSCTL_INT (_kern_cam_da, OID_AUTO, default_timeout, CTLFLAG_RWTUN, &da_default_timeout, 0, "Normal I/O timeout (in seconds)")
 
 SYSCTL_INT (_kern_cam_da, OID_AUTO, send_ordered, CTLFLAG_RWTUN, &da_send_ordered, 0, "Send Ordered Tags")
 
 SYSCTL_INT (_kern_cam_da, OID_AUTO, disable_wp_detection, CTLFLAG_RWTUN, &da_disable_wp_detection, 0, "Disable detection of write-protected disks")
 
 SYSCTL_INT (_kern_cam_da, OID_AUTO, enable_biospeedup, CTLFLAG_RDTUN, &da_enable_biospeedup, 0, "Enable BIO_SPEEDUP processing")
 
 SYSCTL_INT (_kern_cam_da, OID_AUTO, enable_uma_ccbs, CTLFLAG_RWTUN, &da_enable_uma_ccbs, 0, "Use UMA for CCBs")
 
 SYSCTL_PROC (_kern_cam_da, OID_AUTO, default_softtimeout, CTLTYPE_UINT|CTLFLAG_RW|CTLFLAG_MPSAFE, NULL, 0, dasysctlsofttimeout, "I", "Soft I/O timeout (ms)")
 
 TUNABLE_INT64 ("kern.cam.da.default_softtimeout", &da_default_softtimeout)
 
 PERIPHDRIVER_DECLARE (da, dadriver)
 
static MALLOC_DEFINE (M_SCSIDA, "scsi_da", "scsi_da buffers")
 
static int daopen (struct disk *dp)
 
static int daclose (struct disk *dp)
 
static void daschedule (struct cam_periph *periph)
 
static void dastrategy (struct bio *bp)
 
static int dadump (void *arg, void *virtual, vm_offset_t physical, off_t offset, size_t length)
 
static int dagetattr (struct bio *bp)
 
static void dadiskgonecb (struct disk *dp)
 
static void daoninvalidate (struct cam_periph *periph)
 
static void dacleanup (struct cam_periph *periph)
 
static cam_status daregister (struct cam_periph *periph, void *arg)
 
static int da_zone_bio_to_scsi (int disk_zone_cmd)
 
static int da_zone_cmd (struct cam_periph *periph, union ccb *ccb, struct bio *bp, int *queue_ccb)
 
static void dastart (struct cam_periph *periph, union ccb *start_ccb)
 
static void da_delete_unmap (struct cam_periph *periph, union ccb *ccb, struct bio *bp)
 
static void da_delete_trim (struct cam_periph *periph, union ccb *ccb, struct bio *bp)
 
static void da_delete_ws (struct cam_periph *periph, union ccb *ccb, struct bio *bp)
 
static int cmd6workaround (union ccb *ccb)
 
static void damediapoll (void *arg)
 
static void dasendorderedtag (void *arg)
 
void scsi_zbc_out (struct ccb_scsiio *csio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), uint8_t tag_action, uint8_t service_action, uint64_t zone_id, uint8_t zone_flags, uint8_t *data_ptr, uint32_t dxfer_len, uint8_t sense_len, uint32_t timeout)
 
void scsi_zbc_in (struct ccb_scsiio *csio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), uint8_t tag_action, uint8_t service_action, uint64_t zone_start_lba, uint8_t zone_options, uint8_t *data_ptr, uint32_t dxfer_len, uint8_t sense_len, uint32_t timeout)
 
int scsi_ata_zac_mgmt_out (struct ccb_scsiio *csio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), uint8_t tag_action, int use_ncq, uint8_t zm_action, uint64_t zone_id, uint8_t zone_flags, uint8_t *data_ptr, uint32_t dxfer_len, uint8_t *cdb_storage, size_t cdb_storage_len, uint8_t sense_len, uint32_t timeout)
 
int scsi_ata_zac_mgmt_in (struct ccb_scsiio *csio, uint32_t retries, void(*cbfcnp)(struct cam_periph *, union ccb *), uint8_t tag_action, int use_ncq, uint8_t zm_action, uint64_t zone_id, uint8_t zone_flags, uint8_t *data_ptr, uint32_t dxfer_len, uint8_t *cdb_storage, size_t cdb_storage_len, uint8_t sense_len, uint32_t timeout)
 

Variables

static struct da_zone_desc da_zone_desc_table []
 
static da_delete_func_t da_delete_trim
 
static da_delete_func_t da_delete_unmap
 
static da_delete_func_t da_delete_ws
 
static const void * da_delete_functions []
 
static const char * da_delete_method_names []
 
static const char * da_delete_method_desc []
 
static uma_zone_t da_ccb_zone
 
static const char quantum [] = "QUANTUM"
 
static const char microp [] = "MICROP"
 
static struct da_quirk_entry da_quirk_table []
 
static disk_strategy_t dastrategy
 
static dumper_t dadump
 
static periph_init_t dainit
 
static periph_ctor_t daregister
 
static periph_dtor_t dacleanup
 
static periph_start_t dastart
 
static periph_oninv_t daoninvalidate
 
static callout_func_t dasendorderedtag
 
static callout_func_t damediapoll
 
static int da_poll_period = DA_DEFAULT_POLL_PERIOD
 
static int da_retry_count = DA_DEFAULT_RETRY
 
static int da_default_timeout = DA_DEFAULT_TIMEOUT
 
static sbintime_t da_default_softtimeout = DA_DEFAULT_SOFTTIMEOUT
 
static int da_send_ordered = DA_DEFAULT_SEND_ORDERED
 
static int da_disable_wp_detection = 0
 
static int da_enable_biospeedup = 1
 
static int da_enable_uma_ccbs = 1
 
static struct periph_driver dadriver
 

Macro Definition Documentation

◆ ATA_TRIM_MAX_RANGES

#define ATA_TRIM_MAX_RANGES
Value:
(ATA_DSM_RANGE_SIZE * ATA_DSM_BLK_SIZE)) * ATA_DSM_BLK_SIZE)
#define UNMAP_BUF_SIZE
Definition: scsi_da.c:318

Definition at line 323 of file scsi_da.c.

◆ ccb_bp

#define ccb_bp   ppriv_ptr1

Definition at line 302 of file scsi_da.c.

◆ ccb_state

#define ccb_state   ppriv_field0

Definition at line 301 of file scsi_da.c.

◆ DA_ANNOUNCE_SZ

#define DA_ANNOUNCE_SZ   400

◆ DA_ANNOUNCETMP_SZ

#define DA_ANNOUNCETMP_SZ   160

◆ DA_DEFAULT_POLL_PERIOD

#define DA_DEFAULT_POLL_PERIOD   3

Definition at line 1537 of file scsi_da.c.

◆ DA_DEFAULT_RETRY

#define DA_DEFAULT_RETRY   4

Definition at line 1549 of file scsi_da.c.

◆ DA_DEFAULT_SEND_ORDERED

#define DA_DEFAULT_SEND_ORDERED   1

Definition at line 1553 of file scsi_da.c.

◆ DA_DEFAULT_SOFTTIMEOUT

#define DA_DEFAULT_SOFTTIMEOUT   0

Definition at line 1545 of file scsi_da.c.

◆ DA_DEFAULT_TIMEOUT

#define DA_DEFAULT_TIMEOUT   60 /* Timeout in seconds */

Definition at line 1541 of file scsi_da.c.

◆ DA_FLAG_STRING

#define DA_FLAG_STRING
Value:
"\020" \
"\001PACK_INVALID" \
"\002NEW_PACK" \
"\003PACK_LOCKED" \
"\004PACK_REMOVABLE" \
"\005ROTATING" \
"\006NEED_OTAG" \
"\007WAS_OTAG" \
"\010RETRY_UA" \
"\011OPEN" \
"\012SCTX_INIT" \
"\013CAN_RC16" \
"\014PROBED" \
"\015DIRTY" \
"\016ANNOUCNED" \
"\017CAN_ATA_DMA" \
"\020CAN_ATA_LOG" \
"\021CAN_ATA_IDLOG" \
"\022CAN_ATA_SUPACP" \
"\023CAN_ATA_ZONE" \
"\024TUR_PENDING" \
"\025UNMAPPEDIO"

Definition at line 128 of file scsi_da.c.

◆ DA_ORDEREDTAG_INTERVAL

#define DA_ORDEREDTAG_INTERVAL   4

Definition at line 1602 of file scsi_da.c.

◆ da_periph_acquire

#define da_periph_acquire (   periph,
  token 
)    cam_periph_acquire((periph))

Definition at line 1746 of file scsi_da.c.

◆ da_periph_hold

#define da_periph_hold (   periph,
  prio,
  token 
)    cam_periph_hold((periph), (prio))

Definition at line 1744 of file scsi_da.c.

◆ da_periph_release

#define da_periph_release (   periph,
  token 
)    cam_periph_release((periph))

Definition at line 1747 of file scsi_da.c.

◆ da_periph_release_locked

#define da_periph_release_locked (   periph,
  token 
)    cam_periph_release_locked((periph))

Definition at line 1748 of file scsi_da.c.

◆ da_periph_unhold

#define da_periph_unhold (   periph,
  token 
)    cam_periph_unhold((periph))

Definition at line 1745 of file scsi_da.c.

◆ DA_Q_BIT_STRING

#define DA_Q_BIT_STRING
Value:
"\020" \
"\001NO_SYNC_CACHE" \
"\002NO_6_BYTE" \
"\003NO_PREVENT" \
"\0044K" \
"\005NO_RC16" \
"\006NO_UNMAP" \
"\007RETRY_BUSY" \
"\010SMR_DM" \
"\011STRICT_UNMAP" \
"\012128KB"

Definition at line 166 of file scsi_da.c.

◆ DA_WORK_TUR

#define DA_WORK_TUR   (1 << 16)

Definition at line 326 of file scsi_da.c.

◆ dadeleteflag

#define dadeleteflag (   softc,
  delete_method,
  enable 
)
Value:
if (enable) { \
softc->delete_available |= (1 << delete_method); \
} else { \
softc->delete_available &= ~(1 << delete_method); \
}

Definition at line 400 of file scsi_da.c.

◆ UNMAP_BUF_SIZE

#define UNMAP_BUF_SIZE
Value:
#define UNMAP_RANGE_SIZE
Definition: scsi_da.c:316
#define UNMAP_HEAD_SIZE
Definition: scsi_da.c:315
#define UNMAP_MAX_RANGES
Definition: scsi_da.c:317

Definition at line 318 of file scsi_da.c.

◆ UNMAP_HEAD_SIZE

#define UNMAP_HEAD_SIZE   8

Definition at line 315 of file scsi_da.c.

◆ UNMAP_MAX_RANGES

#define UNMAP_MAX_RANGES   2048 /* Protocol Max is 4095 */

Definition at line 317 of file scsi_da.c.

◆ UNMAP_RANGE_MAX

#define UNMAP_RANGE_MAX   0xffffffff

Definition at line 314 of file scsi_da.c.

◆ UNMAP_RANGE_SIZE

#define UNMAP_RANGE_SIZE   16

Definition at line 316 of file scsi_da.c.

◆ WS10_MAX_BLKS

#define WS10_MAX_BLKS   0xffff

Definition at line 321 of file scsi_da.c.

◆ WS16_MAX_BLKS

#define WS16_MAX_BLKS   0xffffffff

Definition at line 322 of file scsi_da.c.

Typedef Documentation

◆ da_delete_func_t

typedef void da_delete_func_t(struct cam_periph *periph, union ccb *ccb, struct bio *bp)

Definition at line 278 of file scsi_da.c.

Enumeration Type Documentation

◆ da_ccb_state

Enumerator
DA_CCB_PROBE_RC 
DA_CCB_PROBE_RC16 
DA_CCB_PROBE_LBP 
DA_CCB_PROBE_BLK_LIMITS 
DA_CCB_PROBE_BDC 
DA_CCB_PROBE_ATA 
DA_CCB_BUFFER_IO 
DA_CCB_DUMP 
DA_CCB_DELETE 
DA_CCB_TUR 
DA_CCB_PROBE_ZONE 
DA_CCB_PROBE_ATA_LOGDIR 
DA_CCB_PROBE_ATA_IDDIR 
DA_CCB_PROBE_ATA_SUP 
DA_CCB_PROBE_ATA_ZONE 
DA_CCB_PROBE_WP 
DA_CCB_TYPE_MASK 
DA_CCB_RETRY_UA 

Definition at line 179 of file scsi_da.c.

◆ da_delete_methods

Enumerator
DA_DELETE_NONE 
DA_DELETE_DISABLE 
DA_DELETE_ATA_TRIM 
DA_DELETE_UNMAP 
DA_DELETE_WS16 
DA_DELETE_WS10 
DA_DELETE_ZERO 
DA_DELETE_MIN 
DA_DELETE_MAX 

Definition at line 209 of file scsi_da.c.

◆ da_flags

enum da_flags
Enumerator
DA_FLAG_PACK_INVALID 
DA_FLAG_NEW_PACK 
DA_FLAG_PACK_LOCKED 
DA_FLAG_PACK_REMOVABLE 
DA_FLAG_ROTATING 
DA_FLAG_NEED_OTAG 
DA_FLAG_WAS_OTAG 
DA_FLAG_RETRY_UA 
DA_FLAG_OPEN 
DA_FLAG_SCTX_INIT 
DA_FLAG_CAN_RC16 
DA_FLAG_PROBED 
DA_FLAG_DIRTY 
DA_FLAG_ANNOUNCED 
DA_FLAG_CAN_ATA_DMA 
DA_FLAG_CAN_ATA_LOG 
DA_FLAG_CAN_ATA_IDLOG 
DA_FLAG_CAN_ATA_SUPCAP 
DA_FLAG_CAN_ATA_ZONE 
DA_FLAG_TUR_PENDING 
DA_FLAG_UNMAPPEDIO 

Definition at line 105 of file scsi_da.c.

◆ da_quirks

enum da_quirks
Enumerator
DA_Q_NONE 
DA_Q_NO_SYNC_CACHE 
DA_Q_NO_6_BYTE 
DA_Q_NO_PREVENT 
DA_Q_4K 
DA_Q_NO_RC16 
DA_Q_NO_UNMAP 
DA_Q_RETRY_BUSY 
DA_Q_SMR_DM 
DA_Q_STRICT_UNMAP 
DA_Q_128KB 

Definition at line 152 of file scsi_da.c.

◆ da_ref_token

Enumerator
DA_REF_OPEN 
DA_REF_OPEN_HOLD 
DA_REF_CLOSE_HOLD 
DA_REF_PROBE_HOLD 
DA_REF_TUR 
DA_REF_GEOM 
DA_REF_SYSCTL 
DA_REF_REPROBE 
DA_REF_MAX 

Definition at line 328 of file scsi_da.c.

◆ da_state

enum da_state
Enumerator
DA_STATE_PROBE_WP 
DA_STATE_PROBE_RC 
DA_STATE_PROBE_RC16 
DA_STATE_PROBE_LBP 
DA_STATE_PROBE_BLK_LIMITS 
DA_STATE_PROBE_BDC 
DA_STATE_PROBE_ATA 
DA_STATE_PROBE_ATA_LOGDIR 
DA_STATE_PROBE_ATA_IDDIR 
DA_STATE_PROBE_ATA_SUP 
DA_STATE_PROBE_ATA_ZONE 
DA_STATE_PROBE_ZONE 
DA_STATE_NORMAL 

Definition at line 89 of file scsi_da.c.

◆ da_zone_flags

Enumerator
DA_ZONE_FLAG_RZ_SUP 
DA_ZONE_FLAG_OPEN_SUP 
DA_ZONE_FLAG_CLOSE_SUP 
DA_ZONE_FLAG_FINISH_SUP 
DA_ZONE_FLAG_RWP_SUP 
DA_ZONE_FLAG_SUP_MASK 
DA_ZONE_FLAG_URSWRZ 
DA_ZONE_FLAG_OPT_SEQ_SET 
DA_ZONE_FLAG_OPT_NONSEQ_SET 
DA_ZONE_FLAG_MAX_SEQ_SET 
DA_ZONE_FLAG_SET_MASK 

Definition at line 247 of file scsi_da.c.

◆ da_zone_interface

Enumerator
DA_ZONE_IF_SCSI 
DA_ZONE_IF_ATA_PASS 
DA_ZONE_IF_ATA_SAT 

Definition at line 241 of file scsi_da.c.

◆ da_zone_mode

Enumerator
DA_ZONE_NONE 
DA_ZONE_DRIVE_MANAGED 
DA_ZONE_HOST_AWARE 
DA_ZONE_HOST_MANAGED 

Definition at line 226 of file scsi_da.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ cmd6workaround()

◆ da_delete_trim()

◆ da_delete_unmap()

◆ da_delete_ws()

static void da_delete_ws ( struct cam_periph periph,
union ccb ccb,
struct bio *  bp 
)
static

◆ da_zone_bio_to_scsi()

static int da_zone_bio_to_scsi ( int  disk_zone_cmd)
static

Definition at line 3021 of file scsi_da.c.

References ZBC_OUT_SA_CLOSE, ZBC_OUT_SA_FINISH, ZBC_OUT_SA_OPEN, and ZBC_OUT_SA_RWP.

Referenced by da_zone_cmd().

Here is the caller graph for this function:

◆ da_zone_cmd()

◆ daasync()

◆ dabitsysctl()

static int dabitsysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2637 of file scsi_da.c.

Referenced by dasysctlinit().

Here is the caller graph for this function:

◆ dacleanup()

static void dacleanup ( struct cam_periph periph)
static

Definition at line 2072 of file scsi_da.c.

References da_softc::cam_iosched, cam_iosched_fini(), cam_periph_lock, cam_periph_unlock, DA_FLAG_SCTX_INIT, cam_periph::path, cam_periph::softc, and xpt_print().

Here is the call graph for this function:

◆ daclose()

◆ dacmdsizesysctl()

static int dacmdsizesysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2458 of file scsi_da.c.

Referenced by dasysctlinit().

Here is the caller graph for this function:

◆ dadeletemaxsize()

static off_t dadeletemaxsize ( struct da_softc softc,
da_delete_methods  delete_method 
)
static

Definition at line 2524 of file scsi_da.c.

References DA_DELETE_ATA_TRIM, DA_DELETE_UNMAP, DA_DELETE_WS10, DA_DELETE_WS16, DA_DELETE_ZERO, WS10_MAX_BLKS, and WS16_MAX_BLKS.

Referenced by dadeletemaxsysctl(), and dadeletemethodset().

Here is the caller graph for this function:

◆ dadeletemaxsysctl()

static int dadeletemaxsysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2435 of file scsi_da.c.

References dadeletemaxsize().

Referenced by dasysctlinit().

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

◆ dadeletemethodchoose()

static void dadeletemethodchoose ( struct da_softc softc,
da_delete_methods  default_method 
)
static

Definition at line 2610 of file scsi_da.c.

References DA_DELETE_DISABLE, DA_DELETE_MAX, DA_DELETE_MIN, DA_DELETE_ZERO, and dadeletemethodset().

Referenced by cmd6workaround(), dadeletemethodsysctl(), and daprobedone().

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

◆ dadeletemethodset()

static void dadeletemethodset ( struct da_softc softc,
da_delete_methods  delete_method 
)
static

Definition at line 2510 of file scsi_da.c.

References DA_DELETE_DISABLE, da_delete_functions, and dadeletemaxsize().

Referenced by dadeletemethodchoose().

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

◆ dadeletemethodsysctl()

static int dadeletemethodsysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2670 of file scsi_da.c.

References DA_DELETE_MAX, da_delete_method_names, DA_DELETE_NONE, and dadeletemethodchoose().

Referenced by dasysctlinit().

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

◆ dadiskgonecb()

static void dadiskgonecb ( struct disk *  dp)
static

Definition at line 2031 of file scsi_da.c.

References da_periph_release, and DA_REF_GEOM.

Referenced by daregister().

Here is the caller graph for this function:

◆ dadone()

◆ dadone_probeata()

◆ dadone_probeataiddir()

◆ dadone_probeatalogdir()

◆ dadone_probeatasup()

◆ dadone_probeatazone()

◆ dadone_probebdc()

◆ dadone_probeblklimits()

◆ dadone_probelbp()

◆ dadone_proberc()

static void dadone_proberc ( struct cam_periph periph,
union ccb done_ccb 
)
static

Definition at line 4770 of file scsi_da.c.

References scsi_read_capacity_data::addr, scsi_read_capacity_data_long::addr, CAM_DEBUG, CAM_DEBUG_TRACE, CAM_DEV_QFRZN, cam_periph_assert, cam_periph_invalidate(), CAM_PRIORITY_NORMAL, cam_release_devq(), CAM_REQ_CMP, CAM_REQ_INVALID, CAM_RETRY_SELTO, CAM_STATUS_MASK, ccb_getdev::ccb_h, ccb_scsiio::ccb_h, ccb::ccb_h, ccb::csio, DA_ANNOUNCE_SZ, DA_ANNOUNCETMP_SZ, DA_CCB_PROBE_RC, DA_CCB_PROBE_RC16, DA_CCB_TYPE_MASK, DA_DELETE_UNMAP, DA_DELETE_WS10, DA_DELETE_WS16, DA_DELETE_ZERO, DA_FLAG_ANNOUNCED, DA_FLAG_CAN_RC16, DA_FLAG_PROBED, da_periph_acquire, DA_Q_BIT_STRING, DA_Q_NO_UNMAP, DA_REF_SYSCTL, DA_STATE_PROBE_BDC, DA_STATE_PROBE_LBP, DA_STATE_PROBE_RC, DA_STATE_PROBE_RC16, dadeleteflag, daerror(), daprobedone(), dasetgeom(), ccb_scsiio::data_ptr, ccb_hdr::func_code, ccb_getdev::inq_data, scsi_read_capacity_data_long::lalba_lbp, scsi_read_capacity_data::length, scsi_read_capacity_data_long::length, ccb_hdr::path, cam_periph::path, ccb_hdr::pinfo, cam_pinfo::priority, ccb_scsiio::priority, scsi_2btoul(), scsi_4btoul(), scsi_8btou64(), scsi_extract_sense_ccb(), scsi_sense_desc(), scsi_sense_print(), disk_params::secsize, disk_params::sectors, SF_NO_PRINT, SF_RETRY_UA, cam_periph::softc, SRC16_LBPME_A, SSD_CURRENT_ERROR, SSD_DESC_CURRENT_ERROR, SSD_KEY_ILLEGAL_REQUEST, ccb_hdr::status, xpt_action(), xpt_announce_periph_sbuf(), xpt_announce_quirks_sbuf(), XPT_GDEV_TYPE, xpt_print(), xpt_release_ccb(), xpt_schedule(), and xpt_setup_ccb().

Referenced by dastart().

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

◆ dadone_probewp()

◆ dadone_probezone()

◆ dadone_tur()

static void dadone_tur ( struct cam_periph periph,
union ccb done_ccb 
)
static

◆ dadump()

static int dadump ( void *  arg,
void *  virtual,
vm_offset_t  physical,
off_t  offset,
size_t  length 
)
static

◆ daerror()

◆ daflagssysctl()

static int daflagssysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2652 of file scsi_da.c.

References DA_FLAG_STRING.

Referenced by dasysctlinit().

Here is the caller graph for this function:

◆ dagetattr()

static int dagetattr ( struct bio *  bp)
static

Definition at line 1982 of file scsi_da.c.

References cam_periph_lock, cam_periph_unlock, da_enable_biospeedup, cam_periph::path, and xpt_getattr().

Referenced by daregister().

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

◆ damediapoll()

static void damediapoll ( void *  arg)
static

◆ daoninvalidate()

static void daoninvalidate ( struct cam_periph periph)
static

Definition at line 2040 of file scsi_da.c.

References da_softc::cam_iosched, cam_iosched_flush(), cam_periph_assert, DA_FLAG_PACK_INVALID, daasync(), cam_periph::path, cam_periph::softc, and xpt_register_async().

Here is the call graph for this function:

◆ daopen()

◆ daprevent()

static void daprevent ( struct cam_periph periph,
int  action 
)
static

Definition at line 6067 of file scsi_da.c.

References cam_periph_assert, cam_periph_getccb(), cam_periph_runccb(), CAM_PRIORITY_NORMAL, CAM_RETRY_SELTO, ccb, ccb::csio, DA_FLAG_PACK_LOCKED, daerror(), MSG_SIMPLE_Q_TAG, PR_ALLOW, PR_PREVENT, scsi_prevent(), SF_NO_PRINT, SF_RETRY_UA, cam_periph::softc, SSD_FULL_SIZE, and xpt_release_ccb().

Referenced by daclose(), and daopen().

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

◆ daprobedone()

◆ daregister()

static cam_status daregister ( struct cam_periph periph,
void *  arg 
)
static

Definition at line 2766 of file scsi_da.c.

References AC_ADVINFO_CHANGED, AC_BUS_RESET, AC_INQ_CHANGED, AC_LOST_DEVICE, AC_SCSI_AEN, AC_SENT_BDR, AC_UNIT_ATTENTION, ATA_TRIM_MAX_RANGES, da_softc::cam_iosched, cam_iosched_init(), cam_periph_lock, cam_periph_mtx(), cam_periph_unlock, CAM_PRIORITY_DEV, cam_quirkmatch(), CAM_REQ_CMP, CAM_REQ_CMP_ERR, cam_sim_pollable(), cam_strvis(), ccb_pathinq::ccb_h, cam_periph::ccb_zone, da_ccb_zone, da_default_timeout, da_enable_uma_ccbs, DA_FLAG_CAN_RC16, DA_FLAG_PACK_REMOVABLE, DA_FLAG_ROTATING, DA_FLAG_UNMAPPEDIO, DA_ORDEREDTAG_INTERVAL, da_periph_acquire, da_periph_hold, da_poll_period, DA_Q_128KB, DA_Q_NO_6_BYTE, DA_Q_NO_RC16, DA_Q_NO_SYNC_CACHE, DA_Q_NONE, DA_Q_SMR_DM, da_quirk_table, DA_REF_GEOM, DA_REF_PROBE_HOLD, DA_STATE_PROBE_WP, DA_ZONE_DRIVE_MANAGED, DA_ZONE_HOST_MANAGED, DA_ZONE_IF_ATA_PASS, DA_ZONE_IF_ATA_SAT, DA_ZONE_IF_SCSI, DA_ZONE_NONE, daasync(), daclose(), dadiskgonecb(), dadump, dagetattr(), damediapoll, daopen(), dasendorderedtag, dastrategy, dasysctlinit(), da_softc::delete_run_queue, ccb_pathinq::dev_name, ccb_pathinq::hba_device, ccb_pathinq::hba_misc, ccb_pathinq::hba_subdevice, ccb_pathinq::hba_subvendor, ccb_pathinq::hba_vendor, ccb_getdev::inq_data, ccb_getdev::inq_flags, ccb_pathinq::maxio, cam_periph::path, cam_periph::periph_name, PIM_NO_6_BYTE, PIM_UNMAPPED, scsi_inquiry_data::product, da_quirk_entry::quirks, scsi_inquiry_match(), SCSI_REV_SPC3, scsi_vpd_supported_page(), SID_AEN, SID_ANSI_REV, SID_IS_REMOVABLE, SID_TYPE, cam_periph::sim, SMS_ALL_PAGES_PAGE, cam_periph::softc, ccb_hdr::status, SVPD_ATA_INFORMATION, SVPD_ZONED_BDC, T_RBC, T_ZBC_HM, ccb_pathinq::transport, ccb_pathinq::unit_number, cam_periph::unit_number, UNMAP_MAX_RANGES, UNMAP_RANGE_MAX, scsi_inquiry_data::vendor, WS16_MAX_BLKS, XPORT_DEVSTAT_TYPE, xpt_path_inq(), xpt_print(), xpt_register_async(), and xpt_schedule().

Here is the call graph for this function:

◆ dareprobe()

static void dareprobe ( struct cam_periph periph)
static

Definition at line 5935 of file scsi_da.c.

References cam_periph_assert, CAM_PRIORITY_DEV, da_periph_acquire, DA_REF_REPROBE, DA_STATE_NORMAL, DA_STATE_PROBE_WP, cam_periph::softc, and xpt_schedule().

Referenced by daasync(), daerror(), and daopen().

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

◆ daschedule()

static void daschedule ( struct cam_periph periph)
static

Definition at line 1858 of file scsi_da.c.

References da_softc::cam_iosched, cam_iosched_schedule(), DA_STATE_NORMAL, and cam_periph::softc.

Referenced by daasync(), dadone(), damediapoll(), daprobedone(), dastart(), and dastrategy().

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

◆ dasendorderedtag()

static void dasendorderedtag ( void *  arg)
static

◆ dasetgeom()

◆ dashutdown()

◆ dastart()

static void dastart ( struct cam_periph periph,
union ccb start_ccb 
)
static

Definition at line 3315 of file scsi_da.c.

References AP_PROTO_DMA, AP_PROTO_PIO_IN, CAM_DEBUG, CAM_DEBUG_TRACE, da_softc::cam_iosched, cam_iosched_clr_work_flags(), cam_iosched_has_work_flags(), cam_iosched_next_bio(), cam_periph_assert, cam_periph_lock, cam_periph_unlock, CAM_UNLOCKED, ccb::ccb_h, ccb::csio, DA_CCB_BUFFER_IO, DA_CCB_PROBE_ATA, DA_CCB_PROBE_ATA_IDDIR, DA_CCB_PROBE_ATA_LOGDIR, DA_CCB_PROBE_ATA_SUP, DA_CCB_PROBE_ATA_ZONE, DA_CCB_PROBE_BDC, DA_CCB_PROBE_BLK_LIMITS, DA_CCB_PROBE_LBP, DA_CCB_PROBE_RC, DA_CCB_PROBE_RC16, DA_CCB_PROBE_WP, DA_CCB_PROBE_ZONE, DA_CCB_RETRY_UA, DA_CCB_TUR, da_default_softtimeout, da_default_timeout, da_disable_wp_detection, DA_FLAG_CAN_ATA_DMA, DA_FLAG_CAN_ATA_IDLOG, DA_FLAG_CAN_ATA_LOG, DA_FLAG_CAN_ATA_SUPCAP, DA_FLAG_CAN_ATA_ZONE, DA_FLAG_CAN_RC16, DA_FLAG_DIRTY, DA_FLAG_NEED_OTAG, DA_FLAG_RETRY_UA, DA_FLAG_TUR_PENDING, DA_FLAG_WAS_OTAG, da_periph_release_locked, DA_Q_NO_SYNC_CACHE, DA_REF_TUR, da_retry_count, DA_STATE_NORMAL, DA_STATE_PROBE_ATA, DA_STATE_PROBE_ATA_IDDIR, DA_STATE_PROBE_ATA_LOGDIR, DA_STATE_PROBE_ATA_SUP, DA_STATE_PROBE_ATA_ZONE, DA_STATE_PROBE_BDC, DA_STATE_PROBE_BLK_LIMITS, DA_STATE_PROBE_LBP, DA_STATE_PROBE_RC, DA_STATE_PROBE_RC16, DA_STATE_PROBE_WP, DA_STATE_PROBE_ZONE, DA_WORK_TUR, da_zone_cmd(), DA_ZONE_HOST_AWARE, DA_ZONE_HOST_MANAGED, dadone(), dadone_probeata(), dadone_probeataiddir(), dadone_probeatalogdir(), dadone_probeatasup(), dadone_probeatazone(), dadone_probebdc(), dadone_probeblklimits(), dadone_probelbp(), dadone_proberc(), dadone_probewp(), dadone_probezone(), dadone_tur(), daprobedone(), daschedule(), cam_path::device, ccb_hdr::flags, cam_ed::ident_data, MSG_ORDERED_Q_TAG, MSG_SIMPLE_Q_TAG, cam_periph::path, scsi_ata_identify(), scsi_ata_read_log(), scsi_inquiry(), scsi_mode_sense_len(), scsi_read_capacity(), scsi_read_capacity_16(), scsi_read_write(), SCSI_RW_BIO, SCSI_RW_READ, SCSI_RW_WRITE, scsi_synchronize_cache(), scsi_test_unit_ready(), scsi_vpd_supported_page(), SMS_PAGE_CTRL_CURRENT, cam_periph::softc, ccb_hdr::softtimeout, SSD_FULL_SIZE, SSD_MIN_SIZE, SVPD_ATA_INFORMATION, SVPD_BDC, SVPD_BLOCK_LIMITS, SVPD_LBP, SVPD_ZONED_BDC, xpt_action(), xpt_print(), and xpt_release_ccb().

Here is the call graph for this function:

◆ dastrategy()

static void dastrategy ( struct bio *  bp)
static

Definition at line 1874 of file scsi_da.c.

References CAM_DEBUG, CAM_DEBUG_TRACE, cam_iosched_queue_work(), cam_periph_lock, cam_periph_unlock, DA_FLAG_PACK_INVALID, daschedule(), cam_periph::path, and cam_periph::softc.

Here is the call graph for this function:

◆ dasysctlinit()

◆ dasysctlsofttimeout()

static int dasysctlsofttimeout ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2490 of file scsi_da.c.

References da_default_softtimeout, and da_default_timeout.

◆ dazonedone()

◆ dazonemodesysctl()

static int dazonemodesysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2700 of file scsi_da.c.

References DA_ZONE_DRIVE_MANAGED, DA_ZONE_HOST_AWARE, DA_ZONE_HOST_MANAGED, and DA_ZONE_NONE.

Referenced by dasysctlinit().

Here is the caller graph for this function:

◆ dazonesupsysctl()

static int dazonesupsysctl ( SYSCTL_HANDLER_ARGS  )
static

Definition at line 2730 of file scsi_da.c.

References da_zone_desc_table, and da_zone_desc::value.

Referenced by dasysctlinit().

Here is the caller graph for this function:

◆ MALLOC_DEFINE()

static MALLOC_DEFINE ( M_SCSIDA  ,
"scsi_da"  ,
"scsi_da buffers"   
)
static

◆ PERIPHDRIVER_DECLARE()

PERIPHDRIVER_DECLARE ( da  ,
dadriver   
)

◆ scsi_ata_zac_mgmt_in()

int scsi_ata_zac_mgmt_in ( struct ccb_scsiio csio,
uint32_t  retries,
void(*)(struct cam_periph *, union ccb *)  cbfcnp,
uint8_t  tag_action,
int  use_ncq,
uint8_t  zm_action,
uint64_t  zone_id,
uint8_t  zone_flags,
uint8_t *  data_ptr,
uint32_t  dxfer_len,
uint8_t *  cdb_storage,
size_t  cdb_storage_len,
uint8_t  sense_len,
uint32_t  timeout 
)

Definition at line 6595 of file scsi_da.c.

References AP_EXTEND, AP_FLAG_BYT_BLOK_BLOCKS, AP_FLAG_TDIR_FROM_DEV, AP_FLAG_TLEN_FEAT, AP_FLAG_TLEN_SECT_CNT, AP_PROTO_DMA, AP_PROTO_FPDMA, CAM_DIR_IN, scsi_ata_pass(), and SSD_FULL_SIZE.

Referenced by da_zone_cmd().

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

◆ scsi_ata_zac_mgmt_out()

int scsi_ata_zac_mgmt_out ( struct ccb_scsiio csio,
uint32_t  retries,
void(*)(struct cam_periph *, union ccb *)  cbfcnp,
uint8_t  tag_action,
int  use_ncq,
uint8_t  zm_action,
uint64_t  zone_id,
uint8_t  zone_flags,
uint8_t *  data_ptr,
uint32_t  dxfer_len,
uint8_t *  cdb_storage,
size_t  cdb_storage_len,
uint8_t  sense_len,
uint32_t  timeout 
)

Definition at line 6484 of file scsi_da.c.

References AP_EXTEND, AP_FLAG_BYT_BLOK_BLOCKS, AP_FLAG_TDIR_TO_DEV, AP_FLAG_TLEN_FEAT, AP_FLAG_TLEN_NO_DATA, AP_FLAG_TLEN_SECT_CNT, AP_PROTO_DMA, AP_PROTO_FPDMA, AP_PROTO_NON_DATA, CAM_DIR_NONE, CAM_DIR_OUT, scsi_ata_pass(), and SSD_FULL_SIZE.

Referenced by da_zone_cmd().

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

◆ scsi_zbc_in()

void scsi_zbc_in ( struct ccb_scsiio csio,
uint32_t  retries,
void(*)(struct cam_periph *, union ccb *)  cbfcnp,
uint8_t  tag_action,
uint8_t  service_action,
uint64_t  zone_start_lba,
uint8_t  zone_options,
uint8_t *  data_ptr,
uint32_t  dxfer_len,
uint8_t  sense_len,
uint32_t  timeout 
)

Definition at line 6455 of file scsi_da.c.

References CAM_DIR_IN, CAM_DIR_NONE, cam_fill_csio(), cdb_t::cdb_bytes, ccb_scsiio::cdb_io, scsi_zbc_in::length, scsi_zbc_in::opcode, scsi_u64to8b(), scsi_ulto4b(), scsi_zbc_in::service_action, ZBC_IN, scsi_zbc_in::zone_options, and scsi_zbc_in::zone_start_lba.

Referenced by da_zone_cmd().

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

◆ scsi_zbc_out()

void scsi_zbc_out ( struct ccb_scsiio csio,
uint32_t  retries,
void(*)(struct cam_periph *, union ccb *)  cbfcnp,
uint8_t  tag_action,
uint8_t  service_action,
uint64_t  zone_id,
uint8_t  zone_flags,
uint8_t *  data_ptr,
uint32_t  dxfer_len,
uint8_t  sense_len,
uint32_t  timeout 
)

Definition at line 6428 of file scsi_da.c.

References CAM_DIR_NONE, CAM_DIR_OUT, cam_fill_csio(), cdb_t::cdb_bytes, ccb_scsiio::cdb_io, scsi_zbc_out::opcode, scsi_u64to8b(), scsi_zbc_out::service_action, ZBC_OUT, scsi_zbc_out::zone_flags, and scsi_zbc_out::zone_id.

Referenced by da_zone_cmd().

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

◆ SYSCTL_INT() [1/7]

SYSCTL_INT ( _kern_cam_da  ,
OID_AUTO  ,
default_timeout  ,
CTLFLAG_RWTUN  ,
da_default_timeout,
,
"Normal I/O timeout (in seconds)"   
)

◆ SYSCTL_INT() [2/7]

SYSCTL_INT ( _kern_cam_da  ,
OID_AUTO  ,
disable_wp_detection  ,
CTLFLAG_RWTUN  ,
da_disable_wp_detection,
,
"Disable detection of write-protected disks"   
)

◆ SYSCTL_INT() [3/7]

SYSCTL_INT ( _kern_cam_da  ,
OID_AUTO  ,
enable_biospeedup  ,
CTLFLAG_RDTUN  ,
da_enable_biospeedup,
,
"Enable BIO_SPEEDUP processing"   
)

◆ SYSCTL_INT() [4/7]

SYSCTL_INT ( _kern_cam_da  ,
OID_AUTO  ,
enable_uma_ccbs  ,
CTLFLAG_RWTUN  ,
da_enable_uma_ccbs,
,
"Use UMA for CCBs"   
)

◆ SYSCTL_INT() [5/7]

SYSCTL_INT ( _kern_cam_da  ,
OID_AUTO  ,
poll_period  ,
CTLFLAG_RWTUN  ,
da_poll_period,
,
"Media polling period in seconds"   
)

◆ SYSCTL_INT() [6/7]

SYSCTL_INT ( _kern_cam_da  ,
OID_AUTO  ,
retry_count  ,
CTLFLAG_RWTUN  ,
da_retry_count,
,
"Normal I/O retry count"   
)

◆ SYSCTL_INT() [7/7]

SYSCTL_INT ( _kern_cam_da  ,
OID_AUTO  ,
send_ordered  ,
CTLFLAG_RWTUN  ,
da_send_ordered,
,
"Send Ordered Tags"   
)

◆ SYSCTL_NODE()

static SYSCTL_NODE ( _kern_cam  ,
OID_AUTO  ,
da  ,
CTLFLAG_RD|  CTLFLAG_MPSAFE,
,
"CAM Direct Access Disk driver"   
)
static

◆ SYSCTL_PROC()

SYSCTL_PROC ( _kern_cam_da  ,
OID_AUTO  ,
default_softtimeout  ,
CTLTYPE_UINT|CTLFLAG_RW|  CTLFLAG_MPSAFE,
NULL  ,
,
dasysctlsofttimeout  ,
"I"  ,
"Soft I/O timeout (ms)"   
)

◆ TUNABLE_INT64()

TUNABLE_INT64 ( "kern.cam.da.default_softtimeout"  ,
da_default_softtimeout 
)

Variable Documentation

◆ da_ccb_zone

uma_zone_t da_ccb_zone
static

Definition at line 407 of file scsi_da.c.

Referenced by daregister().

◆ da_default_softtimeout

sbintime_t da_default_softtimeout = DA_DEFAULT_SOFTTIMEOUT
static

Definition at line 1559 of file scsi_da.c.

Referenced by dastart(), and dasysctlsofttimeout().

◆ da_default_timeout

int da_default_timeout = DA_DEFAULT_TIMEOUT
static

◆ da_delete_functions

const void* da_delete_functions[]
static
Initial value:
= {
NULL,
NULL,
}
static da_delete_func_t da_delete_trim
Definition: scsi_da.c:280
static da_delete_func_t da_delete_ws
Definition: scsi_da.c:282
static da_delete_func_t da_delete_unmap
Definition: scsi_da.c:281

Definition at line 284 of file scsi_da.c.

Referenced by dadeletemethodset().

◆ da_delete_method_desc

const char* da_delete_method_desc[]
static
Initial value:
=
{ "NONE", "DISABLED", "ATA TRIM", "UNMAP", "WRITE SAME(16) with UNMAP",
"WRITE SAME(10) with UNMAP", "ZERO" }

Definition at line 296 of file scsi_da.c.

Referenced by cmd6workaround(), da_delete_trim(), da_delete_unmap(), and da_delete_ws().

◆ da_delete_method_names

const char* da_delete_method_names[]
static
Initial value:
=
{ "NONE", "DISABLE", "ATA_TRIM", "UNMAP", "WS16", "WS10", "ZERO" }

Definition at line 294 of file scsi_da.c.

Referenced by dadeletemethodsysctl(), and daprobedone().

◆ da_delete_trim

da_delete_func_t da_delete_trim
static

Definition at line 280 of file scsi_da.c.

◆ da_delete_unmap

da_delete_func_t da_delete_unmap
static

Definition at line 281 of file scsi_da.c.

◆ da_delete_ws

da_delete_func_t da_delete_ws
static

Definition at line 282 of file scsi_da.c.

◆ da_disable_wp_detection

int da_disable_wp_detection = 0
static

Definition at line 1561 of file scsi_da.c.

Referenced by dastart().

◆ da_enable_biospeedup

int da_enable_biospeedup = 1
static

Definition at line 1562 of file scsi_da.c.

Referenced by dagetattr().

◆ da_enable_uma_ccbs

int da_enable_uma_ccbs = 1
static

Definition at line 1563 of file scsi_da.c.

Referenced by daregister().

◆ da_poll_period

int da_poll_period = DA_DEFAULT_POLL_PERIOD
static

Definition at line 1556 of file scsi_da.c.

Referenced by damediapoll(), and daregister().

◆ da_quirk_table

struct da_quirk_entry da_quirk_table[]
static

Definition at line 417 of file scsi_da.c.

Referenced by daregister().

◆ da_retry_count

int da_retry_count = DA_DEFAULT_RETRY
static

Definition at line 1557 of file scsi_da.c.

Referenced by da_delete_trim(), da_delete_unmap(), da_zone_cmd(), and dastart().

◆ da_send_ordered

int da_send_ordered = DA_DEFAULT_SEND_ORDERED
static

Definition at line 1560 of file scsi_da.c.

Referenced by dasendorderedtag().

◆ da_zone_desc_table

struct da_zone_desc da_zone_desc_table[]
static
Initial value:
= {
{DA_ZONE_FLAG_RZ_SUP, "Report Zones" },
{DA_ZONE_FLAG_RWP_SUP, "Reset Write Pointer" },
}
@ DA_ZONE_FLAG_FINISH_SUP
Definition: scsi_da.c:251
@ DA_ZONE_FLAG_RZ_SUP
Definition: scsi_da.c:248
@ DA_ZONE_FLAG_CLOSE_SUP
Definition: scsi_da.c:250
@ DA_ZONE_FLAG_RWP_SUP
Definition: scsi_da.c:252
@ DA_ZONE_FLAG_OPEN_SUP
Definition: scsi_da.c:249

Referenced by dazonesupsysctl().

◆ dacleanup

periph_dtor_t dacleanup
static

Definition at line 1494 of file scsi_da.c.

Referenced by daasync().

◆ dadriver

struct periph_driver dadriver
static
Initial value:
=
{
dainit, "da",
TAILQ_HEAD_INITIALIZER(dadriver.units), 0
}
static periph_init_t dainit
Definition: scsi_da.c:1473
static struct periph_driver dadriver
Definition: scsi_da.c:1605

Definition at line 1605 of file scsi_da.c.

Referenced by dashutdown().

◆ dadump

dumper_t dadump
static

Definition at line 1472 of file scsi_da.c.

Referenced by daregister(), and dashutdown().

◆ dainit

static void dainit ( void  )
static

Definition at line 1473 of file scsi_da.c.

◆ damediapoll

callout_func_t damediapoll
static

Definition at line 1534 of file scsi_da.c.

Referenced by daregister().

◆ daoninvalidate

periph_oninv_t daoninvalidate
static

Definition at line 1496 of file scsi_da.c.

Referenced by daasync().

◆ daregister

periph_ctor_t daregister
static

Definition at line 1493 of file scsi_da.c.

Referenced by daasync().

◆ dasendorderedtag

callout_func_t dasendorderedtag
static

Definition at line 1532 of file scsi_da.c.

Referenced by daregister().

◆ dastart

periph_start_t dastart
static

Definition at line 1495 of file scsi_da.c.

Referenced by daasync().

◆ dastrategy

disk_strategy_t dastrategy
static

Definition at line 1471 of file scsi_da.c.

Referenced by daregister().

◆ microp

const char microp[] = "MICROP"
static

Definition at line 415 of file scsi_da.c.

◆ quantum

const char quantum[] = "QUANTUM"
static

Definition at line 414 of file scsi_da.c.