Lines Matching refs:lu

194 static UfsReqResult ufs_emulate_scsi_cmd(UfsLu *lu, UfsRequest *req)  in ufs_emulate_scsi_cmd()  argument
196 uint8_t lun = lu->lun; in ufs_emulate_scsi_cmd()
251 static UfsReqResult ufs_process_scsi_cmd(UfsLu *lu, UfsRequest *req) in ufs_process_scsi_cmd() argument
262 return ufs_emulate_scsi_cmd(lu, req); in ufs_process_scsi_cmd()
266 scsi_req_new(lu->scsi_dev, task_tag, lu->lun, req->req_upiu.sc.cdb, in ufs_process_scsi_cmd()
282 static bool ufs_add_lu(UfsHc *u, UfsLu *lu, Error **errp) in ufs_add_lu() argument
284 BlockBackend *blk = lu->conf.blk; in ufs_add_lu()
294 if (u->lus[lu->lun] != NULL) { in ufs_add_lu()
295 error_setg(errp, "ufs logical unit %d already exists.", lu->lun); in ufs_add_lu()
299 u->lus[lu->lun] = lu; in ufs_add_lu()
312 static void ufs_init_lu(UfsLu *lu) in ufs_init_lu() argument
314 BlockBackend *blk = lu->conf.blk; in ufs_init_lu()
317 memset(&lu->unit_desc, 0, sizeof(lu->unit_desc)); in ufs_init_lu()
318 lu->unit_desc.length = sizeof(UnitDescriptor); in ufs_init_lu()
319 lu->unit_desc.descriptor_idn = UFS_QUERY_DESC_IDN_UNIT; in ufs_init_lu()
320 lu->unit_desc.lu_enable = 0x01; in ufs_init_lu()
321 lu->unit_desc.logical_block_size = UFS_BLOCK_SIZE_SHIFT; in ufs_init_lu()
322 lu->unit_desc.unit_index = lu->lun; in ufs_init_lu()
323 lu->unit_desc.logical_block_count = in ufs_init_lu()
324 cpu_to_be64(brdv_len / (1 << lu->unit_desc.logical_block_size)); in ufs_init_lu()
326 lu->scsi_op = &ufs_process_scsi_cmd; in ufs_init_lu()
329 static bool ufs_lu_check_constraints(UfsLu *lu, Error **errp) in ufs_lu_check_constraints() argument
331 if (!lu->conf.blk) { in ufs_lu_check_constraints()
336 if (lu->lun >= UFS_MAX_LUS) { in ufs_lu_check_constraints()
344 static void ufs_init_scsi_device(UfsLu *lu, BlockBackend *blk, Error **errp) in ufs_init_scsi_device() argument
348 scsi_bus_init(&lu->bus, sizeof(lu->bus), DEVICE(lu), &ufs_scsi_info); in ufs_init_scsi_device()
351 blk_detach_dev(blk, DEVICE(lu)); in ufs_init_scsi_device()
352 lu->conf.blk = NULL; in ufs_init_scsi_device()
359 object_property_add_child(OBJECT(&lu->bus), "ufs-scsi", OBJECT(scsi_dev)); in ufs_init_scsi_device()
364 qdev_prop_set_uint32(scsi_dev, "lun", lu->lun); in ufs_init_scsi_device()
370 if (!qdev_realize_and_unref(scsi_dev, &lu->bus.qbus, errp)) { in ufs_init_scsi_device()
376 lu->scsi_dev = SCSI_DEVICE(scsi_dev); in ufs_init_scsi_device()
381 UfsLu *lu = DO_UPCAST(UfsLu, qdev, dev); in ufs_lu_realize() local
384 BlockBackend *blk = lu->conf.blk; in ufs_lu_realize()
386 if (!ufs_lu_check_constraints(lu, errp)) { in ufs_lu_realize()
395 if (!blkconf_blocksizes(&lu->conf, errp)) { in ufs_lu_realize()
399 if (!blkconf_apply_backend_options(&lu->conf, !blk_supports_write_perm(blk), in ufs_lu_realize()
404 ufs_init_lu(lu); in ufs_lu_realize()
405 if (!ufs_add_lu(u, lu, errp)) { in ufs_lu_realize()
409 ufs_init_scsi_device(lu, blk, errp); in ufs_lu_realize()
414 UfsLu *lu = DO_UPCAST(UfsLu, qdev, dev); in ufs_lu_unrealize() local
416 if (lu->scsi_dev) { in ufs_lu_unrealize()
417 object_unref(OBJECT(lu->scsi_dev)); in ufs_lu_unrealize()
418 lu->scsi_dev = NULL; in ufs_lu_unrealize()