brcmfmac: (clean) Rename files dhd_dbg to debug
[linux-2.6-block.git] / drivers / net / wireless / brcm80211 / brcmfmac / usb.c
1 /*
2  * Copyright (c) 2011 Broadcom Corporation
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16
17 #include <linux/kernel.h>
18 #include <linux/module.h>
19 #include <linux/firmware.h>
20 #include <linux/usb.h>
21 #include <linux/vmalloc.h>
22
23 #include <brcmu_utils.h>
24 #include <brcm_hw_ids.h>
25 #include <brcmu_wifi.h>
26 #include <dhd_bus.h>
27
28 #include "debug.h"
29 #include "firmware.h"
30 #include "usb.h"
31
32
33 #define IOCTL_RESP_TIMEOUT              2000
34
35 #define BRCMF_USB_RESET_GETVER_SPINWAIT 100     /* in unit of ms */
36 #define BRCMF_USB_RESET_GETVER_LOOP_CNT 10
37
38 #define BRCMF_POSTBOOT_ID               0xA123  /* ID to detect if dongle
39                                                    has boot up */
40 #define BRCMF_USB_NRXQ                  50
41 #define BRCMF_USB_NTXQ                  50
42
43 #define BRCMF_USB_CBCTL_WRITE           0
44 #define BRCMF_USB_CBCTL_READ            1
45 #define BRCMF_USB_MAX_PKT_SIZE          1600
46
47 #define BRCMF_USB_43143_FW_NAME         "brcm/brcmfmac43143.bin"
48 #define BRCMF_USB_43236_FW_NAME         "brcm/brcmfmac43236b.bin"
49 #define BRCMF_USB_43242_FW_NAME         "brcm/brcmfmac43242a.bin"
50 #define BRCMF_USB_43569_FW_NAME         "brcm/brcmfmac43569.bin"
51
52 #define TRX_MAGIC               0x30524448      /* "HDR0" */
53 #define TRX_MAX_OFFSET          3               /* Max number of file offsets */
54 #define TRX_UNCOMP_IMAGE        0x20            /* Trx holds uncompressed img */
55 #define TRX_RDL_CHUNK           1500            /* size of each dl transfer */
56 #define TRX_OFFSETS_DLFWLEN_IDX 0
57
58 /* Control messages: bRequest values */
59 #define DL_GETSTATE     0       /* returns the rdl_state_t struct */
60 #define DL_CHECK_CRC    1       /* currently unused */
61 #define DL_GO           2       /* execute downloaded image */
62 #define DL_START        3       /* initialize dl state */
63 #define DL_REBOOT       4       /* reboot the device in 2 seconds */
64 #define DL_GETVER       5       /* returns the bootrom_id_t struct */
65 #define DL_GO_PROTECTED 6       /* execute the downloaded code and set reset
66                                  * event to occur in 2 seconds.  It is the
67                                  * responsibility of the downloaded code to
68                                  * clear this event
69                                  */
70 #define DL_EXEC         7       /* jump to a supplied address */
71 #define DL_RESETCFG     8       /* To support single enum on dongle
72                                  * - Not used by bootloader
73                                  */
74 #define DL_DEFER_RESP_OK 9      /* Potentially defer the response to setup
75                                  * if resp unavailable
76                                  */
77
78 /* states */
79 #define DL_WAITING      0       /* waiting to rx first pkt */
80 #define DL_READY        1       /* hdr was good, waiting for more of the
81                                  * compressed image
82                                  */
83 #define DL_BAD_HDR      2       /* hdr was corrupted */
84 #define DL_BAD_CRC      3       /* compressed image was corrupted */
85 #define DL_RUNNABLE     4       /* download was successful,waiting for go cmd */
86 #define DL_START_FAIL   5       /* failed to initialize correctly */
87 #define DL_NVRAM_TOOBIG 6       /* host specified nvram data exceeds DL_NVRAM
88                                  * value
89                                  */
90 #define DL_IMAGE_TOOBIG 7       /* firmware image too big */
91
92
93 struct trx_header_le {
94         __le32 magic;           /* "HDR0" */
95         __le32 len;             /* Length of file including header */
96         __le32 crc32;           /* CRC from flag_version to end of file */
97         __le32 flag_version;    /* 0:15 flags, 16:31 version */
98         __le32 offsets[TRX_MAX_OFFSET]; /* Offsets of partitions from start of
99                                          * header
100                                          */
101 };
102
103 struct rdl_state_le {
104         __le32 state;
105         __le32 bytes;
106 };
107
108 struct bootrom_id_le {
109         __le32 chip;            /* Chip id */
110         __le32 chiprev;         /* Chip rev */
111         __le32 ramsize;         /* Size of  RAM */
112         __le32 remapbase;       /* Current remap base address */
113         __le32 boardtype;       /* Type of board */
114         __le32 boardrev;        /* Board revision */
115 };
116
117 struct brcmf_usb_image {
118         struct list_head list;
119         s8 *fwname;
120         u8 *image;
121         int image_len;
122 };
123
124 struct brcmf_usbdev_info {
125         struct brcmf_usbdev bus_pub; /* MUST BE FIRST */
126         spinlock_t qlock;
127         struct list_head rx_freeq;
128         struct list_head rx_postq;
129         struct list_head tx_freeq;
130         struct list_head tx_postq;
131         uint rx_pipe, tx_pipe;
132
133         int rx_low_watermark;
134         int tx_low_watermark;
135         int tx_high_watermark;
136         int tx_freecount;
137         bool tx_flowblock;
138         spinlock_t tx_flowblock_lock;
139
140         struct brcmf_usbreq *tx_reqs;
141         struct brcmf_usbreq *rx_reqs;
142
143         const u8 *image;        /* buffer for combine fw and nvram */
144         int image_len;
145
146         struct usb_device *usbdev;
147         struct device *dev;
148
149         int ctl_in_pipe, ctl_out_pipe;
150         struct urb *ctl_urb; /* URB for control endpoint */
151         struct usb_ctrlrequest ctl_write;
152         struct usb_ctrlrequest ctl_read;
153         u32 ctl_urb_actual_length;
154         int ctl_urb_status;
155         int ctl_completed;
156         wait_queue_head_t ioctl_resp_wait;
157         ulong ctl_op;
158         u8 ifnum;
159
160         struct urb *bulk_urb; /* used for FW download */
161
162         bool wowl_enabled;
163 };
164
165 static void brcmf_usb_rx_refill(struct brcmf_usbdev_info *devinfo,
166                                 struct brcmf_usbreq  *req);
167
168 static struct brcmf_usbdev *brcmf_usb_get_buspub(struct device *dev)
169 {
170         struct brcmf_bus *bus_if = dev_get_drvdata(dev);
171         return bus_if->bus_priv.usb;
172 }
173
174 static struct brcmf_usbdev_info *brcmf_usb_get_businfo(struct device *dev)
175 {
176         return brcmf_usb_get_buspub(dev)->devinfo;
177 }
178
179 static int brcmf_usb_ioctl_resp_wait(struct brcmf_usbdev_info *devinfo)
180 {
181         return wait_event_timeout(devinfo->ioctl_resp_wait,
182                                   devinfo->ctl_completed,
183                                   msecs_to_jiffies(IOCTL_RESP_TIMEOUT));
184 }
185
186 static void brcmf_usb_ioctl_resp_wake(struct brcmf_usbdev_info *devinfo)
187 {
188         if (waitqueue_active(&devinfo->ioctl_resp_wait))
189                 wake_up(&devinfo->ioctl_resp_wait);
190 }
191
192 static void
193 brcmf_usb_ctl_complete(struct brcmf_usbdev_info *devinfo, int type, int status)
194 {
195         brcmf_dbg(USB, "Enter, status=%d\n", status);
196
197         if (unlikely(devinfo == NULL))
198                 return;
199
200         if (type == BRCMF_USB_CBCTL_READ) {
201                 if (status == 0)
202                         devinfo->bus_pub.stats.rx_ctlpkts++;
203                 else
204                         devinfo->bus_pub.stats.rx_ctlerrs++;
205         } else if (type == BRCMF_USB_CBCTL_WRITE) {
206                 if (status == 0)
207                         devinfo->bus_pub.stats.tx_ctlpkts++;
208                 else
209                         devinfo->bus_pub.stats.tx_ctlerrs++;
210         }
211
212         devinfo->ctl_urb_status = status;
213         devinfo->ctl_completed = true;
214         brcmf_usb_ioctl_resp_wake(devinfo);
215 }
216
217 static void
218 brcmf_usb_ctlread_complete(struct urb *urb)
219 {
220         struct brcmf_usbdev_info *devinfo =
221                 (struct brcmf_usbdev_info *)urb->context;
222
223         brcmf_dbg(USB, "Enter\n");
224         devinfo->ctl_urb_actual_length = urb->actual_length;
225         brcmf_usb_ctl_complete(devinfo, BRCMF_USB_CBCTL_READ,
226                 urb->status);
227 }
228
229 static void
230 brcmf_usb_ctlwrite_complete(struct urb *urb)
231 {
232         struct brcmf_usbdev_info *devinfo =
233                 (struct brcmf_usbdev_info *)urb->context;
234
235         brcmf_dbg(USB, "Enter\n");
236         brcmf_usb_ctl_complete(devinfo, BRCMF_USB_CBCTL_WRITE,
237                 urb->status);
238 }
239
240 static int
241 brcmf_usb_send_ctl(struct brcmf_usbdev_info *devinfo, u8 *buf, int len)
242 {
243         int ret;
244         u16 size;
245
246         brcmf_dbg(USB, "Enter\n");
247         if (devinfo == NULL || buf == NULL ||
248             len == 0 || devinfo->ctl_urb == NULL)
249                 return -EINVAL;
250
251         size = len;
252         devinfo->ctl_write.wLength = cpu_to_le16p(&size);
253         devinfo->ctl_urb->transfer_buffer_length = size;
254         devinfo->ctl_urb_status = 0;
255         devinfo->ctl_urb_actual_length = 0;
256
257         usb_fill_control_urb(devinfo->ctl_urb,
258                 devinfo->usbdev,
259                 devinfo->ctl_out_pipe,
260                 (unsigned char *) &devinfo->ctl_write,
261                 buf, size,
262                 (usb_complete_t)brcmf_usb_ctlwrite_complete,
263                 devinfo);
264
265         ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC);
266         if (ret < 0)
267                 brcmf_err("usb_submit_urb failed %d\n", ret);
268
269         return ret;
270 }
271
272 static int
273 brcmf_usb_recv_ctl(struct brcmf_usbdev_info *devinfo, u8 *buf, int len)
274 {
275         int ret;
276         u16 size;
277
278         brcmf_dbg(USB, "Enter\n");
279         if ((devinfo == NULL) || (buf == NULL) || (len == 0)
280                 || (devinfo->ctl_urb == NULL))
281                 return -EINVAL;
282
283         size = len;
284         devinfo->ctl_read.wLength = cpu_to_le16p(&size);
285         devinfo->ctl_urb->transfer_buffer_length = size;
286
287         devinfo->ctl_read.bRequestType = USB_DIR_IN
288                 | USB_TYPE_CLASS | USB_RECIP_INTERFACE;
289         devinfo->ctl_read.bRequest = 1;
290
291         usb_fill_control_urb(devinfo->ctl_urb,
292                 devinfo->usbdev,
293                 devinfo->ctl_in_pipe,
294                 (unsigned char *) &devinfo->ctl_read,
295                 buf, size,
296                 (usb_complete_t)brcmf_usb_ctlread_complete,
297                 devinfo);
298
299         ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC);
300         if (ret < 0)
301                 brcmf_err("usb_submit_urb failed %d\n", ret);
302
303         return ret;
304 }
305
306 static int brcmf_usb_tx_ctlpkt(struct device *dev, u8 *buf, u32 len)
307 {
308         int err = 0;
309         int timeout = 0;
310         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
311
312         brcmf_dbg(USB, "Enter\n");
313         if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP)
314                 return -EIO;
315
316         if (test_and_set_bit(0, &devinfo->ctl_op))
317                 return -EIO;
318
319         devinfo->ctl_completed = false;
320         err = brcmf_usb_send_ctl(devinfo, buf, len);
321         if (err) {
322                 brcmf_err("fail %d bytes: %d\n", err, len);
323                 clear_bit(0, &devinfo->ctl_op);
324                 return err;
325         }
326         timeout = brcmf_usb_ioctl_resp_wait(devinfo);
327         clear_bit(0, &devinfo->ctl_op);
328         if (!timeout) {
329                 brcmf_err("Txctl wait timed out\n");
330                 err = -EIO;
331         }
332         return err;
333 }
334
335 static int brcmf_usb_rx_ctlpkt(struct device *dev, u8 *buf, u32 len)
336 {
337         int err = 0;
338         int timeout = 0;
339         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
340
341         brcmf_dbg(USB, "Enter\n");
342         if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP)
343                 return -EIO;
344
345         if (test_and_set_bit(0, &devinfo->ctl_op))
346                 return -EIO;
347
348         devinfo->ctl_completed = false;
349         err = brcmf_usb_recv_ctl(devinfo, buf, len);
350         if (err) {
351                 brcmf_err("fail %d bytes: %d\n", err, len);
352                 clear_bit(0, &devinfo->ctl_op);
353                 return err;
354         }
355         timeout = brcmf_usb_ioctl_resp_wait(devinfo);
356         err = devinfo->ctl_urb_status;
357         clear_bit(0, &devinfo->ctl_op);
358         if (!timeout) {
359                 brcmf_err("rxctl wait timed out\n");
360                 err = -EIO;
361         }
362         if (!err)
363                 return devinfo->ctl_urb_actual_length;
364         else
365                 return err;
366 }
367
368 static struct brcmf_usbreq *brcmf_usb_deq(struct brcmf_usbdev_info *devinfo,
369                                           struct list_head *q, int *counter)
370 {
371         unsigned long flags;
372         struct brcmf_usbreq  *req;
373         spin_lock_irqsave(&devinfo->qlock, flags);
374         if (list_empty(q)) {
375                 spin_unlock_irqrestore(&devinfo->qlock, flags);
376                 return NULL;
377         }
378         req = list_entry(q->next, struct brcmf_usbreq, list);
379         list_del_init(q->next);
380         if (counter)
381                 (*counter)--;
382         spin_unlock_irqrestore(&devinfo->qlock, flags);
383         return req;
384
385 }
386
387 static void brcmf_usb_enq(struct brcmf_usbdev_info *devinfo,
388                           struct list_head *q, struct brcmf_usbreq *req,
389                           int *counter)
390 {
391         unsigned long flags;
392         spin_lock_irqsave(&devinfo->qlock, flags);
393         list_add_tail(&req->list, q);
394         if (counter)
395                 (*counter)++;
396         spin_unlock_irqrestore(&devinfo->qlock, flags);
397 }
398
399 static struct brcmf_usbreq *
400 brcmf_usbdev_qinit(struct list_head *q, int qsize)
401 {
402         int i;
403         struct brcmf_usbreq *req, *reqs;
404
405         reqs = kcalloc(qsize, sizeof(struct brcmf_usbreq), GFP_ATOMIC);
406         if (reqs == NULL)
407                 return NULL;
408
409         req = reqs;
410
411         for (i = 0; i < qsize; i++) {
412                 req->urb = usb_alloc_urb(0, GFP_ATOMIC);
413                 if (!req->urb)
414                         goto fail;
415
416                 INIT_LIST_HEAD(&req->list);
417                 list_add_tail(&req->list, q);
418                 req++;
419         }
420         return reqs;
421 fail:
422         brcmf_err("fail!\n");
423         while (!list_empty(q)) {
424                 req = list_entry(q->next, struct brcmf_usbreq, list);
425                 if (req && req->urb)
426                         usb_free_urb(req->urb);
427                 list_del(q->next);
428         }
429         return NULL;
430
431 }
432
433 static void brcmf_usb_free_q(struct list_head *q, bool pending)
434 {
435         struct brcmf_usbreq *req, *next;
436         int i = 0;
437         list_for_each_entry_safe(req, next, q, list) {
438                 if (!req->urb) {
439                         brcmf_err("bad req\n");
440                         break;
441                 }
442                 i++;
443                 if (pending) {
444                         usb_kill_urb(req->urb);
445                 } else {
446                         usb_free_urb(req->urb);
447                         list_del_init(&req->list);
448                 }
449         }
450 }
451
452 static void brcmf_usb_del_fromq(struct brcmf_usbdev_info *devinfo,
453                                 struct brcmf_usbreq *req)
454 {
455         unsigned long flags;
456
457         spin_lock_irqsave(&devinfo->qlock, flags);
458         list_del_init(&req->list);
459         spin_unlock_irqrestore(&devinfo->qlock, flags);
460 }
461
462
463 static void brcmf_usb_tx_complete(struct urb *urb)
464 {
465         struct brcmf_usbreq *req = (struct brcmf_usbreq *)urb->context;
466         struct brcmf_usbdev_info *devinfo = req->devinfo;
467         unsigned long flags;
468
469         brcmf_dbg(USB, "Enter, urb->status=%d, skb=%p\n", urb->status,
470                   req->skb);
471         brcmf_usb_del_fromq(devinfo, req);
472
473         brcmf_txcomplete(devinfo->dev, req->skb, urb->status == 0);
474         req->skb = NULL;
475         brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req, &devinfo->tx_freecount);
476         spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
477         if (devinfo->tx_freecount > devinfo->tx_high_watermark &&
478                 devinfo->tx_flowblock) {
479                 brcmf_txflowblock(devinfo->dev, false);
480                 devinfo->tx_flowblock = false;
481         }
482         spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags);
483 }
484
485 static void brcmf_usb_rx_complete(struct urb *urb)
486 {
487         struct brcmf_usbreq  *req = (struct brcmf_usbreq *)urb->context;
488         struct brcmf_usbdev_info *devinfo = req->devinfo;
489         struct sk_buff *skb;
490
491         brcmf_dbg(USB, "Enter, urb->status=%d\n", urb->status);
492         brcmf_usb_del_fromq(devinfo, req);
493         skb = req->skb;
494         req->skb = NULL;
495
496         /* zero lenght packets indicate usb "failure". Do not refill */
497         if (urb->status != 0 || !urb->actual_length) {
498                 brcmu_pkt_buf_free_skb(skb);
499                 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL);
500                 return;
501         }
502
503         if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_UP) {
504                 skb_put(skb, urb->actual_length);
505                 brcmf_rx_frame(devinfo->dev, skb);
506                 brcmf_usb_rx_refill(devinfo, req);
507         } else {
508                 brcmu_pkt_buf_free_skb(skb);
509                 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL);
510         }
511         return;
512
513 }
514
515 static void brcmf_usb_rx_refill(struct brcmf_usbdev_info *devinfo,
516                                 struct brcmf_usbreq  *req)
517 {
518         struct sk_buff *skb;
519         int ret;
520
521         if (!req || !devinfo)
522                 return;
523
524         skb = dev_alloc_skb(devinfo->bus_pub.bus_mtu);
525         if (!skb) {
526                 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL);
527                 return;
528         }
529         req->skb = skb;
530
531         usb_fill_bulk_urb(req->urb, devinfo->usbdev, devinfo->rx_pipe,
532                           skb->data, skb_tailroom(skb), brcmf_usb_rx_complete,
533                           req);
534         req->devinfo = devinfo;
535         brcmf_usb_enq(devinfo, &devinfo->rx_postq, req, NULL);
536
537         ret = usb_submit_urb(req->urb, GFP_ATOMIC);
538         if (ret) {
539                 brcmf_usb_del_fromq(devinfo, req);
540                 brcmu_pkt_buf_free_skb(req->skb);
541                 req->skb = NULL;
542                 brcmf_usb_enq(devinfo, &devinfo->rx_freeq, req, NULL);
543         }
544         return;
545 }
546
547 static void brcmf_usb_rx_fill_all(struct brcmf_usbdev_info *devinfo)
548 {
549         struct brcmf_usbreq *req;
550
551         if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) {
552                 brcmf_err("bus is not up=%d\n", devinfo->bus_pub.state);
553                 return;
554         }
555         while ((req = brcmf_usb_deq(devinfo, &devinfo->rx_freeq, NULL)) != NULL)
556                 brcmf_usb_rx_refill(devinfo, req);
557 }
558
559 static void
560 brcmf_usb_state_change(struct brcmf_usbdev_info *devinfo, int state)
561 {
562         struct brcmf_bus *bcmf_bus = devinfo->bus_pub.bus;
563         int old_state;
564
565         brcmf_dbg(USB, "Enter, current state=%d, new state=%d\n",
566                   devinfo->bus_pub.state, state);
567
568         if (devinfo->bus_pub.state == state)
569                 return;
570
571         old_state = devinfo->bus_pub.state;
572         devinfo->bus_pub.state = state;
573
574         /* update state of upper layer */
575         if (state == BRCMFMAC_USB_STATE_DOWN) {
576                 brcmf_dbg(USB, "DBUS is down\n");
577                 brcmf_bus_change_state(bcmf_bus, BRCMF_BUS_DOWN);
578         } else if (state == BRCMFMAC_USB_STATE_UP) {
579                 brcmf_dbg(USB, "DBUS is up\n");
580                 brcmf_bus_change_state(bcmf_bus, BRCMF_BUS_DATA);
581         } else {
582                 brcmf_dbg(USB, "DBUS current state=%d\n", state);
583         }
584 }
585
586 static int brcmf_usb_tx(struct device *dev, struct sk_buff *skb)
587 {
588         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
589         struct brcmf_usbreq  *req;
590         int ret;
591         unsigned long flags;
592
593         brcmf_dbg(USB, "Enter, skb=%p\n", skb);
594         if (devinfo->bus_pub.state != BRCMFMAC_USB_STATE_UP) {
595                 ret = -EIO;
596                 goto fail;
597         }
598
599         req = brcmf_usb_deq(devinfo, &devinfo->tx_freeq,
600                                         &devinfo->tx_freecount);
601         if (!req) {
602                 brcmf_err("no req to send\n");
603                 ret = -ENOMEM;
604                 goto fail;
605         }
606
607         req->skb = skb;
608         req->devinfo = devinfo;
609         usb_fill_bulk_urb(req->urb, devinfo->usbdev, devinfo->tx_pipe,
610                           skb->data, skb->len, brcmf_usb_tx_complete, req);
611         req->urb->transfer_flags |= URB_ZERO_PACKET;
612         brcmf_usb_enq(devinfo, &devinfo->tx_postq, req, NULL);
613         ret = usb_submit_urb(req->urb, GFP_ATOMIC);
614         if (ret) {
615                 brcmf_err("brcmf_usb_tx usb_submit_urb FAILED\n");
616                 brcmf_usb_del_fromq(devinfo, req);
617                 req->skb = NULL;
618                 brcmf_usb_enq(devinfo, &devinfo->tx_freeq, req,
619                               &devinfo->tx_freecount);
620                 goto fail;
621         }
622
623         spin_lock_irqsave(&devinfo->tx_flowblock_lock, flags);
624         if (devinfo->tx_freecount < devinfo->tx_low_watermark &&
625             !devinfo->tx_flowblock) {
626                 brcmf_txflowblock(dev, true);
627                 devinfo->tx_flowblock = true;
628         }
629         spin_unlock_irqrestore(&devinfo->tx_flowblock_lock, flags);
630         return 0;
631
632 fail:
633         return ret;
634 }
635
636
637 static int brcmf_usb_up(struct device *dev)
638 {
639         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
640
641         brcmf_dbg(USB, "Enter\n");
642         if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_UP)
643                 return 0;
644
645         /* Success, indicate devinfo is fully up */
646         brcmf_usb_state_change(devinfo, BRCMFMAC_USB_STATE_UP);
647
648         if (devinfo->ctl_urb) {
649                 devinfo->ctl_in_pipe = usb_rcvctrlpipe(devinfo->usbdev, 0);
650                 devinfo->ctl_out_pipe = usb_sndctrlpipe(devinfo->usbdev, 0);
651
652                 /* CTL Write */
653                 devinfo->ctl_write.bRequestType =
654                         USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE;
655                 devinfo->ctl_write.bRequest = 0;
656                 devinfo->ctl_write.wValue = cpu_to_le16(0);
657                 devinfo->ctl_write.wIndex = cpu_to_le16(devinfo->ifnum);
658
659                 /* CTL Read */
660                 devinfo->ctl_read.bRequestType =
661                         USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE;
662                 devinfo->ctl_read.bRequest = 1;
663                 devinfo->ctl_read.wValue = cpu_to_le16(0);
664                 devinfo->ctl_read.wIndex = cpu_to_le16(devinfo->ifnum);
665         }
666         brcmf_usb_rx_fill_all(devinfo);
667         return 0;
668 }
669
670 static void brcmf_cancel_all_urbs(struct brcmf_usbdev_info *devinfo)
671 {
672         if (devinfo->ctl_urb)
673                 usb_kill_urb(devinfo->ctl_urb);
674         if (devinfo->bulk_urb)
675                 usb_kill_urb(devinfo->bulk_urb);
676         brcmf_usb_free_q(&devinfo->tx_postq, true);
677         brcmf_usb_free_q(&devinfo->rx_postq, true);
678 }
679
680 static void brcmf_usb_down(struct device *dev)
681 {
682         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
683
684         brcmf_dbg(USB, "Enter\n");
685         if (devinfo == NULL)
686                 return;
687
688         if (devinfo->bus_pub.state == BRCMFMAC_USB_STATE_DOWN)
689                 return;
690
691         brcmf_usb_state_change(devinfo, BRCMFMAC_USB_STATE_DOWN);
692
693         brcmf_cancel_all_urbs(devinfo);
694 }
695
696 static void
697 brcmf_usb_sync_complete(struct urb *urb)
698 {
699         struct brcmf_usbdev_info *devinfo =
700                         (struct brcmf_usbdev_info *)urb->context;
701
702         devinfo->ctl_completed = true;
703         brcmf_usb_ioctl_resp_wake(devinfo);
704 }
705
706 static int brcmf_usb_dl_cmd(struct brcmf_usbdev_info *devinfo, u8 cmd,
707                             void *buffer, int buflen)
708 {
709         int ret;
710         char *tmpbuf;
711         u16 size;
712
713         if ((!devinfo) || (devinfo->ctl_urb == NULL))
714                 return -EINVAL;
715
716         tmpbuf = kmalloc(buflen, GFP_ATOMIC);
717         if (!tmpbuf)
718                 return -ENOMEM;
719
720         size = buflen;
721         devinfo->ctl_urb->transfer_buffer_length = size;
722
723         devinfo->ctl_read.wLength = cpu_to_le16p(&size);
724         devinfo->ctl_read.bRequestType = USB_DIR_IN | USB_TYPE_VENDOR |
725                 USB_RECIP_INTERFACE;
726         devinfo->ctl_read.bRequest = cmd;
727
728         usb_fill_control_urb(devinfo->ctl_urb,
729                 devinfo->usbdev,
730                 usb_rcvctrlpipe(devinfo->usbdev, 0),
731                 (unsigned char *) &devinfo->ctl_read,
732                 (void *) tmpbuf, size,
733                 (usb_complete_t)brcmf_usb_sync_complete, devinfo);
734
735         devinfo->ctl_completed = false;
736         ret = usb_submit_urb(devinfo->ctl_urb, GFP_ATOMIC);
737         if (ret < 0) {
738                 brcmf_err("usb_submit_urb failed %d\n", ret);
739                 goto finalize;
740         }
741
742         if (!brcmf_usb_ioctl_resp_wait(devinfo))
743                 ret = -ETIMEDOUT;
744         else
745                 memcpy(buffer, tmpbuf, buflen);
746
747 finalize:
748         kfree(tmpbuf);
749         return ret;
750 }
751
752 static bool
753 brcmf_usb_dlneeded(struct brcmf_usbdev_info *devinfo)
754 {
755         struct bootrom_id_le id;
756         u32 chipid, chiprev;
757
758         brcmf_dbg(USB, "Enter\n");
759
760         if (devinfo == NULL)
761                 return false;
762
763         /* Check if firmware downloaded already by querying runtime ID */
764         id.chip = cpu_to_le32(0xDEAD);
765         brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id));
766
767         chipid = le32_to_cpu(id.chip);
768         chiprev = le32_to_cpu(id.chiprev);
769
770         if ((chipid & 0x4300) == 0x4300)
771                 brcmf_dbg(USB, "chip %x rev 0x%x\n", chipid, chiprev);
772         else
773                 brcmf_dbg(USB, "chip %d rev 0x%x\n", chipid, chiprev);
774         if (chipid == BRCMF_POSTBOOT_ID) {
775                 brcmf_dbg(USB, "firmware already downloaded\n");
776                 brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id));
777                 return false;
778         } else {
779                 devinfo->bus_pub.devid = chipid;
780                 devinfo->bus_pub.chiprev = chiprev;
781         }
782         return true;
783 }
784
785 static int
786 brcmf_usb_resetcfg(struct brcmf_usbdev_info *devinfo)
787 {
788         struct bootrom_id_le id;
789         u32 loop_cnt;
790         int err;
791
792         brcmf_dbg(USB, "Enter\n");
793
794         loop_cnt = 0;
795         do {
796                 mdelay(BRCMF_USB_RESET_GETVER_SPINWAIT);
797                 loop_cnt++;
798                 id.chip = cpu_to_le32(0xDEAD);       /* Get the ID */
799                 err = brcmf_usb_dl_cmd(devinfo, DL_GETVER, &id, sizeof(id));
800                 if ((err) && (err != -ETIMEDOUT))
801                         return err;
802                 if (id.chip == cpu_to_le32(BRCMF_POSTBOOT_ID))
803                         break;
804         } while (loop_cnt < BRCMF_USB_RESET_GETVER_LOOP_CNT);
805
806         if (id.chip == cpu_to_le32(BRCMF_POSTBOOT_ID)) {
807                 brcmf_dbg(USB, "postboot chip 0x%x/rev 0x%x\n",
808                           le32_to_cpu(id.chip), le32_to_cpu(id.chiprev));
809
810                 brcmf_usb_dl_cmd(devinfo, DL_RESETCFG, &id, sizeof(id));
811                 return 0;
812         } else {
813                 brcmf_err("Cannot talk to Dongle. Firmware is not UP, %d ms\n",
814                           BRCMF_USB_RESET_GETVER_SPINWAIT * loop_cnt);
815                 return -EINVAL;
816         }
817 }
818
819
820 static int
821 brcmf_usb_dl_send_bulk(struct brcmf_usbdev_info *devinfo, void *buffer, int len)
822 {
823         int ret;
824
825         if ((devinfo == NULL) || (devinfo->bulk_urb == NULL))
826                 return -EINVAL;
827
828         /* Prepare the URB */
829         usb_fill_bulk_urb(devinfo->bulk_urb, devinfo->usbdev,
830                           devinfo->tx_pipe, buffer, len,
831                           (usb_complete_t)brcmf_usb_sync_complete, devinfo);
832
833         devinfo->bulk_urb->transfer_flags |= URB_ZERO_PACKET;
834
835         devinfo->ctl_completed = false;
836         ret = usb_submit_urb(devinfo->bulk_urb, GFP_ATOMIC);
837         if (ret) {
838                 brcmf_err("usb_submit_urb failed %d\n", ret);
839                 return ret;
840         }
841         ret = brcmf_usb_ioctl_resp_wait(devinfo);
842         return (ret == 0);
843 }
844
845 static int
846 brcmf_usb_dl_writeimage(struct brcmf_usbdev_info *devinfo, u8 *fw, int fwlen)
847 {
848         unsigned int sendlen, sent, dllen;
849         char *bulkchunk = NULL, *dlpos;
850         struct rdl_state_le state;
851         u32 rdlstate, rdlbytes;
852         int err = 0;
853
854         brcmf_dbg(USB, "Enter, fw %p, len %d\n", fw, fwlen);
855
856         bulkchunk = kmalloc(TRX_RDL_CHUNK, GFP_ATOMIC);
857         if (bulkchunk == NULL) {
858                 err = -ENOMEM;
859                 goto fail;
860         }
861
862         /* 1) Prepare USB boot loader for runtime image */
863         brcmf_usb_dl_cmd(devinfo, DL_START, &state, sizeof(state));
864
865         rdlstate = le32_to_cpu(state.state);
866         rdlbytes = le32_to_cpu(state.bytes);
867
868         /* 2) Check we are in the Waiting state */
869         if (rdlstate != DL_WAITING) {
870                 brcmf_err("Failed to DL_START\n");
871                 err = -EINVAL;
872                 goto fail;
873         }
874         sent = 0;
875         dlpos = fw;
876         dllen = fwlen;
877
878         /* Get chip id and rev */
879         while (rdlbytes != dllen) {
880                 /* Wait until the usb device reports it received all
881                  * the bytes we sent */
882                 if ((rdlbytes == sent) && (rdlbytes != dllen)) {
883                         if ((dllen-sent) < TRX_RDL_CHUNK)
884                                 sendlen = dllen-sent;
885                         else
886                                 sendlen = TRX_RDL_CHUNK;
887
888                         /* simply avoid having to send a ZLP by ensuring we
889                          * never have an even
890                          * multiple of 64
891                          */
892                         if (!(sendlen % 64))
893                                 sendlen -= 4;
894
895                         /* send data */
896                         memcpy(bulkchunk, dlpos, sendlen);
897                         if (brcmf_usb_dl_send_bulk(devinfo, bulkchunk,
898                                                    sendlen)) {
899                                 brcmf_err("send_bulk failed\n");
900                                 err = -EINVAL;
901                                 goto fail;
902                         }
903
904                         dlpos += sendlen;
905                         sent += sendlen;
906                 }
907                 err = brcmf_usb_dl_cmd(devinfo, DL_GETSTATE, &state,
908                                        sizeof(state));
909                 if (err) {
910                         brcmf_err("DL_GETSTATE Failed\n");
911                         goto fail;
912                 }
913
914                 rdlstate = le32_to_cpu(state.state);
915                 rdlbytes = le32_to_cpu(state.bytes);
916
917                 /* restart if an error is reported */
918                 if (rdlstate == DL_BAD_HDR || rdlstate == DL_BAD_CRC) {
919                         brcmf_err("Bad Hdr or Bad CRC state %d\n",
920                                   rdlstate);
921                         err = -EINVAL;
922                         goto fail;
923                 }
924         }
925
926 fail:
927         kfree(bulkchunk);
928         brcmf_dbg(USB, "Exit, err=%d\n", err);
929         return err;
930 }
931
932 static int brcmf_usb_dlstart(struct brcmf_usbdev_info *devinfo, u8 *fw, int len)
933 {
934         int err;
935
936         brcmf_dbg(USB, "Enter\n");
937
938         if (devinfo == NULL)
939                 return -EINVAL;
940
941         if (devinfo->bus_pub.devid == 0xDEAD)
942                 return -EINVAL;
943
944         err = brcmf_usb_dl_writeimage(devinfo, fw, len);
945         if (err == 0)
946                 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DL_DONE;
947         else
948                 devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DL_FAIL;
949         brcmf_dbg(USB, "Exit, err=%d\n", err);
950
951         return err;
952 }
953
954 static int brcmf_usb_dlrun(struct brcmf_usbdev_info *devinfo)
955 {
956         struct rdl_state_le state;
957
958         brcmf_dbg(USB, "Enter\n");
959         if (!devinfo)
960                 return -EINVAL;
961
962         if (devinfo->bus_pub.devid == 0xDEAD)
963                 return -EINVAL;
964
965         /* Check we are runnable */
966         state.state = 0;
967         brcmf_usb_dl_cmd(devinfo, DL_GETSTATE, &state, sizeof(state));
968
969         /* Start the image */
970         if (state.state == cpu_to_le32(DL_RUNNABLE)) {
971                 if (brcmf_usb_dl_cmd(devinfo, DL_GO, &state, sizeof(state)))
972                         return -ENODEV;
973                 if (brcmf_usb_resetcfg(devinfo))
974                         return -ENODEV;
975                 /* The Dongle may go for re-enumeration. */
976         } else {
977                 brcmf_err("Dongle not runnable\n");
978                 return -EINVAL;
979         }
980         brcmf_dbg(USB, "Exit\n");
981         return 0;
982 }
983
984 static bool brcmf_usb_chip_support(int chipid, int chiprev)
985 {
986         switch(chipid) {
987         case BRCM_CC_43143_CHIP_ID:
988                 return true;
989         case BRCM_CC_43235_CHIP_ID:
990         case BRCM_CC_43236_CHIP_ID:
991         case BRCM_CC_43238_CHIP_ID:
992                 return (chiprev == 3);
993         case BRCM_CC_43242_CHIP_ID:
994                 return true;
995         case BRCM_CC_43566_CHIP_ID:
996         case BRCM_CC_43569_CHIP_ID:
997                 return true;
998         default:
999                 break;
1000         }
1001         return false;
1002 }
1003
1004 static int
1005 brcmf_usb_fw_download(struct brcmf_usbdev_info *devinfo)
1006 {
1007         int devid, chiprev;
1008         int err;
1009
1010         brcmf_dbg(USB, "Enter\n");
1011         if (devinfo == NULL)
1012                 return -ENODEV;
1013
1014         devid = devinfo->bus_pub.devid;
1015         chiprev = devinfo->bus_pub.chiprev;
1016
1017         if (!brcmf_usb_chip_support(devid, chiprev)) {
1018                 brcmf_err("unsupported chip %d rev %d\n",
1019                           devid, chiprev);
1020                 return -EINVAL;
1021         }
1022
1023         if (!devinfo->image) {
1024                 brcmf_err("No firmware!\n");
1025                 return -ENOENT;
1026         }
1027
1028         err = brcmf_usb_dlstart(devinfo,
1029                 (u8 *)devinfo->image, devinfo->image_len);
1030         if (err == 0)
1031                 err = brcmf_usb_dlrun(devinfo);
1032         return err;
1033 }
1034
1035
1036 static void brcmf_usb_detach(struct brcmf_usbdev_info *devinfo)
1037 {
1038         brcmf_dbg(USB, "Enter, devinfo %p\n", devinfo);
1039
1040         /* free the URBS */
1041         brcmf_usb_free_q(&devinfo->rx_freeq, false);
1042         brcmf_usb_free_q(&devinfo->tx_freeq, false);
1043
1044         usb_free_urb(devinfo->ctl_urb);
1045         usb_free_urb(devinfo->bulk_urb);
1046
1047         kfree(devinfo->tx_reqs);
1048         kfree(devinfo->rx_reqs);
1049 }
1050
1051
1052 static int check_file(const u8 *headers)
1053 {
1054         struct trx_header_le *trx;
1055         int actual_len = -1;
1056
1057         brcmf_dbg(USB, "Enter\n");
1058         /* Extract trx header */
1059         trx = (struct trx_header_le *) headers;
1060         if (trx->magic != cpu_to_le32(TRX_MAGIC))
1061                 return -1;
1062
1063         headers += sizeof(struct trx_header_le);
1064
1065         if (le32_to_cpu(trx->flag_version) & TRX_UNCOMP_IMAGE) {
1066                 actual_len = le32_to_cpu(trx->offsets[TRX_OFFSETS_DLFWLEN_IDX]);
1067                 return actual_len + sizeof(struct trx_header_le);
1068         }
1069         return -1;
1070 }
1071
1072 static const char *brcmf_usb_get_fwname(struct brcmf_usbdev_info *devinfo)
1073 {
1074         switch (devinfo->bus_pub.devid) {
1075         case BRCM_CC_43143_CHIP_ID:
1076                 return BRCMF_USB_43143_FW_NAME;
1077         case BRCM_CC_43235_CHIP_ID:
1078         case BRCM_CC_43236_CHIP_ID:
1079         case BRCM_CC_43238_CHIP_ID:
1080                 return BRCMF_USB_43236_FW_NAME;
1081         case BRCM_CC_43242_CHIP_ID:
1082                 return BRCMF_USB_43242_FW_NAME;
1083         case BRCM_CC_43566_CHIP_ID:
1084         case BRCM_CC_43569_CHIP_ID:
1085                 return BRCMF_USB_43569_FW_NAME;
1086         default:
1087                 return NULL;
1088         }
1089 }
1090
1091
1092 static
1093 struct brcmf_usbdev *brcmf_usb_attach(struct brcmf_usbdev_info *devinfo,
1094                                       int nrxq, int ntxq)
1095 {
1096         brcmf_dbg(USB, "Enter\n");
1097
1098         devinfo->bus_pub.nrxq = nrxq;
1099         devinfo->rx_low_watermark = nrxq / 2;
1100         devinfo->bus_pub.devinfo = devinfo;
1101         devinfo->bus_pub.ntxq = ntxq;
1102         devinfo->bus_pub.state = BRCMFMAC_USB_STATE_DOWN;
1103
1104         /* flow control when too many tx urbs posted */
1105         devinfo->tx_low_watermark = ntxq / 4;
1106         devinfo->tx_high_watermark = devinfo->tx_low_watermark * 3;
1107         devinfo->bus_pub.bus_mtu = BRCMF_USB_MAX_PKT_SIZE;
1108
1109         /* Initialize other structure content */
1110         init_waitqueue_head(&devinfo->ioctl_resp_wait);
1111
1112         /* Initialize the spinlocks */
1113         spin_lock_init(&devinfo->qlock);
1114         spin_lock_init(&devinfo->tx_flowblock_lock);
1115
1116         INIT_LIST_HEAD(&devinfo->rx_freeq);
1117         INIT_LIST_HEAD(&devinfo->rx_postq);
1118
1119         INIT_LIST_HEAD(&devinfo->tx_freeq);
1120         INIT_LIST_HEAD(&devinfo->tx_postq);
1121
1122         devinfo->tx_flowblock = false;
1123
1124         devinfo->rx_reqs = brcmf_usbdev_qinit(&devinfo->rx_freeq, nrxq);
1125         if (!devinfo->rx_reqs)
1126                 goto error;
1127
1128         devinfo->tx_reqs = brcmf_usbdev_qinit(&devinfo->tx_freeq, ntxq);
1129         if (!devinfo->tx_reqs)
1130                 goto error;
1131         devinfo->tx_freecount = ntxq;
1132
1133         devinfo->ctl_urb = usb_alloc_urb(0, GFP_ATOMIC);
1134         if (!devinfo->ctl_urb) {
1135                 brcmf_err("usb_alloc_urb (ctl) failed\n");
1136                 goto error;
1137         }
1138         devinfo->bulk_urb = usb_alloc_urb(0, GFP_ATOMIC);
1139         if (!devinfo->bulk_urb) {
1140                 brcmf_err("usb_alloc_urb (bulk) failed\n");
1141                 goto error;
1142         }
1143
1144         return &devinfo->bus_pub;
1145
1146 error:
1147         brcmf_err("failed!\n");
1148         brcmf_usb_detach(devinfo);
1149         return NULL;
1150 }
1151
1152 static void brcmf_usb_wowl_config(struct device *dev, bool enabled)
1153 {
1154         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(dev);
1155
1156         brcmf_dbg(USB, "Configuring WOWL, enabled=%d\n", enabled);
1157         devinfo->wowl_enabled = enabled;
1158         if (enabled)
1159                 device_set_wakeup_enable(devinfo->dev, true);
1160         else
1161                 device_set_wakeup_enable(devinfo->dev, false);
1162 }
1163
1164 static struct brcmf_bus_ops brcmf_usb_bus_ops = {
1165         .txdata = brcmf_usb_tx,
1166         .stop = brcmf_usb_down,
1167         .txctl = brcmf_usb_tx_ctlpkt,
1168         .rxctl = brcmf_usb_rx_ctlpkt,
1169         .wowl_config = brcmf_usb_wowl_config,
1170 };
1171
1172 static int brcmf_usb_bus_setup(struct brcmf_usbdev_info *devinfo)
1173 {
1174         int ret;
1175
1176         /* Attach to the common driver interface */
1177         ret = brcmf_attach(devinfo->dev);
1178         if (ret) {
1179                 brcmf_err("brcmf_attach failed\n");
1180                 return ret;
1181         }
1182
1183         ret = brcmf_usb_up(devinfo->dev);
1184         if (ret)
1185                 goto fail;
1186
1187         ret = brcmf_bus_start(devinfo->dev);
1188         if (ret)
1189                 goto fail;
1190
1191         return 0;
1192 fail:
1193         brcmf_detach(devinfo->dev);
1194         return ret;
1195 }
1196
1197 static void brcmf_usb_probe_phase2(struct device *dev,
1198                                    const struct firmware *fw,
1199                                    void *nvram, u32 nvlen)
1200 {
1201         struct brcmf_bus *bus = dev_get_drvdata(dev);
1202         struct brcmf_usbdev_info *devinfo;
1203         int ret;
1204
1205         brcmf_dbg(USB, "Start fw downloading\n");
1206         ret = check_file(fw->data);
1207         if (ret < 0) {
1208                 brcmf_err("invalid firmware\n");
1209                 release_firmware(fw);
1210                 goto error;
1211         }
1212
1213         devinfo = bus->bus_priv.usb->devinfo;
1214         devinfo->image = fw->data;
1215         devinfo->image_len = fw->size;
1216
1217         ret = brcmf_usb_fw_download(devinfo);
1218         release_firmware(fw);
1219         if (ret)
1220                 goto error;
1221
1222         ret = brcmf_usb_bus_setup(devinfo);
1223         if (ret)
1224                 goto error;
1225
1226         return;
1227 error:
1228         brcmf_dbg(TRACE, "failed: dev=%s, err=%d\n", dev_name(dev), ret);
1229         device_release_driver(dev);
1230 }
1231
1232 static int brcmf_usb_probe_cb(struct brcmf_usbdev_info *devinfo)
1233 {
1234         struct brcmf_bus *bus = NULL;
1235         struct brcmf_usbdev *bus_pub = NULL;
1236         struct device *dev = devinfo->dev;
1237         int ret;
1238
1239         brcmf_dbg(USB, "Enter\n");
1240         bus_pub = brcmf_usb_attach(devinfo, BRCMF_USB_NRXQ, BRCMF_USB_NTXQ);
1241         if (!bus_pub)
1242                 return -ENODEV;
1243
1244         bus = kzalloc(sizeof(struct brcmf_bus), GFP_ATOMIC);
1245         if (!bus) {
1246                 ret = -ENOMEM;
1247                 goto fail;
1248         }
1249
1250         bus->dev = dev;
1251         bus_pub->bus = bus;
1252         bus->bus_priv.usb = bus_pub;
1253         dev_set_drvdata(dev, bus);
1254         bus->ops = &brcmf_usb_bus_ops;
1255         bus->proto_type = BRCMF_PROTO_BCDC;
1256         bus->always_use_fws_queue = true;
1257 #ifdef CONFIG_PM
1258         bus->wowl_supported = true;
1259 #endif
1260
1261         if (!brcmf_usb_dlneeded(devinfo)) {
1262                 ret = brcmf_usb_bus_setup(devinfo);
1263                 if (ret)
1264                         goto fail;
1265         }
1266         bus->chip = bus_pub->devid;
1267         bus->chiprev = bus_pub->chiprev;
1268
1269         /* request firmware here */
1270         brcmf_fw_get_firmwares(dev, 0, brcmf_usb_get_fwname(devinfo), NULL,
1271                                brcmf_usb_probe_phase2);
1272         return 0;
1273
1274 fail:
1275         /* Release resources in reverse order */
1276         kfree(bus);
1277         brcmf_usb_detach(devinfo);
1278         return ret;
1279 }
1280
1281 static void
1282 brcmf_usb_disconnect_cb(struct brcmf_usbdev_info *devinfo)
1283 {
1284         if (!devinfo)
1285                 return;
1286         brcmf_dbg(USB, "Enter, bus_pub %p\n", devinfo);
1287
1288         brcmf_detach(devinfo->dev);
1289         kfree(devinfo->bus_pub.bus);
1290         brcmf_usb_detach(devinfo);
1291 }
1292
1293 static int
1294 brcmf_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1295 {
1296         struct usb_device *usb = interface_to_usbdev(intf);
1297         struct brcmf_usbdev_info *devinfo;
1298         struct usb_interface_descriptor *desc;
1299         struct usb_endpoint_descriptor *endpoint;
1300         int ret = 0;
1301         u32 num_of_eps;
1302         u8 endpoint_num, ep;
1303
1304         brcmf_dbg(USB, "Enter 0x%04x:0x%04x\n", id->idVendor, id->idProduct);
1305
1306         devinfo = kzalloc(sizeof(*devinfo), GFP_ATOMIC);
1307         if (devinfo == NULL)
1308                 return -ENOMEM;
1309
1310         devinfo->usbdev = usb;
1311         devinfo->dev = &usb->dev;
1312         usb_set_intfdata(intf, devinfo);
1313
1314         /* Check that the device supports only one configuration */
1315         if (usb->descriptor.bNumConfigurations != 1) {
1316                 brcmf_err("Number of configurations: %d not supported\n",
1317                           usb->descriptor.bNumConfigurations);
1318                 ret = -ENODEV;
1319                 goto fail;
1320         }
1321
1322         if ((usb->descriptor.bDeviceClass != USB_CLASS_VENDOR_SPEC) &&
1323             (usb->descriptor.bDeviceClass != USB_CLASS_MISC) &&
1324             (usb->descriptor.bDeviceClass != USB_CLASS_WIRELESS_CONTROLLER)) {
1325                 brcmf_err("Device class: 0x%x not supported\n",
1326                           usb->descriptor.bDeviceClass);
1327                 ret = -ENODEV;
1328                 goto fail;
1329         }
1330
1331         desc = &intf->altsetting[0].desc;
1332         if ((desc->bInterfaceClass != USB_CLASS_VENDOR_SPEC) ||
1333             (desc->bInterfaceSubClass != 2) ||
1334             (desc->bInterfaceProtocol != 0xff)) {
1335                 brcmf_err("non WLAN interface %d: 0x%x:0x%x:0x%x\n",
1336                           desc->bInterfaceNumber, desc->bInterfaceClass,
1337                           desc->bInterfaceSubClass, desc->bInterfaceProtocol);
1338                 ret = -ENODEV;
1339                 goto fail;
1340         }
1341
1342         num_of_eps = desc->bNumEndpoints;
1343         for (ep = 0; ep < num_of_eps; ep++) {
1344                 endpoint = &intf->altsetting[0].endpoint[ep].desc;
1345                 endpoint_num = usb_endpoint_num(endpoint);
1346                 if (!usb_endpoint_xfer_bulk(endpoint))
1347                         continue;
1348                 if (usb_endpoint_dir_in(endpoint)) {
1349                         if (!devinfo->rx_pipe)
1350                                 devinfo->rx_pipe =
1351                                         usb_rcvbulkpipe(usb, endpoint_num);
1352                 } else {
1353                         if (!devinfo->tx_pipe)
1354                                 devinfo->tx_pipe =
1355                                         usb_sndbulkpipe(usb, endpoint_num);
1356                 }
1357         }
1358         if (devinfo->rx_pipe == 0) {
1359                 brcmf_err("No RX (in) Bulk EP found\n");
1360                 ret = -ENODEV;
1361                 goto fail;
1362         }
1363         if (devinfo->tx_pipe == 0) {
1364                 brcmf_err("No TX (out) Bulk EP found\n");
1365                 ret = -ENODEV;
1366                 goto fail;
1367         }
1368
1369         devinfo->ifnum = desc->bInterfaceNumber;
1370
1371         if (usb->speed == USB_SPEED_SUPER)
1372                 brcmf_dbg(USB, "Broadcom super speed USB WLAN interface detected\n");
1373         else if (usb->speed == USB_SPEED_HIGH)
1374                 brcmf_dbg(USB, "Broadcom high speed USB WLAN interface detected\n");
1375         else
1376                 brcmf_dbg(USB, "Broadcom full speed USB WLAN interface detected\n");
1377
1378         ret = brcmf_usb_probe_cb(devinfo);
1379         if (ret)
1380                 goto fail;
1381
1382         /* Success */
1383         return 0;
1384
1385 fail:
1386         kfree(devinfo);
1387         usb_set_intfdata(intf, NULL);
1388         return ret;
1389 }
1390
1391 static void
1392 brcmf_usb_disconnect(struct usb_interface *intf)
1393 {
1394         struct brcmf_usbdev_info *devinfo;
1395
1396         brcmf_dbg(USB, "Enter\n");
1397         devinfo = (struct brcmf_usbdev_info *)usb_get_intfdata(intf);
1398         brcmf_usb_disconnect_cb(devinfo);
1399         kfree(devinfo);
1400         brcmf_dbg(USB, "Exit\n");
1401 }
1402
1403 /*
1404  * only need to signal the bus being down and update the state.
1405  */
1406 static int brcmf_usb_suspend(struct usb_interface *intf, pm_message_t state)
1407 {
1408         struct usb_device *usb = interface_to_usbdev(intf);
1409         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
1410
1411         brcmf_dbg(USB, "Enter\n");
1412         devinfo->bus_pub.state = BRCMFMAC_USB_STATE_SLEEP;
1413         if (devinfo->wowl_enabled)
1414                 brcmf_cancel_all_urbs(devinfo);
1415         else
1416                 brcmf_detach(&usb->dev);
1417         return 0;
1418 }
1419
1420 /*
1421  * (re-) start the bus.
1422  */
1423 static int brcmf_usb_resume(struct usb_interface *intf)
1424 {
1425         struct usb_device *usb = interface_to_usbdev(intf);
1426         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
1427
1428         brcmf_dbg(USB, "Enter\n");
1429         if (!devinfo->wowl_enabled)
1430                 return brcmf_usb_bus_setup(devinfo);
1431
1432         devinfo->bus_pub.state = BRCMFMAC_USB_STATE_UP;
1433         brcmf_usb_rx_fill_all(devinfo);
1434         return 0;
1435 }
1436
1437 static int brcmf_usb_reset_resume(struct usb_interface *intf)
1438 {
1439         struct usb_device *usb = interface_to_usbdev(intf);
1440         struct brcmf_usbdev_info *devinfo = brcmf_usb_get_businfo(&usb->dev);
1441
1442         brcmf_dbg(USB, "Enter\n");
1443
1444         return brcmf_fw_get_firmwares(&usb->dev, 0,
1445                                       brcmf_usb_get_fwname(devinfo), NULL,
1446                                       brcmf_usb_probe_phase2);
1447 }
1448
1449 #define BRCMF_USB_DEVICE(dev_id)        \
1450         { USB_DEVICE(BRCM_USB_VENDOR_ID_BROADCOM, dev_id) }
1451
1452 static struct usb_device_id brcmf_usb_devid_table[] = {
1453         BRCMF_USB_DEVICE(BRCM_USB_43143_DEVICE_ID),
1454         BRCMF_USB_DEVICE(BRCM_USB_43236_DEVICE_ID),
1455         BRCMF_USB_DEVICE(BRCM_USB_43242_DEVICE_ID),
1456         BRCMF_USB_DEVICE(BRCM_USB_43569_DEVICE_ID),
1457         /* special entry for device with firmware loaded and running */
1458         BRCMF_USB_DEVICE(BRCM_USB_BCMFW_DEVICE_ID),
1459         { /* end: all zeroes */ }
1460 };
1461
1462 MODULE_DEVICE_TABLE(usb, brcmf_usb_devid_table);
1463 MODULE_FIRMWARE(BRCMF_USB_43143_FW_NAME);
1464 MODULE_FIRMWARE(BRCMF_USB_43236_FW_NAME);
1465 MODULE_FIRMWARE(BRCMF_USB_43242_FW_NAME);
1466 MODULE_FIRMWARE(BRCMF_USB_43569_FW_NAME);
1467
1468 static struct usb_driver brcmf_usbdrvr = {
1469         .name = KBUILD_MODNAME,
1470         .probe = brcmf_usb_probe,
1471         .disconnect = brcmf_usb_disconnect,
1472         .id_table = brcmf_usb_devid_table,
1473         .suspend = brcmf_usb_suspend,
1474         .resume = brcmf_usb_resume,
1475         .reset_resume = brcmf_usb_reset_resume,
1476         .supports_autosuspend = 1,
1477         .disable_hub_initiated_lpm = 1,
1478 };
1479
1480 static int brcmf_usb_reset_device(struct device *dev, void *notused)
1481 {
1482         /* device past is the usb interface so we
1483          * need to use parent here.
1484          */
1485         brcmf_dev_reset(dev->parent);
1486         return 0;
1487 }
1488
1489 void brcmf_usb_exit(void)
1490 {
1491         struct device_driver *drv = &brcmf_usbdrvr.drvwrap.driver;
1492         int ret;
1493
1494         brcmf_dbg(USB, "Enter\n");
1495         ret = driver_for_each_device(drv, NULL, NULL,
1496                                      brcmf_usb_reset_device);
1497         usb_deregister(&brcmf_usbdrvr);
1498 }
1499
1500 void brcmf_usb_register(void)
1501 {
1502         brcmf_dbg(USB, "Enter\n");
1503         usb_register(&brcmf_usbdrvr);
1504 }