Lines Matching defs:mgr
12 #include <linux/fpga/fpga-mgr.h>
25 struct fpga_manager *mgr;
28 static inline void fpga_mgr_fpga_remove(struct fpga_manager *mgr)
30 if (mgr->mops->fpga_remove)
31 mgr->mops->fpga_remove(mgr);
34 static inline enum fpga_mgr_states fpga_mgr_state(struct fpga_manager *mgr)
36 if (mgr->mops->state)
37 return mgr->mops->state(mgr);
41 static inline u64 fpga_mgr_status(struct fpga_manager *mgr)
43 if (mgr->mops->status)
44 return mgr->mops->status(mgr);
48 static inline int fpga_mgr_write(struct fpga_manager *mgr, const char *buf, size_t count)
50 if (mgr->mops->write)
51 return mgr->mops->write(mgr, buf, count);
59 static inline int fpga_mgr_write_complete(struct fpga_manager *mgr,
64 mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE;
65 if (mgr->mops->write_complete)
66 ret = mgr->mops->write_complete(mgr, info);
68 dev_err(&mgr->dev, "Error after writing image data to FPGA\n");
69 mgr->state = FPGA_MGR_STATE_WRITE_COMPLETE_ERR;
72 mgr->state = FPGA_MGR_STATE_OPERATING;
77 static inline int fpga_mgr_parse_header(struct fpga_manager *mgr,
81 if (mgr->mops->parse_header)
82 return mgr->mops->parse_header(mgr, info, buf, count);
86 static inline int fpga_mgr_write_init(struct fpga_manager *mgr,
90 if (mgr->mops->write_init)
91 return mgr->mops->write_init(mgr, info, buf, count);
95 static inline int fpga_mgr_write_sg(struct fpga_manager *mgr,
98 if (mgr->mops->write_sg)
99 return mgr->mops->write_sg(mgr, sgt);
151 static int fpga_mgr_parse_header_mapped(struct fpga_manager *mgr,
157 mgr->state = FPGA_MGR_STATE_PARSE_HEADER;
158 ret = fpga_mgr_parse_header(mgr, info, buf, count);
161 dev_err(&mgr->dev, "Bitstream data outruns FPGA image\n");
166 dev_err(&mgr->dev, "Error while parsing FPGA image header\n");
167 mgr->state = FPGA_MGR_STATE_PARSE_HEADER_ERR;
180 static int fpga_mgr_parse_header_sg_first(struct fpga_manager *mgr,
187 mgr->state = FPGA_MGR_STATE_PARSE_HEADER;
192 ret = fpga_mgr_parse_header(mgr, info, miter.addr, miter.length);
198 dev_err(&mgr->dev, "Error while parsing FPGA image header\n");
199 mgr->state = FPGA_MGR_STATE_PARSE_HEADER_ERR;
212 static void *fpga_mgr_parse_header_sg(struct fpga_manager *mgr,
223 dev_err(&mgr->dev, "Requested invalid header size\n");
246 ret = fpga_mgr_parse_header(mgr, info, buf, header_size);
250 dev_err(&mgr->dev, "Error while parsing FPGA image header\n");
251 mgr->state = FPGA_MGR_STATE_PARSE_HEADER_ERR;
268 static int fpga_mgr_write_init_buf(struct fpga_manager *mgr,
275 mgr->state = FPGA_MGR_STATE_WRITE_INIT;
280 ret = fpga_mgr_write_init(mgr, info, NULL, 0);
282 ret = fpga_mgr_write_init(mgr, info, buf, count);
285 dev_err(&mgr->dev, "Error preparing FPGA for writing\n");
286 mgr->state = FPGA_MGR_STATE_WRITE_INIT_ERR;
293 static int fpga_mgr_prepare_sg(struct fpga_manager *mgr,
303 if (!mgr->mops->initial_header_size && !mgr->mops->parse_header)
304 return fpga_mgr_write_init_buf(mgr, info, NULL, 0);
310 ret = fpga_mgr_parse_header_sg_first(mgr, info, sgt);
315 ret = fpga_mgr_write_init_buf(mgr, info, miter.addr,
333 buf = fpga_mgr_parse_header_sg(mgr, info, sgt, &len);
337 ret = fpga_mgr_write_init_buf(mgr, info, buf, len);
346 * @mgr: fpga manager
353 * mgr pointer from of_fpga_mgr_get() or fpga_mgr_get() and checked that it is
361 static int fpga_mgr_buf_load_sg(struct fpga_manager *mgr,
367 ret = fpga_mgr_prepare_sg(mgr, info, sgt);
372 mgr->state = FPGA_MGR_STATE_WRITE;
373 if (mgr->mops->write_sg) {
374 ret = fpga_mgr_write_sg(mgr, sgt);
381 if (mgr->mops->skip_header &&
393 ret = fpga_mgr_write(mgr, miter.addr, length);
406 dev_err(&mgr->dev, "Error while writing image data to FPGA\n");
407 mgr->state = FPGA_MGR_STATE_WRITE_ERR;
411 return fpga_mgr_write_complete(mgr, info);
414 static int fpga_mgr_buf_load_mapped(struct fpga_manager *mgr,
420 ret = fpga_mgr_parse_header_mapped(mgr, info, buf, count);
424 ret = fpga_mgr_write_init_buf(mgr, info, buf, count);
428 if (mgr->mops->skip_header) {
439 mgr->state = FPGA_MGR_STATE_WRITE;
440 ret = fpga_mgr_write(mgr, buf, count);
442 dev_err(&mgr->dev, "Error while writing image data to FPGA\n");
443 mgr->state = FPGA_MGR_STATE_WRITE_ERR;
447 return fpga_mgr_write_complete(mgr, info);
452 * @mgr: fpga manager
460 * mgr pointer from of_fpga_mgr_get() and checked that it is not an error code.
464 static int fpga_mgr_buf_load(struct fpga_manager *mgr,
480 if (mgr->mops->write)
481 return fpga_mgr_buf_load_mapped(mgr, info, buf, count);
516 rc = fpga_mgr_buf_load_sg(mgr, info, &sgt);
524 * @mgr: fpga manager
530 * there is a failure. This code assumes the caller got the mgr pointer
536 static int fpga_mgr_firmware_load(struct fpga_manager *mgr,
540 struct device *dev = &mgr->dev;
544 dev_info(dev, "writing %s to %s\n", image_name, mgr->name);
546 mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ;
550 mgr->state = FPGA_MGR_STATE_FIRMWARE_REQ_ERR;
555 ret = fpga_mgr_buf_load(mgr, info, fw->data, fw->size);
564 * @mgr: fpga manager
572 int fpga_mgr_load(struct fpga_manager *mgr, struct fpga_image_info *info)
574 info->header_size = mgr->mops->initial_header_size;
577 return fpga_mgr_buf_load_sg(mgr, info, info->sgt);
579 return fpga_mgr_buf_load(mgr, info, info->buf, info->count);
581 return fpga_mgr_firmware_load(mgr, info, info->firmware_name);
619 struct fpga_manager *mgr = to_fpga_manager(dev);
621 return sprintf(buf, "%s\n", mgr->name);
627 struct fpga_manager *mgr = to_fpga_manager(dev);
629 return sprintf(buf, "%s\n", state_str[mgr->state]);
635 struct fpga_manager *mgr = to_fpga_manager(dev);
639 status = fpga_mgr_status(mgr);
669 struct fpga_manager *mgr;
671 mgr = to_fpga_manager(dev);
676 return mgr;
689 * fpga_mgr_get - Given a device, get a reference to an fpga mgr.
690 * @dev: parent device that fpga mgr was registered with
706 * of_fpga_mgr_get - Given a device node, get a reference to an fpga mgr.
726 * @mgr: fpga manager structure
728 void fpga_mgr_put(struct fpga_manager *mgr)
730 module_put(mgr->dev.parent->driver->owner);
731 put_device(&mgr->dev);
737 * @mgr: fpga manager
747 int fpga_mgr_lock(struct fpga_manager *mgr)
749 if (!mutex_trylock(&mgr->ref_mutex)) {
750 dev_err(&mgr->dev, "FPGA manager is in use.\n");
760 * @mgr: fpga manager
762 void fpga_mgr_unlock(struct fpga_manager *mgr)
764 mutex_unlock(&mgr->ref_mutex);
782 struct fpga_manager *mgr;
795 mgr = kzalloc(sizeof(*mgr), GFP_KERNEL);
796 if (!mgr)
805 mutex_init(&mgr->ref_mutex);
807 mgr->name = info->name;
808 mgr->mops = info->mops;
809 mgr->priv = info->priv;
810 mgr->compat_id = info->compat_id;
812 mgr->dev.class = &fpga_mgr_class;
813 mgr->dev.groups = mops->groups;
814 mgr->dev.parent = parent;
815 mgr->dev.of_node = parent->of_node;
816 mgr->dev.id = id;
818 ret = dev_set_name(&mgr->dev, "fpga%d", id);
827 mgr->state = fpga_mgr_state(mgr);
829 ret = device_register(&mgr->dev);
831 put_device(&mgr->dev);
835 return mgr;
840 kfree(mgr);
877 * @mgr: fpga manager struct
881 void fpga_mgr_unregister(struct fpga_manager *mgr)
883 dev_info(&mgr->dev, "%s %s\n", __func__, mgr->name);
889 fpga_mgr_fpga_remove(mgr);
891 device_unregister(&mgr->dev);
899 fpga_mgr_unregister(dr->mgr);
916 struct fpga_manager *mgr;
922 mgr = fpga_mgr_register_full(parent, info);
923 if (IS_ERR(mgr)) {
925 return mgr;
928 dr->mgr = mgr;
931 return mgr;
964 struct fpga_manager *mgr = to_fpga_manager(dev);
966 ida_free(&fpga_mgr_ida, mgr->dev.id);
967 kfree(mgr);