GNU Linux-libre 4.14.313-gnu1
[releases.git] / drivers / net / ieee802154 / atusb.c
1 /*
2  * atusb.c - Driver for the ATUSB IEEE 802.15.4 dongle
3  *
4  * Written 2013 by Werner Almesberger <werner@almesberger.net>
5  *
6  * Copyright (c) 2015 - 2016 Stefan Schmidt <stefan@datenfreihafen.org>
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License as
10  * published by the Free Software Foundation, version 2
11  *
12  * Based on at86rf230.c and spi_atusb.c.
13  * at86rf230.c is
14  * Copyright (C) 2009 Siemens AG
15  * Written by: Dmitry Eremin-Solenikov <dmitry.baryshkov@siemens.com>
16  *
17  * spi_atusb.c is
18  * Copyright (c) 2011 Richard Sharpe <realrichardsharpe@gmail.com>
19  * Copyright (c) 2011 Stefan Schmidt <stefan@datenfreihafen.org>
20  * Copyright (c) 2011 Werner Almesberger <werner@almesberger.net>
21  *
22  * USB initialization is
23  * Copyright (c) 2013 Alexander Aring <alex.aring@gmail.com>
24  */
25
26 #include <linux/kernel.h>
27 #include <linux/slab.h>
28 #include <linux/module.h>
29 #include <linux/jiffies.h>
30 #include <linux/usb.h>
31 #include <linux/skbuff.h>
32
33 #include <net/cfg802154.h>
34 #include <net/mac802154.h>
35
36 #include "at86rf230.h"
37 #include "atusb.h"
38
39 #define ATUSB_JEDEC_ATMEL       0x1f    /* JEDEC manufacturer ID */
40
41 #define ATUSB_NUM_RX_URBS       4       /* allow for a bit of local latency */
42 #define ATUSB_ALLOC_DELAY_MS    100     /* delay after failed allocation */
43 #define ATUSB_TX_TIMEOUT_MS     200     /* on the air timeout */
44
45 struct atusb {
46         struct ieee802154_hw *hw;
47         struct usb_device *usb_dev;
48         int shutdown;                   /* non-zero if shutting down */
49         int err;                        /* set by first error */
50
51         /* RX variables */
52         struct delayed_work work;       /* memory allocations */
53         struct usb_anchor idle_urbs;    /* URBs waiting to be submitted */
54         struct usb_anchor rx_urbs;      /* URBs waiting for reception */
55
56         /* TX variables */
57         struct usb_ctrlrequest tx_dr;
58         struct urb *tx_urb;
59         struct sk_buff *tx_skb;
60         uint8_t tx_ack_seq;             /* current TX ACK sequence number */
61
62         /* Firmware variable */
63         unsigned char fw_ver_maj;       /* Firmware major version number */
64         unsigned char fw_ver_min;       /* Firmware minor version number */
65         unsigned char fw_hw_type;       /* Firmware hardware type */
66 };
67
68 /* ----- USB commands without data ----------------------------------------- */
69
70 /* To reduce the number of error checks in the code, we record the first error
71  * in atusb->err and reject all subsequent requests until the error is cleared.
72  */
73
74 static int atusb_control_msg(struct atusb *atusb, unsigned int pipe,
75                              __u8 request, __u8 requesttype,
76                              __u16 value, __u16 index,
77                              void *data, __u16 size, int timeout)
78 {
79         struct usb_device *usb_dev = atusb->usb_dev;
80         int ret;
81
82         if (atusb->err)
83                 return atusb->err;
84
85         ret = usb_control_msg(usb_dev, pipe, request, requesttype,
86                               value, index, data, size, timeout);
87         if (ret < size) {
88                 ret = ret < 0 ? ret : -ENODATA;
89
90                 atusb->err = ret;
91                 dev_err(&usb_dev->dev,
92                         "atusb_control_msg: req 0x%02x val 0x%x idx 0x%x, error %d\n",
93                         request, value, index, ret);
94         }
95         return ret;
96 }
97
98 static int atusb_command(struct atusb *atusb, uint8_t cmd, uint8_t arg)
99 {
100         struct usb_device *usb_dev = atusb->usb_dev;
101
102         dev_dbg(&usb_dev->dev, "atusb_command: cmd = 0x%x\n", cmd);
103         return atusb_control_msg(atusb, usb_sndctrlpipe(usb_dev, 0),
104                                  cmd, ATUSB_REQ_TO_DEV, arg, 0, NULL, 0, 1000);
105 }
106
107 static int atusb_write_reg(struct atusb *atusb, uint8_t reg, uint8_t value)
108 {
109         struct usb_device *usb_dev = atusb->usb_dev;
110
111         dev_dbg(&usb_dev->dev, "atusb_write_reg: 0x%02x <- 0x%02x\n",
112                 reg, value);
113         return atusb_control_msg(atusb, usb_sndctrlpipe(usb_dev, 0),
114                                  ATUSB_REG_WRITE, ATUSB_REQ_TO_DEV,
115                                  value, reg, NULL, 0, 1000);
116 }
117
118 static int atusb_read_reg(struct atusb *atusb, uint8_t reg)
119 {
120         struct usb_device *usb_dev = atusb->usb_dev;
121         int ret;
122         uint8_t *buffer;
123         uint8_t value;
124
125         buffer = kmalloc(1, GFP_KERNEL);
126         if (!buffer)
127                 return -ENOMEM;
128
129         dev_dbg(&usb_dev->dev, "atusb: reg = 0x%x\n", reg);
130         ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0),
131                                 ATUSB_REG_READ, ATUSB_REQ_FROM_DEV,
132                                 0, reg, buffer, 1, 1000);
133
134         if (ret >= 0) {
135                 value = buffer[0];
136                 kfree(buffer);
137                 return value;
138         } else {
139                 kfree(buffer);
140                 return ret;
141         }
142 }
143
144 static int atusb_write_subreg(struct atusb *atusb, uint8_t reg, uint8_t mask,
145                               uint8_t shift, uint8_t value)
146 {
147         struct usb_device *usb_dev = atusb->usb_dev;
148         uint8_t orig, tmp;
149         int ret = 0;
150
151         dev_dbg(&usb_dev->dev, "atusb_write_subreg: 0x%02x <- 0x%02x\n",
152                 reg, value);
153
154         orig = atusb_read_reg(atusb, reg);
155
156         /* Write the value only into that part of the register which is allowed
157          * by the mask. All other bits stay as before.
158          */
159         tmp = orig & ~mask;
160         tmp |= (value << shift) & mask;
161
162         if (tmp != orig)
163                 ret = atusb_write_reg(atusb, reg, tmp);
164
165         return ret;
166 }
167
168 static int atusb_get_and_clear_error(struct atusb *atusb)
169 {
170         int err = atusb->err;
171
172         atusb->err = 0;
173         return err;
174 }
175
176 /* ----- skb allocation ---------------------------------------------------- */
177
178 #define MAX_PSDU        127
179 #define MAX_RX_XFER     (1 + MAX_PSDU + 2 + 1)  /* PHR+PSDU+CRC+LQI */
180
181 #define SKB_ATUSB(skb)  (*(struct atusb **)(skb)->cb)
182
183 static void atusb_in(struct urb *urb);
184
185 static int atusb_submit_rx_urb(struct atusb *atusb, struct urb *urb)
186 {
187         struct usb_device *usb_dev = atusb->usb_dev;
188         struct sk_buff *skb = urb->context;
189         int ret;
190
191         if (!skb) {
192                 skb = alloc_skb(MAX_RX_XFER, GFP_KERNEL);
193                 if (!skb) {
194                         dev_warn_ratelimited(&usb_dev->dev,
195                                              "atusb_in: can't allocate skb\n");
196                         return -ENOMEM;
197                 }
198                 skb_put(skb, MAX_RX_XFER);
199                 SKB_ATUSB(skb) = atusb;
200         }
201
202         usb_fill_bulk_urb(urb, usb_dev, usb_rcvbulkpipe(usb_dev, 1),
203                           skb->data, MAX_RX_XFER, atusb_in, skb);
204         usb_anchor_urb(urb, &atusb->rx_urbs);
205
206         ret = usb_submit_urb(urb, GFP_KERNEL);
207         if (ret) {
208                 usb_unanchor_urb(urb);
209                 kfree_skb(skb);
210                 urb->context = NULL;
211         }
212         return ret;
213 }
214
215 static void atusb_work_urbs(struct work_struct *work)
216 {
217         struct atusb *atusb =
218             container_of(to_delayed_work(work), struct atusb, work);
219         struct usb_device *usb_dev = atusb->usb_dev;
220         struct urb *urb;
221         int ret;
222
223         if (atusb->shutdown)
224                 return;
225
226         do {
227                 urb = usb_get_from_anchor(&atusb->idle_urbs);
228                 if (!urb)
229                         return;
230                 ret = atusb_submit_rx_urb(atusb, urb);
231         } while (!ret);
232
233         usb_anchor_urb(urb, &atusb->idle_urbs);
234         dev_warn_ratelimited(&usb_dev->dev,
235                              "atusb_in: can't allocate/submit URB (%d)\n", ret);
236         schedule_delayed_work(&atusb->work,
237                               msecs_to_jiffies(ATUSB_ALLOC_DELAY_MS) + 1);
238 }
239
240 /* ----- Asynchronous USB -------------------------------------------------- */
241
242 static void atusb_tx_done(struct atusb *atusb, uint8_t seq)
243 {
244         struct usb_device *usb_dev = atusb->usb_dev;
245         uint8_t expect = atusb->tx_ack_seq;
246
247         dev_dbg(&usb_dev->dev, "atusb_tx_done (0x%02x/0x%02x)\n", seq, expect);
248         if (seq == expect) {
249                 /* TODO check for ifs handling in firmware */
250                 ieee802154_xmit_complete(atusb->hw, atusb->tx_skb, false);
251         } else {
252                 /* TODO I experience this case when atusb has a tx complete
253                  * irq before probing, we should fix the firmware it's an
254                  * unlikely case now that seq == expect is then true, but can
255                  * happen and fail with a tx_skb = NULL;
256                  */
257                 ieee802154_wake_queue(atusb->hw);
258                 if (atusb->tx_skb)
259                         dev_kfree_skb_irq(atusb->tx_skb);
260         }
261 }
262
263 static void atusb_in_good(struct urb *urb)
264 {
265         struct usb_device *usb_dev = urb->dev;
266         struct sk_buff *skb = urb->context;
267         struct atusb *atusb = SKB_ATUSB(skb);
268         uint8_t len, lqi;
269
270         if (!urb->actual_length) {
271                 dev_dbg(&usb_dev->dev, "atusb_in: zero-sized URB ?\n");
272                 return;
273         }
274
275         len = *skb->data;
276
277         if (urb->actual_length == 1) {
278                 atusb_tx_done(atusb, len);
279                 return;
280         }
281
282         if (len + 1 > urb->actual_length - 1) {
283                 dev_dbg(&usb_dev->dev, "atusb_in: frame len %d+1 > URB %u-1\n",
284                         len, urb->actual_length);
285                 return;
286         }
287
288         if (!ieee802154_is_valid_psdu_len(len)) {
289                 dev_dbg(&usb_dev->dev, "atusb_in: frame corrupted\n");
290                 return;
291         }
292
293         lqi = skb->data[len + 1];
294         dev_dbg(&usb_dev->dev, "atusb_in: rx len %d lqi 0x%02x\n", len, lqi);
295         skb_pull(skb, 1);       /* remove PHR */
296         skb_trim(skb, len);     /* get payload only */
297         ieee802154_rx_irqsafe(atusb->hw, skb, lqi);
298         urb->context = NULL;    /* skb is gone */
299 }
300
301 static void atusb_in(struct urb *urb)
302 {
303         struct usb_device *usb_dev = urb->dev;
304         struct sk_buff *skb = urb->context;
305         struct atusb *atusb = SKB_ATUSB(skb);
306
307         dev_dbg(&usb_dev->dev, "atusb_in: status %d len %d\n",
308                 urb->status, urb->actual_length);
309         if (urb->status) {
310                 if (urb->status == -ENOENT) { /* being killed */
311                         kfree_skb(skb);
312                         urb->context = NULL;
313                         return;
314                 }
315                 dev_dbg(&usb_dev->dev, "atusb_in: URB error %d\n", urb->status);
316         } else {
317                 atusb_in_good(urb);
318         }
319
320         usb_anchor_urb(urb, &atusb->idle_urbs);
321         if (!atusb->shutdown)
322                 schedule_delayed_work(&atusb->work, 0);
323 }
324
325 /* ----- URB allocation/deallocation --------------------------------------- */
326
327 static void atusb_free_urbs(struct atusb *atusb)
328 {
329         struct urb *urb;
330
331         while (1) {
332                 urb = usb_get_from_anchor(&atusb->idle_urbs);
333                 if (!urb)
334                         break;
335                 kfree_skb(urb->context);
336                 usb_free_urb(urb);
337         }
338 }
339
340 static int atusb_alloc_urbs(struct atusb *atusb, int n)
341 {
342         struct urb *urb;
343
344         while (n) {
345                 urb = usb_alloc_urb(0, GFP_KERNEL);
346                 if (!urb) {
347                         atusb_free_urbs(atusb);
348                         return -ENOMEM;
349                 }
350                 usb_anchor_urb(urb, &atusb->idle_urbs);
351                 usb_free_urb(urb);
352                 n--;
353         }
354         return 0;
355 }
356
357 /* ----- IEEE 802.15.4 interface operations -------------------------------- */
358
359 static void atusb_xmit_complete(struct urb *urb)
360 {
361         dev_dbg(&urb->dev->dev, "atusb_xmit urb completed");
362 }
363
364 static int atusb_xmit(struct ieee802154_hw *hw, struct sk_buff *skb)
365 {
366         struct atusb *atusb = hw->priv;
367         struct usb_device *usb_dev = atusb->usb_dev;
368         int ret;
369
370         dev_dbg(&usb_dev->dev, "atusb_xmit (%d)\n", skb->len);
371         atusb->tx_skb = skb;
372         atusb->tx_ack_seq++;
373         atusb->tx_dr.wIndex = cpu_to_le16(atusb->tx_ack_seq);
374         atusb->tx_dr.wLength = cpu_to_le16(skb->len);
375
376         usb_fill_control_urb(atusb->tx_urb, usb_dev,
377                              usb_sndctrlpipe(usb_dev, 0),
378                              (unsigned char *)&atusb->tx_dr, skb->data,
379                              skb->len, atusb_xmit_complete, NULL);
380         ret = usb_submit_urb(atusb->tx_urb, GFP_ATOMIC);
381         dev_dbg(&usb_dev->dev, "atusb_xmit done (%d)\n", ret);
382         return ret;
383 }
384
385 static int atusb_channel(struct ieee802154_hw *hw, u8 page, u8 channel)
386 {
387         struct atusb *atusb = hw->priv;
388         int ret;
389
390         ret = atusb_write_subreg(atusb, SR_CHANNEL, channel);
391         if (ret < 0)
392                 return ret;
393         msleep(1);      /* @@@ ugly synchronization */
394         return 0;
395 }
396
397 static int atusb_ed(struct ieee802154_hw *hw, u8 *level)
398 {
399         BUG_ON(!level);
400         *level = 0xbe;
401         return 0;
402 }
403
404 static int atusb_set_hw_addr_filt(struct ieee802154_hw *hw,
405                                   struct ieee802154_hw_addr_filt *filt,
406                                   unsigned long changed)
407 {
408         struct atusb *atusb = hw->priv;
409         struct device *dev = &atusb->usb_dev->dev;
410
411         if (changed & IEEE802154_AFILT_SADDR_CHANGED) {
412                 u16 addr = le16_to_cpu(filt->short_addr);
413
414                 dev_vdbg(dev, "atusb_set_hw_addr_filt called for saddr\n");
415                 atusb_write_reg(atusb, RG_SHORT_ADDR_0, addr);
416                 atusb_write_reg(atusb, RG_SHORT_ADDR_1, addr >> 8);
417         }
418
419         if (changed & IEEE802154_AFILT_PANID_CHANGED) {
420                 u16 pan = le16_to_cpu(filt->pan_id);
421
422                 dev_vdbg(dev, "atusb_set_hw_addr_filt called for pan id\n");
423                 atusb_write_reg(atusb, RG_PAN_ID_0, pan);
424                 atusb_write_reg(atusb, RG_PAN_ID_1, pan >> 8);
425         }
426
427         if (changed & IEEE802154_AFILT_IEEEADDR_CHANGED) {
428                 u8 i, addr[IEEE802154_EXTENDED_ADDR_LEN];
429
430                 memcpy(addr, &filt->ieee_addr, IEEE802154_EXTENDED_ADDR_LEN);
431                 dev_vdbg(dev, "atusb_set_hw_addr_filt called for IEEE addr\n");
432                 for (i = 0; i < 8; i++)
433                         atusb_write_reg(atusb, RG_IEEE_ADDR_0 + i, addr[i]);
434         }
435
436         if (changed & IEEE802154_AFILT_PANC_CHANGED) {
437                 dev_vdbg(dev,
438                          "atusb_set_hw_addr_filt called for panc change\n");
439                 if (filt->pan_coord)
440                         atusb_write_subreg(atusb, SR_AACK_I_AM_COORD, 1);
441                 else
442                         atusb_write_subreg(atusb, SR_AACK_I_AM_COORD, 0);
443         }
444
445         return atusb_get_and_clear_error(atusb);
446 }
447
448 static int atusb_start(struct ieee802154_hw *hw)
449 {
450         struct atusb *atusb = hw->priv;
451         struct usb_device *usb_dev = atusb->usb_dev;
452         int ret;
453
454         dev_dbg(&usb_dev->dev, "atusb_start\n");
455         schedule_delayed_work(&atusb->work, 0);
456         atusb_command(atusb, ATUSB_RX_MODE, 1);
457         ret = atusb_get_and_clear_error(atusb);
458         if (ret < 0)
459                 usb_kill_anchored_urbs(&atusb->idle_urbs);
460         return ret;
461 }
462
463 static void atusb_stop(struct ieee802154_hw *hw)
464 {
465         struct atusb *atusb = hw->priv;
466         struct usb_device *usb_dev = atusb->usb_dev;
467
468         dev_dbg(&usb_dev->dev, "atusb_stop\n");
469         usb_kill_anchored_urbs(&atusb->idle_urbs);
470         atusb_command(atusb, ATUSB_RX_MODE, 0);
471         atusb_get_and_clear_error(atusb);
472 }
473
474 #define ATUSB_MAX_TX_POWERS 0xF
475 static const s32 atusb_powers[ATUSB_MAX_TX_POWERS + 1] = {
476         300, 280, 230, 180, 130, 70, 0, -100, -200, -300, -400, -500, -700,
477         -900, -1200, -1700,
478 };
479
480 static int
481 atusb_set_txpower(struct ieee802154_hw *hw, s32 mbm)
482 {
483         struct atusb *atusb = hw->priv;
484         u32 i;
485
486         for (i = 0; i < hw->phy->supported.tx_powers_size; i++) {
487                 if (hw->phy->supported.tx_powers[i] == mbm)
488                         return atusb_write_subreg(atusb, SR_TX_PWR_23X, i);
489         }
490
491         return -EINVAL;
492 }
493
494 #define ATUSB_MAX_ED_LEVELS 0xF
495 static const s32 atusb_ed_levels[ATUSB_MAX_ED_LEVELS + 1] = {
496         -9100, -8900, -8700, -8500, -8300, -8100, -7900, -7700, -7500, -7300,
497         -7100, -6900, -6700, -6500, -6300, -6100,
498 };
499
500 static int
501 atusb_set_cca_mode(struct ieee802154_hw *hw, const struct wpan_phy_cca *cca)
502 {
503         struct atusb *atusb = hw->priv;
504         u8 val;
505
506         /* mapping 802.15.4 to driver spec */
507         switch (cca->mode) {
508         case NL802154_CCA_ENERGY:
509                 val = 1;
510                 break;
511         case NL802154_CCA_CARRIER:
512                 val = 2;
513                 break;
514         case NL802154_CCA_ENERGY_CARRIER:
515                 switch (cca->opt) {
516                 case NL802154_CCA_OPT_ENERGY_CARRIER_AND:
517                         val = 3;
518                         break;
519                 case NL802154_CCA_OPT_ENERGY_CARRIER_OR:
520                         val = 0;
521                         break;
522                 default:
523                         return -EINVAL;
524                 }
525                 break;
526         default:
527                 return -EINVAL;
528         }
529
530         return atusb_write_subreg(atusb, SR_CCA_MODE, val);
531 }
532
533 static int
534 atusb_set_cca_ed_level(struct ieee802154_hw *hw, s32 mbm)
535 {
536         struct atusb *atusb = hw->priv;
537         u32 i;
538
539         for (i = 0; i < hw->phy->supported.cca_ed_levels_size; i++) {
540                 if (hw->phy->supported.cca_ed_levels[i] == mbm)
541                         return atusb_write_subreg(atusb, SR_CCA_ED_THRES, i);
542         }
543
544         return -EINVAL;
545 }
546
547 static int
548 atusb_set_csma_params(struct ieee802154_hw *hw, u8 min_be, u8 max_be, u8 retries)
549 {
550         struct atusb *atusb = hw->priv;
551         int ret;
552
553         ret = atusb_write_subreg(atusb, SR_MIN_BE, min_be);
554         if (ret)
555                 return ret;
556
557         ret = atusb_write_subreg(atusb, SR_MAX_BE, max_be);
558         if (ret)
559                 return ret;
560
561         return atusb_write_subreg(atusb, SR_MAX_CSMA_RETRIES, retries);
562 }
563
564 static int
565 atusb_set_frame_retries(struct ieee802154_hw *hw, s8 retries)
566 {
567         struct atusb *atusb = hw->priv;
568
569         return atusb_write_subreg(atusb, SR_MAX_FRAME_RETRIES, retries);
570 }
571
572 static int
573 atusb_set_promiscuous_mode(struct ieee802154_hw *hw, const bool on)
574 {
575         struct atusb *atusb = hw->priv;
576         int ret;
577
578         if (on) {
579                 ret = atusb_write_subreg(atusb, SR_AACK_DIS_ACK, 1);
580                 if (ret < 0)
581                         return ret;
582
583                 ret = atusb_write_subreg(atusb, SR_AACK_PROM_MODE, 1);
584                 if (ret < 0)
585                         return ret;
586         } else {
587                 ret = atusb_write_subreg(atusb, SR_AACK_PROM_MODE, 0);
588                 if (ret < 0)
589                         return ret;
590
591                 ret = atusb_write_subreg(atusb, SR_AACK_DIS_ACK, 0);
592                 if (ret < 0)
593                         return ret;
594         }
595
596         return 0;
597 }
598
599 static const struct ieee802154_ops atusb_ops = {
600         .owner                  = THIS_MODULE,
601         .xmit_async             = atusb_xmit,
602         .ed                     = atusb_ed,
603         .set_channel            = atusb_channel,
604         .start                  = atusb_start,
605         .stop                   = atusb_stop,
606         .set_hw_addr_filt       = atusb_set_hw_addr_filt,
607         .set_txpower            = atusb_set_txpower,
608         .set_cca_mode           = atusb_set_cca_mode,
609         .set_cca_ed_level       = atusb_set_cca_ed_level,
610         .set_csma_params        = atusb_set_csma_params,
611         .set_frame_retries      = atusb_set_frame_retries,
612         .set_promiscuous_mode   = atusb_set_promiscuous_mode,
613 };
614
615 /* ----- Firmware and chip version information ----------------------------- */
616
617 static int atusb_get_and_show_revision(struct atusb *atusb)
618 {
619         struct usb_device *usb_dev = atusb->usb_dev;
620         unsigned char *buffer;
621         int ret;
622
623         buffer = kmalloc(3, GFP_KERNEL);
624         if (!buffer)
625                 return -ENOMEM;
626
627         /* Get a couple of the ATMega Firmware values */
628         ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0),
629                                 ATUSB_ID, ATUSB_REQ_FROM_DEV, 0, 0,
630                                 buffer, 3, 1000);
631         if (ret >= 0) {
632                 atusb->fw_ver_maj = buffer[0];
633                 atusb->fw_ver_min = buffer[1];
634                 atusb->fw_hw_type = buffer[2];
635
636                 dev_info(&usb_dev->dev,
637                          "Firmware: major: %u, minor: %u, hardware type: %u\n",
638                          atusb->fw_ver_maj, atusb->fw_ver_min, atusb->fw_hw_type);
639         }
640         if (atusb->fw_ver_maj == 0 && atusb->fw_ver_min < 2) {
641                 dev_info(&usb_dev->dev,
642                          "Firmware version (%u.%u) predates our first public release.",
643                          atusb->fw_ver_maj, atusb->fw_ver_min);
644                 dev_info(&usb_dev->dev, "Please update to version 0.2 or newer");
645         }
646
647         kfree(buffer);
648         return ret;
649 }
650
651 static int atusb_get_and_show_build(struct atusb *atusb)
652 {
653         struct usb_device *usb_dev = atusb->usb_dev;
654         char *build;
655         int ret;
656
657         build = kmalloc(ATUSB_BUILD_SIZE + 1, GFP_KERNEL);
658         if (!build)
659                 return -ENOMEM;
660
661         /* We cannot call atusb_control_msg() here, since this request may read various length data */
662         ret = usb_control_msg(atusb->usb_dev, usb_rcvctrlpipe(usb_dev, 0), ATUSB_BUILD,
663                               ATUSB_REQ_FROM_DEV, 0, 0, build, ATUSB_BUILD_SIZE, 1000);
664         if (ret >= 0) {
665                 build[ret] = 0;
666                 dev_info(&usb_dev->dev, "Firmware: build %s\n", build);
667         }
668
669         kfree(build);
670         return ret;
671 }
672
673 static int atusb_get_and_show_chip(struct atusb *atusb)
674 {
675         struct usb_device *usb_dev = atusb->usb_dev;
676         uint8_t man_id_0, man_id_1, part_num, version_num;
677         const char *chip;
678
679         man_id_0 = atusb_read_reg(atusb, RG_MAN_ID_0);
680         man_id_1 = atusb_read_reg(atusb, RG_MAN_ID_1);
681         part_num = atusb_read_reg(atusb, RG_PART_NUM);
682         version_num = atusb_read_reg(atusb, RG_VERSION_NUM);
683
684         if (atusb->err)
685                 return atusb->err;
686
687         if ((man_id_1 << 8 | man_id_0) != ATUSB_JEDEC_ATMEL) {
688                 dev_err(&usb_dev->dev,
689                         "non-Atmel transceiver xxxx%02x%02x\n",
690                         man_id_1, man_id_0);
691                 goto fail;
692         }
693
694         switch (part_num) {
695         case 2:
696                 chip = "AT86RF230";
697                 break;
698         case 3:
699                 chip = "AT86RF231";
700                 break;
701         default:
702                 dev_err(&usb_dev->dev,
703                         "unexpected transceiver, part 0x%02x version 0x%02x\n",
704                         part_num, version_num);
705                 goto fail;
706         }
707
708         dev_info(&usb_dev->dev, "ATUSB: %s version %d\n", chip, version_num);
709
710         return 0;
711
712 fail:
713         atusb->err = -ENODEV;
714         return -ENODEV;
715 }
716
717 static int atusb_set_extended_addr(struct atusb *atusb)
718 {
719         struct usb_device *usb_dev = atusb->usb_dev;
720         unsigned char *buffer;
721         __le64 extended_addr;
722         u64 addr;
723         int ret;
724
725         /* Firmware versions before 0.3 do not support the EUI64_READ command.
726          * Just use a random address and be done */
727         if (atusb->fw_ver_maj == 0 && atusb->fw_ver_min < 3) {
728                 ieee802154_random_extended_addr(&atusb->hw->phy->perm_extended_addr);
729                 return 0;
730         }
731
732         buffer = kmalloc(IEEE802154_EXTENDED_ADDR_LEN, GFP_KERNEL);
733         if (!buffer)
734                 return -ENOMEM;
735
736         /* Firmware is new enough so we fetch the address from EEPROM */
737         ret = atusb_control_msg(atusb, usb_rcvctrlpipe(usb_dev, 0),
738                                 ATUSB_EUI64_READ, ATUSB_REQ_FROM_DEV, 0, 0,
739                                 buffer, IEEE802154_EXTENDED_ADDR_LEN, 1000);
740         if (ret < 0) {
741                 dev_err(&usb_dev->dev, "failed to fetch extended address, random address set\n");
742                 ieee802154_random_extended_addr(&atusb->hw->phy->perm_extended_addr);
743                 kfree(buffer);
744                 return ret;
745         }
746
747         memcpy(&extended_addr, buffer, IEEE802154_EXTENDED_ADDR_LEN);
748         /* Check if read address is not empty and the unicast bit is set correctly */
749         if (!ieee802154_is_valid_extended_unicast_addr(extended_addr)) {
750                 dev_info(&usb_dev->dev, "no permanent extended address found, random address set\n");
751                 ieee802154_random_extended_addr(&atusb->hw->phy->perm_extended_addr);
752         } else {
753                 atusb->hw->phy->perm_extended_addr = extended_addr;
754                 addr = swab64((__force u64)atusb->hw->phy->perm_extended_addr);
755                 dev_info(&usb_dev->dev, "Read permanent extended address %8phC from device\n",
756                         &addr);
757         }
758
759         kfree(buffer);
760         return ret;
761 }
762
763 /* ----- Setup ------------------------------------------------------------- */
764
765 static int atusb_probe(struct usb_interface *interface,
766                        const struct usb_device_id *id)
767 {
768         struct usb_device *usb_dev = interface_to_usbdev(interface);
769         struct ieee802154_hw *hw;
770         struct atusb *atusb = NULL;
771         int ret = -ENOMEM;
772
773         hw = ieee802154_alloc_hw(sizeof(struct atusb), &atusb_ops);
774         if (!hw)
775                 return -ENOMEM;
776
777         atusb = hw->priv;
778         atusb->hw = hw;
779         atusb->usb_dev = usb_get_dev(usb_dev);
780         usb_set_intfdata(interface, atusb);
781
782         atusb->shutdown = 0;
783         atusb->err = 0;
784         INIT_DELAYED_WORK(&atusb->work, atusb_work_urbs);
785         init_usb_anchor(&atusb->idle_urbs);
786         init_usb_anchor(&atusb->rx_urbs);
787
788         if (atusb_alloc_urbs(atusb, ATUSB_NUM_RX_URBS))
789                 goto fail;
790
791         atusb->tx_dr.bRequestType = ATUSB_REQ_TO_DEV;
792         atusb->tx_dr.bRequest = ATUSB_TX;
793         atusb->tx_dr.wValue = cpu_to_le16(0);
794
795         atusb->tx_urb = usb_alloc_urb(0, GFP_ATOMIC);
796         if (!atusb->tx_urb)
797                 goto fail;
798
799         hw->parent = &usb_dev->dev;
800         hw->flags = IEEE802154_HW_TX_OMIT_CKSUM | IEEE802154_HW_AFILT |
801                     IEEE802154_HW_PROMISCUOUS | IEEE802154_HW_CSMA_PARAMS;
802
803         hw->phy->flags = WPAN_PHY_FLAG_TXPOWER | WPAN_PHY_FLAG_CCA_ED_LEVEL |
804                          WPAN_PHY_FLAG_CCA_MODE;
805
806         hw->phy->supported.cca_modes = BIT(NL802154_CCA_ENERGY) |
807                 BIT(NL802154_CCA_CARRIER) | BIT(NL802154_CCA_ENERGY_CARRIER);
808         hw->phy->supported.cca_opts = BIT(NL802154_CCA_OPT_ENERGY_CARRIER_AND) |
809                 BIT(NL802154_CCA_OPT_ENERGY_CARRIER_OR);
810
811         hw->phy->supported.cca_ed_levels = atusb_ed_levels;
812         hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(atusb_ed_levels);
813
814         hw->phy->cca.mode = NL802154_CCA_ENERGY;
815
816         hw->phy->current_page = 0;
817         hw->phy->current_channel = 11;  /* reset default */
818         hw->phy->supported.channels[0] = 0x7FFF800;
819         hw->phy->supported.tx_powers = atusb_powers;
820         hw->phy->supported.tx_powers_size = ARRAY_SIZE(atusb_powers);
821         hw->phy->transmit_power = hw->phy->supported.tx_powers[0];
822         hw->phy->cca_ed_level = hw->phy->supported.cca_ed_levels[7];
823
824         atusb_command(atusb, ATUSB_RF_RESET, 0);
825         atusb_get_and_show_chip(atusb);
826         atusb_get_and_show_revision(atusb);
827         atusb_get_and_show_build(atusb);
828         atusb_set_extended_addr(atusb);
829
830         if (atusb->fw_ver_maj >= 0 && atusb->fw_ver_min >= 3)
831                 hw->flags |= IEEE802154_HW_FRAME_RETRIES;
832
833         ret = atusb_get_and_clear_error(atusb);
834         if (ret) {
835                 dev_err(&atusb->usb_dev->dev,
836                         "%s: initialization failed, error = %d\n",
837                         __func__, ret);
838                 goto fail;
839         }
840
841         ret = ieee802154_register_hw(hw);
842         if (ret)
843                 goto fail;
844
845         /* If we just powered on, we're now in P_ON and need to enter TRX_OFF
846          * explicitly. Any resets after that will send us straight to TRX_OFF,
847          * making the command below redundant.
848          */
849         atusb_write_reg(atusb, RG_TRX_STATE, STATE_FORCE_TRX_OFF);
850         msleep(1);      /* reset => TRX_OFF, tTR13 = 37 us */
851
852 #if 0
853         /* Calculating the maximum time available to empty the frame buffer
854          * on reception:
855          *
856          * According to [1], the inter-frame gap is
857          * R * 20 * 16 us + 128 us
858          * where R is a random number from 0 to 7. Furthermore, we have 20 bit
859          * times (80 us at 250 kbps) of SHR of the next frame before the
860          * transceiver begins storing data in the frame buffer.
861          *
862          * This yields a minimum time of 208 us between the last data of a
863          * frame and the first data of the next frame. This time is further
864          * reduced by interrupt latency in the atusb firmware.
865          *
866          * atusb currently needs about 500 us to retrieve a maximum-sized
867          * frame. We therefore have to allow reception of a new frame to begin
868          * while we retrieve the previous frame.
869          *
870          * [1] "JN-AN-1035 Calculating data rates in an IEEE 802.15.4-based
871          *      network", Jennic 2006.
872          *     http://www.jennic.com/download_file.php?supportFile=JN-AN-1035%20Calculating%20802-15-4%20Data%20Rates-1v0.pdf
873          */
874
875         atusb_write_subreg(atusb, SR_RX_SAFE_MODE, 1);
876 #endif
877         atusb_write_reg(atusb, RG_IRQ_MASK, 0xff);
878
879         ret = atusb_get_and_clear_error(atusb);
880         if (!ret)
881                 return 0;
882
883         dev_err(&atusb->usb_dev->dev,
884                 "%s: setup failed, error = %d\n",
885                 __func__, ret);
886
887         ieee802154_unregister_hw(hw);
888 fail:
889         atusb_free_urbs(atusb);
890         usb_kill_urb(atusb->tx_urb);
891         usb_free_urb(atusb->tx_urb);
892         usb_put_dev(usb_dev);
893         ieee802154_free_hw(hw);
894         return ret;
895 }
896
897 static void atusb_disconnect(struct usb_interface *interface)
898 {
899         struct atusb *atusb = usb_get_intfdata(interface);
900
901         dev_dbg(&atusb->usb_dev->dev, "atusb_disconnect\n");
902
903         atusb->shutdown = 1;
904         cancel_delayed_work_sync(&atusb->work);
905
906         usb_kill_anchored_urbs(&atusb->rx_urbs);
907         atusb_free_urbs(atusb);
908         usb_kill_urb(atusb->tx_urb);
909         usb_free_urb(atusb->tx_urb);
910
911         ieee802154_unregister_hw(atusb->hw);
912
913         usb_put_dev(atusb->usb_dev);
914
915         ieee802154_free_hw(atusb->hw);
916
917         usb_set_intfdata(interface, NULL);
918
919         pr_debug("atusb_disconnect done\n");
920 }
921
922 /* The devices we work with */
923 static const struct usb_device_id atusb_device_table[] = {
924         {
925                 .match_flags            = USB_DEVICE_ID_MATCH_DEVICE |
926                                           USB_DEVICE_ID_MATCH_INT_INFO,
927                 .idVendor               = ATUSB_VENDOR_ID,
928                 .idProduct              = ATUSB_PRODUCT_ID,
929                 .bInterfaceClass        = USB_CLASS_VENDOR_SPEC
930         },
931         /* end with null element */
932         {}
933 };
934 MODULE_DEVICE_TABLE(usb, atusb_device_table);
935
936 static struct usb_driver atusb_driver = {
937         .name           = "atusb",
938         .probe          = atusb_probe,
939         .disconnect     = atusb_disconnect,
940         .id_table       = atusb_device_table,
941 };
942 module_usb_driver(atusb_driver);
943
944 MODULE_AUTHOR("Alexander Aring <alex.aring@gmail.com>");
945 MODULE_AUTHOR("Richard Sharpe <realrichardsharpe@gmail.com>");
946 MODULE_AUTHOR("Stefan Schmidt <stefan@datenfreihafen.org>");
947 MODULE_AUTHOR("Werner Almesberger <werner@almesberger.net>");
948 MODULE_DESCRIPTION("ATUSB IEEE 802.15.4 Driver");
949 MODULE_LICENSE("GPL");