Lines Matching defs:mgr

12 #include <linux/fpga/fpga-mgr.h>
74 static int fpga_mgr_write_init_buf(struct fpga_manager *mgr,
80 mgr->state = FPGA_MGR_STATE_WRITE_INIT;
81 if (!mgr->mops->initial_header_size)
82 ret = mgr->mops->write_init(mgr, info, NULL, 0);
84 ret = mgr->mops->write_init(
85 mgr, info, buf, min(mgr->mops->initial_header_size, count));
88 dev_err(&mgr->dev, "Error preparing FPGA for writing\n");
89 mgr->state = FPGA_MGR_STATE_WRITE_INIT_ERR;
96 static int fpga_mgr_write_init_sg(struct fpga_manager *mgr,
105 if (!mgr->mops->initial_header_size)
106 return fpga_mgr_write_init_buf(mgr, info, NULL, 0);
114 miter.length >= mgr->mops->initial_header_size) {
115 ret = fpga_mgr_write_init_buf(mgr, info, miter.addr,
123 buf = kmalloc(mgr->mops->initial_header_size, GFP_KERNEL);
128 mgr->mops->initial_header_size);
129 ret = fpga_mgr_write_init_buf(mgr, info, buf, len);
140 static int fpga_mgr_write_complete(struct fpga_manager *mgr,
145 mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE;
146 ret = mgr->mops->write_complete(mgr, info);
148 dev_err(&mgr->dev, "Error after writing image data to FPGA\n");
149 mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE_ERR;
152 mgr->state = FPGA_MGR_STATE_OPERATING;
159 * @mgr: fpga manager
166 * mgr pointer from of_fpga_mgr_get() or fpga_mgr_get() and checked that it is
174 static int fpga_mgr_buf_load_sg(struct fpga_manager *mgr,
180 ret = fpga_mgr_write_init_sg(mgr, info, sgt);
185 mgr->state = FPGA_MGR_STATE_WRITE;
186 if (mgr->mops->write_sg) {
187 ret = mgr->mops->write_sg(mgr, sgt);
193 ret = mgr->mops->write(mgr, miter.addr, miter.length);
201 dev_err(&mgr->dev, "Error while writing image data to FPGA\n");
202 mgr->state = FPGA_MGR_STATE_WRITE_ERR;
206 return fpga_mgr_write_complete(mgr, info);
209 static int fpga_mgr_buf_load_mapped(struct fpga_manager *mgr,
215 ret = fpga_mgr_write_init_buf(mgr, info, buf, count);
222 mgr->state = FPGA_MGR_STATE_WRITE;
223 ret = mgr->mops->write(mgr, buf, count);
225 dev_err(&mgr->dev, "Error while writing image data to FPGA\n");
226 mgr->state = FPGA_MGR_STATE_WRITE_ERR;
230 return fpga_mgr_write_complete(mgr, info);
235 * @mgr: fpga manager
243 * mgr pointer from of_fpga_mgr_get() and checked that it is not an error code.
247 static int fpga_mgr_buf_load(struct fpga_manager *mgr,
263 if (mgr->mops->write)
264 return fpga_mgr_buf_load_mapped(mgr, info, buf, count);
299 rc = fpga_mgr_buf_load_sg(mgr, info, &sgt);
307 * @mgr: fpga manager
313 * there is a failure. This code assumes the caller got the mgr pointer
319 static int fpga_mgr_firmware_load(struct fpga_manager *mgr,
323 struct device *dev = &mgr->dev;
327 dev_info(dev, "writing %s to %s\n", image_name, mgr->name);
329 mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ;
333 mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ_ERR;
338 ret = fpga_mgr_buf_load(mgr, info, fw->data, fw->size);
347 * @mgr: fpga manager
355 int fpga_mgr_load(struct fpga_manager *mgr, struct fpga_image_info *info)
358 return fpga_mgr_buf_load_sg(mgr, info, info->sgt);
360 return fpga_mgr_buf_load(mgr, info, info->buf, info->count);
362 return fpga_mgr_firmware_load(mgr, info, info->firmware_name);
396 struct fpga_manager *mgr = to_fpga_manager(dev);
398 return sprintf(buf, "%s\n", mgr->name);
404 struct fpga_manager *mgr = to_fpga_manager(dev);
406 return sprintf(buf, "%s\n", state_str[mgr->state]);
412 struct fpga_manager *mgr = to_fpga_manager(dev);
416 if (!mgr->mops->status)
419 status = mgr->mops->status(mgr);
449 struct fpga_manager *mgr;
451 mgr = to_fpga_manager(dev);
456 return mgr;
469 * fpga_mgr_get - Given a device, get a reference to a fpga mgr.
470 * @dev: parent device that fpga mgr was registered with
486 * of_fpga_mgr_get - Given a device node, get a reference to a fpga mgr.
506 * @mgr: fpga manager structure
508 void fpga_mgr_put(struct fpga_manager *mgr)
510 module_put(mgr->dev.parent->driver->owner);
511 put_device(&mgr->dev);
517 * @mgr: fpga manager
527 int fpga_mgr_lock(struct fpga_manager *mgr)
529 if (!mutex_trylock(&mgr->ref_mutex)) {
530 dev_err(&mgr->dev, "FPGA manager is in use.\n");
540 * @mgr: fpga manager
542 void fpga_mgr_unlock(struct fpga_manager *mgr)
544 mutex_unlock(&mgr->ref_mutex);
564 struct fpga_manager *mgr;
579 mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
580 if (!mgr)
587 mutex_init(&mgr->ref_mutex);
589 mgr->name = name;
590 mgr->mops = mops;
591 mgr->priv = priv;
593 device_initialize(&mgr->dev);
594 mgr->dev.class = fpga_mgr_class;
595 mgr->dev.groups = mops->groups;
596 mgr->dev.parent = dev;
597 mgr->dev.of_node = dev->of_node;
598 mgr->dev.id = id;
600 ret = dev_set_name(&mgr->dev, "fpga%d", id);
604 return mgr;
609 kfree(mgr);
617 * @mgr: fpga manager struct
619 void fpga_mgr_free(struct fpga_manager *mgr)
621 ida_simple_remove(&fpga_mgr_ida, mgr->dev.id);
622 kfree(mgr);
628 struct fpga_manager *mgr = *(struct fpga_manager **)res;
630 fpga_mgr_free(mgr);
654 struct fpga_manager **ptr, *mgr;
660 mgr = fpga_mgr_create(dev, name, mops, priv);
661 if (!mgr) {
664 *ptr = mgr;
668 return mgr;
674 * @mgr: fpga manager struct
678 int fpga_mgr_register(struct fpga_manager *mgr)
687 mgr->state = mgr->mops->state(mgr);
689 ret = device_add(&mgr->dev);
693 dev_info(&mgr->dev, "%s registered\n", mgr->name);
698 ida_simple_remove(&fpga_mgr_ida, mgr->dev.id);
706 * @mgr: fpga manager struct
710 void fpga_mgr_unregister(struct fpga_manager *mgr)
712 dev_info(&mgr->dev, "%s %s\n", __func__, mgr->name);
718 if (mgr->mops->fpga_remove)
719 mgr->mops->fpga_remove(mgr);
721 device_unregister(&mgr->dev);