Lines Matching +full:flow +full:- +full:ctrl
1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (C) ST-Ericsson AB 2010
27 static void cfservl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl, in cfservl_ctrlcmd() argument
32 if (layr->up == NULL || layr->up->ctrlcmd == NULL) in cfservl_ctrlcmd()
35 switch (ctrl) { in cfservl_ctrlcmd()
37 service->open = true; in cfservl_ctrlcmd()
38 layr->up->ctrlcmd(layr->up, ctrl, phyid); in cfservl_ctrlcmd()
42 service->open = false; in cfservl_ctrlcmd()
43 layr->up->ctrlcmd(layr->up, ctrl, phyid); in cfservl_ctrlcmd()
46 if (phyid != service->dev_info.id) in cfservl_ctrlcmd()
48 if (service->modem_flow_on) in cfservl_ctrlcmd()
49 layr->up->ctrlcmd(layr->up, in cfservl_ctrlcmd()
51 service->phy_flow_on = false; in cfservl_ctrlcmd()
54 if (phyid != service->dev_info.id) in cfservl_ctrlcmd()
56 if (service->modem_flow_on) { in cfservl_ctrlcmd()
57 layr->up->ctrlcmd(layr->up, in cfservl_ctrlcmd()
61 service->phy_flow_on = true; in cfservl_ctrlcmd()
64 if (service->phy_flow_on) { in cfservl_ctrlcmd()
65 layr->up->ctrlcmd(layr->up, in cfservl_ctrlcmd()
68 service->modem_flow_on = false; in cfservl_ctrlcmd()
71 if (service->phy_flow_on) { in cfservl_ctrlcmd()
72 layr->up->ctrlcmd(layr->up, in cfservl_ctrlcmd()
75 service->modem_flow_on = true; in cfservl_ctrlcmd()
79 layr->up->ctrlcmd(layr->up, in cfservl_ctrlcmd()
83 layr->up->ctrlcmd(layr->up, ctrl, phyid); in cfservl_ctrlcmd()
86 pr_warn("Unexpected ctrl in cfsrvl (%d)\n", ctrl); in cfservl_ctrlcmd()
87 /* We have both modem and phy flow on, send flow on */ in cfservl_ctrlcmd()
88 layr->up->ctrlcmd(layr->up, ctrl, phyid); in cfservl_ctrlcmd()
89 service->phy_flow_on = true; in cfservl_ctrlcmd()
94 static int cfservl_modemcmd(struct cflayer *layr, enum caif_modemcmd ctrl) in cfservl_modemcmd() argument
99 caif_assert(layr->dn != NULL); in cfservl_modemcmd()
100 caif_assert(layr->dn->transmit != NULL); in cfservl_modemcmd()
102 if (!service->supports_flowctrl) in cfservl_modemcmd()
105 switch (ctrl) { in cfservl_modemcmd()
113 return -ENOMEM; in cfservl_modemcmd()
118 return -EPROTO; in cfservl_modemcmd()
121 info->channel_id = service->layer.id; in cfservl_modemcmd()
122 info->hdr_len = 1; in cfservl_modemcmd()
123 info->dev_info = &service->dev_info; in cfservl_modemcmd()
125 return layr->dn->transmit(layr->dn, pkt); in cfservl_modemcmd()
134 return -ENOMEM; in cfservl_modemcmd()
139 return -EPROTO; in cfservl_modemcmd()
142 info->channel_id = service->layer.id; in cfservl_modemcmd()
143 info->hdr_len = 1; in cfservl_modemcmd()
144 info->dev_info = &service->dev_info; in cfservl_modemcmd()
146 return layr->dn->transmit(layr->dn, pkt); in cfservl_modemcmd()
151 return -EINVAL; in cfservl_modemcmd()
166 service->open = false; in cfsrvl_init()
167 service->modem_flow_on = true; in cfsrvl_init()
168 service->phy_flow_on = true; in cfsrvl_init()
169 service->layer.id = channel_id; in cfsrvl_init()
170 service->layer.ctrlcmd = cfservl_ctrlcmd; in cfsrvl_init()
171 service->layer.modemcmd = cfservl_modemcmd; in cfsrvl_init()
172 service->dev_info = *dev_info; in cfsrvl_init()
173 service->supports_flowctrl = supports_flowctrl; in cfsrvl_init()
174 service->release = cfsrvl_release; in cfsrvl_init()
179 if (!service->open) { in cfsrvl_ready()
180 *err = -ENOTCONN; in cfsrvl_ready()
189 return servl->dev_info.id; in cfsrvl_getphyid()
195 return servl->dev_info.id == phyid; in cfsrvl_phyid_match()
201 if (adap_layer == NULL || adap_layer->dn == NULL) in caif_free_client()
203 servl = container_obj(adap_layer->dn); in caif_free_client()
204 servl->release(&servl->layer); in caif_free_client()
214 if (WARN_ON(adapt_layer == NULL || adapt_layer->dn == NULL)) in caif_client_register_refcnt()
216 service = container_of(adapt_layer->dn, struct cfsrvl, layer); in caif_client_register_refcnt()
217 service->hold = hold; in caif_client_register_refcnt()
218 service->put = put; in caif_client_register_refcnt()