Lines Matching refs:vdp
95 logva(xdb_t *vdp, uint64_t va) in logva() argument
100 page_addrs = vdp->page_addrs; in logva()
101 for (i = 0; i < XDB_MAX_IO_PAGES(vdp); i++) { in logva()
106 for (i = 0; i < XDB_MAX_IO_PAGES(vdp); i++) { in logva()
112 ASSERT(i < XDB_MAX_IO_PAGES(vdp)); in logva()
116 unlogva(xdb_t *vdp, uint64_t va) in unlogva() argument
121 page_addrs = vdp->page_addrs; in unlogva()
122 for (i = 0; i < XDB_MAX_IO_PAGES(vdp); i++) { in unlogva()
128 ASSERT(i < XDB_MAX_IO_PAGES(vdp)); in unlogva()
172 xdb_t *vdp; in xdb_kstat_update() local
178 vdp = ksp->ks_private; in xdb_kstat_update()
185 (knp++)->value.ui64 = vdp->xs_stat_req_reads; in xdb_kstat_update()
186 (knp++)->value.ui64 = vdp->xs_stat_req_writes; in xdb_kstat_update()
187 (knp++)->value.ui64 = vdp->xs_stat_req_barriers; in xdb_kstat_update()
188 (knp++)->value.ui64 = vdp->xs_stat_req_flushes; in xdb_kstat_update()
195 xdb_kstat_init(xdb_t *vdp) in xdb_kstat_init() argument
201 if ((vdp->xs_kstats = kstat_create("xdb", in xdb_kstat_init()
202 ddi_get_instance(vdp->xs_dip), in xdb_kstat_init()
207 vdp->xs_kstats->ks_private = vdp; in xdb_kstat_init()
208 vdp->xs_kstats->ks_update = xdb_kstat_update; in xdb_kstat_init()
210 knp = vdp->xs_kstats->ks_data; in xdb_kstat_init()
218 kstat_install(vdp->xs_kstats); in xdb_kstat_init()
237 xdb_get_buf(xdb_t *vdp, blkif_request_t *req, xdb_request_t *xreq) in xdb_get_buf() argument
246 acchdl = vdp->xs_ring_hdl; in xdb_get_buf()
251 ASSERT(MUTEX_HELD(&vdp->xs_iomutex)); in xdb_get_buf()
255 xreq->xr_vdp = vdp; in xdb_get_buf()
263 "length data buffer!", vdp->xs_peer); in xdb_get_buf()
272 "length data buffer!", vdp->xs_peer); in xdb_get_buf()
289 vdp->xs_iopage_va, xreq->xr_idx, i); in xdb_get_buf()
290 mapops[i].dom = vdp->xs_peer; in xdb_get_buf()
331 unlogva(vdp, mapops[j].host_addr); in xdb_get_buf()
342 logva(vdp, mapops[i].host_addr); in xdb_get_buf()
374 vdp->xs_iopage_va, xreq->xr_idx, i); in xdb_get_buf()
404 bp->b_un.b_addr = XDB_IOPAGE_VA(vdp->xs_iopage_va, xreq->xr_idx, in xdb_get_buf()
443 xdb_get_req(xdb_t *vdp) in xdb_get_req() argument
448 ASSERT(MUTEX_HELD(&vdp->xs_iomutex)); in xdb_get_req()
449 ASSERT(vdp->xs_free_req != -1); in xdb_get_req()
450 req = &vdp->xs_req[vdp->xs_free_req]; in xdb_get_req()
451 vdp->xs_free_req = req->xr_next; in xdb_get_req()
461 xdb_t *vdp = req->xr_vdp; in xdb_free_req() local
463 ASSERT(MUTEX_HELD(&vdp->xs_iomutex)); in xdb_free_req()
464 req->xr_next = vdp->xs_free_req; in xdb_free_req()
465 vdp->xs_free_req = req->xr_idx; in xdb_free_req()
469 xdb_response(xdb_t *vdp, blkif_request_t *req, boolean_t ok) in xdb_response() argument
471 ddi_acc_handle_t acchdl = vdp->xs_ring_hdl; in xdb_response()
473 if (xdb_push_response(vdp, ddi_get64(acchdl, &req->id), in xdb_response()
475 xvdi_notify_oe(vdp->xs_dip); in xdb_response()
479 xdb_init_ioreqs(xdb_t *vdp) in xdb_init_ioreqs() argument
483 ASSERT(vdp->xs_nentry); in xdb_init_ioreqs()
485 if (vdp->xs_req == NULL) in xdb_init_ioreqs()
486 vdp->xs_req = kmem_alloc(vdp->xs_nentry * in xdb_init_ioreqs()
489 if (vdp->page_addrs == NULL) in xdb_init_ioreqs()
490 vdp->page_addrs = kmem_zalloc(XDB_MAX_IO_PAGES(vdp) * in xdb_init_ioreqs()
493 for (i = 0; i < vdp->xs_nentry; i++) { in xdb_init_ioreqs()
494 vdp->xs_req[i].xr_idx = i; in xdb_init_ioreqs()
495 vdp->xs_req[i].xr_next = i + 1; in xdb_init_ioreqs()
497 vdp->xs_req[vdp->xs_nentry - 1].xr_next = -1; in xdb_init_ioreqs()
498 vdp->xs_free_req = 0; in xdb_init_ioreqs()
501 vdp->xs_iopage_va = vmem_xalloc(heap_arena, in xdb_init_ioreqs()
502 XDB_MAX_IO_PAGES(vdp) * PAGESIZE, PAGESIZE, 0, 0, 0, 0, in xdb_init_ioreqs()
504 for (i = 0; i < XDB_MAX_IO_PAGES(vdp); i++) in xdb_init_ioreqs()
506 vdp->xs_iopage_va + i * PAGESIZE, NULL); in xdb_init_ioreqs()
510 xdb_uninit_ioreqs(xdb_t *vdp) in xdb_uninit_ioreqs() argument
514 for (i = 0; i < XDB_MAX_IO_PAGES(vdp); i++) in xdb_uninit_ioreqs()
516 vdp->xs_iopage_va + i * PAGESIZE); in xdb_uninit_ioreqs()
517 vmem_xfree(heap_arena, vdp->xs_iopage_va, in xdb_uninit_ioreqs()
518 XDB_MAX_IO_PAGES(vdp) * PAGESIZE); in xdb_uninit_ioreqs()
519 if (vdp->xs_req != NULL) { in xdb_uninit_ioreqs()
520 kmem_free(vdp->xs_req, vdp->xs_nentry * sizeof (xdb_request_t)); in xdb_uninit_ioreqs()
521 vdp->xs_req = NULL; in xdb_uninit_ioreqs()
524 if (vdp->page_addrs != NULL) { in xdb_uninit_ioreqs()
525 kmem_free(vdp->page_addrs, XDB_MAX_IO_PAGES(vdp) * in xdb_uninit_ioreqs()
527 vdp->page_addrs = NULL; in xdb_uninit_ioreqs()
535 xdb_t *vdp = (xdb_t *)arg; in xdb_intr() local
536 dev_info_t *dip = vdp->xs_dip; in xdb_intr()
545 ddi_get_name_addr(dip), vdp->xs_peer)); in xdb_intr()
547 mutex_enter(&vdp->xs_iomutex); in xdb_intr()
550 if (!vdp->xs_if_connected) { in xdb_intr()
551 mutex_exit(&vdp->xs_iomutex); in xdb_intr()
554 ASSERT(vdp->xs_hp_connected && vdp->xs_fe_initialised); in xdb_intr()
564 while (xdb_get_request(vdp, reqp)) { in xdb_intr()
567 op = ddi_get8(vdp->xs_ring_hdl, &reqp->operation); in xdb_intr()
575 xreq = xdb_get_req(vdp); in xdb_intr()
579 vdp->xs_stat_req_reads++; in xdb_intr()
582 vdp->xs_stat_req_barriers++; in xdb_intr()
585 vdp->xs_stat_req_writes++; in xdb_intr()
588 vdp->xs_stat_req_flushes++; in xdb_intr()
593 bp = xdb_get_buf(vdp, reqp, xreq); in xdb_intr()
597 xdb_response(vdp, reqp, B_FALSE); in xdb_intr()
608 if (vdp->xs_f_iobuf == NULL) { in xdb_intr()
609 vdp->xs_f_iobuf = vdp->xs_l_iobuf = bp; in xdb_intr()
611 vdp->xs_l_iobuf->av_forw = bp; in xdb_intr()
612 vdp->xs_l_iobuf = bp; in xdb_intr()
615 xdb_response(vdp, reqp, B_FALSE); in xdb_intr()
618 ddi_get_name_addr(dip), vdp->xs_peer)); in xdb_intr()
623 cv_broadcast(&vdp->xs_iocv); in xdb_intr()
625 mutex_exit(&vdp->xs_iomutex); in xdb_intr()
637 xdb_t *vdp = xreq->xr_vdp; in xdb_biodone() local
643 ddi_get_name_addr(vdp->xs_dip), bioerr)); in xdb_biodone()
647 nbp = xdb_get_buf(vdp, NULL, xreq); in xdb_biodone()
649 err = ldi_strategy(vdp->xs_ldi_hdl, nbp); in xdb_biodone()
658 ddi_get_name_addr(vdp->xs_dip), err)); in xdb_biodone()
673 vdp->xs_iopage_va, xreq->xr_idx, i); in xdb_biodone()
675 mutex_enter(&vdp->xs_iomutex); in xdb_biodone()
676 unlogva(vdp, unmapops[i].host_addr); in xdb_biodone()
677 mutex_exit(&vdp->xs_iomutex); in xdb_biodone()
699 (void) ldi_ioctl(vdp->xs_ldi_hdl, in xdb_biodone()
703 mutex_enter(&vdp->xs_iomutex); in xdb_biodone()
706 if (vdp->xs_if_connected) { in xdb_biodone()
707 ASSERT(vdp->xs_hp_connected && vdp->xs_fe_initialised); in xdb_biodone()
708 if (xdb_push_response(vdp, xreq->xr_id, xreq->xr_op, bioerr)) in xdb_biodone()
709 xvdi_notify_oe(vdp->xs_dip); in xdb_biodone()
718 vdp->xs_ionum--; in xdb_biodone()
719 if (!vdp->xs_if_connected && (vdp->xs_ionum == 0)) { in xdb_biodone()
721 cv_signal(&vdp->xs_ionumcv); in xdb_biodone()
724 mutex_exit(&vdp->xs_iomutex); in xdb_biodone()
730 xdb_bindto_frontend(xdb_t *vdp) in xdb_bindto_frontend() argument
736 dev_info_t *dip = vdp->xs_dip; in xdb_bindto_frontend()
739 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_bindto_frontend()
764 vdp->xs_blk_protocol = BLKIF_PROTOCOL_NATIVE; in xdb_bindto_frontend()
765 vdp->xs_nentry = BLKIF_RING_SIZE; in xdb_bindto_frontend()
766 vdp->xs_entrysize = sizeof (union blkif_sring_entry); in xdb_bindto_frontend()
779 vdp->xs_blk_protocol = BLKIF_PROTOCOL_X86_32; in xdb_bindto_frontend()
780 vdp->xs_nentry = BLKIF_X86_32_RING_SIZE; in xdb_bindto_frontend()
781 vdp->xs_entrysize = in xdb_bindto_frontend()
785 vdp->xs_blk_protocol = BLKIF_PROTOCOL_X86_64; in xdb_bindto_frontend()
786 vdp->xs_nentry = BLKIF_X86_64_RING_SIZE; in xdb_bindto_frontend()
787 vdp->xs_entrysize = in xdb_bindto_frontend()
804 if (xvdi_map_ring(dip, vdp->xs_nentry, vdp->xs_entrysize, in xdb_bindto_frontend()
805 gref, &vdp->xs_ring) != DDI_SUCCESS) in xdb_bindto_frontend()
813 vdp->xs_ring_hdl = vdp->xs_ring->xr_acc_hdl; in xdb_bindto_frontend()
818 xvdi_unmap_ring(vdp->xs_ring); in xdb_bindto_frontend()
826 xdb_unbindfrom_frontend(xdb_t *vdp) in xdb_unbindfrom_frontend() argument
828 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_unbindfrom_frontend()
830 xvdi_free_evtchn(vdp->xs_dip); in xdb_unbindfrom_frontend()
831 xvdi_unmap_ring(vdp->xs_ring); in xdb_unbindfrom_frontend()
843 xdb_params_change(xdb_t *vdp, char *params, boolean_t update_xs) in xdb_params_change() argument
846 dev_info_t *dip = vdp->xs_dip; in xdb_params_change()
850 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_params_change()
851 ASSERT(vdp->xs_params_path != NULL); in xdb_params_change()
855 if (strcmp(vdp->xs_params_path, params) == 0) in xdb_params_change()
863 vdp->xs_fe_initialised = B_FALSE; in xdb_params_change()
901 strfree(vdp->xs_params_path); in xdb_params_change()
902 vdp->xs_params_path = strdup(params); in xdb_params_change()
921 xdb_t *vdp = (xdb_t *)ddi_get_driver_private(dip); in xdb_watch_params_cb() local
929 mutex_enter(&vdp->xs_cbmutex); in xdb_watch_params_cb()
932 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_params_cb()
936 if (strcmp(vdp->xs_params_path, str) == 0) { in xdb_watch_params_cb()
938 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_params_cb()
949 if (!XDB_IS_FE_CD(vdp) || in xdb_watch_params_cb()
961 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_params_cb()
968 xdb_params_change(vdp, str, B_FALSE); in xdb_watch_params_cb()
969 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_params_cb()
989 xdb_t *vdp = (xdb_t *)ddi_get_driver_private(dip); in xdb_watch_media_req_cb() local
992 mutex_enter(&vdp->xs_cbmutex); in xdb_watch_media_req_cb()
995 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_media_req_cb()
1000 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_media_req_cb()
1004 if (!XDB_IS_FE_CD(vdp)) { in xdb_watch_media_req_cb()
1007 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_media_req_cb()
1012 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_media_req_cb()
1020 xdb_params_change(vdp, "", B_TRUE); in xdb_watch_media_req_cb()
1023 mutex_exit(&vdp->xs_cbmutex); in xdb_watch_media_req_cb()
1034 xdb_media_req_init(xdb_t *vdp) in xdb_media_req_init() argument
1036 dev_info_t *dip = vdp->xs_dip; in xdb_media_req_init()
1039 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_media_req_init()
1045 if (!XDB_IS_FE_CD(vdp)) in xdb_media_req_init()
1068 xdb_params_init(xdb_t *vdp) in xdb_params_init() argument
1070 dev_info_t *dip = vdp->xs_dip; in xdb_params_init()
1074 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_params_init()
1075 ASSERT(vdp->xs_params_path == NULL); in xdb_params_init()
1084 vdp->xs_params_path = str; in xdb_params_init()
1088 strfree(vdp->xs_params_path); in xdb_params_init()
1089 vdp->xs_params_path = NULL; in xdb_params_init()
1101 xdb_setup_node(xdb_t *vdp, char *path) in xdb_setup_node() argument
1103 dev_info_t *dip = vdp->xs_dip; in xdb_setup_node()
1109 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_setup_node()
1119 vdp->xs_type |= XDB_DEV_BE_LOFI; in xdb_setup_node()
1122 if (!XDB_IS_BE_LOFI(vdp)) { in xdb_setup_node()
1123 (void) strlcpy(path, vdp->xs_params_path, MAXPATHLEN); in xdb_setup_node()
1124 ASSERT(vdp->xs_lofi_path == NULL); in xdb_setup_node()
1130 &ldi_hdl, vdp->xs_ldi_li); in xdb_setup_node()
1137 (void) strlcpy(li->li_filename, vdp->xs_params_path, in xdb_setup_node()
1146 ddi_get_name_addr(dip), vdp->xs_params_path); in xdb_setup_node()
1157 ASSERT(vdp->xs_lofi_path == NULL); in xdb_setup_node()
1158 vdp->xs_lofi_path = strdup(path); in xdb_setup_node()
1164 xdb_teardown_node(xdb_t *vdp) in xdb_teardown_node() argument
1166 dev_info_t *dip = vdp->xs_dip; in xdb_teardown_node()
1171 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_teardown_node()
1173 if (!XDB_IS_BE_LOFI(vdp)) in xdb_teardown_node()
1176 vdp->xs_type &= ~XDB_DEV_BE_LOFI; in xdb_teardown_node()
1177 ASSERT(vdp->xs_lofi_path != NULL); in xdb_teardown_node()
1180 (void) strlcpy(li->li_filename, vdp->xs_params_path, in xdb_teardown_node()
1185 &ldi_hdl, vdp->xs_ldi_li); in xdb_teardown_node()
1202 strfree(vdp->xs_lofi_path); in xdb_teardown_node()
1203 vdp->xs_lofi_path = NULL; in xdb_teardown_node()
1207 xdb_open_device(xdb_t *vdp) in xdb_open_device() argument
1209 dev_info_t *dip = vdp->xs_dip; in xdb_open_device()
1217 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_open_device()
1219 if (strlen(vdp->xs_params_path) == 0) { in xdb_open_device()
1225 ASSERT(XDB_IS_FE_CD(vdp)); in xdb_open_device()
1226 ASSERT(vdp->xs_sectors == 0); in xdb_open_device()
1227 ASSERT(vdp->xs_ldi_li == NULL); in xdb_open_device()
1228 ASSERT(vdp->xs_ldi_hdl == NULL); in xdb_open_device()
1240 strfree(vdp->xs_params_path); in xdb_open_device()
1241 vdp->xs_params_path = str; in xdb_open_device()
1244 if (ldi_ident_from_dip(dip, &vdp->xs_ldi_li) != 0) in xdb_open_device()
1250 if (xdb_setup_node(vdp, nodepath) != DDI_SUCCESS) { in xdb_open_device()
1253 ldi_ident_release(vdp->xs_ldi_li); in xdb_open_device()
1259 FREAD | (XDB_IS_RO(vdp) ? 0 : FWRITE), in xdb_open_device()
1260 kcred, &vdp->xs_ldi_hdl, vdp->xs_ldi_li) != 0) { in xdb_open_device()
1261 xdb_teardown_node(vdp); in xdb_open_device()
1262 ldi_ident_release(vdp->xs_ldi_li); in xdb_open_device()
1269 if (ldi_get_size(vdp->xs_ldi_hdl, &devsize) != DDI_SUCCESS) { in xdb_open_device()
1270 (void) ldi_close(vdp->xs_ldi_hdl, in xdb_open_device()
1271 FREAD | (XDB_IS_RO(vdp) ? 0 : FWRITE), kcred); in xdb_open_device()
1272 xdb_teardown_node(vdp); in xdb_open_device()
1273 ldi_ident_release(vdp->xs_ldi_li); in xdb_open_device()
1278 blksize = ldi_prop_get_int64(vdp->xs_ldi_hdl, in xdb_open_device()
1282 blksize = ldi_prop_get_int(vdp->xs_ldi_hdl, in xdb_open_device()
1286 vdp->xs_sec_size = blksize; in xdb_open_device()
1287 vdp->xs_sectors = devsize / blksize; in xdb_open_device()
1290 if (ldi_prop_get_int(vdp->xs_ldi_hdl, LDI_DEV_T_ANY | DDI_PROP_DONTPASS, in xdb_open_device()
1292 vdp->xs_type |= XDB_DEV_BE_CD; in xdb_open_device()
1295 if (ldi_prop_exists(vdp->xs_ldi_hdl, in xdb_open_device()
1298 vdp->xs_type |= XDB_DEV_BE_RMB; in xdb_open_device()
1305 xdb_close_device(xdb_t *vdp) in xdb_close_device() argument
1307 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_close_device()
1309 if (strlen(vdp->xs_params_path) == 0) { in xdb_close_device()
1310 ASSERT(XDB_IS_FE_CD(vdp)); in xdb_close_device()
1311 ASSERT(vdp->xs_sectors == 0); in xdb_close_device()
1312 ASSERT(vdp->xs_ldi_li == NULL); in xdb_close_device()
1313 ASSERT(vdp->xs_ldi_hdl == NULL); in xdb_close_device()
1317 (void) ldi_close(vdp->xs_ldi_hdl, in xdb_close_device()
1318 FREAD | (XDB_IS_RO(vdp) ? 0 : FWRITE), kcred); in xdb_close_device()
1319 xdb_teardown_node(vdp); in xdb_close_device()
1320 ldi_ident_release(vdp->xs_ldi_li); in xdb_close_device()
1321 vdp->xs_type &= ~(XDB_DEV_BE_CD | XDB_DEV_BE_RMB); in xdb_close_device()
1322 vdp->xs_sectors = 0; in xdb_close_device()
1323 vdp->xs_ldi_li = NULL; in xdb_close_device()
1324 vdp->xs_ldi_hdl = NULL; in xdb_close_device()
1333 xdb_start_connect(xdb_t *vdp) in xdb_start_connect() argument
1336 dev_info_t *dip = vdp->xs_dip; in xdb_start_connect()
1343 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_start_connect()
1346 ((vdp->xs_peer = xvdi_get_oeid(dip)) == (domid_t)-1)) in xdb_start_connect()
1349 mutex_enter(&vdp->xs_iomutex); in xdb_start_connect()
1354 if (!vdp->xs_hp_connected || !vdp->xs_fe_initialised) { in xdb_start_connect()
1355 ASSERT(!vdp->xs_if_connected); in xdb_start_connect()
1356 mutex_exit(&vdp->xs_iomutex); in xdb_start_connect()
1361 if (vdp->xs_if_connected) { in xdb_start_connect()
1362 mutex_exit(&vdp->xs_iomutex); in xdb_start_connect()
1365 mutex_exit(&vdp->xs_iomutex); in xdb_start_connect()
1375 if (xdb_open_device(vdp) != DDI_SUCCESS) in xdb_start_connect()
1378 if (xdb_bindto_frontend(vdp) != DDI_SUCCESS) { in xdb_start_connect()
1379 xdb_close_device(vdp); in xdb_start_connect()
1384 xdb_init_ioreqs(vdp); in xdb_start_connect()
1386 if (ddi_add_intr(dip, 0, NULL, NULL, xdb_intr, (caddr_t)vdp) in xdb_start_connect()
1388 xdb_uninit_ioreqs(vdp); in xdb_start_connect()
1389 xdb_unbindfrom_frontend(vdp); in xdb_start_connect()
1390 xdb_close_device(vdp); in xdb_start_connect()
1395 if (XDB_IS_RO(vdp)) in xdb_start_connect()
1397 if (XDB_IS_BE_RMB(vdp)) in xdb_start_connect()
1399 if (XDB_IS_BE_CD(vdp)) in xdb_start_connect()
1401 if (XDB_IS_FE_CD(vdp)) in xdb_start_connect()
1408 mutex_enter(&vdp->xs_iomutex); in xdb_start_connect()
1409 ASSERT(vdp->xs_fe_initialised); in xdb_start_connect()
1410 vdp->xs_if_connected = B_TRUE; in xdb_start_connect()
1411 mutex_exit(&vdp->xs_iomutex); in xdb_start_connect()
1423 ssize = (vdp->xs_sec_size == 0) ? DEV_BSIZE : vdp->xs_sec_size; in xdb_start_connect()
1424 sectors = vdp->xs_sectors; in xdb_start_connect()
1459 xdb_t *vdp = (xdb_t *)ddi_get_driver_private(dip); in xdb_close() local
1461 ASSERT(MUTEX_HELD(&vdp->xs_cbmutex)); in xdb_close()
1462 mutex_enter(&vdp->xs_iomutex); in xdb_close()
1469 if (!vdp->xs_hp_connected || !vdp->xs_fe_initialised) { in xdb_close()
1470 ASSERT(!vdp->xs_if_connected); in xdb_close()
1471 mutex_exit(&vdp->xs_iomutex); in xdb_close()
1476 if (!vdp->xs_if_connected) { in xdb_close()
1477 cv_broadcast(&vdp->xs_iocv); in xdb_close()
1478 mutex_exit(&vdp->xs_iomutex); in xdb_close()
1484 vdp->xs_if_connected = B_FALSE; in xdb_close()
1485 cv_broadcast(&vdp->xs_iocv); in xdb_close()
1487 mutex_exit(&vdp->xs_iomutex); in xdb_close()
1493 mutex_enter(&vdp->xs_iomutex); in xdb_close()
1494 while (vdp->xs_ionum > 0) in xdb_close()
1495 cv_wait(&vdp->xs_ionumcv, &vdp->xs_iomutex); in xdb_close()
1496 mutex_exit(&vdp->xs_iomutex); in xdb_close()
1499 xdb_uninit_ioreqs(vdp); in xdb_close()
1500 xdb_unbindfrom_frontend(vdp); in xdb_close()
1501 xdb_close_device(vdp); in xdb_close()
1502 vdp->xs_peer = (domid_t)-1; in xdb_close()
1508 xdb_t *vdp = (xdb_t *)arg; in xdb_send_buf() local
1512 mutex_enter(&vdp->xs_iomutex); in xdb_send_buf()
1513 while (vdp->xs_send_buf) { in xdb_send_buf()
1514 if ((bp = vdp->xs_f_iobuf) == NULL) { in xdb_send_buf()
1518 cv_wait(&vdp->xs_iocv, &vdp->xs_iomutex); in xdb_send_buf()
1522 vdp->xs_f_iobuf = bp->av_forw; in xdb_send_buf()
1524 vdp->xs_ionum++; in xdb_send_buf()
1526 mutex_exit(&vdp->xs_iomutex); in xdb_send_buf()
1530 mutex_enter(&vdp->xs_iomutex); in xdb_send_buf()
1535 if (vdp->xs_ldi_hdl != NULL) in xdb_send_buf()
1536 err = ldi_strategy(vdp->xs_ldi_hdl, bp); in xdb_send_buf()
1542 ddi_get_name_addr(vdp->xs_dip), err)); in xdb_send_buf()
1547 mutex_enter(&vdp->xs_iomutex); in xdb_send_buf()
1550 mutex_exit(&vdp->xs_iomutex); in xdb_send_buf()
1559 xdb_t *vdp = (xdb_t *)ddi_get_driver_private(dip); in xdb_hp_state_change() local
1567 mutex_enter(&vdp->xs_cbmutex); in xdb_hp_state_change()
1570 if (vdp->xs_hp_connected) { in xdb_hp_state_change()
1571 mutex_exit(&vdp->xs_cbmutex); in xdb_hp_state_change()
1575 vdp->xs_hp_connected = B_TRUE; in xdb_hp_state_change()
1576 xdb_start_connect(vdp); in xdb_hp_state_change()
1577 mutex_exit(&vdp->xs_cbmutex); in xdb_hp_state_change()
1586 xdb_t *vdp = (xdb_t *)ddi_get_driver_private(dip); in xdb_oe_state_change() local
1591 mutex_enter(&vdp->xs_cbmutex); in xdb_oe_state_change()
1606 vdp->xs_fe_initialised = B_FALSE; in xdb_oe_state_change()
1615 vdp->xs_fe_initialised = B_TRUE; in xdb_oe_state_change()
1616 xdb_start_connect(vdp); in xdb_oe_state_change()
1631 vdp->xs_fe_initialised = B_FALSE; in xdb_oe_state_change()
1636 mutex_exit(&vdp->xs_cbmutex); in xdb_oe_state_change()
1643 xdb_t *vdp; in xdb_attach() local
1674 vdp = ddi_get_soft_state(xdb_statep, instance); in xdb_attach()
1675 vdp->xs_dip = dip; in xdb_attach()
1676 mutex_init(&vdp->xs_iomutex, NULL, MUTEX_DRIVER, (void *)ibc); in xdb_attach()
1677 mutex_init(&vdp->xs_cbmutex, NULL, MUTEX_DRIVER, (void *)ibc); in xdb_attach()
1678 cv_init(&vdp->xs_iocv, NULL, CV_DRIVER, NULL); in xdb_attach()
1679 cv_init(&vdp->xs_ionumcv, NULL, CV_DRIVER, NULL); in xdb_attach()
1680 ddi_set_driver_private(dip, vdp); in xdb_attach()
1682 if (!xdb_kstat_init(vdp)) in xdb_attach()
1689 vdp->xs_type |= XDB_DEV_FE_CD; in xdb_attach()
1696 vdp->xs_type |= XDB_DEV_RO; in xdb_attach()
1699 mutex_enter(&vdp->xs_cbmutex); in xdb_attach()
1700 if (!xdb_media_req_init(vdp) || !xdb_params_init(vdp)) { in xdb_attach()
1702 mutex_exit(&vdp->xs_cbmutex); in xdb_attach()
1705 mutex_exit(&vdp->xs_cbmutex); in xdb_attach()
1707 vdp->xs_send_buf = B_TRUE; in xdb_attach()
1708 vdp->xs_iotaskq = ddi_taskq_create(dip, "xdb_iotask", 1, in xdb_attach()
1710 (void) ddi_taskq_dispatch(vdp->xs_iotaskq, xdb_send_buf, vdp, in xdb_attach()
1740 ASSERT(vdp->xs_hp_connected && vdp->xs_if_connected); in xdb_attach()
1745 mutex_enter(&vdp->xs_cbmutex); in xdb_attach()
1746 mutex_enter(&vdp->xs_iomutex); in xdb_attach()
1747 vdp->xs_send_buf = B_FALSE; in xdb_attach()
1748 cv_broadcast(&vdp->xs_iocv); in xdb_attach()
1749 mutex_exit(&vdp->xs_iomutex); in xdb_attach()
1750 mutex_exit(&vdp->xs_cbmutex); in xdb_attach()
1753 ddi_taskq_destroy(vdp->xs_iotaskq); in xdb_attach()
1756 mutex_enter(&vdp->xs_cbmutex); in xdb_attach()
1758 mutex_exit(&vdp->xs_cbmutex); in xdb_attach()
1762 kstat_delete(vdp->xs_kstats); in xdb_attach()
1767 cv_destroy(&vdp->xs_iocv); in xdb_attach()
1768 cv_destroy(&vdp->xs_ionumcv); in xdb_attach()
1769 mutex_destroy(&vdp->xs_cbmutex); in xdb_attach()
1770 mutex_destroy(&vdp->xs_iomutex); in xdb_attach()
1781 xdb_t *vdp = XDB_INST2SOFTS(instance); in xdb_detach() local
1795 mutex_enter(&vdp->xs_iomutex); in xdb_detach()
1796 if (vdp->xs_if_connected) { in xdb_detach()
1797 mutex_exit(&vdp->xs_iomutex); in xdb_detach()
1800 vdp->xs_send_buf = B_FALSE; in xdb_detach()
1801 cv_broadcast(&vdp->xs_iocv); in xdb_detach()
1802 mutex_exit(&vdp->xs_iomutex); in xdb_detach()
1807 ddi_taskq_destroy(vdp->xs_iotaskq); in xdb_detach()
1809 mutex_enter(&vdp->xs_cbmutex); in xdb_detach()
1811 mutex_exit(&vdp->xs_cbmutex); in xdb_detach()
1813 cv_destroy(&vdp->xs_iocv); in xdb_detach()
1814 cv_destroy(&vdp->xs_ionumcv); in xdb_detach()
1815 mutex_destroy(&vdp->xs_cbmutex); in xdb_detach()
1816 mutex_destroy(&vdp->xs_iomutex); in xdb_detach()
1817 kstat_delete(vdp->xs_kstats); in xdb_detach()
1886 xdb_get_request(xdb_t *vdp, blkif_request_t *req) in xdb_get_request() argument
1888 void *src = xvdi_ring_get_request(vdp->xs_ring); in xdb_get_request()
1893 switch (vdp->xs_blk_protocol) { in xdb_get_request()
1905 ddi_get_name_addr(vdp->xs_dip), in xdb_get_request()
1906 vdp->xs_blk_protocol); in xdb_get_request()
1912 xdb_push_response(xdb_t *vdp, uint64_t id, uint8_t op, uint16_t status) in xdb_push_response() argument
1914 ddi_acc_handle_t acchdl = vdp->xs_ring_hdl; in xdb_push_response()
1915 blkif_response_t *rsp = xvdi_ring_get_response(vdp->xs_ring); in xdb_push_response()
1921 switch (vdp->xs_blk_protocol) { in xdb_push_response()
1942 ddi_get_name_addr(vdp->xs_dip), in xdb_push_response()
1943 vdp->xs_blk_protocol); in xdb_push_response()
1946 return (xvdi_ring_push_response(vdp->xs_ring)); in xdb_push_response()