emul64
static void emul64_i_log(struct emul64 *emul64, int level, char *fmt, ...);
ASSERT(mutex_owned(EMUL64_RESP_MUTEX(emul64)) == 0 || ddi_in_panic());
EMUL64_DEBUG2(emul64, SCSI_DEBUG, "emul64_scsi_start %x", sp);
static int emul64_get_tgtrange(struct emul64 *, intptr_t, emul64_tgt_t **,
static int emul64_write_off(struct emul64 *, emul64_tgt_t *,
dispatched = taskq_dispatch(emul64->emul64_taskq,
(void) taskq_dispatch(emul64->emul64_taskq,
static int emul64_write_on(struct emul64 *, emul64_tgt_t *,
ASSERT(mutex_owned(EMUL64_REQ_MUTEX(emul64)) == 0 || ddi_in_panic());
ASSERT(mutex_owned(EMUL64_RESP_MUTEX(emul64)) == 0 || ddi_in_panic());
extern emul64_tgt_t *find_tgt(struct emul64 *, ushort_t, ushort_t);
emul64_error_inject_req(struct emul64 *emul64, intptr_t arg)
EMUL64_MUTEX_ENTER(emul64);
tgt = find_tgt(emul64, error_inj_req.eccd_target,
EMUL64_MUTEX_EXIT(emul64);
emul64_get_tgtrange(struct emul64 *emul64, intptr_t arg, emul64_tgt_t **tgtp,
EMUL64_MUTEX_ENTER(emul64);
*tgtp = find_tgt(emul64, tgtr->emul64_target, tgtr->emul64_lun);
EMUL64_MUTEX_EXIT(emul64);
ddi_get_instance(emul64->emul64_dip));
struct emul64 *emul64;
emul64 = (struct emul64 *)ddi_get_soft_state(emul64_state, instance);
if (emul64 == NULL) {
rv = emul64_get_tgtrange(emul64, arg, &tgt, &tgtr);
rv = emul64_write_off(emul64, tgt, &tgtr);
rv = emul64_get_tgtrange(emul64, arg, &tgt, &tgtr);
rv = emul64_write_on(emul64, tgt, &tgtr);
rv = emul64_get_tgtrange(emul64, arg, &tgt, &tgtr);
rv = emul64_error_inject_req(emul64, arg);
emul64_write_off(struct emul64 *emul64, emul64_tgt_t *tgt,
emul64_write_on(struct emul64 *emul64, emul64_tgt_t *tgt,
emul64_i_log(struct emul64 *emul64, int level, char *fmt, ...)
scsi_log(emul64 ? emul64->emul64_dip : NULL,
struct emul64 *emul64 = ADDR2EMUL64(ap);
ddi_get_instance(emul64->emul64_dip),
ret = ddi_soft_state_init(&emul64_state, sizeof (struct emul64),
struct emul64 *foo;
struct emul64 *emul64;
emul64 = TRAN2EMUL64(tran);
emul64 = (struct emul64 *)ddi_get_soft_state(emul64_state, instance);
if (emul64 == (struct emul64 *)NULL) {
emul64->emul64_tran = tran;
emul64->emul64_dip = dip;
tran->tran_hba_private = emul64;
emul64->emul64_initiator_id = 2;
emul64->emul64_scsi_options =
EMUL64_DEBUG(emul64, SCSI_DEBUG, "emul64 scsi-options=%x",
emul64->emul64_scsi_options);
mutex_init(EMUL64_REQ_MUTEX(emul64), NULL, MUTEX_DRIVER,
emul64->emul64_iblock);
mutex_init(EMUL64_RESP_MUTEX(emul64), NULL, MUTEX_DRIVER,
emul64->emul64_iblock);
EMUL64_MUTEX_ENTER(emul64);
emul64_i_initcap(emul64);
EMUL64_MUTEX_EXIT(emul64);
emul64->emul64_taskq = taskq_create("emul64_comp",
mutex_destroy(EMUL64_REQ_MUTEX(emul64));
mutex_destroy(EMUL64_RESP_MUTEX(emul64));
struct emul64 *emul64;
emul64 = TRAN2EMUL64(tran);
if (!emul64) {
EMUL64_DEBUG(emul64, SCSI_DEBUG, "emul64_detach: cmd = %d", cmd);
EMUL64_MUTEX_ENTER(emul64);
taskq_destroy(emul64->emul64_taskq);
scsi_hba_tran_free(emul64->emul64_tran);
EMUL64_MUTEX_EXIT(emul64);
mutex_destroy(EMUL64_REQ_MUTEX(emul64));
mutex_destroy(EMUL64_RESP_MUTEX(emul64));
EMUL64_DEBUG(emul64, SCSI_DEBUG, "emul64_detach: done");
struct emul64 *emul64;
emul64 = TRAN2EMUL64(tran);
EMUL64_MUTEX_ENTER(emul64);
tgt = find_tgt(emul64, sd->sd_address.a_target, sd->sd_address.a_lun);
sizeof (emul64->emul64_tgt->emul64_tgt_inq));
tgt->emul64_tgt_next = emul64->emul64_tgt;
emul64->emul64_tgt = tgt;
out: EMUL64_MUTEX_EXIT(emul64);
emul64_i_initcap(struct emul64 *emul64)
emul64->emul64_cap[i] = cap;
emul64->emul64_synch[i] = synch;
EMUL64_DEBUG(emul64, SCSI_DEBUG, "default cap = 0x%x", cap);
struct emul64 *emul64 = ADDR2EMUL64(ap);
EMUL64_MUTEX_ENTER(emul64);
rval = emul64->emul64_initiator_id;
EMUL64_MUTEX_EXIT(emul64);
struct emul64 *emul64 = ADDR2EMUL64(ap);
EMUL64_MUTEX_ENTER(emul64);
emul64->nt_total_sectors[ap->a_target][ap->a_lun] = value;
EMUL64_MUTEX_EXIT(emul64);
struct emul64 *emul64 = ADDR2EMUL64(ap);
pkt = scsi_hba_pkt_alloc(emul64->emul64_dip, ap, cmdlen,
sp->cmd_emul64 = emul64;
struct emul64 *emul64 = ADDR2EMUL64(ap);
mutex_enter(EMUL64_REQ_MUTEX(emul64));
p = emul64->emul64_reset_notify_listf;
emul64->emul64_reset_notify_listf = p->next;
p->next = emul64->emul64_reset_notify_listf;
emul64->emul64_reset_notify_listf = p;
mutex_exit(EMUL64_REQ_MUTEX(emul64));
static void emul64_i_initcap(struct emul64 *emul64);
struct emul64 *emul64 = ADDR2EMUL64(ap);
ASSERT(mutex_owned(EMUL64_REQ_MUTEX(emul64)) == 0 || ddi_in_panic());
bsd_readblks(struct emul64 *emul64, ushort_t target, ushort_t lun,
EMUL64_MUTEX_ENTER(emul64);
tgt = find_tgt(emul64, target, lun);
EMUL64_MUTEX_EXIT(emul64);
bsd_writeblks(struct emul64 *emul64, ushort_t target, ushort_t lun,
EMUL64_MUTEX_ENTER(emul64);
tgt = find_tgt(emul64, target, lun);
EMUL64_MUTEX_EXIT(emul64);
find_tgt(struct emul64 *emul64, ushort_t target, ushort_t lun)
tgt = emul64->emul64_tgt;
static int bsd_readblks(struct emul64 *, ushort_t, ushort_t, diskaddr_t,
static int bsd_writeblks(struct emul64 *, ushort_t, ushort_t, diskaddr_t,
emul64_tgt_t *find_tgt(struct emul64 *, ushort_t, ushort_t);
struct emul64 *emul64 = PKT2EMUL64(pkt);
int instance = ddi_get_instance(emul64->emul64_dip);
struct emul64 *cmd_emul64;
#define EMUL64_REQ_MUTEX(emul64) (&emul64->emul64_request_mutex)
#define EMUL64_RESP_MUTEX(emul64) (&emul64->emul64_response_mutex)
#define EMUL64_HOTPLUG_MUTEX(emul64) (&emul64->emul64_hotplug_mutex)
#define EMUL64_MUTEX_ENTER(emul64) mutex_enter(EMUL64_RESP_MUTEX(emul64)), \
mutex_enter(EMUL64_REQ_MUTEX(emul64))
#define EMUL64_MUTEX_EXIT(emul64) mutex_exit(EMUL64_RESP_MUTEX(emul64)), \
mutex_exit(EMUL64_REQ_MUTEX(emul64))
#define EMUL64_CV(emul64) (&(emul64)->emul64_cv)
#define TRAN2EMUL64(tran) ((struct emul64 *)(tran)->tran_hba_private)
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_request_mutex,
emul64::emul64_queue_space))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_request_mutex,
emul64::emul64_request_in))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_request_mutex,
emul64::emul64_request_out))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_request_mutex,
emul64::emul64_request_ptr))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_request_mutex,
emul64::emul64_mbox))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_request_mutex,
emul64::emul64_slots))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_response_mutex,
emul64::emul64_response_in))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_response_mutex,
emul64::emul64_response_out))
_NOTE(MUTEX_PROTECTS_DATA(emul64::emul64_response_mutex,
emul64::emul64_response_ptr))
#define CNUM(emul64) (ddi_get_instance(emul64->emul64_tran.tran_dev))