FreeBSD kernel CAM code
|
#include <sys/cdefs.h>
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/kernel.h>
#include <sys/conf.h>
#include <sys/types.h>
#include <sys/bio.h>
#include <sys/bus.h>
#include <sys/devicestat.h>
#include <sys/errno.h>
#include <sys/fcntl.h>
#include <sys/malloc.h>
#include <sys/proc.h>
#include <sys/poll.h>
#include <sys/selinfo.h>
#include <sys/sdt.h>
#include <sys/sysent.h>
#include <sys/taskqueue.h>
#include <vm/uma.h>
#include <vm/vm.h>
#include <vm/vm_extern.h>
#include <machine/bus.h>
#include <cam/cam.h>
#include <cam/cam_ccb.h>
#include <cam/cam_periph.h>
#include <cam/cam_queue.h>
#include <cam/cam_xpt.h>
#include <cam/cam_xpt_periph.h>
#include <cam/cam_debug.h>
#include <cam/cam_compat.h>
#include <cam/scsi/scsi_all.h>
#include <cam/scsi/scsi_pass.h>
Go to the source code of this file.
Data Structures | |
struct | pass_io_req |
struct | pass_softc |
Macros | |
#define | ccb_type ppriv_field0 |
#define | ccb_ioreq ppriv_ptr1 |
#define | PASS_MAX_SEGS 16 |
Enumerations | |
enum | pass_flags { PASS_FLAG_OPEN = 0x01 , PASS_FLAG_LOCKED = 0x02 , PASS_FLAG_INVALID = 0x04 , PASS_FLAG_INITIAL_PHYSPATH = 0x08 , PASS_FLAG_ZONE_INPROG = 0x10 , PASS_FLAG_ZONE_VALID = 0x20 , PASS_FLAG_UNMAPPED_CAPABLE = 0x40 , PASS_FLAG_ABANDONED_REF_SET = 0x80 } |
enum | pass_state { PASS_STATE_NORMAL } |
enum | pass_ccb_types { PASS_CCB_BUFFER_IO , PASS_CCB_QUEUED_IO } |
enum | pass_io_flags { PASS_IO_NONE = 0x00 , PASS_IO_USER_SEG_MALLOC = 0x01 , PASS_IO_KERN_SEG_MALLOC = 0x02 , PASS_IO_ABANDONED = 0x04 } |
Functions | |
__FBSDID ("$FreeBSD$") | |
static void | passreadfiltdetach (struct knote *kn) |
static int | passreadfilt (struct knote *kn, long hint) |
static void | pass_shutdown_kqueue (void *context, int pending) |
static void | pass_add_physpath (void *context, int pending) |
static void | passasync (void *callback_arg, u_int32_t code, struct cam_path *path, void *arg) |
static void | passdone (struct cam_periph *periph, union ccb *done_ccb) |
static int | passcreatezone (struct cam_periph *periph) |
static void | passiocleanup (struct pass_softc *softc, struct pass_io_req *io_req) |
static int | passcopysglist (struct cam_periph *periph, struct pass_io_req *io_req, ccb_flags direction) |
static int | passmemsetup (struct cam_periph *periph, struct pass_io_req *io_req) |
static int | passmemdone (struct cam_periph *periph, struct pass_io_req *io_req) |
static int | passerror (union ccb *ccb, u_int32_t cam_flags, u_int32_t sense_flags) |
static int | passsendccb (struct cam_periph *periph, union ccb *ccb, union ccb *inccb) |
PERIPHDRIVER_DECLARE (pass, passdriver) | |
static | MALLOC_DEFINE (M_SCSIPASS, "scsi_pass", "scsi passthrough buffers") |
static void | passrejectios (struct cam_periph *periph) |
static void | passdevgonecb (void *arg) |
static void | passoninvalidate (struct cam_periph *periph) |
static void | passcleanup (struct cam_periph *periph) |
static cam_status | passregister (struct cam_periph *periph, void *arg) |
static int | passopen (struct cdev *dev, int flags, int fmt, struct thread *td) |
static int | passclose (struct cdev *dev, int flag, int fmt, struct thread *td) |
static void | passstart (struct cam_periph *periph, union ccb *start_ccb) |
static int | passioctl (struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td) |
static int | passdoioctl (struct cdev *dev, u_long cmd, caddr_t addr, int flag, struct thread *td) |
static int | passpoll (struct cdev *dev, int poll_events, struct thread *td) |
static int | passkqfilter (struct cdev *dev, struct knote *kn) |
Variables | |
static d_open_t | passopen |
static d_close_t | passclose |
static d_ioctl_t | passioctl |
static d_ioctl_t | passdoioctl |
static d_poll_t | passpoll |
static d_kqfilter_t | passkqfilter |
static periph_init_t | passinit |
static periph_ctor_t | passregister |
static periph_oninv_t | passoninvalidate |
static periph_dtor_t | passcleanup |
static periph_start_t | passstart |
static struct periph_driver | passdriver |
static struct cdevsw | pass_cdevsw |
static struct filterops | passread_filtops |
#define ccb_ioreq ppriv_ptr1 |
Definition at line 90 of file scsi_pass.c.
#define ccb_type ppriv_field0 |
Definition at line 89 of file scsi_pass.c.
#define PASS_MAX_SEGS 16 |
Definition at line 95 of file scsi_pass.c.
enum pass_ccb_types |
Enumerator | |
---|---|
PASS_CCB_BUFFER_IO | |
PASS_CCB_QUEUED_IO |
Definition at line 84 of file scsi_pass.c.
enum pass_flags |
Enumerator | |
---|---|
PASS_FLAG_OPEN | |
PASS_FLAG_LOCKED | |
PASS_FLAG_INVALID | |
PASS_FLAG_INITIAL_PHYSPATH | |
PASS_FLAG_ZONE_INPROG | |
PASS_FLAG_ZONE_VALID | |
PASS_FLAG_UNMAPPED_CAPABLE | |
PASS_FLAG_ABANDONED_REF_SET |
Definition at line 69 of file scsi_pass.c.
enum pass_io_flags |
Enumerator | |
---|---|
PASS_IO_NONE | |
PASS_IO_USER_SEG_MALLOC | |
PASS_IO_KERN_SEG_MALLOC | |
PASS_IO_ABANDONED |
Definition at line 97 of file scsi_pass.c.
enum pass_state |
Enumerator | |
---|---|
PASS_STATE_NORMAL |
Definition at line 80 of file scsi_pass.c.
__FBSDID | ( | "$FreeBSD$" | ) |
|
static |
|
static |
Definition at line 436 of file scsi_pass.c.
References pass_softc::alias_dev, CAM_PERIPH_INVALID, cam_periph_mtx(), cam_periph_release_locked(), pass_softc::dev, cam_periph::flags, pass_softc::flags, PASS_FLAG_INITIAL_PHYSPATH, cam_periph::path, cam_periph::softc, and xpt_getattr().
Referenced by passregister().
|
static |
Definition at line 418 of file scsi_pass.c.
References cam_periph_release(), pass_softc::read_select, and cam_periph::softc.
Referenced by passregister().
|
static |
Definition at line 485 of file scsi_pass.c.
References AC_ADVINFO_CHANGED, AC_FOUND_DEVICE, pass_softc::add_physpath_task, cam_fetch_status_entry(), cam_periph_acquire(), cam_periph_alloc(), cam_periph_async(), CAM_PERIPH_BIO, CAM_REQ_CMP, CAM_REQ_INPROG, CDAI_TYPE_PHYS_PATH, passasync(), passcleanup, passoninvalidate, passregister, passstart, cam_periph::softc, and cam_status_entry::status_text.
Referenced by passasync(), passoninvalidate(), and passregister().
|
static |
Definition at line 358 of file scsi_pass.c.
References pass_softc::add_physpath_task, cam_periph_assert, cam_periph_lock, cam_periph_unlock, pass_softc::device_stats, and cam_periph::softc.
|
static |
Definition at line 768 of file scsi_pass.c.
References cam_periph_doacquire(), cam_periph_mtx(), cam_periph_release_locked(), pass_io_req::flags, pass_softc::flags, PASS_FLAG_ABANDONED_REF_SET, PASS_IO_ABANDONED, passiocleanup(), and cam_periph::softc.
|
static |
Definition at line 1214 of file scsi_pass.c.
References CAM_DIR_IN, pass_io_req::kern_segptr, pass_io_req::num_kern_segs, pass_io_req::num_user_segs, cam_periph::path, pass_io_req::user_segptr, and xpt_print().
Referenced by passmemdone(), and passmemsetup().
|
static |
Definition at line 1036 of file scsi_pass.c.
References cam_periph_assert, cam_periph_lock, cam_periph_mtx(), cam_periph_unlock, pass_softc::flags, PASS_FLAG_ZONE_INPROG, PASS_FLAG_ZONE_VALID, cam_periph::path, cam_periph::softc, and xpt_print().
Referenced by passdoioctl().
|
static |
Definition at line 287 of file scsi_pass.c.
References cam_periph_mtx(), cam_periph_release_locked(), pass_softc::open_count, passrejectios(), pass_softc::shutdown_kqueue_task, and cam_periph::softc.
Referenced by passoninvalidate().
|
static |
Definition at line 1749 of file scsi_pass.c.
References CAM_CDB_POINTER, cam_periph_getccb(), cam_periph_ioctl(), cam_periph_lock, cam_periph_unlock, CAM_PRIORITY_OOB, CAM_UNLOCKED, CAMIOCOMMAND, CAMIOGET, CAMIOQUEUE, ccb_hdr::cbfcnp, ccb, pass_io_req::ccb, ccb::ccb_h, cdb_t::cdb_bytes, ccb_scsiio::cdb_io, ccb_scsiio::cdb_len, cdb_t::cdb_ptr, ccb::csio, ccb_hdr::flags, pass_softc::flags, ccb_hdr::func_code, IOCDBLEN, pass_io_req::mapinfo, cam_periph_map_info::num_bufs_used, PASS_FLAG_ZONE_VALID, passcreatezone(), passdone(), passerror(), passmemdone(), passmemsetup(), passsendccb(), cam_periph::path, ccb_hdr::periph_links, ccb_hdr::periph_priv, ccb_hdr::pinfo, cam_pinfo::priority, cam_periph::softc, pass_io_req::user_ccb_ptr, pass_io_req::user_periph_links, pass_io_req::user_periph_priv, xpt_action(), xpt_alloc_ccb_nowait(), XPT_ATA_IO, XPT_DEV_ADVINFO, XPT_DEV_MATCH, XPT_FC_QUEUED, XPT_FC_USER_CCB, XPT_FC_XPT_ONLY, xpt_free_ccb(), XPT_NVME_ADMIN, XPT_NVME_IO, xpt_print(), xpt_release_ccb(), xpt_schedule(), XPT_SCSI_IO, xpt_setup_ccb(), xpt_setup_ccb_flags(), and XPT_SMP_IO.
|
static |
Definition at line 895 of file scsi_pass.c.
References ccb::ataio, CAM_DIR_MASK, CAM_DIR_NONE, CAM_DIR_OUT, CAM_PASS_ERR_RECOVER, cam_periph_assert, cam_periph_release_locked(), CAM_REQ_CMP, CAM_RETRY_SELTO, CAM_STATUS_MASK, pass_io_req::ccb, ccb_scsiio::ccb_h, ccb::ccb_h, ccb::csio, pass_softc::device_stats, ccb_scsiio::dxfer_len, ccb_ataio::dxfer_len, ccb_hdr::flags, pass_io_req::flags, pass_softc::flags, ccb_hdr::func_code, PASS_CCB_QUEUED_IO, PASS_FLAG_ABANDONED_REF_SET, PASS_IO_ABANDONED, passerror(), passiocleanup(), cam_periph::path, pass_softc::read_select, ccb_scsiio::resid, ccb_ataio::resid, SF_NO_PRINT, SF_RETRY_UA, ccb_smpio::smp_request_len, ccb_smpio::smp_response_len, ccb::smpio, cam_periph::softc, pass_io_req::start_time, ccb_hdr::status, ccb_scsiio::tag_action, pass_io_req::user_ccb_ptr, XPT_ATA_IO, xpt_print(), xpt_release_ccb(), XPT_SCSI_IO, and XPT_SMP_IO.
Referenced by passdoioctl(), and passstart().
|
static |
Definition at line 2249 of file scsi_pass.c.
References cam_periph_error().
Referenced by passdoioctl(), passdone(), and passsendccb().
|
static |
Definition at line 1119 of file scsi_pass.c.
References ccb::ataio, ccb_dev_advinfo::buf, CAM_DATA_PADDR, CAM_DATA_SG, CAM_DATA_VADDR, CAM_PERIPH_MAXMAPS, ccb, pass_io_req::ccb, ccb::ccb_h, ccb::cdai, ccb::cdm, ccb::csio, pass_io_req::data_flags, ccb_scsiio::data_ptr, ccb_ataio::data_ptr, ccb_nvmeio::data_ptr, pass_io_req::flags, ccb_hdr::func_code, pass_io_req::kern_bufs, pass_io_req::kern_segptr, ccb_dev_match::matches, pass_io_req::num_bufs, pass_io_req::num_kern_segs, ccb::nvmeio, PASS_IO_KERN_SEG_MALLOC, PASS_IO_USER_SEG_MALLOC, ccb_dev_match::patterns, ccb_smpio::smp_request, ccb_smpio::smp_response, ccb::smpio, pass_io_req::user_bufs, pass_io_req::user_segptr, XPT_ATA_IO, XPT_CONT_TARGET_IO, XPT_DEV_ADVINFO, XPT_DEV_MATCH, XPT_NVME_ADMIN, XPT_NVME_IO, XPT_SCSI_IO, and XPT_SMP_IO.
Referenced by passclose(), passdone(), passmemdone(), passmemsetup(), and passrejectios().
|
static |
Definition at line 1738 of file scsi_pass.c.
References cam_compat_ioctl(), pass_softc::dev, and passdoioctl.
|
static |
Definition at line 2121 of file scsi_pass.c.
References passread_filtops, and cam_periph::softc.
|
static |
Definition at line 1674 of file scsi_pass.c.
References CAM_DATA_BIO, CAM_DATA_PADDR, CAM_DATA_SG, CAM_DATA_SG_PADDR, CAM_DATA_VADDR, CAM_DIR_IN, pass_io_req::data_flags, pass_io_req::dirs, pass_io_req::kern_bufs, pass_io_req::lengths, pass_io_req::num_bufs, passcopysglist(), passiocleanup(), cam_periph::path, cam_periph::softc, pass_io_req::user_bufs, and xpt_print().
Referenced by passdoioctl().
|
static |
Definition at line 1280 of file scsi_pass.c.
References ccb::ataio, ccb_dev_advinfo::buf, ccb_dev_advinfo::bufsiz, CAM_DATA_BIO, CAM_DATA_MASK, CAM_DATA_PADDR, CAM_DATA_SG, CAM_DATA_SG_PADDR, CAM_DATA_VADDR, CAM_DIR_IN, CAM_DIR_MASK, CAM_DIR_NONE, CAM_DIR_OUT, cam_periph_assert, CAM_PERIPH_MAXMAPS, ccb, pass_io_req::ccb, ccb::ccb_h, ccb::cdai, ccb::cdm, ccb::csio, pass_io_req::data_flags, ccb_scsiio::data_ptr, ccb_ataio::data_ptr, ccb_nvmeio::data_ptr, pass_io_req::dirs, ccb_scsiio::dxfer_len, ccb_ataio::dxfer_len, ccb_nvmeio::dxfer_len, ccb_hdr::flags, pass_io_req::flags, ccb_hdr::func_code, pass_io_req::kern_bufs, pass_io_req::kern_segptr, pass_io_req::kern_segs, pass_io_req::lengths, ccb_dev_match::match_buf_len, ccb_dev_match::matches, pass_softc::maxio, pass_io_req::num_bufs, pass_io_req::num_kern_segs, pass_io_req::num_user_segs, ccb::nvmeio, PASS_IO_KERN_SEG_MALLOC, PASS_IO_USER_SEG_MALLOC, PASS_MAX_SEGS, passcopysglist(), passiocleanup(), cam_periph::path, ccb_dev_match::pattern_buf_len, ccb_dev_match::patterns, ccb_scsiio::sglist_cnt, ccb_nvmeio::sglist_cnt, ccb_smpio::smp_request, ccb_smpio::smp_request_len, ccb_smpio::smp_response, ccb_smpio::smp_response_len, ccb::smpio, cam_periph::softc, pass_io_req::user_bufs, pass_io_req::user_segptr, pass_io_req::user_segs, XPT_ATA_IO, XPT_CONT_TARGET_IO, XPT_DEV_ADVINFO, XPT_DEV_MATCH, XPT_NVME_ADMIN, XPT_NVME_IO, xpt_print(), XPT_SCSI_IO, and XPT_SMP_IO.
Referenced by passdoioctl().
|
static |
Definition at line 337 of file scsi_pass.c.
References pass_softc::dev, pass_softc::flags, PASS_FLAG_INVALID, passasync(), passdevgonecb(), cam_periph::path, cam_periph::softc, and xpt_register_async().
|
static |
Definition at line 711 of file scsi_pass.c.
References cam_periph_acquire(), cam_periph_lock, cam_periph_release_locked(), cam_periph_unlock, pass_softc::flags, pass_softc::open_count, PASS_FLAG_INVALID, cam_periph::path, cam_periph::softc, and xpt_print().
|
static |
Definition at line 2096 of file scsi_pass.c.
References cam_periph_lock, cam_periph_unlock, and cam_periph::softc.
|
static |
Definition at line 2149 of file scsi_pass.c.
References cam_periph_assert, and cam_periph::softc.
|
static |
Definition at line 2137 of file scsi_pass.c.
References cam_periph::softc.
|
static |
Definition at line 555 of file scsi_pass.c.
References AC_ADVINFO_CHANGED, AC_LOST_DEVICE, pass_softc::add_physpath_task, cam_periph_acquire(), cam_periph_lock, cam_periph_mtx(), cam_periph_release_locked(), cam_periph_unlock, CAM_REQ_CMP, CAM_REQ_CMP_ERR, pass_softc::dev, pass_softc::device_stats, scsi_inquiry_data::flags, pass_softc::flags, ccb_pathinq::hba_misc, ccb_getdev::inq_data, ccb_pathinq::maxio, pass_softc::maxio, pass_add_physpath(), pass_cdevsw, PASS_FLAG_UNMAPPED_CAPABLE, pass_shutdown_kqueue(), PASS_STATE_NORMAL, passasync(), cam_periph::path, pass_softc::pd_type, cam_periph::periph_name, PIM_UNMAPPED, PROTO_ATAPI, PROTO_SATAPM, PROTO_SCSI, ccb_getdev::protocol, pass_softc::read_select, pass_softc::shutdown_kqueue_task, SID_CmdQue, SID_TYPE, cam_periph::softc, pass_softc::state, T_DIRECT, T_ENCLOSURE, ccb_pathinq::transport, cam_periph::unit_number, XPORT_DEVSTAT_TYPE, xpt_announce_periph(), xpt_path_inq(), xpt_print(), and xpt_register_async().
|
static |
Definition at line 233 of file scsi_pass.c.
References cam_periph_doacquire(), pass_io_req::flags, pass_softc::flags, PASS_FLAG_ABANDONED_REF_SET, PASS_IO_ABANDONED, passiocleanup(), and cam_periph::softc.
Referenced by passdevgonecb().
|
static |
Definition at line 2173 of file scsi_pass.c.
References CAM_CDB_POINTER, CAM_PASS_ERR_RECOVER, cam_periph_lock, cam_periph_mapmem(), cam_periph_runccb(), cam_periph_unlock, cam_periph_unmapmem(), CAM_RETRY_SELTO, ccb_hdr::cbfcnp, ccb::ccb_h, ccb_scsiio::cdb_io, ccb_scsiio::cdb_len, cdb_t::cdb_ptr, ccb::csio, pass_softc::device_stats, ccb_hdr::flags, ccb_hdr::func_code, pass_softc::maxio, cam_periph_map_info::num_bufs_used, passerror(), ccb_hdr::periph_priv, SF_NO_PRINT, SF_RETRY_UA, cam_periph::softc, XPT_ATA_IO, XPT_DEV_ADVINFO, XPT_DEV_MATCH, xpt_merge_ccb(), XPT_MMC_IO, XPT_NVME_ADMIN, XPT_NVME_IO, XPT_SCSI_IO, and XPT_SMP_IO.
Referenced by passdoioctl().
|
static |
Definition at line 847 of file scsi_pass.c.
References pass_io_req::alloced_ccb, CAM_PRIORITY_NORMAL, ccb_hdr::cbfcnp, pass_io_req::ccb, ccb::ccb_h, pass_softc::device_stats, PASS_CCB_QUEUED_IO, PASS_STATE_NORMAL, passdone(), cam_periph::softc, pass_io_req::start_time, pass_softc::state, xpt_action(), xpt_merge_ccb(), xpt_release_ccb(), and xpt_schedule().
PERIPHDRIVER_DECLARE | ( | pass | , |
passdriver | |||
) |
|
static |
Definition at line 195 of file scsi_pass.c.
Referenced by passregister().
|
static |
Definition at line 164 of file scsi_pass.c.
Referenced by passasync().
|
static |
Definition at line 153 of file scsi_pass.c.
|
static |
Definition at line 155 of file scsi_pass.c.
Referenced by passioctl().
|
static |
Definition at line 187 of file scsi_pass.c.
|
static |
Definition at line 161 of file scsi_pass.c.
|
static |
Definition at line 154 of file scsi_pass.c.
|
static |
Definition at line 157 of file scsi_pass.c.
|
static |
Definition at line 163 of file scsi_pass.c.
Referenced by passasync().
|
static |
Definition at line 152 of file scsi_pass.c.
|
static |
Definition at line 156 of file scsi_pass.c.
|
static |
Definition at line 206 of file scsi_pass.c.
Referenced by passkqfilter().
|
static |
Definition at line 162 of file scsi_pass.c.
Referenced by passasync().
|
static |
Definition at line 165 of file scsi_pass.c.
Referenced by passasync().