Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b1c74247 authored by Sjur Braendeland's avatar Sjur Braendeland Committed by David S. Miller
Browse files

caif: Bugfix not all services uses flow-ctrl.



Flow control is not used by all CAIF services.
The usage of flow control is now part of the gerneal
initialization function for CAIF Services.

Signed-off-by: default avatarSjur <Braendeland@stericsson.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent c14c643b
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@ struct cfsrvl {
	bool open;
	bool open;
	bool phy_flow_on;
	bool phy_flow_on;
	bool modem_flow_on;
	bool modem_flow_on;
	bool supports_flowctrl;
	struct dev_info dev_info;
	struct dev_info dev_info;
	struct kref ref;
	struct kref ref;
};
};
@@ -31,7 +32,8 @@ bool cfsrvl_phyid_match(struct cflayer *layer, int phyid);
void cfservl_destroy(struct cflayer *layer);
void cfservl_destroy(struct cflayer *layer);
void cfsrvl_init(struct cfsrvl *service,
void cfsrvl_init(struct cfsrvl *service,
			u8 channel_id,
			u8 channel_id,
		 struct dev_info *dev_info);
			struct dev_info *dev_info,
			bool supports_flowctrl);
bool cfsrvl_ready(struct cfsrvl *service, int *err);
bool cfsrvl_ready(struct cfsrvl *service, int *err);
u8 cfsrvl_getphyid(struct cflayer *layer);
u8 cfsrvl_getphyid(struct cflayer *layer);


+1 −1
Original line number Original line Diff line number Diff line
@@ -43,7 +43,7 @@ struct cflayer *cfctrl_create(void)
	memset(&dev_info, 0, sizeof(dev_info));
	memset(&dev_info, 0, sizeof(dev_info));
	dev_info.id = 0xff;
	dev_info.id = 0xff;
	memset(this, 0, sizeof(*this));
	memset(this, 0, sizeof(*this));
	cfsrvl_init(&this->serv, 0, &dev_info);
	cfsrvl_init(&this->serv, 0, &dev_info, false);
	atomic_set(&this->req_seq_no, 1);
	atomic_set(&this->req_seq_no, 1);
	atomic_set(&this->rsp_seq_no, 1);
	atomic_set(&this->rsp_seq_no, 1);
	this->serv.layer.receive = cfctrl_recv;
	this->serv.layer.receive = cfctrl_recv;
+1 −1
Original line number Original line Diff line number Diff line
@@ -22,7 +22,7 @@ struct cflayer *cfdbgl_create(u8 channel_id, struct dev_info *dev_info)
	}
	}
	caif_assert(offsetof(struct cfsrvl, layer) == 0);
	caif_assert(offsetof(struct cfsrvl, layer) == 0);
	memset(dbg, 0, sizeof(struct cfsrvl));
	memset(dbg, 0, sizeof(struct cfsrvl));
	cfsrvl_init(dbg, channel_id, dev_info);
	cfsrvl_init(dbg, channel_id, dev_info, false);
	dbg->layer.receive = cfdbgl_receive;
	dbg->layer.receive = cfdbgl_receive;
	dbg->layer.transmit = cfdbgl_transmit;
	dbg->layer.transmit = cfdbgl_transmit;
	snprintf(dbg->layer.name, CAIF_LAYER_NAME_SZ - 1, "dbg%d", channel_id);
	snprintf(dbg->layer.name, CAIF_LAYER_NAME_SZ - 1, "dbg%d", channel_id);
+1 −1
Original line number Original line Diff line number Diff line
@@ -30,7 +30,7 @@ struct cflayer *cfdgml_create(u8 channel_id, struct dev_info *dev_info)
	}
	}
	caif_assert(offsetof(struct cfsrvl, layer) == 0);
	caif_assert(offsetof(struct cfsrvl, layer) == 0);
	memset(dgm, 0, sizeof(struct cfsrvl));
	memset(dgm, 0, sizeof(struct cfsrvl));
	cfsrvl_init(dgm, channel_id, dev_info);
	cfsrvl_init(dgm, channel_id, dev_info, true);
	dgm->layer.receive = cfdgml_receive;
	dgm->layer.receive = cfdgml_receive;
	dgm->layer.transmit = cfdgml_transmit;
	dgm->layer.transmit = cfdgml_transmit;
	snprintf(dgm->layer.name, CAIF_LAYER_NAME_SZ - 1, "dgm%d", channel_id);
	snprintf(dgm->layer.name, CAIF_LAYER_NAME_SZ - 1, "dgm%d", channel_id);
+4 −8
Original line number Original line Diff line number Diff line
@@ -23,30 +23,26 @@


static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt);
static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt);
static int cfrfml_transmit(struct cflayer *layr, struct cfpkt *pkt);
static int cfrfml_transmit(struct cflayer *layr, struct cfpkt *pkt);
static int cfservl_modemcmd(struct cflayer *layr, enum caif_modemcmd ctrl);


struct cflayer *cfrfml_create(u8 channel_id, struct dev_info *dev_info)
struct cflayer *cfrfml_create(u8 channel_id, struct dev_info *dev_info)
{
{
	struct cfsrvl *rfm = kmalloc(sizeof(struct cfsrvl), GFP_ATOMIC);
	struct cfsrvl *rfm = kmalloc(sizeof(struct cfsrvl), GFP_ATOMIC);

	if (!rfm) {
	if (!rfm) {
		pr_warning("CAIF: %s(): Out of memory\n", __func__);
		pr_warning("CAIF: %s(): Out of memory\n", __func__);
		return NULL;
		return NULL;
	}
	}

	caif_assert(offsetof(struct cfsrvl, layer) == 0);
	caif_assert(offsetof(struct cfsrvl, layer) == 0);

	memset(rfm, 0, sizeof(struct cfsrvl));
	memset(rfm, 0, sizeof(struct cfsrvl));
	cfsrvl_init(rfm, channel_id, dev_info);
	cfsrvl_init(rfm, channel_id, dev_info, false);
	rfm->layer.modemcmd = cfservl_modemcmd;
	rfm->layer.receive = cfrfml_receive;
	rfm->layer.receive = cfrfml_receive;
	rfm->layer.transmit = cfrfml_transmit;
	rfm->layer.transmit = cfrfml_transmit;
	snprintf(rfm->layer.name, CAIF_LAYER_NAME_SZ, "rfm%d", channel_id);
	snprintf(rfm->layer.name, CAIF_LAYER_NAME_SZ, "rfm%d", channel_id);
	return &rfm->layer;
	return &rfm->layer;
}
}


static int cfservl_modemcmd(struct cflayer *layr, enum caif_modemcmd ctrl)
{
       return -EPROTO;
}

static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt)
static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt)
{
{
	u8 tmp;
	u8 tmp;
Loading