Lines Matching refs:apr
17 struct apr { struct
45 struct apr *apr = dev_get_drvdata(adev->dev.parent); in apr_send_pkt() local
58 ret = rpmsg_trysend(apr->ch, pkt, hdr->pkt_size); in apr_send_pkt()
75 struct apr *apr = dev_get_drvdata(&rpdev->dev); in apr_callback() local
80 dev_err(apr->dev, "APR: Improper apr pkt received:%p %d\n", in apr_callback()
92 spin_lock_irqsave(&apr->rx_lock, flags); in apr_callback()
93 list_add_tail(&abuf->node, &apr->rx_list); in apr_callback()
94 spin_unlock_irqrestore(&apr->rx_lock, flags); in apr_callback()
96 queue_work(apr->rxwq, &apr->rx_work); in apr_callback()
102 static int apr_do_rx_callback(struct apr *apr, struct apr_rx_buf *abuf) in apr_do_rx_callback() argument
120 dev_err(apr->dev, "APR: Wrong hdr size:%d\n", hdr_size); in apr_do_rx_callback()
125 dev_err(apr->dev, "APR: Wrong packet size\n"); in apr_do_rx_callback()
131 dev_err(apr->dev, "APR: Wrong message type: %d\n", msg_type); in apr_do_rx_callback()
139 dev_err(apr->dev, "APR: Wrong APR header\n"); in apr_do_rx_callback()
144 spin_lock_irqsave(&apr->svcs_lock, flags); in apr_do_rx_callback()
145 svc = idr_find(&apr->svcs_idr, svc_id); in apr_do_rx_callback()
148 spin_unlock_irqrestore(&apr->svcs_lock, flags); in apr_do_rx_callback()
151 dev_err(apr->dev, "APR: service is not registered\n"); in apr_do_rx_callback()
172 struct apr *apr = container_of(work, struct apr, rx_work); in apr_rxwq() local
176 if (!list_empty(&apr->rx_list)) { in apr_rxwq()
177 list_for_each_entry_safe(abuf, b, &apr->rx_list, node) { in apr_rxwq()
178 apr_do_rx_callback(apr, abuf); in apr_rxwq()
179 spin_lock_irqsave(&apr->rx_lock, flags); in apr_rxwq()
181 spin_unlock_irqrestore(&apr->rx_lock, flags); in apr_rxwq()
222 struct apr *apr = dev_get_drvdata(adev->dev.parent); in apr_device_remove() local
228 spin_lock(&apr->svcs_lock); in apr_device_remove()
229 idr_remove(&apr->svcs_idr, adev->svc_id); in apr_device_remove()
230 spin_unlock(&apr->svcs_lock); in apr_device_remove()
260 struct apr *apr = dev_get_drvdata(dev); in apr_add_device() local
287 spin_lock(&apr->svcs_lock); in apr_add_device()
288 idr_alloc(&apr->svcs_idr, adev, id->svc_id, in apr_add_device()
290 spin_unlock(&apr->svcs_lock); in apr_add_device()
305 struct apr *apr = dev_get_drvdata(dev); in of_register_apr_devices() local
314 id.domain_id = apr->dest_domain_id; in of_register_apr_devices()
324 struct apr *apr; in apr_probe() local
327 apr = devm_kzalloc(dev, sizeof(*apr), GFP_KERNEL); in apr_probe()
328 if (!apr) in apr_probe()
331 ret = of_property_read_u32(dev->of_node, "qcom,apr-domain", &apr->dest_domain_id); in apr_probe()
337 dev_set_drvdata(dev, apr); in apr_probe()
338 apr->ch = rpdev->ept; in apr_probe()
339 apr->dev = dev; in apr_probe()
340 apr->rxwq = create_singlethread_workqueue("qcom_apr_rx"); in apr_probe()
341 if (!apr->rxwq) { in apr_probe()
342 dev_err(apr->dev, "Failed to start Rx WQ\n"); in apr_probe()
345 INIT_WORK(&apr->rx_work, apr_rxwq); in apr_probe()
346 INIT_LIST_HEAD(&apr->rx_list); in apr_probe()
347 spin_lock_init(&apr->rx_lock); in apr_probe()
348 spin_lock_init(&apr->svcs_lock); in apr_probe()
349 idr_init(&apr->svcs_idr); in apr_probe()
366 struct apr *apr = dev_get_drvdata(&rpdev->dev); in apr_remove() local
369 flush_workqueue(apr->rxwq); in apr_remove()
370 destroy_workqueue(apr->rxwq); in apr_remove()