1 From c9aa7a91de740c537dc8c2f9f3d36fc651371b13 Mon Sep 17 00:00:00 2001
2 From: Arend Van Spriel <arend.vanspriel@broadcom.com>
3 Date: Tue, 9 Jan 2018 13:22:52 +0100
4 Subject: [PATCH] brcmfmac: Remove array of functions
6 Replace the array of functions with a pair of pointers to the
9 Signed-off-by: Ian Molton <ian@mnementh.co.uk>
10 Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
11 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
12 Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
14 .../wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c | 115 +++++++-------
15 .../wireless/broadcom/brcm80211/brcmfmac/sdio.c | 168 ++++++++++-----------
16 .../wireless/broadcom/brcm80211/brcmfmac/sdio.h | 15 +-
17 3 files changed, 146 insertions(+), 152 deletions(-)
19 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
20 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/bcmsdh.c
21 @@ -118,7 +118,7 @@ int brcmf_sdiod_intr_register(struct brc
23 ret = request_irq(pdata->oob_irq_nr, brcmf_sdiod_oob_irqhandler,
24 pdata->oob_irq_flags, "brcmf_oob_intr",
25 - &sdiodev->func[1]->dev);
26 + &sdiodev->func1->dev);
28 brcmf_err("request_irq failed %d\n", ret);
30 @@ -132,7 +132,7 @@ int brcmf_sdiod_intr_register(struct brc
32 sdiodev->irq_wake = true;
34 - sdio_claim_host(sdiodev->func[1]);
35 + sdio_claim_host(sdiodev->func1);
37 if (sdiodev->bus_if->chip == BRCM_CC_43362_CHIP_ID) {
38 /* assign GPIO to SDIO core */
39 @@ -159,13 +159,13 @@ int brcmf_sdiod_intr_register(struct brc
40 data |= SDIO_CCCR_BRCM_SEPINT_ACT_HI;
41 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT,
43 - sdio_release_host(sdiodev->func[1]);
44 + sdio_release_host(sdiodev->func1);
46 brcmf_dbg(SDIO, "Entering\n");
47 - sdio_claim_host(sdiodev->func[1]);
48 - sdio_claim_irq(sdiodev->func[1], brcmf_sdiod_ib_irqhandler);
49 - sdio_claim_irq(sdiodev->func[2], brcmf_sdiod_dummy_irqhandler);
50 - sdio_release_host(sdiodev->func[1]);
51 + sdio_claim_host(sdiodev->func1);
52 + sdio_claim_irq(sdiodev->func1, brcmf_sdiod_ib_irqhandler);
53 + sdio_claim_irq(sdiodev->func2, brcmf_sdiod_dummy_irqhandler);
54 + sdio_release_host(sdiodev->func1);
55 sdiodev->sd_irq_requested = true;
58 @@ -183,26 +183,26 @@ void brcmf_sdiod_intr_unregister(struct
59 struct brcmfmac_sdio_pd *pdata;
61 pdata = &sdiodev->settings->bus.sdio;
62 - sdio_claim_host(sdiodev->func[1]);
63 + sdio_claim_host(sdiodev->func1);
64 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_BRCM_SEPINT, 0, NULL);
65 brcmf_sdiod_func0_wb(sdiodev, SDIO_CCCR_IENx, 0, NULL);
66 - sdio_release_host(sdiodev->func[1]);
67 + sdio_release_host(sdiodev->func1);
69 sdiodev->oob_irq_requested = false;
70 if (sdiodev->irq_wake) {
71 disable_irq_wake(pdata->oob_irq_nr);
72 sdiodev->irq_wake = false;
74 - free_irq(pdata->oob_irq_nr, &sdiodev->func[1]->dev);
75 + free_irq(pdata->oob_irq_nr, &sdiodev->func1->dev);
76 sdiodev->irq_en = false;
77 sdiodev->oob_irq_requested = false;
80 if (sdiodev->sd_irq_requested) {
81 - sdio_claim_host(sdiodev->func[1]);
82 - sdio_release_irq(sdiodev->func[2]);
83 - sdio_release_irq(sdiodev->func[1]);
84 - sdio_release_host(sdiodev->func[1]);
85 + sdio_claim_host(sdiodev->func1);
86 + sdio_release_irq(sdiodev->func2);
87 + sdio_release_irq(sdiodev->func1);
88 + sdio_release_host(sdiodev->func1);
89 sdiodev->sd_irq_requested = false;
92 @@ -264,7 +264,7 @@ u32 brcmf_sdiod_readl(struct brcmf_sdio_
93 addr &= SBSDIO_SB_OFT_ADDR_MASK;
94 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
96 - data = sdio_readl(sdiodev->func[1], addr, &retval);
97 + data = sdio_readl(sdiodev->func1, addr, &retval);
101 @@ -285,7 +285,7 @@ void brcmf_sdiod_writel(struct brcmf_sdi
102 addr &= SBSDIO_SB_OFT_ADDR_MASK;
103 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
105 - sdio_writel(sdiodev->func[1], data, addr, &retval);
106 + sdio_writel(sdiodev->func1, data, addr, &retval);
110 @@ -550,7 +550,7 @@ int brcmf_sdiod_recv_pkt(struct brcmf_sd
111 addr &= SBSDIO_SB_OFT_ADDR_MASK;
112 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
114 - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr, pkt);
115 + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr, pkt);
119 @@ -575,13 +575,13 @@ int brcmf_sdiod_recv_chain(struct brcmf_
120 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
123 - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
124 + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
126 else if (!sdiodev->sg_support) {
127 glom_skb = brcmu_pkt_buf_get_skb(totlen);
130 - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[2], addr,
131 + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func2, addr,
135 @@ -591,7 +591,7 @@ int brcmf_sdiod_recv_chain(struct brcmf_
136 skb_pull(glom_skb, skb->len);
139 - err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], false,
140 + err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, false,
144 @@ -623,7 +623,7 @@ int brcmf_sdiod_send_buf(struct brcmf_sd
145 addr |= SBSDIO_SB_ACCESS_2_4B_FLAG;
148 - err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2], addr,
149 + err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2, addr,
152 brcmu_pkt_buf_free_skb(mypkt);
153 @@ -649,13 +649,13 @@ int brcmf_sdiod_send_pkt(struct brcmf_sd
155 if (pktq->qlen == 1 || !sdiodev->sg_support) {
156 skb_queue_walk(pktq, skb) {
157 - err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[2],
158 + err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func2,
164 - err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func[2], true,
165 + err = brcmf_sdiod_sglist_rw(sdiodev, sdiodev->func2, true,
169 @@ -686,7 +686,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
173 - sdio_claim_host(sdiodev->func[1]);
174 + sdio_claim_host(sdiodev->func1);
176 /* Do the transfer(s) */
178 @@ -706,10 +706,10 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
181 memcpy(pkt->data, data, dsize);
182 - err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func[1],
183 + err = brcmf_sdiod_buff_write(sdiodev, sdiodev->func1,
186 - err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func[1],
187 + err = brcmf_sdiod_buff_read(sdiodev, sdiodev->func1,
191 @@ -733,7 +733,7 @@ brcmf_sdiod_ramrw(struct brcmf_sdio_dev
195 - sdio_release_host(sdiodev->func[1]);
196 + sdio_release_host(sdiodev->func1);
200 @@ -757,7 +757,7 @@ void brcmf_sdiod_sgtable_alloc(struct br
204 - func = sdiodev->func[2];
205 + func = sdiodev->func2;
206 host = func->card->host;
207 sdiodev->sg_support = host->max_segs > 1;
208 max_blocks = min_t(uint, host->max_blk_count, 511u);
209 @@ -818,17 +818,17 @@ static int brcmf_sdiod_freezer_on(struct
210 brcmf_sdio_trigger_dpc(sdiodev->bus);
211 wait_event(sdiodev->freezer->thread_freeze,
212 atomic_read(expect) == sdiodev->freezer->frozen_count);
213 - sdio_claim_host(sdiodev->func[1]);
214 + sdio_claim_host(sdiodev->func1);
215 res = brcmf_sdio_sleep(sdiodev->bus, true);
216 - sdio_release_host(sdiodev->func[1]);
217 + sdio_release_host(sdiodev->func1);
221 static void brcmf_sdiod_freezer_off(struct brcmf_sdio_dev *sdiodev)
223 - sdio_claim_host(sdiodev->func[1]);
224 + sdio_claim_host(sdiodev->func1);
225 brcmf_sdio_sleep(sdiodev->bus, false);
226 - sdio_release_host(sdiodev->func[1]);
227 + sdio_release_host(sdiodev->func1);
228 atomic_set(&sdiodev->freezer->freezing, 0);
229 complete_all(&sdiodev->freezer->resumed);
231 @@ -878,19 +878,19 @@ static int brcmf_sdiod_remove(struct brc
232 brcmf_sdiod_freezer_detach(sdiodev);
234 /* Disable Function 2 */
235 - sdio_claim_host(sdiodev->func[2]);
236 - sdio_disable_func(sdiodev->func[2]);
237 - sdio_release_host(sdiodev->func[2]);
238 + sdio_claim_host(sdiodev->func2);
239 + sdio_disable_func(sdiodev->func2);
240 + sdio_release_host(sdiodev->func2);
242 /* Disable Function 1 */
243 - sdio_claim_host(sdiodev->func[1]);
244 - sdio_disable_func(sdiodev->func[1]);
245 - sdio_release_host(sdiodev->func[1]);
246 + sdio_claim_host(sdiodev->func1);
247 + sdio_disable_func(sdiodev->func1);
248 + sdio_release_host(sdiodev->func1);
250 sg_free_table(&sdiodev->sgtable);
253 - pm_runtime_allow(sdiodev->func[1]->card->host->parent);
254 + pm_runtime_allow(sdiodev->func1->card->host->parent);
258 @@ -906,29 +906,27 @@ static int brcmf_sdiod_probe(struct brcm
262 - sdiodev->num_funcs = 2;
263 + sdio_claim_host(sdiodev->func1);
265 - sdio_claim_host(sdiodev->func[1]);
267 - ret = sdio_set_block_size(sdiodev->func[1], SDIO_FUNC1_BLOCKSIZE);
268 + ret = sdio_set_block_size(sdiodev->func1, SDIO_FUNC1_BLOCKSIZE);
270 brcmf_err("Failed to set F1 blocksize\n");
271 - sdio_release_host(sdiodev->func[1]);
272 + sdio_release_host(sdiodev->func1);
275 - ret = sdio_set_block_size(sdiodev->func[2], SDIO_FUNC2_BLOCKSIZE);
276 + ret = sdio_set_block_size(sdiodev->func2, SDIO_FUNC2_BLOCKSIZE);
278 brcmf_err("Failed to set F2 blocksize\n");
279 - sdio_release_host(sdiodev->func[1]);
280 + sdio_release_host(sdiodev->func1);
284 /* increase F2 timeout */
285 - sdiodev->func[2]->enable_timeout = SDIO_WAIT_F2RDY;
286 + sdiodev->func2->enable_timeout = SDIO_WAIT_F2RDY;
288 /* Enable Function 1 */
289 - ret = sdio_enable_func(sdiodev->func[1]);
290 - sdio_release_host(sdiodev->func[1]);
291 + ret = sdio_enable_func(sdiodev->func1);
292 + sdio_release_host(sdiodev->func1);
294 brcmf_err("Failed to enable F1: err=%d\n", ret);
296 @@ -944,7 +942,7 @@ static int brcmf_sdiod_probe(struct brcm
300 - brcmf_sdiod_host_fixup(sdiodev->func[2]->card->host);
301 + brcmf_sdiod_host_fixup(sdiodev->func2->card->host);
304 brcmf_sdiod_remove(sdiodev);
305 @@ -1032,16 +1030,15 @@ static int brcmf_ops_sdio_probe(struct s
306 /* store refs to functions used. mmc_card does
307 * not hold the F0 function pointer.
309 - sdiodev->func[0] = NULL;
310 - sdiodev->func[1] = func->card->sdio_func[0];
311 - sdiodev->func[2] = func;
312 + sdiodev->func1 = func->card->sdio_func[0];
313 + sdiodev->func2 = func;
315 sdiodev->bus_if = bus_if;
316 bus_if->bus_priv.sdio = sdiodev;
317 bus_if->proto_type = BRCMF_PROTO_BCDC;
318 dev_set_drvdata(&func->dev, bus_if);
319 - dev_set_drvdata(&sdiodev->func[1]->dev, bus_if);
320 - sdiodev->dev = &sdiodev->func[1]->dev;
321 + dev_set_drvdata(&sdiodev->func1->dev, bus_if);
322 + sdiodev->dev = &sdiodev->func1->dev;
324 brcmf_sdiod_change_state(sdiodev, BRCMF_SDIOD_DOWN);
326 @@ -1057,7 +1054,7 @@ static int brcmf_ops_sdio_probe(struct s
329 dev_set_drvdata(&func->dev, NULL);
330 - dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
331 + dev_set_drvdata(&sdiodev->func1->dev, NULL);
335 @@ -1086,8 +1083,8 @@ static void brcmf_ops_sdio_remove(struct
336 /* only proceed with rest of cleanup if func 1 */
337 brcmf_sdiod_remove(sdiodev);
339 - dev_set_drvdata(&sdiodev->func[1]->dev, NULL);
340 - dev_set_drvdata(&sdiodev->func[2]->dev, NULL);
341 + dev_set_drvdata(&sdiodev->func1->dev, NULL);
342 + dev_set_drvdata(&sdiodev->func2->dev, NULL);
346 @@ -1132,7 +1129,7 @@ static int brcmf_ops_sdio_suspend(struct
348 sdio_flags |= MMC_PM_WAKE_SDIO_IRQ;
350 - if (sdio_set_host_pm_flags(sdiodev->func[1], sdio_flags))
351 + if (sdio_set_host_pm_flags(sdiodev->func1, sdio_flags))
352 brcmf_err("Failed to set pm_flags %x\n", sdio_flags);
355 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
356 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
357 @@ -979,7 +979,7 @@ static int brcmf_sdio_readshared(struct
358 struct sdpcm_shared_le sh_le;
361 - sdio_claim_host(bus->sdiodev->func[1]);
362 + sdio_claim_host(bus->sdiodev->func1);
363 brcmf_sdio_bus_sleep(bus, false, false);
366 @@ -1013,7 +1013,7 @@ static int brcmf_sdio_readshared(struct
370 - sdio_release_host(bus->sdiodev->func[1]);
371 + sdio_release_host(bus->sdiodev->func1);
374 sh->flags = le32_to_cpu(sh_le.flags);
375 @@ -1035,7 +1035,7 @@ static int brcmf_sdio_readshared(struct
377 brcmf_err("unable to obtain sdpcm_shared info: rv=%d (addr=0x%x)\n",
379 - sdio_release_host(bus->sdiodev->func[1]);
380 + sdio_release_host(bus->sdiodev->func1);
384 @@ -1157,7 +1157,7 @@ static void brcmf_sdio_rxfail(struct brc
385 rtx ? ", send NAK" : "");
388 - brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func[2]);
389 + brcmf_sdiod_abort(bus->sdiodev, bus->sdiodev->func2);
391 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_RF_TERM,
393 @@ -1209,7 +1209,7 @@ static void brcmf_sdio_txfail(struct brc
394 brcmf_err("sdio error, abort command and terminate frame\n");
395 bus->sdcnt.tx_sderrs++;
397 - brcmf_sdiod_abort(sdiodev, sdiodev->func[2]);
398 + brcmf_sdiod_abort(sdiodev, sdiodev->func2);
399 brcmf_sdiod_writeb(sdiodev, SBSDIO_FUNC1_FRAMECTRL, SFC_WF_TERM, NULL);
400 bus->sdcnt.f1regdata++;
402 @@ -1565,10 +1565,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
403 * read directly into the chained packet, or allocate a large
404 * packet and and copy into the chain.
406 - sdio_claim_host(bus->sdiodev->func[1]);
407 + sdio_claim_host(bus->sdiodev->func1);
408 errcode = brcmf_sdiod_recv_chain(bus->sdiodev,
410 - sdio_release_host(bus->sdiodev->func[1]);
411 + sdio_release_host(bus->sdiodev->func1);
412 bus->sdcnt.f2rxdata++;
414 /* On failure, kill the superframe */
415 @@ -1576,11 +1576,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf
416 brcmf_err("glom read of %d bytes failed: %d\n",
419 - sdio_claim_host(bus->sdiodev->func[1]);
420 + sdio_claim_host(bus->sdiodev->func1);
421 brcmf_sdio_rxfail(bus, true, false);
422 bus->sdcnt.rxglomfail++;
423 brcmf_sdio_free_glom(bus);
424 - sdio_release_host(bus->sdiodev->func[1]);
425 + sdio_release_host(bus->sdiodev->func1);
429 @@ -1590,10 +1590,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
431 rd_new.seq_num = rxseq;
433 - sdio_claim_host(bus->sdiodev->func[1]);
434 + sdio_claim_host(bus->sdiodev->func1);
435 errcode = brcmf_sdio_hdparse(bus, pfirst->data, &rd_new,
436 BRCMF_SDIO_FT_SUPER);
437 - sdio_release_host(bus->sdiodev->func[1]);
438 + sdio_release_host(bus->sdiodev->func1);
439 bus->cur_read.len = rd_new.len_nxtfrm << 4;
441 /* Remove superframe header, remember offset */
442 @@ -1609,10 +1609,10 @@ static u8 brcmf_sdio_rxglom(struct brcmf
444 rd_new.len = pnext->len;
445 rd_new.seq_num = rxseq++;
446 - sdio_claim_host(bus->sdiodev->func[1]);
447 + sdio_claim_host(bus->sdiodev->func1);
448 errcode = brcmf_sdio_hdparse(bus, pnext->data, &rd_new,
450 - sdio_release_host(bus->sdiodev->func[1]);
451 + sdio_release_host(bus->sdiodev->func1);
452 brcmf_dbg_hex_dump(BRCMF_GLOM_ON(),
453 pnext->data, 32, "subframe:\n");
455 @@ -1621,11 +1621,11 @@ static u8 brcmf_sdio_rxglom(struct brcmf
458 /* Terminate frame on error */
459 - sdio_claim_host(bus->sdiodev->func[1]);
460 + sdio_claim_host(bus->sdiodev->func1);
461 brcmf_sdio_rxfail(bus, true, false);
462 bus->sdcnt.rxglomfail++;
463 brcmf_sdio_free_glom(bus);
464 - sdio_release_host(bus->sdiodev->func[1]);
465 + sdio_release_host(bus->sdiodev->func1);
466 bus->cur_read.len = 0;
469 @@ -1833,7 +1833,7 @@ static uint brcmf_sdio_readframes(struct
471 rd->len_left = rd->len;
472 /* read header first for unknow frame length */
473 - sdio_claim_host(bus->sdiodev->func[1]);
474 + sdio_claim_host(bus->sdiodev->func1);
476 ret = brcmf_sdiod_recv_buf(bus->sdiodev,
477 bus->rxhdr, BRCMF_FIRSTREAD);
478 @@ -1843,7 +1843,7 @@ static uint brcmf_sdio_readframes(struct
480 bus->sdcnt.rx_hdrfail++;
481 brcmf_sdio_rxfail(bus, true, true);
482 - sdio_release_host(bus->sdiodev->func[1]);
483 + sdio_release_host(bus->sdiodev->func1);
487 @@ -1853,7 +1853,7 @@ static uint brcmf_sdio_readframes(struct
489 if (brcmf_sdio_hdparse(bus, bus->rxhdr, rd,
490 BRCMF_SDIO_FT_NORMAL)) {
491 - sdio_release_host(bus->sdiodev->func[1]);
492 + sdio_release_host(bus->sdiodev->func1);
496 @@ -1869,7 +1869,7 @@ static uint brcmf_sdio_readframes(struct
498 /* treat all packet as event if we don't know */
499 rd->channel = SDPCM_EVENT_CHANNEL;
500 - sdio_release_host(bus->sdiodev->func[1]);
501 + sdio_release_host(bus->sdiodev->func1);
504 rd->len_left = rd->len > BRCMF_FIRSTREAD ?
505 @@ -1886,7 +1886,7 @@ static uint brcmf_sdio_readframes(struct
506 brcmf_err("brcmu_pkt_buf_get_skb failed\n");
507 brcmf_sdio_rxfail(bus, false,
508 RETRYCHAN(rd->channel));
509 - sdio_release_host(bus->sdiodev->func[1]);
510 + sdio_release_host(bus->sdiodev->func1);
513 skb_pull(pkt, head_read);
514 @@ -1894,16 +1894,16 @@ static uint brcmf_sdio_readframes(struct
516 ret = brcmf_sdiod_recv_pkt(bus->sdiodev, pkt);
517 bus->sdcnt.f2rxdata++;
518 - sdio_release_host(bus->sdiodev->func[1]);
519 + sdio_release_host(bus->sdiodev->func1);
522 brcmf_err("read %d bytes from channel %d failed: %d\n",
523 rd->len, rd->channel, ret);
524 brcmu_pkt_buf_free_skb(pkt);
525 - sdio_claim_host(bus->sdiodev->func[1]);
526 + sdio_claim_host(bus->sdiodev->func1);
527 brcmf_sdio_rxfail(bus, true,
528 RETRYCHAN(rd->channel));
529 - sdio_release_host(bus->sdiodev->func[1]);
530 + sdio_release_host(bus->sdiodev->func1);
534 @@ -1914,7 +1914,7 @@ static uint brcmf_sdio_readframes(struct
536 memcpy(bus->rxhdr, pkt->data, SDPCM_HDRLEN);
537 rd_new.seq_num = rd->seq_num;
538 - sdio_claim_host(bus->sdiodev->func[1]);
539 + sdio_claim_host(bus->sdiodev->func1);
540 if (brcmf_sdio_hdparse(bus, bus->rxhdr, &rd_new,
541 BRCMF_SDIO_FT_NORMAL)) {
543 @@ -1927,11 +1927,11 @@ static uint brcmf_sdio_readframes(struct
544 roundup(rd_new.len, 16) >> 4);
546 brcmf_sdio_rxfail(bus, true, true);
547 - sdio_release_host(bus->sdiodev->func[1]);
548 + sdio_release_host(bus->sdiodev->func1);
549 brcmu_pkt_buf_free_skb(pkt);
552 - sdio_release_host(bus->sdiodev->func[1]);
553 + sdio_release_host(bus->sdiodev->func1);
554 rd->len_nxtfrm = rd_new.len_nxtfrm;
555 rd->channel = rd_new.channel;
556 rd->dat_offset = rd_new.dat_offset;
557 @@ -1947,9 +1947,9 @@ static uint brcmf_sdio_readframes(struct
559 /* Force retry w/normal header read */
561 - sdio_claim_host(bus->sdiodev->func[1]);
562 + sdio_claim_host(bus->sdiodev->func1);
563 brcmf_sdio_rxfail(bus, false, true);
564 - sdio_release_host(bus->sdiodev->func[1]);
565 + sdio_release_host(bus->sdiodev->func1);
566 brcmu_pkt_buf_free_skb(pkt);
569 @@ -1972,9 +1972,9 @@ static uint brcmf_sdio_readframes(struct
571 brcmf_err("%s: glom superframe w/o "
572 "descriptor!\n", __func__);
573 - sdio_claim_host(bus->sdiodev->func[1]);
574 + sdio_claim_host(bus->sdiodev->func1);
575 brcmf_sdio_rxfail(bus, false, false);
576 - sdio_release_host(bus->sdiodev->func[1]);
577 + sdio_release_host(bus->sdiodev->func1);
579 /* prepare the descriptor for the next read */
580 rd->len = rd->len_nxtfrm << 4;
581 @@ -2072,7 +2072,7 @@ static int brcmf_sdio_txpkt_prep_sg(stru
584 sdiodev = bus->sdiodev;
585 - blksize = sdiodev->func[2]->cur_blksize;
586 + blksize = sdiodev->func2->cur_blksize;
587 /* sg entry alignment should be a divisor of block size */
588 WARN_ON(blksize % bus->sgentry_align);
590 @@ -2251,14 +2251,14 @@ static int brcmf_sdio_txpkt(struct brcmf
594 - sdio_claim_host(bus->sdiodev->func[1]);
595 + sdio_claim_host(bus->sdiodev->func1);
596 ret = brcmf_sdiod_send_pkt(bus->sdiodev, pktq);
597 bus->sdcnt.f2txdata++;
600 brcmf_sdio_txfail(bus);
602 - sdio_release_host(bus->sdiodev->func[1]);
603 + sdio_release_host(bus->sdiodev->func1);
606 brcmf_sdio_txpkt_postp(bus, pktq);
607 @@ -2314,10 +2314,11 @@ static uint brcmf_sdio_sendfromq(struct
608 /* In poll mode, need to check for other events */
610 /* Check device status, signal pending interrupt */
611 - sdio_claim_host(bus->sdiodev->func[1]);
612 + sdio_claim_host(bus->sdiodev->func1);
613 intstatus = brcmf_sdiod_readl(bus->sdiodev,
615 - sdio_release_host(bus->sdiodev->func[1]);
616 + sdio_release_host(bus->sdiodev->func1);
618 bus->sdcnt.f2txdata++;
621 @@ -2417,7 +2418,7 @@ static void brcmf_sdio_bus_stop(struct d
624 if (sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
625 - sdio_claim_host(sdiodev->func[1]);
626 + sdio_claim_host(sdiodev->func1);
628 /* Enable clock for device interrupts */
629 brcmf_sdio_bus_sleep(bus, false, false);
630 @@ -2441,13 +2442,13 @@ static void brcmf_sdio_bus_stop(struct d
632 /* Turn off the bus (F2), free any pending packets */
633 brcmf_dbg(INTR, "disable SDIO interrupts\n");
634 - sdio_disable_func(sdiodev->func[2]);
635 + sdio_disable_func(sdiodev->func2);
637 /* Clear any pending interrupts now that F2 is disabled */
638 brcmf_sdiod_writel(sdiodev, core->base + SD_REG(intstatus),
639 local_hostintmask, NULL);
641 - sdio_release_host(sdiodev->func[1]);
642 + sdio_release_host(sdiodev->func1);
644 /* Clear the data packet queues */
645 brcmu_pktq_flush(&bus->txq, true, NULL, NULL);
646 @@ -2522,7 +2523,7 @@ static void brcmf_sdio_dpc(struct brcmf_
648 brcmf_dbg(TRACE, "Enter\n");
650 - sdio_claim_host(bus->sdiodev->func[1]);
651 + sdio_claim_host(bus->sdiodev->func1);
653 /* If waiting for HTAVAIL, check status */
654 if (!bus->sr_enabled && bus->clkstate == CLK_PENDING) {
655 @@ -2585,7 +2586,7 @@ static void brcmf_sdio_dpc(struct brcmf_
656 intstatus |= brcmf_sdio_hostmail(bus);
659 - sdio_release_host(bus->sdiodev->func[1]);
660 + sdio_release_host(bus->sdiodev->func1);
662 /* Generally don't ask for these, can get CRC errors... */
663 if (intstatus & I_WR_OOSYNC) {
664 @@ -2628,7 +2629,7 @@ static void brcmf_sdio_dpc(struct brcmf_
666 if (bus->ctrl_frame_stat && (bus->clkstate == CLK_AVAIL) &&
668 - sdio_claim_host(bus->sdiodev->func[1]);
669 + sdio_claim_host(bus->sdiodev->func1);
670 if (bus->ctrl_frame_stat) {
671 err = brcmf_sdio_tx_ctrlframe(bus, bus->ctrl_frame_buf,
672 bus->ctrl_frame_len);
673 @@ -2636,7 +2637,7 @@ static void brcmf_sdio_dpc(struct brcmf_
675 bus->ctrl_frame_stat = false;
677 - sdio_release_host(bus->sdiodev->func[1]);
678 + sdio_release_host(bus->sdiodev->func1);
679 brcmf_sdio_wait_event_wakeup(bus);
681 /* Send queued frames (limit 1 if rx may still be pending) */
682 @@ -2652,14 +2653,14 @@ static void brcmf_sdio_dpc(struct brcmf_
683 brcmf_err("failed backplane access over SDIO, halting operation\n");
684 atomic_set(&bus->intstatus, 0);
685 if (bus->ctrl_frame_stat) {
686 - sdio_claim_host(bus->sdiodev->func[1]);
687 + sdio_claim_host(bus->sdiodev->func1);
688 if (bus->ctrl_frame_stat) {
689 bus->ctrl_frame_err = -ENODEV;
691 bus->ctrl_frame_stat = false;
692 brcmf_sdio_wait_event_wakeup(bus);
694 - sdio_release_host(bus->sdiodev->func[1]);
695 + sdio_release_host(bus->sdiodev->func1);
697 } else if (atomic_read(&bus->intstatus) ||
698 atomic_read(&bus->ipend) > 0 ||
699 @@ -2874,13 +2875,13 @@ brcmf_sdio_bus_txctl(struct device *dev,
702 if (bus->ctrl_frame_stat) {
703 - sdio_claim_host(bus->sdiodev->func[1]);
704 + sdio_claim_host(bus->sdiodev->func1);
705 if (bus->ctrl_frame_stat) {
706 brcmf_dbg(SDIO, "ctrl_frame timeout\n");
707 bus->ctrl_frame_stat = false;
710 - sdio_release_host(bus->sdiodev->func[1]);
711 + sdio_release_host(bus->sdiodev->func1);
714 brcmf_dbg(SDIO, "ctrl_frame complete, err=%d\n",
715 @@ -3004,7 +3005,7 @@ static int brcmf_sdio_assert_info(struct
719 - sdio_claim_host(bus->sdiodev->func[1]);
720 + sdio_claim_host(bus->sdiodev->func1);
721 if (sh->assert_file_addr != 0) {
722 error = brcmf_sdiod_ramrw(bus->sdiodev, false,
723 sh->assert_file_addr, (u8 *)file, 80);
724 @@ -3017,7 +3018,7 @@ static int brcmf_sdio_assert_info(struct
728 - sdio_release_host(bus->sdiodev->func[1]);
729 + sdio_release_host(bus->sdiodev->func1);
731 seq_printf(seq, "dongle assert: %s:%d: assert(%s)\n",
732 file, sh->assert_line, expr);
733 @@ -3291,7 +3292,7 @@ static int brcmf_sdio_download_firmware(
737 - sdio_claim_host(bus->sdiodev->func[1]);
738 + sdio_claim_host(bus->sdiodev->func1);
739 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
741 rstvec = get_unaligned_le32(fw->data);
742 @@ -3320,7 +3321,7 @@ static int brcmf_sdio_download_firmware(
745 brcmf_sdio_clkctl(bus, CLK_SDONLY, false);
746 - sdio_release_host(bus->sdiodev->func[1]);
747 + sdio_release_host(bus->sdiodev->func1);
751 @@ -3435,7 +3436,7 @@ static int brcmf_sdio_bus_preinit(struct
752 if (sdiodev->sg_support) {
755 - pad_size = bus->sdiodev->func[2]->cur_blksize << 1;
756 + pad_size = bus->sdiodev->func2->cur_blksize << 1;
757 err = brcmf_iovar_data_set(bus->sdiodev->dev, "bus:rxglom",
758 &value, sizeof(u32));
760 @@ -3477,7 +3478,7 @@ static int brcmf_sdio_bus_get_memdump(st
762 address = bus->ci->rambase;
764 - sdio_claim_host(sdiodev->func[1]);
765 + sdio_claim_host(sdiodev->func1);
766 while (offset < mem_size) {
767 len = ((offset + MEMBLOCK) < mem_size) ? MEMBLOCK :
769 @@ -3493,7 +3494,7 @@ static int brcmf_sdio_bus_get_memdump(st
773 - sdio_release_host(sdiodev->func[1]);
774 + sdio_release_host(sdiodev->func1);
778 @@ -3550,11 +3551,10 @@ static void brcmf_sdio_bus_watchdog(stru
779 if (!bus->dpc_triggered) {
782 - sdio_claim_host(bus->sdiodev->func[1]);
783 + sdio_claim_host(bus->sdiodev->func1);
784 devpend = brcmf_sdiod_func0_rb(bus->sdiodev,
787 - sdio_release_host(bus->sdiodev->func[1]);
788 + SDIO_CCCR_INTx, NULL);
789 + sdio_release_host(bus->sdiodev->func1);
790 intstatus = devpend & (INTR_STATUS_FUNC1 |
793 @@ -3580,13 +3580,13 @@ static void brcmf_sdio_bus_watchdog(stru
794 bus->console.count += jiffies_to_msecs(BRCMF_WD_POLL);
795 if (bus->console.count >= bus->console_interval) {
796 bus->console.count -= bus->console_interval;
797 - sdio_claim_host(bus->sdiodev->func[1]);
798 + sdio_claim_host(bus->sdiodev->func1);
799 /* Make sure backplane clock is on */
800 brcmf_sdio_bus_sleep(bus, false, false);
801 if (brcmf_sdio_readconsole(bus) < 0)
803 bus->console_interval = 0;
804 - sdio_release_host(bus->sdiodev->func[1]);
805 + sdio_release_host(bus->sdiodev->func1);
809 @@ -3599,11 +3599,11 @@ static void brcmf_sdio_bus_watchdog(stru
811 if (bus->idlecount > bus->idletime) {
812 brcmf_dbg(SDIO, "idle\n");
813 - sdio_claim_host(bus->sdiodev->func[1]);
814 + sdio_claim_host(bus->sdiodev->func1);
815 brcmf_sdio_wd_timer(bus, false);
817 brcmf_sdio_bus_sleep(bus, true, false);
818 - sdio_release_host(bus->sdiodev->func[1]);
819 + sdio_release_host(bus->sdiodev->func1);
823 @@ -3773,8 +3773,8 @@ static u32 brcmf_sdio_buscore_read32(voi
824 val = brcmf_sdiod_readl(sdiodev, addr, NULL);
826 if (addr == CORE_CC_REG(SI_ENUM_BASE, chipid) &&
827 - (sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
828 - sdiodev->func[1]->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
829 + (sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4339 ||
830 + sdiodev->func1->device == SDIO_DEVICE_ID_BROADCOM_4335_4339)) {
831 rev = (val & CID_REV_MASK) >> CID_REV_SHIFT;
834 @@ -3810,7 +3810,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
837 sdiodev = bus->sdiodev;
838 - sdio_claim_host(sdiodev->func[1]);
839 + sdio_claim_host(sdiodev->func1);
841 pr_debug("F1 signature read @0x18000000=0x%4x\n",
842 brcmf_sdiod_readl(sdiodev, SI_ENUM_BASE, NULL));
843 @@ -3877,8 +3877,8 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
844 /* wowl can be supported when KEEP_POWER is true and (WAKE_SDIO_IRQ
845 * is true or when platform data OOB irq is true).
847 - if ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_KEEP_POWER) &&
848 - ((sdio_get_host_pm_caps(sdiodev->func[1]) & MMC_PM_WAKE_SDIO_IRQ) ||
849 + if ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_KEEP_POWER) &&
850 + ((sdio_get_host_pm_caps(sdiodev->func1) & MMC_PM_WAKE_SDIO_IRQ) ||
851 (sdiodev->settings->bus.sdio.oob_irq_supported)))
852 sdiodev->bus_if->wowl_supported = true;
854 @@ -3917,7 +3917,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
858 - sdio_release_host(sdiodev->func[1]);
859 + sdio_release_host(sdiodev->func1);
861 brcmu_pktq_init(&bus->txq, (PRIOMASK + 1), TXQLEN);
863 @@ -3938,7 +3938,7 @@ brcmf_sdio_probe_attach(struct brcmf_sdi
867 - sdio_release_host(sdiodev->func[1]);
868 + sdio_release_host(sdiodev->func1);
872 @@ -4044,7 +4044,7 @@ static void brcmf_sdio_firmware_callback
873 bus->sdcnt.tickcnt = 0;
874 brcmf_sdio_wd_timer(bus, true);
876 - sdio_claim_host(sdiodev->func[1]);
877 + sdio_claim_host(sdiodev->func1);
879 /* Make sure backplane clock is on, needed to generate F2 interrupt */
880 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
881 @@ -4066,7 +4066,7 @@ static void brcmf_sdio_firmware_callback
882 brcmf_sdiod_writel(sdiod, core->base + SD_REG(tosbmailboxdata),
883 SDPCM_PROT_VERSION << SMB_DATA_VERSION_SHIFT, NULL);
885 - err = sdio_enable_func(sdiodev->func[2]);
886 + err = sdio_enable_func(sdiodev->func2);
888 brcmf_dbg(INFO, "enable F2: err=%d\n", err);
890 @@ -4081,7 +4081,7 @@ static void brcmf_sdio_firmware_callback
891 brcmf_sdiod_writeb(sdiodev, SBSDIO_WATERMARK, 8, &err);
893 /* Disable F2 again */
894 - sdio_disable_func(sdiodev->func[2]);
895 + sdio_disable_func(sdiodev->func2);
899 @@ -4106,7 +4106,7 @@ static void brcmf_sdio_firmware_callback
901 brcmf_sdio_clkctl(bus, CLK_NONE, false);
903 - sdio_release_host(sdiodev->func[1]);
904 + sdio_release_host(sdiodev->func1);
906 err = brcmf_bus_started(dev);
908 @@ -4116,10 +4116,10 @@ static void brcmf_sdio_firmware_callback
912 - sdio_release_host(sdiodev->func[1]);
913 + sdio_release_host(sdiodev->func1);
915 brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), err);
916 - device_release_driver(&sdiodev->func[2]->dev);
917 + device_release_driver(&sdiodev->func2->dev);
918 device_release_driver(dev);
921 @@ -4146,7 +4146,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
923 /* single-threaded workqueue */
924 wq = alloc_ordered_workqueue("brcmf_wq/%s", WQ_MEM_RECLAIM,
925 - dev_name(&sdiodev->func[1]->dev));
926 + dev_name(&sdiodev->func1->dev));
928 brcmf_err("insufficient memory to create txworkqueue\n");
930 @@ -4173,7 +4173,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
931 init_completion(&bus->watchdog_wait);
932 bus->watchdog_tsk = kthread_run(brcmf_sdio_watchdog_thread,
933 bus, "brcmf_wdog/%s",
934 - dev_name(&sdiodev->func[1]->dev));
935 + dev_name(&sdiodev->func1->dev));
936 if (IS_ERR(bus->watchdog_tsk)) {
937 pr_warn("brcmf_watchdog thread failed to start\n");
938 bus->watchdog_tsk = NULL;
939 @@ -4199,7 +4199,7 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
942 /* Query the F2 block size, set roundup accordingly */
943 - bus->blocksize = bus->sdiodev->func[2]->cur_blksize;
944 + bus->blocksize = bus->sdiodev->func2->cur_blksize;
945 bus->roundup = min(max_roundup, bus->blocksize);
947 /* Allocate buffers */
948 @@ -4215,17 +4215,17 @@ struct brcmf_sdio *brcmf_sdio_probe(stru
952 - sdio_claim_host(bus->sdiodev->func[1]);
953 + sdio_claim_host(bus->sdiodev->func1);
955 /* Disable F2 to clear any intermediate frame state on the dongle */
956 - sdio_disable_func(bus->sdiodev->func[2]);
957 + sdio_disable_func(bus->sdiodev->func2);
961 /* Done with backplane-dependent accesses, can drop clock... */
962 brcmf_sdiod_writeb(bus->sdiodev, SBSDIO_FUNC1_CHIPCLKCSR, 0, NULL);
964 - sdio_release_host(bus->sdiodev->func[1]);
965 + sdio_release_host(bus->sdiodev->func1);
967 /* ...and initialize clock/power states */
968 bus->clkstate = CLK_SDONLY;
969 @@ -4277,7 +4277,7 @@ void brcmf_sdio_remove(struct brcmf_sdio
972 if (bus->sdiodev->state != BRCMF_SDIOD_NOMEDIUM) {
973 - sdio_claim_host(bus->sdiodev->func[1]);
974 + sdio_claim_host(bus->sdiodev->func1);
975 brcmf_sdio_wd_timer(bus, false);
976 brcmf_sdio_clkctl(bus, CLK_AVAIL, false);
977 /* Leave the device in state where it is
978 @@ -4287,7 +4287,7 @@ void brcmf_sdio_remove(struct brcmf_sdio
980 brcmf_chip_set_passive(bus->ci);
981 brcmf_sdio_clkctl(bus, CLK_NONE, false);
982 - sdio_release_host(bus->sdiodev->func[1]);
983 + sdio_release_host(bus->sdiodev->func1);
985 brcmf_chip_detach(bus->ci);
987 @@ -4334,9 +4334,9 @@ int brcmf_sdio_sleep(struct brcmf_sdio *
991 - sdio_claim_host(bus->sdiodev->func[1]);
992 + sdio_claim_host(bus->sdiodev->func1);
993 ret = brcmf_sdio_bus_sleep(bus, sleep, false);
994 - sdio_release_host(bus->sdiodev->func[1]);
995 + sdio_release_host(bus->sdiodev->func1);
999 --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
1000 +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.h
1002 #include <linux/firmware.h>
1003 #include "firmware.h"
1005 -/* Maximum number of I/O funcs */
1006 -#define NUM_SDIO_FUNCS 3
1008 #define SDIOD_FBR_SIZE 0x100
1011 @@ -173,8 +170,8 @@ struct brcmf_sdio;
1012 struct brcmf_sdiod_freezer;
1014 struct brcmf_sdio_dev {
1015 - struct sdio_func *func[NUM_SDIO_FUNCS];
1016 - u8 num_funcs; /* Supported funcs on client */
1017 + struct sdio_func *func1;
1018 + struct sdio_func *func2;
1019 u32 sbwad; /* Save backplane window address */
1020 struct brcmf_core *cc_core; /* chipcommon core info struct */
1021 struct brcmf_sdio *bus;
1022 @@ -295,17 +292,17 @@ void brcmf_sdiod_intr_unregister(struct
1023 /* SDIO device register access interface */
1024 /* Accessors for SDIO Function 0 */
1025 #define brcmf_sdiod_func0_rb(sdiodev, addr, r) \
1026 - sdio_f0_readb((sdiodev)->func[1], (addr), (r))
1027 + sdio_f0_readb((sdiodev)->func1, (addr), (r))
1029 #define brcmf_sdiod_func0_wb(sdiodev, addr, v, ret) \
1030 - sdio_f0_writeb((sdiodev)->func[1], (v), (addr), (ret))
1031 + sdio_f0_writeb((sdiodev)->func1, (v), (addr), (ret))
1033 /* Accessors for SDIO Function 1 */
1034 #define brcmf_sdiod_readb(sdiodev, addr, r) \
1035 - sdio_readb((sdiodev)->func[1], (addr), (r))
1036 + sdio_readb((sdiodev)->func1, (addr), (r))
1038 #define brcmf_sdiod_writeb(sdiodev, addr, v, ret) \
1039 - sdio_writeb((sdiodev)->func[1], (v), (addr), (ret))
1040 + sdio_writeb((sdiodev)->func1, (v), (addr), (ret))
1042 u32 brcmf_sdiod_readl(struct brcmf_sdio_dev *sdiodev, u32 addr, int *ret);
1043 void brcmf_sdiod_writel(struct brcmf_sdio_dev *sdiodev, u32 addr, u32 data,