本文整理汇总了C++中xpt_create_path函数的典型用法代码示例。如果您正苦于以下问题:C++ xpt_create_path函数的具体用法?C++ xpt_create_path怎么用?C++ xpt_create_path使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了xpt_create_path函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: mrsas_bus_scan
/*
* mrsas_bus_scan: Perform bus scan
* input: Adapter instance soft state
*
* This mrsas_bus_scan function is needed for FreeBSD 7.x. Also, it should not
* be called in FreeBSD 8.x and later versions, where the bus scan is
* automatic.
*/
int
mrsas_bus_scan(struct mrsas_softc *sc)
{
union ccb *ccb_0;
union ccb *ccb_1;
if ((ccb_0 = xpt_alloc_ccb()) == NULL) {
return (ENOMEM);
}
if ((ccb_1 = xpt_alloc_ccb()) == NULL) {
xpt_free_ccb(ccb_0);
return (ENOMEM);
}
mtx_lock(&sc->sim_lock);
if (xpt_create_path(&ccb_0->ccb_h.path, xpt_periph, cam_sim_path(sc->sim_0),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_free_ccb(ccb_0);
xpt_free_ccb(ccb_1);
mtx_unlock(&sc->sim_lock);
return (EIO);
}
if (xpt_create_path(&ccb_1->ccb_h.path, xpt_periph, cam_sim_path(sc->sim_1),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_free_ccb(ccb_0);
xpt_free_ccb(ccb_1);
mtx_unlock(&sc->sim_lock);
return (EIO);
}
mtx_unlock(&sc->sim_lock);
xpt_rescan(ccb_0);
xpt_rescan(ccb_1);
return (0);
}
示例2: mrsas_bus_scan
/*
* mrsas_bus_scan: Perform bus scan
* input: Adapter instance soft state
*
* This mrsas_bus_scan function is needed for FreeBSD 7.x. Also, it should
* not be called in FreeBSD 8.x and later versions, where the bus scan is
* automatic.
*/
int mrsas_bus_scan(struct mrsas_softc *sc)
{
union ccb *ccb_0;
union ccb *ccb_1;
lockmgr(&sc->sim_lock, LK_EXCLUSIVE);
if ((ccb_0 = xpt_alloc_ccb()) == NULL) {
lockmgr(&sc->sim_lock, LK_RELEASE);
return(ENOMEM);
}
if ((ccb_1 = xpt_alloc_ccb()) == NULL) {
xpt_free_ccb(ccb_0);
lockmgr(&sc->sim_lock, LK_RELEASE);
return(ENOMEM);
}
if (xpt_create_path(&ccb_0->ccb_h.path, xpt_periph, cam_sim_path(sc->sim_0),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP){
xpt_free_ccb(ccb_0);
xpt_free_ccb(ccb_1);
lockmgr(&sc->sim_lock, LK_RELEASE);
return(EIO);
}
if (xpt_create_path(&ccb_1->ccb_h.path, xpt_periph, cam_sim_path(sc->sim_1),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP){
xpt_free_ccb(ccb_0);
xpt_free_ccb(ccb_1);
lockmgr(&sc->sim_lock, LK_RELEASE);
return(EIO);
}
xpt_setup_ccb(&ccb_0->ccb_h, ccb_0->ccb_h.path, 5/*priority (low)*/);
ccb_0->ccb_h.func_code = XPT_SCAN_BUS;
ccb_0->ccb_h.cbfcnp = mrsas_rescan_callback;
ccb_0->crcn.flags = CAM_FLAG_NONE;
xpt_action(ccb_0); /* scan is now in progress */
xpt_setup_ccb(&ccb_1->ccb_h, ccb_1->ccb_h.path, 5/*priority (low)*/);
ccb_1->ccb_h.func_code = XPT_SCAN_BUS;
ccb_1->ccb_h.cbfcnp = mrsas_rescan_callback;
ccb_1->crcn.flags = CAM_FLAG_NONE;
xpt_action(ccb_1); /* scan is now in progress */
lockmgr(&sc->sim_lock, LK_RELEASE);
return(0);
}
示例3: cfcs_onoffline
static void
cfcs_onoffline(void *arg, int online)
{
struct cfcs_softc *softc;
union ccb *ccb;
softc = (struct cfcs_softc *)arg;
mtx_lock(&softc->lock);
softc->online = online;
ccb = xpt_alloc_ccb_nowait();
if (ccb == NULL) {
printf("%s: unable to allocate CCB for rescan\n", __func__);
goto bailout;
}
if (xpt_create_path(&ccb->ccb_h.path, xpt_periph,
cam_sim_path(softc->sim), CAM_TARGET_WILDCARD,
CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
printf("%s: can't allocate path for rescan\n", __func__);
xpt_free_ccb(ccb);
goto bailout;
}
xpt_rescan(ccb);
bailout:
mtx_unlock(&softc->lock);
}
示例4: ptinit
static void
ptinit(void)
{
cam_status status;
struct cam_path *path;
/*
* Install a global async callback. This callback will
* receive async callbacks like "new device found".
*/
status = xpt_create_path(&path, /*periph*/NULL, CAM_XPT_PATH_ID,
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
if (status == CAM_REQ_CMP) {
struct ccb_setasync csa;
xpt_setup_ccb(&csa.ccb_h, path, /*priority*/5);
csa.ccb_h.func_code = XPT_SASYNC_CB;
csa.event_enable = AC_FOUND_DEVICE;
csa.callback = ptasync;
csa.callback_arg = NULL;
xpt_action((union ccb *)&csa);
status = csa.ccb_h.status;
xpt_free_path(path);
}
if (status != CAM_REQ_CMP) {
printf("pt: Failed to attach master async callback "
"due to status 0x%x!\n", status);
}
}
示例5: nvme_sim_new_ns
static void *
nvme_sim_new_ns(struct nvme_namespace *ns, void *sc_arg)
{
struct nvme_sim_softc *sc = sc_arg;
struct nvme_controller *ctrlr = sc->s_ctrlr;
union ccb *ccb;
mtx_lock(&ctrlr->lock);
ccb = xpt_alloc_ccb_nowait();
if (ccb == NULL) {
printf("unable to alloc CCB for rescan\n");
return (NULL);
}
if (xpt_create_path(&ccb->ccb_h.path, /*periph*/NULL,
cam_sim_path(sc->s_sim), 0, ns->id) != CAM_REQ_CMP) {
printf("unable to create path for rescan\n");
xpt_free_ccb(ccb);
return (NULL);
}
xpt_rescan(ccb);
mtx_unlock(&ctrlr->lock);
return (ns);
}
示例6: ahci_cam_rescan
static void
ahci_cam_rescan(struct ahci_port *ap)
{
struct cam_path *path;
union ccb *ccb;
int status;
int i;
if (ap->ap_flags & AP_F_SCAN_RUNNING) {
ap->ap_flags |= AP_F_SCAN_REQUESTED;
return;
}
ap->ap_flags |= AP_F_SCAN_RUNNING;
for (i = 0; i < AHCI_MAX_PMPORTS; ++i) {
ap->ap_ata[i]->at_features |= ATA_PORT_F_RESCAN;
}
status = xpt_create_path(&path, xpt_periph, cam_sim_path(ap->ap_sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
if (status != CAM_REQ_CMP)
return;
ccb = xpt_alloc_ccb();
xpt_setup_ccb(&ccb->ccb_h, path, 5); /* 5 = low priority */
ccb->ccb_h.func_code = XPT_ENG_EXEC;
ccb->ccb_h.cbfcnp = ahci_cam_rescan_callback;
ccb->ccb_h.sim_priv.entries[0].ptr = ap;
ccb->crcn.flags = CAM_FLAG_NONE;
xpt_action_async(ccb);
}
示例7: tws_bus_scan
int
tws_bus_scan(struct tws_softc *sc)
{
struct cam_path *path;
union ccb *ccb;
TWS_TRACE_DEBUG(sc, "entry", sc, 0);
KASSERT(sc->sim, ("sim not allocated"));
KKASSERT(lockstatus(&sc->sim_lock, curthread) != 0);
ccb = sc->scan_ccb;
if (xpt_create_path(&path, xpt_periph, cam_sim_path(sc->sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
/* lockmgr(&sc->sim_lock, LK_RELEASE); */
return(EIO);
}
xpt_setup_ccb(&ccb->ccb_h, path, 5);
ccb->ccb_h.func_code = XPT_SCAN_BUS;
ccb->ccb_h.cbfcnp = tws_bus_scan_cb;
ccb->crcn.flags = CAM_FLAG_NONE;
xpt_action(ccb);
return(0);
}
示例8: tw_osli_request_bus_scan
/*
* Function name: tw_osli_request_bus_scan
* Description: Requests CAM for a scan of the bus.
*
* Input: sc -- ptr to per ctlr structure
* Output: None
* Return value: 0 -- success
* non-zero-- failure
*/
TW_INT32
tw_osli_request_bus_scan(struct twa_softc *sc)
{
union ccb *ccb;
tw_osli_dbg_dprintf(3, sc, "entering");
/* If we get here before sc->sim is initialized, return an error. */
if (!(sc->sim))
return(ENXIO);
if ((ccb = xpt_alloc_ccb()) == NULL)
return(ENOMEM);
lockmgr(sc->sim_lock, LK_EXCLUSIVE);
if (xpt_create_path(&ccb->ccb_h.path, xpt_periph, cam_sim_path(sc->sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_free_ccb(ccb);
lockmgr(sc->sim_lock, LK_RELEASE);
return(EIO);
}
xpt_setup_ccb(&ccb->ccb_h, ccb->ccb_h.path, 5/*priority (low)*/);
ccb->ccb_h.func_code = XPT_SCAN_BUS;
ccb->ccb_h.cbfcnp = twa_bus_scan_cb;
ccb->crcn.flags = CAM_FLAG_NONE;
xpt_action(ccb);
lockmgr(sc->sim_lock, LK_RELEASE);
return(0);
}
示例9: isci_controller_domain_discovery_complete
void isci_controller_domain_discovery_complete(
struct ISCI_CONTROLLER *isci_controller, struct ISCI_DOMAIN *isci_domain)
{
if (!isci_controller->has_been_scanned)
{
/* Controller has not been scanned yet. We'll clear
* the discovery bit for this domain, then check if all bits
* are now clear. That would indicate that all domains are
* done with discovery and we can then proceed with initial
* scan.
*/
isci_controller->initial_discovery_mask &=
~(1 << isci_domain->index);
if (isci_controller->initial_discovery_mask == 0) {
struct isci_softc *driver = isci_controller->isci;
uint8_t next_index = isci_controller->index + 1;
isci_controller->has_been_scanned = TRUE;
/* Unfreeze simq to allow initial scan to proceed. */
xpt_release_simq(isci_controller->sim, TRUE);
#if __FreeBSD_version < 800000
/* When driver is loaded after boot, we need to
* explicitly rescan here for versions <8.0, because
* CAM only automatically scans new buses at boot
* time.
*/
union ccb *ccb = xpt_alloc_ccb_nowait();
xpt_create_path(&ccb->ccb_h.path, xpt_periph,
cam_sim_path(isci_controller->sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
xpt_rescan(ccb);
#endif
if (next_index < driver->controller_count) {
/* There are more controllers that need to
* start. So start the next one.
*/
isci_controller_start(
&driver->controllers[next_index]);
}
else
{
/* All controllers have been started and completed discovery.
* Disestablish the config hook while will signal to the
* kernel during boot that it is safe to try to find and
* mount the root partition.
*/
config_intrhook_disestablish(
&driver->config_hook);
}
}
}
}
示例10: vpo_attach
/*
* vpo_attach()
*/
static int
vpo_attach(device_t dev)
{
struct vpo_data *vpo = DEVTOSOFTC(dev);
struct cam_devq *devq;
int error;
/* low level attachment */
if (vpo->vpo_isplus) {
if ((error = imm_attach(&vpo->vpo_io)))
return (error);
} else {
if ((error = vpoio_attach(&vpo->vpo_io)))
return (error);
}
/*
** Now tell the generic SCSI layer
** about our bus.
*/
devq = cam_simq_alloc(/*maxopenings*/1);
/* XXX What about low-level detach on error? */
if (devq == NULL)
return (ENXIO);
vpo->sim = cam_sim_alloc(vpo_action, vpo_poll, "vpo", vpo,
device_get_unit(dev),
/*untagged*/1, /*tagged*/0, devq);
if (vpo->sim == NULL) {
cam_simq_free(devq);
return (ENXIO);
}
if (xpt_bus_register(vpo->sim, /*bus*/0) != CAM_SUCCESS) {
cam_sim_free(vpo->sim, /*free_devq*/TRUE);
return (ENXIO);
}
if (xpt_create_path(&vpo->path, /*periph*/NULL,
cam_sim_path(vpo->sim), CAM_TARGET_WILDCARD,
CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_bus_deregister(cam_sim_path(vpo->sim));
cam_sim_free(vpo->sim, /*free_devq*/TRUE);
return (ENXIO);
}
/* all went ok */
return (0);
}
示例11: ahci_cam_changed
/*
* The state of the port has changed.
*
* If atx is NULL the physical port has changed state.
* If atx is non-NULL a particular target behind a PM has changed state.
*
* If found is -1 the target state must be queued to a non-interrupt context.
* (only works with at == NULL).
*
* If found is 0 the target was removed.
* If found is 1 the target was inserted.
*/
void
ahci_cam_changed(struct ahci_port *ap, struct ata_port *atx, int found)
{
struct cam_path *tmppath;
int status;
int target;
target = atx ? atx->at_target : CAM_TARGET_WILDCARD;
if (ap->ap_sim == NULL)
return;
if (found == CAM_TARGET_WILDCARD) {
status = xpt_create_path(&tmppath, NULL,
cam_sim_path(ap->ap_sim),
target, CAM_LUN_WILDCARD);
if (status != CAM_REQ_CMP)
return;
ahci_cam_rescan(ap);
} else {
status = xpt_create_path(&tmppath, NULL,
cam_sim_path(ap->ap_sim),
target,
CAM_LUN_WILDCARD);
if (status != CAM_REQ_CMP)
return;
#if 0
/*
* This confuses CAM
*/
if (found)
xpt_async(AC_FOUND_DEVICE, tmppath, NULL);
else
xpt_async(AC_LOST_DEVICE, tmppath, NULL);
#endif
}
xpt_free_path(tmppath);
}
示例12: isci_remote_device_release_lun_queue
void
isci_remote_device_release_lun_queue(struct ISCI_REMOTE_DEVICE *remote_device,
lun_id_t lun)
{
if (remote_device->frozen_lun_mask & (1 << lun)) {
struct cam_path *path;
remote_device->frozen_lun_mask &= ~(1 << lun);
xpt_create_path(&path, NULL,
cam_sim_path(remote_device->domain->controller->sim),
remote_device->index, lun);
xpt_release_devq(path, 1, TRUE);
xpt_free_path(path);
}
}
示例13: aac_cam_attach
/*
* Register the driver as a CAM SIM
*/
static int
aac_cam_attach(device_t dev)
{
struct cam_devq *devq;
struct cam_sim *sim;
struct cam_path *path;
struct aac_cam *camsc;
struct aac_sim *inf;
fwprintf(NULL, HBA_FLAGS_DBG_FUNCTION_ENTRY_B, "");
camsc = (struct aac_cam *)device_get_softc(dev);
inf = (struct aac_sim *)device_get_ivars(dev);
camsc->inf = inf;
devq = cam_simq_alloc(inf->TargetsPerBus);
if (devq == NULL)
return (EIO);
sim = cam_sim_alloc(aac_cam_action, aac_cam_poll, "aacp", camsc,
device_get_unit(dev), &inf->aac_sc->aac_io_lock, 1, 1, devq);
if (sim == NULL) {
cam_simq_free(devq);
return (EIO);
}
/* Since every bus has it's own sim, every bus 'appears' as bus 0 */
mtx_lock(&inf->aac_sc->aac_io_lock);
if (xpt_bus_register(sim, dev, 0) != CAM_SUCCESS) {
cam_sim_free(sim, TRUE);
mtx_unlock(&inf->aac_sc->aac_io_lock);
return (EIO);
}
if (xpt_create_path(&path, NULL, cam_sim_path(sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_bus_deregister(cam_sim_path(sim));
cam_sim_free(sim, TRUE);
mtx_unlock(&inf->aac_sc->aac_io_lock);
return (EIO);
}
mtx_unlock(&inf->aac_sc->aac_io_lock);
camsc->sim = sim;
camsc->path = path;
return (0);
}
示例14: mpt_cam_attach
void
mpt_cam_attach(mpt_softc_t *mpt)
{
struct cam_devq *devq;
struct cam_sim *sim;
int maxq;
mpt->bus = 0;
maxq = (mpt->mpt_global_credits < MPT_MAX_REQUESTS(mpt))?
mpt->mpt_global_credits : MPT_MAX_REQUESTS(mpt);
/*
* Create the device queue for our SIM(s).
*/
devq = cam_simq_alloc(maxq);
if (devq == NULL) {
return;
}
/*
* Construct our SIM entry.
*/
sim = cam_sim_alloc(mpt_action, mpt_poll, "mpt", mpt,
mpt->unit, 1, maxq, devq);
if (sim == NULL) {
cam_simq_free(devq);
return;
}
/*
* Register exactly the bus.
*/
if (xpt_bus_register(sim, 0) != CAM_SUCCESS) {
cam_sim_free(sim, TRUE);
return;
}
if (xpt_create_path(&mpt->path, NULL, cam_sim_path(sim),
CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
xpt_bus_deregister(cam_sim_path(sim));
cam_sim_free(sim, TRUE);
return;
}
mpt->sim = sim;
}
示例15: mly_find_periph
/********************************************************************************
* Find a peripheral attahed at (bus),(target)
*/
static struct cam_periph *
mly_find_periph(struct mly_softc *sc, int bus, int target)
{
struct cam_periph *periph;
struct cam_path *path;
int status;
status = xpt_create_path(&path, NULL, cam_sim_path(sc->mly_cam_sim[bus]), target, 0);
if (status == CAM_REQ_CMP) {
periph = cam_periph_find(path, NULL);
xpt_free_path(path);
} else {
periph = NULL;
}
return(periph);
}