diff options
author | Sjur Braendeland <sjur.brandeland@stericsson.com> | 2010-06-17 02:55:38 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-06-20 22:46:05 -0400 |
commit | b1c74247b9e29ae3bfdf133862328c309bc9cf14 (patch) | |
tree | a20cd55d47036a22e3857d382ed505436a366efe /net/caif | |
parent | c14c643b3d91cc741425c058968672228c310927 (diff) |
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: Sjur Braendeland@stericsson.com
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/caif')
-rw-r--r-- | net/caif/cfctrl.c | 2 | ||||
-rw-r--r-- | net/caif/cfdbgl.c | 2 | ||||
-rw-r--r-- | net/caif/cfdgml.c | 2 | ||||
-rw-r--r-- | net/caif/cfrfml.c | 12 | ||||
-rw-r--r-- | net/caif/cfsrvl.c | 14 | ||||
-rw-r--r-- | net/caif/cfutill.c | 2 | ||||
-rw-r--r-- | net/caif/cfveil.c | 2 | ||||
-rw-r--r-- | net/caif/cfvidl.c | 2 |
8 files changed, 22 insertions, 16 deletions
diff --git a/net/caif/cfctrl.c b/net/caif/cfctrl.c index fcfda98a5e6d..107c4b2a311e 100644 --- a/net/caif/cfctrl.c +++ b/net/caif/cfctrl.c | |||
@@ -43,7 +43,7 @@ struct cflayer *cfctrl_create(void) | |||
43 | memset(&dev_info, 0, sizeof(dev_info)); | 43 | memset(&dev_info, 0, sizeof(dev_info)); |
44 | dev_info.id = 0xff; | 44 | dev_info.id = 0xff; |
45 | memset(this, 0, sizeof(*this)); | 45 | memset(this, 0, sizeof(*this)); |
46 | cfsrvl_init(&this->serv, 0, &dev_info); | 46 | cfsrvl_init(&this->serv, 0, &dev_info, false); |
47 | atomic_set(&this->req_seq_no, 1); | 47 | atomic_set(&this->req_seq_no, 1); |
48 | atomic_set(&this->rsp_seq_no, 1); | 48 | atomic_set(&this->rsp_seq_no, 1); |
49 | this->serv.layer.receive = cfctrl_recv; | 49 | this->serv.layer.receive = cfctrl_recv; |
diff --git a/net/caif/cfdbgl.c b/net/caif/cfdbgl.c index ab6b6dc34cf8..676648cac8dd 100644 --- a/net/caif/cfdbgl.c +++ b/net/caif/cfdbgl.c | |||
@@ -22,7 +22,7 @@ struct cflayer *cfdbgl_create(u8 channel_id, struct dev_info *dev_info) | |||
22 | } | 22 | } |
23 | caif_assert(offsetof(struct cfsrvl, layer) == 0); | 23 | caif_assert(offsetof(struct cfsrvl, layer) == 0); |
24 | memset(dbg, 0, sizeof(struct cfsrvl)); | 24 | memset(dbg, 0, sizeof(struct cfsrvl)); |
25 | cfsrvl_init(dbg, channel_id, dev_info); | 25 | cfsrvl_init(dbg, channel_id, dev_info, false); |
26 | dbg->layer.receive = cfdbgl_receive; | 26 | dbg->layer.receive = cfdbgl_receive; |
27 | dbg->layer.transmit = cfdbgl_transmit; | 27 | dbg->layer.transmit = cfdbgl_transmit; |
28 | snprintf(dbg->layer.name, CAIF_LAYER_NAME_SZ - 1, "dbg%d", channel_id); | 28 | snprintf(dbg->layer.name, CAIF_LAYER_NAME_SZ - 1, "dbg%d", channel_id); |
diff --git a/net/caif/cfdgml.c b/net/caif/cfdgml.c index 53194840ecb6..32d9f0dc8463 100644 --- a/net/caif/cfdgml.c +++ b/net/caif/cfdgml.c | |||
@@ -30,7 +30,7 @@ struct cflayer *cfdgml_create(u8 channel_id, struct dev_info *dev_info) | |||
30 | } | 30 | } |
31 | caif_assert(offsetof(struct cfsrvl, layer) == 0); | 31 | caif_assert(offsetof(struct cfsrvl, layer) == 0); |
32 | memset(dgm, 0, sizeof(struct cfsrvl)); | 32 | memset(dgm, 0, sizeof(struct cfsrvl)); |
33 | cfsrvl_init(dgm, channel_id, dev_info); | 33 | cfsrvl_init(dgm, channel_id, dev_info, true); |
34 | dgm->layer.receive = cfdgml_receive; | 34 | dgm->layer.receive = cfdgml_receive; |
35 | dgm->layer.transmit = cfdgml_transmit; | 35 | dgm->layer.transmit = cfdgml_transmit; |
36 | snprintf(dgm->layer.name, CAIF_LAYER_NAME_SZ - 1, "dgm%d", channel_id); | 36 | snprintf(dgm->layer.name, CAIF_LAYER_NAME_SZ - 1, "dgm%d", channel_id); |
diff --git a/net/caif/cfrfml.c b/net/caif/cfrfml.c index fd27b172fb5d..689cbfd0e43d 100644 --- a/net/caif/cfrfml.c +++ b/net/caif/cfrfml.c | |||
@@ -23,30 +23,26 @@ | |||
23 | 23 | ||
24 | static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt); | 24 | static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt); |
25 | static int cfrfml_transmit(struct cflayer *layr, struct cfpkt *pkt); | 25 | static int cfrfml_transmit(struct cflayer *layr, struct cfpkt *pkt); |
26 | static int cfservl_modemcmd(struct cflayer *layr, enum caif_modemcmd ctrl); | ||
27 | 26 | ||
28 | struct cflayer *cfrfml_create(u8 channel_id, struct dev_info *dev_info) | 27 | struct cflayer *cfrfml_create(u8 channel_id, struct dev_info *dev_info) |
29 | { | 28 | { |
30 | struct cfsrvl *rfm = kmalloc(sizeof(struct cfsrvl), GFP_ATOMIC); | 29 | struct cfsrvl *rfm = kmalloc(sizeof(struct cfsrvl), GFP_ATOMIC); |
30 | |||
31 | if (!rfm) { | 31 | if (!rfm) { |
32 | pr_warning("CAIF: %s(): Out of memory\n", __func__); | 32 | pr_warning("CAIF: %s(): Out of memory\n", __func__); |
33 | return NULL; | 33 | return NULL; |
34 | } | 34 | } |
35 | |||
35 | caif_assert(offsetof(struct cfsrvl, layer) == 0); | 36 | caif_assert(offsetof(struct cfsrvl, layer) == 0); |
37 | |||
36 | memset(rfm, 0, sizeof(struct cfsrvl)); | 38 | memset(rfm, 0, sizeof(struct cfsrvl)); |
37 | cfsrvl_init(rfm, channel_id, dev_info); | 39 | cfsrvl_init(rfm, channel_id, dev_info, false); |
38 | rfm->layer.modemcmd = cfservl_modemcmd; | ||
39 | rfm->layer.receive = cfrfml_receive; | 40 | rfm->layer.receive = cfrfml_receive; |
40 | rfm->layer.transmit = cfrfml_transmit; | 41 | rfm->layer.transmit = cfrfml_transmit; |
41 | snprintf(rfm->layer.name, CAIF_LAYER_NAME_SZ, "rfm%d", channel_id); | 42 | snprintf(rfm->layer.name, CAIF_LAYER_NAME_SZ, "rfm%d", channel_id); |
42 | return &rfm->layer; | 43 | return &rfm->layer; |
43 | } | 44 | } |
44 | 45 | ||
45 | static int cfservl_modemcmd(struct cflayer *layr, enum caif_modemcmd ctrl) | ||
46 | { | ||
47 | return -EPROTO; | ||
48 | } | ||
49 | |||
50 | static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt) | 46 | static int cfrfml_receive(struct cflayer *layr, struct cfpkt *pkt) |
51 | { | 47 | { |
52 | u8 tmp; | 48 | u8 tmp; |
diff --git a/net/caif/cfsrvl.c b/net/caif/cfsrvl.c index 6e5b7079a684..7aa1f03a0151 100644 --- a/net/caif/cfsrvl.c +++ b/net/caif/cfsrvl.c | |||
@@ -24,8 +24,10 @@ static void cfservl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl, | |||
24 | int phyid) | 24 | int phyid) |
25 | { | 25 | { |
26 | struct cfsrvl *service = container_obj(layr); | 26 | struct cfsrvl *service = container_obj(layr); |
27 | |||
27 | caif_assert(layr->up != NULL); | 28 | caif_assert(layr->up != NULL); |
28 | caif_assert(layr->up->ctrlcmd != NULL); | 29 | caif_assert(layr->up->ctrlcmd != NULL); |
30 | |||
29 | switch (ctrl) { | 31 | switch (ctrl) { |
30 | case CAIF_CTRLCMD_INIT_RSP: | 32 | case CAIF_CTRLCMD_INIT_RSP: |
31 | service->open = true; | 33 | service->open = true; |
@@ -89,9 +91,14 @@ static void cfservl_ctrlcmd(struct cflayer *layr, enum caif_ctrlcmd ctrl, | |||
89 | static int cfservl_modemcmd(struct cflayer *layr, enum caif_modemcmd ctrl) | 91 | static int cfservl_modemcmd(struct cflayer *layr, enum caif_modemcmd ctrl) |
90 | { | 92 | { |
91 | struct cfsrvl *service = container_obj(layr); | 93 | struct cfsrvl *service = container_obj(layr); |
94 | |||
92 | caif_assert(layr != NULL); | 95 | caif_assert(layr != NULL); |
93 | caif_assert(layr->dn != NULL); | 96 | caif_assert(layr->dn != NULL); |
94 | caif_assert(layr->dn->transmit != NULL); | 97 | caif_assert(layr->dn->transmit != NULL); |
98 | |||
99 | if (!service->supports_flowctrl) | ||
100 | return 0; | ||
101 | |||
95 | switch (ctrl) { | 102 | switch (ctrl) { |
96 | case CAIF_MODEMCMD_FLOW_ON_REQ: | 103 | case CAIF_MODEMCMD_FLOW_ON_REQ: |
97 | { | 104 | { |
@@ -153,8 +160,10 @@ void cfservl_destroy(struct cflayer *layer) | |||
153 | } | 160 | } |
154 | 161 | ||
155 | void cfsrvl_init(struct cfsrvl *service, | 162 | void cfsrvl_init(struct cfsrvl *service, |
156 | u8 channel_id, | 163 | u8 channel_id, |
157 | struct dev_info *dev_info) | 164 | struct dev_info *dev_info, |
165 | bool supports_flowctrl | ||
166 | ) | ||
158 | { | 167 | { |
159 | caif_assert(offsetof(struct cfsrvl, layer) == 0); | 168 | caif_assert(offsetof(struct cfsrvl, layer) == 0); |
160 | service->open = false; | 169 | service->open = false; |
@@ -164,6 +173,7 @@ void cfsrvl_init(struct cfsrvl *service, | |||
164 | service->layer.ctrlcmd = cfservl_ctrlcmd; | 173 | service->layer.ctrlcmd = cfservl_ctrlcmd; |
165 | service->layer.modemcmd = cfservl_modemcmd; | 174 | service->layer.modemcmd = cfservl_modemcmd; |
166 | service->dev_info = *dev_info; | 175 | service->dev_info = *dev_info; |
176 | service->supports_flowctrl = supports_flowctrl; | ||
167 | kref_init(&service->ref); | 177 | kref_init(&service->ref); |
168 | } | 178 | } |
169 | 179 | ||
diff --git a/net/caif/cfutill.c b/net/caif/cfutill.c index 5fd2c9ea8b42..ce525cac9064 100644 --- a/net/caif/cfutill.c +++ b/net/caif/cfutill.c | |||
@@ -31,7 +31,7 @@ struct cflayer *cfutill_create(u8 channel_id, struct dev_info *dev_info) | |||
31 | } | 31 | } |
32 | caif_assert(offsetof(struct cfsrvl, layer) == 0); | 32 | caif_assert(offsetof(struct cfsrvl, layer) == 0); |
33 | memset(util, 0, sizeof(struct cfsrvl)); | 33 | memset(util, 0, sizeof(struct cfsrvl)); |
34 | cfsrvl_init(util, channel_id, dev_info); | 34 | cfsrvl_init(util, channel_id, dev_info, true); |
35 | util->layer.receive = cfutill_receive; | 35 | util->layer.receive = cfutill_receive; |
36 | util->layer.transmit = cfutill_transmit; | 36 | util->layer.transmit = cfutill_transmit; |
37 | snprintf(util->layer.name, CAIF_LAYER_NAME_SZ - 1, "util1"); | 37 | snprintf(util->layer.name, CAIF_LAYER_NAME_SZ - 1, "util1"); |
diff --git a/net/caif/cfveil.c b/net/caif/cfveil.c index e04f7d964e83..637cb0eee13c 100644 --- a/net/caif/cfveil.c +++ b/net/caif/cfveil.c | |||
@@ -30,7 +30,7 @@ struct cflayer *cfvei_create(u8 channel_id, struct dev_info *dev_info) | |||
30 | } | 30 | } |
31 | caif_assert(offsetof(struct cfsrvl, layer) == 0); | 31 | caif_assert(offsetof(struct cfsrvl, layer) == 0); |
32 | memset(vei, 0, sizeof(struct cfsrvl)); | 32 | memset(vei, 0, sizeof(struct cfsrvl)); |
33 | cfsrvl_init(vei, channel_id, dev_info); | 33 | cfsrvl_init(vei, channel_id, dev_info, true); |
34 | vei->layer.receive = cfvei_receive; | 34 | vei->layer.receive = cfvei_receive; |
35 | vei->layer.transmit = cfvei_transmit; | 35 | vei->layer.transmit = cfvei_transmit; |
36 | snprintf(vei->layer.name, CAIF_LAYER_NAME_SZ - 1, "vei%d", channel_id); | 36 | snprintf(vei->layer.name, CAIF_LAYER_NAME_SZ - 1, "vei%d", channel_id); |
diff --git a/net/caif/cfvidl.c b/net/caif/cfvidl.c index 89ad4ea239f1..ada6ee2d48f5 100644 --- a/net/caif/cfvidl.c +++ b/net/caif/cfvidl.c | |||
@@ -27,7 +27,7 @@ struct cflayer *cfvidl_create(u8 channel_id, struct dev_info *dev_info) | |||
27 | caif_assert(offsetof(struct cfsrvl, layer) == 0); | 27 | caif_assert(offsetof(struct cfsrvl, layer) == 0); |
28 | 28 | ||
29 | memset(vid, 0, sizeof(struct cfsrvl)); | 29 | memset(vid, 0, sizeof(struct cfsrvl)); |
30 | cfsrvl_init(vid, channel_id, dev_info); | 30 | cfsrvl_init(vid, channel_id, dev_info, false); |
31 | vid->layer.receive = cfvidl_receive; | 31 | vid->layer.receive = cfvidl_receive; |
32 | vid->layer.transmit = cfvidl_transmit; | 32 | vid->layer.transmit = cfvidl_transmit; |
33 | snprintf(vid->layer.name, CAIF_LAYER_NAME_SZ - 1, "vid1"); | 33 | snprintf(vid->layer.name, CAIF_LAYER_NAME_SZ - 1, "vid1"); |