Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next

Johan Hedberg says:

====================
pull request: bluetooth-next 2015-06-18

Here's the final bluetooth-next pull request for 4.2.

 - Cleanups & fixes to 802.15.4 code and related drivers
 - Fix btusb driver memory leak
 - New USB IDs for Atheros controllers
 - Support for BCM4324B3 UART based Broadcom controller
 - Fix for Bluetooth encryption key size handling
 - Broadcom controller initialization fixes
 - Support for Intel controller DDC parameters
 - Support for multiple Bluetooth LE advertising instances
 - Fix for HCI user channel cleanup path

Please let me know if there are any issues pulling. Thanks.
====================

Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
David S. Miller
2015-06-23 03:17:47 -07:00
48 changed files with 2326 additions and 550 deletions

View File

@@ -365,8 +365,19 @@ extern struct dentry *bt_debugfs;
int l2cap_init(void);
void l2cap_exit(void);
#if IS_ENABLED(CONFIG_BT_BREDR)
int sco_init(void);
void sco_exit(void);
#else
static inline int sco_init(void)
{
return 0;
}
static inline void sco_exit(void)
{
}
#endif
int mgmt_init(void);
void mgmt_exit(void);

View File

@@ -1202,6 +1202,16 @@ struct hci_rp_read_clock {
__le16 accuracy;
} __packed;
#define HCI_OP_READ_ENC_KEY_SIZE 0x1408
struct hci_cp_read_enc_key_size {
__le16 handle;
} __packed;
struct hci_rp_read_enc_key_size {
__u8 status;
__le16 handle;
__u8 key_size;
} __packed;
#define HCI_OP_READ_LOCAL_AMP_INFO 0x1409
struct hci_rp_read_local_amp_info {
__u8 status;

View File

@@ -156,16 +156,22 @@ struct oob_data {
};
struct adv_info {
struct delayed_work timeout_exp;
struct list_head list;
bool pending;
__u8 instance;
__u32 flags;
__u16 timeout;
__u16 remaining_time;
__u16 duration;
__u16 adv_data_len;
__u8 adv_data[HCI_MAX_AD_LENGTH];
__u16 scan_rsp_len;
__u8 scan_rsp_data[HCI_MAX_AD_LENGTH];
};
#define HCI_MAX_ADV_INSTANCES 5
#define HCI_DEFAULT_ADV_DURATION 2
#define HCI_MAX_SHORT_NAME_LENGTH 10
/* Default LE RPA expiry time, 15 minutes */
@@ -373,7 +379,11 @@ struct hci_dev {
__u8 scan_rsp_data[HCI_MAX_AD_LENGTH];
__u8 scan_rsp_data_len;
struct adv_info adv_instance;
struct list_head adv_instances;
unsigned int adv_instance_cnt;
__u8 cur_adv_instance;
__u16 adv_instance_timeout;
struct delayed_work adv_instance_expire;
__u8 irk[16];
__u32 rpa_timeout;
@@ -530,10 +540,22 @@ extern struct mutex hci_cb_list_lock;
/* ----- HCI interface to upper protocols ----- */
int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
int l2cap_disconn_ind(struct hci_conn *hcon);
int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
#if IS_ENABLED(CONFIG_BT_BREDR)
int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
#else
static inline int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
__u8 *flags)
{
return 0;
}
static inline void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
{
}
#endif
/* ----- Inquiry cache ----- */
#define INQUIRY_CACHE_AGE_MAX (HZ*30) /* 30 seconds */
@@ -561,11 +583,6 @@ static inline void hci_discovery_filter_clear(struct hci_dev *hdev)
hdev->discovery.scan_duration = 0;
}
static inline void adv_info_init(struct hci_dev *hdev)
{
memset(&hdev->adv_instance, 0, sizeof(struct adv_info));
}
bool hci_discovery_active(struct hci_dev *hdev);
void hci_discovery_set_state(struct hci_dev *hdev, int state);
@@ -1007,6 +1024,15 @@ int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 bdaddr_type);
void hci_adv_instances_clear(struct hci_dev *hdev);
struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance);
struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance);
int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
u16 adv_data_len, u8 *adv_data,
u16 scan_rsp_len, u8 *scan_rsp_data,
u16 timeout, u16 duration);
int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance);
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
@@ -1350,6 +1376,7 @@ void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
int mgmt_powered(struct hci_dev *hdev, u8 powered);
int mgmt_update_adv_data(struct hci_dev *hdev);
void mgmt_discoverable_timeout(struct hci_dev *hdev);
void mgmt_adv_timeout_expired(struct hci_dev *hdev);
void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
bool persistent);
void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
@@ -1408,7 +1435,7 @@ void mgmt_smp_complete(struct hci_conn *conn, bool complete);
u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
u16 to_multiplier);
void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
__u8 ltk[16]);
__u8 ltk[16], __u8 key_size);
void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 *bdaddr_type);

View File

@@ -346,15 +346,15 @@ struct ieee802154_mac_params {
struct wpan_phy;
enum {
IEEE802154_LLSEC_PARAM_ENABLED = 1 << 0,
IEEE802154_LLSEC_PARAM_FRAME_COUNTER = 1 << 1,
IEEE802154_LLSEC_PARAM_OUT_LEVEL = 1 << 2,
IEEE802154_LLSEC_PARAM_OUT_KEY = 1 << 3,
IEEE802154_LLSEC_PARAM_KEY_SOURCE = 1 << 4,
IEEE802154_LLSEC_PARAM_PAN_ID = 1 << 5,
IEEE802154_LLSEC_PARAM_HWADDR = 1 << 6,
IEEE802154_LLSEC_PARAM_COORD_HWADDR = 1 << 7,
IEEE802154_LLSEC_PARAM_COORD_SHORTADDR = 1 << 8,
IEEE802154_LLSEC_PARAM_ENABLED = BIT(0),
IEEE802154_LLSEC_PARAM_FRAME_COUNTER = BIT(1),
IEEE802154_LLSEC_PARAM_OUT_LEVEL = BIT(2),
IEEE802154_LLSEC_PARAM_OUT_KEY = BIT(3),
IEEE802154_LLSEC_PARAM_KEY_SOURCE = BIT(4),
IEEE802154_LLSEC_PARAM_PAN_ID = BIT(5),
IEEE802154_LLSEC_PARAM_HWADDR = BIT(6),
IEEE802154_LLSEC_PARAM_COORD_HWADDR = BIT(7),
IEEE802154_LLSEC_PARAM_COORD_SHORTADDR = BIT(8),
};
struct ieee802154_llsec_ops {

View File

@@ -31,79 +31,117 @@
*/
#define MAC802154_FRAME_HARD_HEADER_LEN (2 + 1 + 20 + 14)
/* The following flags are used to indicate changed address settings from
/**
* enum ieee802154_hw_addr_filt_flags - hardware address filtering flags
*
* The following flags are used to indicate changed address settings from
* the stack to the hardware.
*
* @IEEE802154_AFILT_SADDR_CHANGED: Indicates that the short address will be
* change.
*
* @IEEE802154_AFILT_IEEEADDR_CHANGED: Indicates that the extended address
* will be change.
*
* @IEEE802154_AFILT_PANID_CHANGED: Indicates that the pan id will be change.
*
* @IEEE802154_AFILT_PANC_CHANGED: Indicates that the address filter will
* do frame address filtering as a pan coordinator.
*/
enum ieee802154_hw_addr_filt_flags {
IEEE802154_AFILT_SADDR_CHANGED = BIT(0),
IEEE802154_AFILT_IEEEADDR_CHANGED = BIT(1),
IEEE802154_AFILT_PANID_CHANGED = BIT(2),
IEEE802154_AFILT_PANC_CHANGED = BIT(3),
};
/* indicates that the Short Address changed */
#define IEEE802154_AFILT_SADDR_CHANGED 0x00000001
/* indicates that the IEEE Address changed */
#define IEEE802154_AFILT_IEEEADDR_CHANGED 0x00000002
/* indicates that the PAN ID changed */
#define IEEE802154_AFILT_PANID_CHANGED 0x00000004
/* indicates that PAN Coordinator status changed */
#define IEEE802154_AFILT_PANC_CHANGED 0x00000008
/**
* struct ieee802154_hw_addr_filt - hardware address filtering settings
*
* @pan_id: pan_id which should be set to the hardware address filter.
*
* @short_addr: short_addr which should be set to the hardware address filter.
*
* @ieee_addr: extended address which should be set to the hardware address
* filter.
*
* @pan_coord: boolean if hardware filtering should be operate as coordinator.
*/
struct ieee802154_hw_addr_filt {
__le16 pan_id; /* Each independent PAN selects a unique
* identifier. This PAN id allows communication
* between devices within a network using short
* addresses and enables transmissions between
* devices across independent networks.
*/
__le16 pan_id;
__le16 short_addr;
__le64 ieee_addr;
u8 pan_coord;
};
struct ieee802154_vif {
int type;
/* must be last */
u8 drv_priv[0] __aligned(sizeof(void *));
bool pan_coord;
};
/**
* struct ieee802154_hw - ieee802154 hardware
*
* @extra_tx_headroom: headroom to reserve in each transmit skb for use by the
* driver (e.g. for transmit headers.)
*
* @flags: hardware flags, see &enum ieee802154_hw_flags
*
* @parent: parent device of the hardware.
*
* @priv: pointer to private area that was allocated for driver use along with
* this structure.
*
* @phy: This points to the &struct wpan_phy allocated for this 802.15.4 PHY.
*/
struct ieee802154_hw {
/* filled by the driver */
int extra_tx_headroom;
u32 flags;
struct device *parent;
void *priv;
/* filled by mac802154 core */
struct ieee802154_hw_addr_filt hw_filt;
void *priv;
struct wpan_phy *phy;
size_t vif_data_size;
};
/* Checksum is in hardware and is omitted from a packet
/**
* enum ieee802154_hw_flags - hardware flags
*
* These following flags are used to indicate hardware capabilities to
* These flags are used to indicate hardware capabilities to
* the stack. Generally, flags here should have their meaning
* done in a way that the simplest hardware doesn't need setting
* any particular flags. There are some exceptions to this rule,
* however, so you are advised to review these flags carefully.
*
* @IEEE802154_HW_TX_OMIT_CKSUM: Indicates that xmitter will add FCS on it's
* own.
*
* @IEEE802154_HW_LBT: Indicates that transceiver will support listen before
* transmit.
*
* @IEEE802154_HW_CSMA_PARAMS: Indicates that transceiver will support csma
* parameters (max_be, min_be, backoff exponents).
*
* @IEEE802154_HW_FRAME_RETRIES: Indicates that transceiver will support ARET
* frame retries setting.
*
* @IEEE802154_HW_AFILT: Indicates that transceiver will support hardware
* address filter setting.
*
* @IEEE802154_HW_PROMISCUOUS: Indicates that transceiver will support
* promiscuous mode setting.
*
* @IEEE802154_HW_RX_OMIT_CKSUM: Indicates that receiver omits FCS.
*
* @IEEE802154_HW_RX_DROP_BAD_CKSUM: Indicates that receiver will not filter
* frames with bad checksum.
*/
/* Indicates that xmitter will add FCS on it's own. */
#define IEEE802154_HW_TX_OMIT_CKSUM 0x00000001
/* Indicates that receiver will autorespond with ACK frames. */
#define IEEE802154_HW_AACK 0x00000002
/* Indicates that transceiver will support listen before transmit. */
#define IEEE802154_HW_LBT 0x00000004
/* Indicates that transceiver will support csma (max_be, min_be, csma retries)
* settings. */
#define IEEE802154_HW_CSMA_PARAMS 0x00000008
/* Indicates that transceiver will support ARET frame retries setting. */
#define IEEE802154_HW_FRAME_RETRIES 0x00000010
/* Indicates that transceiver will support hardware address filter setting. */
#define IEEE802154_HW_AFILT 0x00000020
/* Indicates that transceiver will support promiscuous mode setting. */
#define IEEE802154_HW_PROMISCUOUS 0x00000040
/* Indicates that receiver omits FCS. */
#define IEEE802154_HW_RX_OMIT_CKSUM 0x00000080
/* Indicates that receiver will not filter frames with bad checksum. */
#define IEEE802154_HW_RX_DROP_BAD_CKSUM 0x00000100
enum ieee802154_hw_flags {
IEEE802154_HW_TX_OMIT_CKSUM = BIT(0),
IEEE802154_HW_LBT = BIT(1),
IEEE802154_HW_CSMA_PARAMS = BIT(2),
IEEE802154_HW_FRAME_RETRIES = BIT(3),
IEEE802154_HW_AFILT = BIT(4),
IEEE802154_HW_PROMISCUOUS = BIT(5),
IEEE802154_HW_RX_OMIT_CKSUM = BIT(6),
IEEE802154_HW_RX_DROP_BAD_CKSUM = BIT(7),
};
/* Indicates that receiver omits FCS and xmitter will add FCS on it's own. */
#define IEEE802154_HW_OMIT_CKSUM (IEEE802154_HW_TX_OMIT_CKSUM | \

View File

@@ -102,6 +102,8 @@ enum nl802154_attrs {
NL802154_ATTR_WPAN_PHY_CAPS,
NL802154_ATTR_SUPPORTED_COMMANDS,
/* add attributes here, update the policy in nl802154.c */
__NL802154_ATTR_AFTER_LAST,
@@ -185,7 +187,7 @@ enum nl802154_wpan_phy_capability_attr {
* @NL802154_CCA_ENERGY_CARRIER: Carrier sense with energy above threshold
* @NL802154_CCA_ALOHA: CCA shall always report an idle medium
* @NL802154_CCA_UWB_SHR: UWB preamble sense based on the SHR of a frame
* @NL802154_CCA_UWB_MULTIPEXED: UWB preamble sense based on the packet with
* @NL802154_CCA_UWB_MULTIPLEXED: UWB preamble sense based on the packet with
* the multiplexed preamble
* @__NL802154_CCA_ATTR_AFTER_LAST: Internal
* @NL802154_CCA_ATTR_MAX: Maximum CCA attribute number
@@ -197,7 +199,7 @@ enum nl802154_cca_modes {
NL802154_CCA_ENERGY_CARRIER,
NL802154_CCA_ALOHA,
NL802154_CCA_UWB_SHR,
NL802154_CCA_UWB_MULTIPEXED,
NL802154_CCA_UWB_MULTIPLEXED,
/* keep last */
__NL802154_CCA_ATTR_AFTER_LAST,