Lines Matching +full:port +full:- +full:level

1 // SPDX-License-Identifier: GPL-2.0-only
11 /* Lower level is a rpmsg dev, upper level is a wwan port */
25 return -ENOMEM; in rpmsg_wwan_ctrl_callback()
28 wwan_port_rx(rpwwan->wwan_port, skb); in rpmsg_wwan_ctrl_callback()
32 static int rpmsg_wwan_ctrl_start(struct wwan_port *port) in rpmsg_wwan_ctrl_start() argument
34 struct rpmsg_wwan_dev *rpwwan = wwan_port_get_drvdata(port); in rpmsg_wwan_ctrl_start()
36 .src = rpwwan->rpdev->src, in rpmsg_wwan_ctrl_start()
40 strscpy(chinfo.name, rpwwan->rpdev->id.name, sizeof(chinfo.name)); in rpmsg_wwan_ctrl_start()
41 rpwwan->ept = rpmsg_create_ept(rpwwan->rpdev, rpmsg_wwan_ctrl_callback, in rpmsg_wwan_ctrl_start()
43 if (!rpwwan->ept) in rpmsg_wwan_ctrl_start()
44 return -EREMOTEIO; in rpmsg_wwan_ctrl_start()
49 static void rpmsg_wwan_ctrl_stop(struct wwan_port *port) in rpmsg_wwan_ctrl_stop() argument
51 struct rpmsg_wwan_dev *rpwwan = wwan_port_get_drvdata(port); in rpmsg_wwan_ctrl_stop()
53 rpmsg_destroy_ept(rpwwan->ept); in rpmsg_wwan_ctrl_stop()
54 rpwwan->ept = NULL; in rpmsg_wwan_ctrl_stop()
57 static int rpmsg_wwan_ctrl_tx(struct wwan_port *port, struct sk_buff *skb) in rpmsg_wwan_ctrl_tx() argument
59 struct rpmsg_wwan_dev *rpwwan = wwan_port_get_drvdata(port); in rpmsg_wwan_ctrl_tx()
62 ret = rpmsg_trysend(rpwwan->ept, skb->data, skb->len); in rpmsg_wwan_ctrl_tx()
70 static int rpmsg_wwan_ctrl_tx_blocking(struct wwan_port *port, struct sk_buff *skb) in rpmsg_wwan_ctrl_tx_blocking() argument
72 struct rpmsg_wwan_dev *rpwwan = wwan_port_get_drvdata(port); in rpmsg_wwan_ctrl_tx_blocking()
75 ret = rpmsg_send(rpwwan->ept, skb->data, skb->len); in rpmsg_wwan_ctrl_tx_blocking()
83 static __poll_t rpmsg_wwan_ctrl_tx_poll(struct wwan_port *port, in rpmsg_wwan_ctrl_tx_poll() argument
86 struct rpmsg_wwan_dev *rpwwan = wwan_port_get_drvdata(port); in rpmsg_wwan_ctrl_tx_poll()
88 return rpmsg_poll(rpwwan->ept, filp, wait); in rpmsg_wwan_ctrl_tx_poll()
106 for (dev = dev->parent; dev; dev = dev->parent) { in rpmsg_wwan_find_parent()
116 struct wwan_port *port; in rpmsg_wwan_ctrl_probe() local
119 parent = rpmsg_wwan_find_parent(&rpdev->dev); in rpmsg_wwan_ctrl_probe()
121 return -ENODEV; in rpmsg_wwan_ctrl_probe()
123 rpwwan = devm_kzalloc(&rpdev->dev, sizeof(*rpwwan), GFP_KERNEL); in rpmsg_wwan_ctrl_probe()
125 return -ENOMEM; in rpmsg_wwan_ctrl_probe()
127 rpwwan->rpdev = rpdev; in rpmsg_wwan_ctrl_probe()
128 dev_set_drvdata(&rpdev->dev, rpwwan); in rpmsg_wwan_ctrl_probe()
130 /* Register as a wwan port, id.driver_data contains wwan port type */ in rpmsg_wwan_ctrl_probe()
131 port = wwan_create_port(parent, rpdev->id.driver_data, in rpmsg_wwan_ctrl_probe()
133 if (IS_ERR(port)) in rpmsg_wwan_ctrl_probe()
134 return PTR_ERR(port); in rpmsg_wwan_ctrl_probe()
136 rpwwan->wwan_port = port; in rpmsg_wwan_ctrl_probe()
143 struct rpmsg_wwan_dev *rpwwan = dev_get_drvdata(&rpdev->dev); in rpmsg_wwan_ctrl_remove()
145 wwan_remove_port(rpwwan->wwan_port); in rpmsg_wwan_ctrl_remove()