Lines Matching refs:mgr
25 struct fpga_manager *mgr; member
28 static inline void fpga_mgr_fpga_remove(struct fpga_manager *mgr) in fpga_mgr_fpga_remove() argument
30 if (mgr->mops->fpga_remove) in fpga_mgr_fpga_remove()
31 mgr->mops->fpga_remove(mgr); in fpga_mgr_fpga_remove()
34 static inline enum fpga_mgr_states fpga_mgr_state(struct fpga_manager *mgr) in fpga_mgr_state() argument
36 if (mgr->mops->state) in fpga_mgr_state()
37 return mgr->mops->state(mgr); in fpga_mgr_state()
41 static inline u64 fpga_mgr_status(struct fpga_manager *mgr) in fpga_mgr_status() argument
43 if (mgr->mops->status) in fpga_mgr_status()
44 return mgr->mops->status(mgr); in fpga_mgr_status()
48 static inline int fpga_mgr_write(struct fpga_manager *mgr, const char *buf, size_t count) in fpga_mgr_write() argument
50 if (mgr->mops->write) in fpga_mgr_write()
51 return mgr->mops->write(mgr, buf, count); in fpga_mgr_write()
59 static inline int fpga_mgr_write_complete(struct fpga_manager *mgr, in fpga_mgr_write_complete() argument
64 mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE; in fpga_mgr_write_complete()
65 if (mgr->mops->write_complete) in fpga_mgr_write_complete()
66 ret = mgr->mops->write_complete(mgr, info); in fpga_mgr_write_complete()
68 dev_err(&mgr->dev, "Error after writing image data to FPGA\n"); in fpga_mgr_write_complete()
69 mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE_ERR; in fpga_mgr_write_complete()
72 mgr->state = FPGA_MGR_STATE_OPERATING; in fpga_mgr_write_complete()
77 static inline int fpga_mgr_write_init(struct fpga_manager *mgr, in fpga_mgr_write_init() argument
81 if (mgr->mops->write_init) in fpga_mgr_write_init()
82 return mgr->mops->write_init(mgr, info, buf, count); in fpga_mgr_write_init()
86 static inline int fpga_mgr_write_sg(struct fpga_manager *mgr, in fpga_mgr_write_sg() argument
89 if (mgr->mops->write_sg) in fpga_mgr_write_sg()
90 return mgr->mops->write_sg(mgr, sgt); in fpga_mgr_write_sg()
144 static int fpga_mgr_write_init_buf(struct fpga_manager *mgr, in fpga_mgr_write_init_buf() argument
150 mgr->state = FPGA_MGR_STATE_WRITE_INIT; in fpga_mgr_write_init_buf()
151 if (!mgr->mops->initial_header_size) in fpga_mgr_write_init_buf()
152 ret = fpga_mgr_write_init(mgr, info, NULL, 0); in fpga_mgr_write_init_buf()
155 mgr, info, buf, min(mgr->mops->initial_header_size, count)); in fpga_mgr_write_init_buf()
158 dev_err(&mgr->dev, "Error preparing FPGA for writing\n"); in fpga_mgr_write_init_buf()
159 mgr->state = FPGA_MGR_STATE_WRITE_INIT_ERR; in fpga_mgr_write_init_buf()
166 static int fpga_mgr_write_init_sg(struct fpga_manager *mgr, in fpga_mgr_write_init_sg() argument
175 if (!mgr->mops->initial_header_size) in fpga_mgr_write_init_sg()
176 return fpga_mgr_write_init_buf(mgr, info, NULL, 0); in fpga_mgr_write_init_sg()
184 miter.length >= mgr->mops->initial_header_size) { in fpga_mgr_write_init_sg()
185 ret = fpga_mgr_write_init_buf(mgr, info, miter.addr, in fpga_mgr_write_init_sg()
193 buf = kmalloc(mgr->mops->initial_header_size, GFP_KERNEL); in fpga_mgr_write_init_sg()
198 mgr->mops->initial_header_size); in fpga_mgr_write_init_sg()
199 ret = fpga_mgr_write_init_buf(mgr, info, buf, len); in fpga_mgr_write_init_sg()
223 static int fpga_mgr_buf_load_sg(struct fpga_manager *mgr, in fpga_mgr_buf_load_sg() argument
229 ret = fpga_mgr_write_init_sg(mgr, info, sgt); in fpga_mgr_buf_load_sg()
234 mgr->state = FPGA_MGR_STATE_WRITE; in fpga_mgr_buf_load_sg()
235 if (mgr->mops->write_sg) { in fpga_mgr_buf_load_sg()
236 ret = fpga_mgr_write_sg(mgr, sgt); in fpga_mgr_buf_load_sg()
242 ret = fpga_mgr_write(mgr, miter.addr, miter.length); in fpga_mgr_buf_load_sg()
250 dev_err(&mgr->dev, "Error while writing image data to FPGA\n"); in fpga_mgr_buf_load_sg()
251 mgr->state = FPGA_MGR_STATE_WRITE_ERR; in fpga_mgr_buf_load_sg()
255 return fpga_mgr_write_complete(mgr, info); in fpga_mgr_buf_load_sg()
258 static int fpga_mgr_buf_load_mapped(struct fpga_manager *mgr, in fpga_mgr_buf_load_mapped() argument
264 ret = fpga_mgr_write_init_buf(mgr, info, buf, count); in fpga_mgr_buf_load_mapped()
271 mgr->state = FPGA_MGR_STATE_WRITE; in fpga_mgr_buf_load_mapped()
272 ret = fpga_mgr_write(mgr, buf, count); in fpga_mgr_buf_load_mapped()
274 dev_err(&mgr->dev, "Error while writing image data to FPGA\n"); in fpga_mgr_buf_load_mapped()
275 mgr->state = FPGA_MGR_STATE_WRITE_ERR; in fpga_mgr_buf_load_mapped()
279 return fpga_mgr_write_complete(mgr, info); in fpga_mgr_buf_load_mapped()
296 static int fpga_mgr_buf_load(struct fpga_manager *mgr, in fpga_mgr_buf_load() argument
312 if (mgr->mops->write) in fpga_mgr_buf_load()
313 return fpga_mgr_buf_load_mapped(mgr, info, buf, count); in fpga_mgr_buf_load()
348 rc = fpga_mgr_buf_load_sg(mgr, info, &sgt); in fpga_mgr_buf_load()
368 static int fpga_mgr_firmware_load(struct fpga_manager *mgr, in fpga_mgr_firmware_load() argument
372 struct device *dev = &mgr->dev; in fpga_mgr_firmware_load()
376 dev_info(dev, "writing %s to %s\n", image_name, mgr->name); in fpga_mgr_firmware_load()
378 mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ; in fpga_mgr_firmware_load()
382 mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ_ERR; in fpga_mgr_firmware_load()
387 ret = fpga_mgr_buf_load(mgr, info, fw->data, fw->size); in fpga_mgr_firmware_load()
404 int fpga_mgr_load(struct fpga_manager *mgr, struct fpga_image_info *info) in fpga_mgr_load() argument
407 return fpga_mgr_buf_load_sg(mgr, info, info->sgt); in fpga_mgr_load()
409 return fpga_mgr_buf_load(mgr, info, info->buf, info->count); in fpga_mgr_load()
411 return fpga_mgr_firmware_load(mgr, info, info->firmware_name); in fpga_mgr_load()
445 struct fpga_manager *mgr = to_fpga_manager(dev); in name_show() local
447 return sprintf(buf, "%s\n", mgr->name); in name_show()
453 struct fpga_manager *mgr = to_fpga_manager(dev); in state_show() local
455 return sprintf(buf, "%s\n", state_str[mgr->state]); in state_show()
461 struct fpga_manager *mgr = to_fpga_manager(dev); in status_show() local
465 status = fpga_mgr_status(mgr); in status_show()
495 struct fpga_manager *mgr; in __fpga_mgr_get() local
497 mgr = to_fpga_manager(dev); in __fpga_mgr_get()
502 return mgr; in __fpga_mgr_get()
554 void fpga_mgr_put(struct fpga_manager *mgr) in fpga_mgr_put() argument
556 module_put(mgr->dev.parent->driver->owner); in fpga_mgr_put()
557 put_device(&mgr->dev); in fpga_mgr_put()
573 int fpga_mgr_lock(struct fpga_manager *mgr) in fpga_mgr_lock() argument
575 if (!mutex_trylock(&mgr->ref_mutex)) { in fpga_mgr_lock()
576 dev_err(&mgr->dev, "FPGA manager is in use.\n"); in fpga_mgr_lock()
588 void fpga_mgr_unlock(struct fpga_manager *mgr) in fpga_mgr_unlock() argument
590 mutex_unlock(&mgr->ref_mutex); in fpga_mgr_unlock()
610 struct fpga_manager *mgr; in fpga_mgr_create() local
623 mgr = kzalloc(sizeof(*mgr), GFP_KERNEL); in fpga_mgr_create()
624 if (!mgr) in fpga_mgr_create()
631 mutex_init(&mgr->ref_mutex); in fpga_mgr_create()
633 mgr->name = name; in fpga_mgr_create()
634 mgr->mops = mops; in fpga_mgr_create()
635 mgr->priv = priv; in fpga_mgr_create()
637 device_initialize(&mgr->dev); in fpga_mgr_create()
638 mgr->dev.class = fpga_mgr_class; in fpga_mgr_create()
639 mgr->dev.groups = mops->groups; in fpga_mgr_create()
640 mgr->dev.parent = parent; in fpga_mgr_create()
641 mgr->dev.of_node = parent->of_node; in fpga_mgr_create()
642 mgr->dev.id = id; in fpga_mgr_create()
644 ret = dev_set_name(&mgr->dev, "fpga%d", id); in fpga_mgr_create()
648 return mgr; in fpga_mgr_create()
653 kfree(mgr); in fpga_mgr_create()
663 void fpga_mgr_free(struct fpga_manager *mgr) in fpga_mgr_free() argument
665 ida_simple_remove(&fpga_mgr_ida, mgr->dev.id); in fpga_mgr_free()
666 kfree(mgr); in fpga_mgr_free()
674 fpga_mgr_free(dr->mgr); in devm_fpga_mgr_release()
704 dr->mgr = fpga_mgr_create(parent, name, mops, priv); in devm_fpga_mgr_create()
705 if (!dr->mgr) { in devm_fpga_mgr_create()
712 return dr->mgr; in devm_fpga_mgr_create()
722 int fpga_mgr_register(struct fpga_manager *mgr) in fpga_mgr_register() argument
731 mgr->state = fpga_mgr_state(mgr); in fpga_mgr_register()
733 ret = device_add(&mgr->dev); in fpga_mgr_register()
737 dev_info(&mgr->dev, "%s registered\n", mgr->name); in fpga_mgr_register()
742 ida_simple_remove(&fpga_mgr_ida, mgr->dev.id); in fpga_mgr_register()
754 void fpga_mgr_unregister(struct fpga_manager *mgr) in fpga_mgr_unregister() argument
756 dev_info(&mgr->dev, "%s %s\n", __func__, mgr->name); in fpga_mgr_unregister()
762 fpga_mgr_fpga_remove(mgr); in fpga_mgr_unregister()
764 device_unregister(&mgr->dev); in fpga_mgr_unregister()
773 return match_data == dr->mgr; in fpga_mgr_devres_match()
780 fpga_mgr_unregister(dr->mgr); in devm_fpga_mgr_unregister()
791 int devm_fpga_mgr_register(struct device *dev, struct fpga_manager *mgr) in devm_fpga_mgr_register() argument
801 fpga_mgr_devres_match, mgr))) in devm_fpga_mgr_register()
808 ret = fpga_mgr_register(mgr); in devm_fpga_mgr_register()
814 dr->mgr = mgr; in devm_fpga_mgr_register()