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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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 | \
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user