From 21fcf572716f61926f5d23a358e79d06a9d4d54f Mon Sep 17 00:00:00 2001 From: Pavel Machek Date: Wed, 5 Oct 2016 22:51:42 +0200 Subject: Bluetooth: __ variants of u8 and friends are not neccessary inside kernel bluetooth.h is not part of user API, so __ variants are not neccessary here. Signed-off-by: Pavel Machek Signed-off-by: Marcel Holtmann --- include/net/bluetooth/bluetooth.h | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h index 0a1e21d7bce1..01487192f628 100644 --- a/include/net/bluetooth/bluetooth.h +++ b/include/net/bluetooth/bluetooth.h @@ -197,7 +197,7 @@ typedef struct { #define BDADDR_LE_PUBLIC 0x01 #define BDADDR_LE_RANDOM 0x02 -static inline bool bdaddr_type_is_valid(__u8 type) +static inline bool bdaddr_type_is_valid(u8 type) { switch (type) { case BDADDR_BREDR: @@ -209,7 +209,7 @@ static inline bool bdaddr_type_is_valid(__u8 type) return false; } -static inline bool bdaddr_type_is_le(__u8 type) +static inline bool bdaddr_type_is_le(u8 type) { switch (type) { case BDADDR_LE_PUBLIC: @@ -279,15 +279,16 @@ struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock); /* Skb helpers */ struct l2cap_ctrl { - __u8 sframe:1, + u8 sframe:1, poll:1, final:1, fcs:1, sar:2, super:2; - __u16 reqseq; - __u16 txseq; - __u8 retries; + + u16 reqseq; + u16 txseq; + u8 retries; __le16 psm; bdaddr_t bdaddr; struct l2cap_chan *chan; @@ -303,7 +304,7 @@ typedef void (*hci_req_complete_skb_t)(struct hci_dev *hdev, u8 status, #define HCI_REQ_SKB BIT(1) struct hci_ctrl { - __u16 opcode; + u16 opcode; u8 req_flags; u8 req_event; union { @@ -313,10 +314,10 @@ struct hci_ctrl { }; struct bt_skb_cb { - __u8 pkt_type; - __u8 force_active; - __u16 expect; - __u8 incoming:1; + u8 pkt_type; + u8 force_active; + u16 expect; + u8 incoming:1; union { struct l2cap_ctrl l2cap; struct hci_ctrl hci; @@ -366,7 +367,7 @@ out: return NULL; } -int bt_to_errno(__u16 code); +int bt_to_errno(u16 code); void hci_sock_set_flag(struct sock *sk, int nr); void hci_sock_clear_flag(struct sock *sk, int nr); -- cgit v1.2.3 From 6e5ffd0f4509f7331ecebf12463f4eb5a213cf4a Mon Sep 17 00:00:00 2001 From: Prasanna Karthik Date: Mon, 17 Oct 2016 18:31:08 +0000 Subject: Bluetooth: hci_bcsp: Use setup_timer Kernel API instead of init_timer Replace init_timer function with setup_timer reported by coccinelle Signed-off-by: Prasanna Karthik Signed-off-by: Marcel Holtmann --- drivers/bluetooth/hci_bcsp.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/bluetooth/hci_bcsp.c b/drivers/bluetooth/hci_bcsp.c index a2c921faaa12..910ec968f022 100644 --- a/drivers/bluetooth/hci_bcsp.c +++ b/drivers/bluetooth/hci_bcsp.c @@ -733,9 +733,7 @@ static int bcsp_open(struct hci_uart *hu) skb_queue_head_init(&bcsp->rel); skb_queue_head_init(&bcsp->unrel); - init_timer(&bcsp->tbcsp); - bcsp->tbcsp.function = bcsp_timed_event; - bcsp->tbcsp.data = (u_long)hu; + setup_timer(&bcsp->tbcsp, bcsp_timed_event, (u_long)hu); bcsp->rx_state = BCSP_W4_PKT_DELIMITER; -- cgit v1.2.3 From a1e0d04396684a38fd4cdaf084d38bf2cd5a2253 Mon Sep 17 00:00:00 2001 From: Prasanna Karthik Date: Tue, 18 Oct 2016 17:30:10 +0000 Subject: Bluetooth: hci_h5: Use setup_timer Kernel API instead of init_timer Replace init_timer function with setup_timer reported by coccinelle Signed-off-by: Prasanna Karthik Signed-off-by: Marcel Holtmann --- drivers/bluetooth/hci_h5.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/bluetooth/hci_h5.c b/drivers/bluetooth/hci_h5.c index 0879d64b1caf..90d0456b6744 100644 --- a/drivers/bluetooth/hci_h5.c +++ b/drivers/bluetooth/hci_h5.c @@ -204,9 +204,7 @@ static int h5_open(struct hci_uart *hu) h5_reset_rx(h5); - init_timer(&h5->timer); - h5->timer.function = h5_timed_event; - h5->timer.data = (unsigned long)hu; + setup_timer(&h5->timer, h5_timed_event, (unsigned long)hu); h5->tx_win = H5_TX_WIN_MAX; -- cgit v1.2.3 From 1ae6d00ad05730bca283dc09e7a9c162c2f22b01 Mon Sep 17 00:00:00 2001 From: Prasanna Karthik Date: Tue, 18 Oct 2016 23:55:12 +0000 Subject: Bluetooth: hci_qca: Use setup_timer Kernel API instead of init_timer Replace init_timer function with setup_timer reported by coccinelle Signed-off-by: Prasanna Karthik Signed-off-by: Marcel Holtmann --- drivers/bluetooth/hci_qca.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c index 6c867fbc56a7..05c230719a47 100644 --- a/drivers/bluetooth/hci_qca.c +++ b/drivers/bluetooth/hci_qca.c @@ -438,14 +438,11 @@ static int qca_open(struct hci_uart *hu) hu->priv = qca; - init_timer(&qca->wake_retrans_timer); - qca->wake_retrans_timer.function = hci_ibs_wake_retrans_timeout; - qca->wake_retrans_timer.data = (u_long)hu; + setup_timer(&qca->wake_retrans_timer, hci_ibs_wake_retrans_timeout, + (u_long)hu); qca->wake_retrans = IBS_WAKE_RETRANS_TIMEOUT_MS; - init_timer(&qca->tx_idle_timer); - qca->tx_idle_timer.function = hci_ibs_tx_idle_timeout; - qca->tx_idle_timer.data = (u_long)hu; + setup_timer(&qca->tx_idle_timer, hci_ibs_tx_idle_timeout, (u_long)hu); qca->tx_idle_delay = IBS_TX_IDLE_TIMEOUT_MS; BT_DBG("HCI_UART_QCA open, tx_idle_delay=%u, wake_retrans=%u", -- cgit v1.2.3 From 5b3211dcd43582c48291e7fc22b2e6d5c7faded5 Mon Sep 17 00:00:00 2001 From: "vegard.nossum@oracle.com" Date: Wed, 20 Jul 2016 10:43:11 +0200 Subject: ieee802154: check device type I've observed a NULL pointer dereference in ieee802154_del_iface() during netlink fuzzing. It's the ->wpan_phy dereference here: phy = dev->ieee802154_ptr->wpan_phy; My bet is that we're not checking that this is an IEEE802154 interface, so let's do what ieee802154_nl_get_dev() is doing. (Maybe we should even be calling this directly?) Cc: Lennert Buytenhek Cc: Alexander Aring Cc: Marcel Holtmann Cc: Dmitry Eremin-Solenikov Cc: Sergey Lapin Signed-off-by: Vegard Nossum Acked-by: Alexander Aring Signed-off-by: Stefan Schmidt --- net/ieee802154/nl-phy.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/net/ieee802154/nl-phy.c b/net/ieee802154/nl-phy.c index 77d73014bde3..dc2960be51e0 100644 --- a/net/ieee802154/nl-phy.c +++ b/net/ieee802154/nl-phy.c @@ -286,9 +286,12 @@ int ieee802154_del_iface(struct sk_buff *skb, struct genl_info *info) if (name[nla_len(info->attrs[IEEE802154_ATTR_DEV_NAME]) - 1] != '\0') return -EINVAL; /* name should be null-terminated */ + rc = -ENODEV; dev = dev_get_by_name(genl_info_net(info), name); if (!dev) - return -ENODEV; + return rc; + if (dev->type != ARPHRD_IEEE802154) + goto out; phy = dev->ieee802154_ptr->wpan_phy; BUG_ON(!phy); @@ -342,6 +345,7 @@ nla_put_failure: nlmsg_free(msg); out_dev: wpan_phy_put(phy); +out: if (dev) dev_put(dev); -- cgit v1.2.3 From 4d7101d76572257dbbdca0e17f132a04e4b2b77d Mon Sep 17 00:00:00 2001 From: Alexander Aring Date: Tue, 6 Sep 2016 09:50:04 +0200 Subject: at86rf230: fix cca ed values for rf233 This patch changes the rssi base value to -94 for at86rf33 transceivers. The code before assumes a rssi base value of -91 which is for the at86rf231 transceiver only. This change need to update the cca ed threshold mapping table. Signed-off-by: Alexander Aring Acked-by: Stefan Schmidt Signed-off-by: Stefan Schmidt --- drivers/net/ieee802154/at86rf230.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c index 9f10da60e02d..057025722e3d 100644 --- a/drivers/net/ieee802154/at86rf230.c +++ b/drivers/net/ieee802154/at86rf230.c @@ -990,7 +990,12 @@ at86rf23x_set_channel(struct at86rf230_local *lp, u8 page, u8 channel) } #define AT86RF2XX_MAX_ED_LEVELS 0xF -static const s32 at86rf23x_ed_levels[AT86RF2XX_MAX_ED_LEVELS + 1] = { +static const s32 at86rf233_ed_levels[AT86RF2XX_MAX_ED_LEVELS + 1] = { + -9400, -9200, -9000, -8800, -8600, -8400, -8200, -8000, -7800, -7600, + -7400, -7200, -7000, -6800, -6600, -6400, +}; + +static const s32 at86rf231_ed_levels[AT86RF2XX_MAX_ED_LEVELS + 1] = { -9100, -8900, -8700, -8500, -8300, -8100, -7900, -7700, -7500, -7300, -7100, -6900, -6700, -6500, -6300, -6100, }; @@ -1343,7 +1348,7 @@ static struct at86rf2xx_chip_data at86rf233_data = { .t_sleep_to_off = 1000, .t_frame = 4096, .t_p_ack = 545, - .rssi_base_val = -91, + .rssi_base_val = -94, .set_channel = at86rf23x_set_channel, .set_txpower = at86rf23x_set_txpower, }; @@ -1557,9 +1562,6 @@ at86rf230_detect_device(struct at86rf230_local *lp) lp->hw->phy->supported.cca_opts = BIT(NL802154_CCA_OPT_ENERGY_CARRIER_AND) | BIT(NL802154_CCA_OPT_ENERGY_CARRIER_OR); - lp->hw->phy->supported.cca_ed_levels = at86rf23x_ed_levels; - lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf23x_ed_levels); - lp->hw->phy->cca.mode = NL802154_CCA_ENERGY; switch (part) { @@ -1575,6 +1577,8 @@ at86rf230_detect_device(struct at86rf230_local *lp) lp->hw->phy->symbol_duration = 16; lp->hw->phy->supported.tx_powers = at86rf231_powers; lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf231_powers); + lp->hw->phy->supported.cca_ed_levels = at86rf231_ed_levels; + lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf231_ed_levels); break; case 7: chip = "at86rf212"; @@ -1598,6 +1602,8 @@ at86rf230_detect_device(struct at86rf230_local *lp) lp->hw->phy->symbol_duration = 16; lp->hw->phy->supported.tx_powers = at86rf233_powers; lp->hw->phy->supported.tx_powers_size = ARRAY_SIZE(at86rf233_powers); + lp->hw->phy->supported.cca_ed_levels = at86rf233_ed_levels; + lp->hw->phy->supported.cca_ed_levels_size = ARRAY_SIZE(at86rf233_ed_levels); break; default: chip = "unknown"; -- cgit v1.2.3 From 5cc92049e298b0e2d2d7a27867f05b48e7f7fe3a Mon Sep 17 00:00:00 2001 From: Stefan Schmidt Date: Tue, 25 Oct 2016 16:34:35 +0200 Subject: ieee802154: add myself as co-maintainer to MAINTAINERS file Going to help Alexander, spread the review and development load. Signed-off-by: Stefan Schmidt Acked-by: Alexander Aring --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+) diff --git a/MAINTAINERS b/MAINTAINERS index 519653813500..0e6002abc591 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -6105,6 +6105,7 @@ F: drivers/idle/i7300_idle.c IEEE 802.15.4 SUBSYSTEM M: Alexander Aring +M: Stefan Schmidt L: linux-wpan@vger.kernel.org W: http://wpan.cakelab.org/ T: git git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth.git -- cgit v1.2.3 From e03551d7b99c35d7d35f6862c37e3ce9f7c6787c Mon Sep 17 00:00:00 2001 From: Stefan Schmidt Date: Tue, 22 Nov 2016 14:02:07 +0100 Subject: ieee802154: fakelb: print number of created fake devices during probe When using fakelb with different network sizes it becomes handy to have the number of created fake devices printed in the log as well. Signed-off-by: Stefan Schmidt --- drivers/net/ieee802154/fakelb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ieee802154/fakelb.c b/drivers/net/ieee802154/fakelb.c index ec387efb61d0..0d673f7682ee 100644 --- a/drivers/net/ieee802154/fakelb.c +++ b/drivers/net/ieee802154/fakelb.c @@ -218,7 +218,7 @@ static int fakelb_probe(struct platform_device *pdev) goto err_slave; } - dev_info(&pdev->dev, "added ieee802154 hardware\n"); + dev_info(&pdev->dev, "added %i fake ieee802154 hardware devices\n", numlbs); return 0; err_slave: -- cgit v1.2.3 From 6bf0d84d13e968b4f8bf0710e0cae785e228dbba Mon Sep 17 00:00:00 2001 From: Stefan Schmidt Date: Mon, 28 Nov 2016 18:22:33 +0100 Subject: docs: ieee802154: update main documentation file This updates some out of date documentation and fixes some wrong assumptions as well as pure grammar fixes. This file needs to move towards the new kernel doc system and getting an overhaul during this work. Signed-off-by: Stefan Schmidt --- Documentation/networking/ieee802154.txt | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/Documentation/networking/ieee802154.txt b/Documentation/networking/ieee802154.txt index aa69ccc481db..c4114346f054 100644 --- a/Documentation/networking/ieee802154.txt +++ b/Documentation/networking/ieee802154.txt @@ -4,20 +4,20 @@ Introduction ============ -The IEEE 802.15.4 working group focuses on standardization of bottom -two layers: Medium Access Control (MAC) and Physical (PHY). And there +The IEEE 802.15.4 working group focuses on standardization of the bottom +two layers: Medium Access Control (MAC) and Physical access (PHY). And there are mainly two options available for upper layers: - ZigBee - proprietary protocol from the ZigBee Alliance - 6LoWPAN - IPv6 networking over low rate personal area networks -The linux-wpan project goal is to provide a complete implementation +The goal of the Linux-wpan is to provide a complete implementation of the IEEE 802.15.4 and 6LoWPAN protocols. IEEE 802.15.4 is a stack of protocols for organizing Low-Rate Wireless Personal Area Networks. The stack is composed of three main parts: - IEEE 802.15.4 layer; We have chosen to use plain Berkeley socket API, - the generic Linux networking stack to transfer IEEE 802.15.4 messages - and a special protocol over genetlink for configuration/management + the generic Linux networking stack to transfer IEEE 802.15.4 data + messages and a special protocol over netlink for configuration/management - MAC - provides access to shared channel and reliable data delivery - PHY - represents device drivers @@ -33,15 +33,13 @@ include/net/af_ieee802154.h header or in the special header in the userspace package (see either http://wpan.cakelab.org/ or the git tree at https://github.com/linux-wpan/wpan-tools). -One can use SOCK_RAW for passing raw data towards device xmit function. YMMV. - Kernel side ============= Like with WiFi, there are several types of devices implementing IEEE 802.15.4. 1) 'HardMAC'. The MAC layer is implemented in the device itself, the device - exports MLME and data API. + exports a management (e.g. MLME) and data API. 2) 'SoftMAC' or just radio. These types of devices are just radio transceivers possibly with some kinds of acceleration like automatic CRC computation and comparation, automagic ACK handling, address matching, etc. @@ -106,7 +104,7 @@ Fake drivers In addition there is a driver available which simulates a real device with SoftMAC (fakelb - IEEE 802.15.4 loopback driver) interface. This option -provides possibility to test and debug stack without usage of real hardware. +provides a possibility to test and debug the stack without usage of real hardware. See sources in drivers/net/ieee802154 folder for more details. @@ -125,17 +123,15 @@ to support the IPv6 minimum MTU requirement [RFC2460], and stateless header compression for IPv6 datagrams (LOWPAN_HC1 and LOWPAN_HC2) to reduce the relatively large IPv6 and UDP headers down to (in the best case) several bytes. -In Semptember 2011 the standard update was published - [RFC6282]. +In September 2011 the standard update was published - [RFC6282]. It deprecates HC1 and HC2 compression and defines IPHC encoding format which is used in this Linux implementation. All the code related to 6lowpan you may find in files: net/6lowpan/* and net/ieee802154/6lowpan/* -To setup 6lowpan interface you need (busybox release > 1.17.0): -1. Add IEEE802.15.4 interface and initialize PANid; +To setup a 6LoWPAN interface you need: +1. Add IEEE802.15.4 interface and set channel and PAN ID; 2. Add 6lowpan interface by command like: # ip link add link wpan0 name lowpan0 type lowpan -3. Set MAC (if needs): - # ip link set lowpan0 address de:ad:be:ef:ca:fe:ba:be -4. Bring up 'lowpan0' interface +3. Bring up 'lowpan0' interface -- cgit v1.2.3