Lines Matching +full:0 +full:xbd
70 #if 0
79 static MALLOC_DEFINE(M_XENBLOCKFRONT, "xbd", "Xen Block Front driver data");
82 SYSCTL_NODE(_hw, OID_AUTO, xbd, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
83 "xbd driver parameters");
85 &xbd_enable_indirect, 0, "Enable xbd indirect segments");
91 if (xbd_flag != XBDF_NONE && (sc->xbd_flags & xbd_flag) != 0) in xbd_freeze()
101 if (xbd_flag != XBDF_NONE && (sc->xbd_flags & xbd_flag) == 0) in xbd_thaw()
104 if (sc->xbd_qfrozen_cnt == 0) in xbd_thaw()
105 panic("%s: Thaw with flag 0x%x while not frozen.", in xbd_thaw()
115 if ((cm->cm_flags & XBDCF_FROZEN) != 0) in xbd_cm_freeze()
125 if ((cm->cm_flags & XBDCF_FROZEN) == 0) in xbd_cm_thaw()
170 KASSERT((segs->ds_addr & (sector_size - 1)) == 0, in xbd_mksegarray()
172 KASSERT((segs->ds_len & (sector_size - 1)) == 0, in xbd_mksegarray()
186 * GNTTAB_LIST_END == 0xffffffff, but it is private in xbd_mksegarray()
189 KASSERT(ref != ~0, ("grant_reference failed")); in xbd_mksegarray()
275 op = 0; in xbd_queue_cb()
289 if ((cm->cm_flags & XBDCF_ASYNC_MAPPING) != 0) in xbd_queue_cb()
302 cm->cm_bp, xbd_queue_cb, cm, 0); in xbd_queue_request()
305 cm->cm_data, cm->cm_datalen, xbd_queue_cb, cm, 0); in xbd_queue_request()
314 return (0); in xbd_queue_request()
354 &cm->cm_gref_head) != 0) { in xbd_bio_command()
375 if ((bp->bio_flags & BIO_ORDERED) != 0) { in xbd_bio_command()
376 if ((sc->xbd_flags & XBDF_BARRIER) != 0) { in xbd_bio_command()
383 if (xbd_queue_length(sc, XBD_Q_BUSY) != 0) { in xbd_bio_command()
396 if ((sc->xbd_flags & XBDF_FLUSH) != 0) in xbd_bio_command()
398 else if ((sc->xbd_flags & XBDF_BARRIER) != 0) in xbd_bio_command()
423 int error, queued = 0; in xbd_startio()
431 if (sc->xbd_qfrozen_cnt != 0) in xbd_startio()
442 if ((cm->cm_flags & XBDCF_Q_FREEZE) != 0) { in xbd_startio()
450 if ((error = xbd_queue_request(sc, cm)) != 0) { in xbd_startio()
457 if (queued != 0) in xbd_startio()
469 disk_err(bp, "disk error" , -1, 0); in xbd_bio_complete()
477 bp->bio_resid = 0; in xbd_bio_complete()
518 op = 0; in xbd_int()
552 if (xbd_queue_length(sc, XBD_Q_BUSY) == 0) in xbd_int()
573 while (xbd_queue_length(sc, XBD_Q_BUSY) != 0) { in xbd_quiesce()
579 if (xbd_queue_length(sc, XBD_Q_BUSY) != 0) { in xbd_quiesce()
604 int rc = 0; in xbd_dump()
606 if (length == 0) in xbd_dump()
607 return (0); in xbd_dump()
618 while (length > 0) { in xbd_dump()
627 &cm->cm_gref_head) != 0) { in xbd_dump()
677 printf("xbd%d: not found", dp->d_unit); in xbd_open()
683 return (0); in xbd_open()
694 if (--(sc->xbd_users) == 0) { in xbd_close()
704 return (0); in xbd_close()
766 for (i = 0, sring_page_addr = (uintptr_t)sring; in xbd_alloc_ring()
780 "ring-ref", "%u", sc->xbd_ring_ref[0]); in xbd_alloc_ring()
788 for (i = 0; i < sc->xbd_ring_pages; i++) { in xbd_alloc_ring()
814 return (0); in xbd_alloc_ring()
825 for (i = 0; i < sc->xbd_ring_pages; i++) { in xbd_free_ring()
844 feature_cnt = 0; in xbd_feature_string()
845 if ((sc->xbd_flags & XBDF_FLUSH) != 0) { in xbd_feature_string()
850 if ((sc->xbd_flags & XBDF_BARRIER) != 0) { in xbd_feature_string()
851 if (feature_cnt != 0) in xbd_feature_string()
857 if ((sc->xbd_flags & XBDF_DISCARD) != 0) { in xbd_feature_string()
858 if (feature_cnt != 0) in xbd_feature_string()
864 if ((sc->xbd_flags & XBDF_PERSISTENT) != 0) { in xbd_feature_string()
865 if (feature_cnt != 0) in xbd_feature_string()
883 error = sysctl_wire_old_buffer(req, 0); in xbd_sysctl_features()
884 if (error != 0) in xbd_sysctl_features()
894 xbd_setup_sysctl(struct xbd_softc *xbd) in xbd_setup_sysctl() argument
900 sysctl_ctx = device_get_sysctl_ctx(xbd->xbd_dev); in xbd_setup_sysctl()
904 sysctl_tree = device_get_sysctl_tree(xbd->xbd_dev); in xbd_setup_sysctl()
910 "max_requests", CTLFLAG_RD, &xbd->xbd_max_requests, -1, in xbd_setup_sysctl()
915 &xbd->xbd_max_request_segments, 0, in xbd_setup_sysctl()
919 "max_request_size", CTLFLAG_RD, &xbd->xbd_max_request_size, 0, in xbd_setup_sysctl()
923 "ring_pages", CTLFLAG_RD, &xbd->xbd_ring_pages, 0, in xbd_setup_sysctl()
927 "features", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE, xbd, in xbd_setup_sysctl()
928 0, xbd_sysctl_features, "A", "protocol features (negotiated)"); in xbd_setup_sysctl()
945 {3, 6, 0, "ada"}, /* ide0 */ in xbd_vdevice_to_unit()
956 {8, 4, 0, "da"}, /* scsi disk0 */ in xbd_vdevice_to_unit()
973 {202, 4, 0, "xbd"}, /* xbd */ in xbd_vdevice_to_unit()
975 {0, 0, 0, NULL}, in xbd_vdevice_to_unit()
978 int minor = vdevice & 0xff; in xbd_vdevice_to_unit()
983 *name = "xbd"; in xbd_vdevice_to_unit()
987 for (i = 0; info[i].major; i++) { in xbd_vdevice_to_unit()
996 *name = "xbd"; in xbd_vdevice_to_unit()
1005 int unit, error = 0; in xbd_instance_create()
1012 if (strcmp(name, "xbd") != 0) in xbd_instance_create()
1015 if (xbd_feature_string(sc, features, sizeof(features)) > 0) { in xbd_instance_create()
1031 sc->xbd_disk->d_stripeoffset = 0; in xbd_instance_create()
1038 if ((sc->xbd_disk->d_mediasize % sc->xbd_disk->d_sectorsize) != 0) { in xbd_instance_create()
1048 if ((sc->xbd_flags & (XBDF_FLUSH|XBDF_BARRIER)) != 0) { in xbd_instance_create()
1071 for (i = 0; i < sc->xbd_max_requests; i++) { in xbd_free()
1083 &cm->cm_indirectionrefs[0]); in xbd_free()
1122 max_ring_page_order = 0; in xbd_initialize()
1158 if (powerof2(sc->xbd_ring_pages) == 0) { in xbd_initialize()
1161 new_page_limit = 0x01 << (fls(sc->xbd_ring_pages) - 1); in xbd_initialize()
1179 if (xbd_alloc_ring(sc) != 0) in xbd_initialize()
1255 if (err != 0) { in xbd_connect()
1286 if ((sectors == 0) || (sector_size == 0)) { in xbd_connect()
1287 xenbus_dev_fatal(dev, 0, in xbd_connect()
1298 phys_sector_size = 0; in xbd_connect()
1302 if (err == 0 && feature_barrier != 0) in xbd_connect()
1308 if (err == 0 && feature_flush != 0) in xbd_connect()
1314 if ((err != 0) || (xbd_enable_indirect == 0)) in xbd_connect()
1315 sc->xbd_max_request_segments = 0; in xbd_connect()
1341 if (err != 0) { in xbd_connect()
1357 for (i = 0; i < sc->xbd_max_requests; i++) { in xbd_connect()
1370 if (bus_dmamap_create(sc->xbd_io_dmat, 0, &cm->cm_map) != 0) in xbd_connect()
1372 if (sc->xbd_max_request_indirectpages > 0) { in xbd_connect()
1375 M_XENBLOCKFRONT, M_ZERO | M_NOWAIT, 0, ~0, in xbd_connect()
1376 PAGE_SIZE, 0); in xbd_connect()
1378 sc->xbd_max_request_indirectpages = 0; in xbd_connect()
1382 for (j = 0; j < sc->xbd_max_request_indirectpages; j++) { in xbd_connect()
1407 if (err != 0) { in xbd_connect()
1450 if (strcmp(xenbus_get_type(dev), "vbd") != 0) in xbd_probe()
1479 if (strncmp(type, "cdrom", 5) == 0) { in xbd_probe()
1488 return (0); in xbd_probe()
1519 if (!strcmp(name, "xbd")) in xbd_attach()
1525 for (i = 0; i < XBD_MAX_RING_PAGES; i++) in xbd_attach()
1537 return (0); in xbd_attach()
1550 return 0; in xbd_detach()
1566 retval = 0; in xbd_suspend()
1567 while (xbd_queue_length(sc, XBD_Q_BUSY) != 0) { in xbd_suspend()
1576 if (retval != 0) in xbd_suspend()
1589 return (0); in xbd_resume()
1596 return (0); in xbd_resume()
1628 if (sc->xbd_users > 0) { in xbd_backend_changed()
1657 "xbd",
1662 DRIVER_MODULE(xbd, xenbusb_front, xbd_driver, 0, 0);