Lines Matching refs:apr
13 #include <linux/soc/qcom/apr.h>
48 * apr_send_pkt() - Send a apr message from apr device
50 * @adev: Pointer to previously registered apr device.
51 * @pkt: Pointer to apr packet to send
57 struct packet_router *apr = dev_get_drvdata(adev->dev.parent);
70 ret = rpmsg_trysend(apr->ch, pkt, hdr->pkt_size);
164 struct packet_router *apr = dev_get_drvdata(&rpdev->dev);
169 dev_err(apr->dev, "APR: Improper apr pkt received:%p %d\n",
181 spin_lock_irqsave(&apr->rx_lock, flags);
182 list_add_tail(&abuf->node, &apr->rx_list);
183 spin_unlock_irqrestore(&apr->rx_lock, flags);
185 queue_work(apr->rxwq, &apr->rx_work);
190 static int apr_do_rx_callback(struct packet_router *apr, struct apr_rx_buf *abuf)
209 dev_err(apr->dev, "APR: Wrong hdr size:%d\n", hdr_size);
214 dev_err(apr->dev, "APR: Wrong packet size\n");
220 dev_err(apr->dev, "APR: Wrong message type: %d\n", msg_type);
228 dev_err(apr->dev, "APR: Wrong APR header\n");
233 spin_lock_irqsave(&apr->svcs_lock, flags);
234 svc = idr_find(&apr->svcs_idr, svc_id);
239 spin_unlock_irqrestore(&apr->svcs_lock, flags);
242 dev_err(apr->dev, "APR: service is not registered (%d)\n",
317 struct packet_router *apr = container_of(work, struct packet_router, rx_work);
321 if (!list_empty(&apr->rx_list)) {
322 list_for_each_entry_safe(abuf, b, &apr->rx_list, node) {
323 switch (apr->type) {
325 apr_do_rx_callback(apr, abuf);
328 gpr_do_rx_callback(apr, abuf);
333 spin_lock_irqsave(&apr->rx_lock, flags);
335 spin_unlock_irqrestore(&apr->rx_lock, flags);
381 struct packet_router *apr = dev_get_drvdata(adev->dev.parent);
385 spin_lock(&apr->svcs_lock);
386 idr_remove(&apr->svcs_idr, adev->svc.id);
387 spin_unlock(&apr->svcs_lock);
399 return add_uevent_var(env, "MODALIAS=apr:%s", adev->name);
414 struct packet_router *apr = dev_get_drvdata(dev);
427 svc->pr = apr;
437 switch (apr->type) {
456 spin_lock(&apr->svcs_lock);
457 ret = idr_alloc(&apr->svcs_idr, svc, svc_id, svc_id + 1, GFP_ATOMIC);
458 spin_unlock(&apr->svcs_lock);
487 struct packet_router *apr = dev_get_drvdata(dev);
506 pds = pdr_add_lookup(apr->pdr, service_name, service_path);
519 struct packet_router *apr = dev_get_drvdata(dev);
530 * apr_probe(), in which case we register any apr devices
536 * this case we register any apr devices with a matching
559 domain_id = apr->dest_domain_id;
562 dev_err(dev, "Failed to add apr %d svc\n", svc_id);
582 struct packet_router *apr = (struct packet_router *)priv;
586 of_register_apr_devices(apr->dev, svc_path);
589 device_for_each_child(apr->dev, svc_path, apr_remove_device);
597 struct packet_router *apr;
600 apr = devm_kzalloc(dev, sizeof(*apr), GFP_KERNEL);
601 if (!apr)
604 ret = of_property_read_u32(dev->of_node, "qcom,domain", &apr->dest_domain_id);
607 apr->type = PR_TYPE_GPR;
609 if (ret) /* try deprecated apr-domain property */
610 ret = of_property_read_u32(dev->of_node, "qcom,apr-domain",
611 &apr->dest_domain_id);
612 apr->type = PR_TYPE_APR;
620 dev_set_drvdata(dev, apr);
621 apr->ch = rpdev->ept;
622 apr->dev = dev;
623 apr->rxwq = create_singlethread_workqueue("qcom_apr_rx");
624 if (!apr->rxwq) {
625 dev_err(apr->dev, "Failed to start Rx WQ\n");
628 INIT_WORK(&apr->rx_work, apr_rxwq);
630 apr->pdr = pdr_handle_alloc(apr_pd_status, apr);
631 if (IS_ERR(apr->pdr)) {
633 ret = PTR_ERR(apr->pdr);
637 INIT_LIST_HEAD(&apr->rx_list);
638 spin_lock_init(&apr->rx_lock);
639 spin_lock_init(&apr->svcs_lock);
640 idr_init(&apr->svcs_idr);
651 pdr_handle_release(apr->pdr);
653 destroy_workqueue(apr->rxwq);
659 struct packet_router *apr = dev_get_drvdata(&rpdev->dev);
661 pdr_handle_release(apr->pdr);
663 destroy_workqueue(apr->rxwq);
696 { .compatible = "qcom,apr"},
697 { .compatible = "qcom,apr-v2"},
708 .name = "qcom,apr",