Bluetooth: Move HCI request internals to net/bluetooth/hci_core.c
The internals of the HCI request framework should not be leaking to its users. Move them all into net/bluetooth/hci_core.c and provide a simple hci_req_pending helper function for the one user outside the framework. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
863def58fe
commit
899de76566
|
@ -1240,6 +1240,7 @@ void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
|
||||||
void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
|
void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
|
||||||
const void *param, u8 event);
|
const void *param, u8 event);
|
||||||
void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
|
void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
|
||||||
|
bool hci_req_pending(struct hci_dev *hdev);
|
||||||
|
|
||||||
void hci_req_add_le_scan_disable(struct hci_request *req);
|
void hci_req_add_le_scan_disable(struct hci_request *req);
|
||||||
void hci_req_add_le_passive_scan(struct hci_request *req);
|
void hci_req_add_le_passive_scan(struct hci_request *req);
|
||||||
|
@ -1349,14 +1350,6 @@ void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
|
||||||
void mgmt_reenable_advertising(struct hci_dev *hdev);
|
void mgmt_reenable_advertising(struct hci_dev *hdev);
|
||||||
void mgmt_smp_complete(struct hci_conn *conn, bool complete);
|
void mgmt_smp_complete(struct hci_conn *conn, bool complete);
|
||||||
|
|
||||||
/* ----- HCI requests ----- */
|
|
||||||
#define HCI_REQ_DONE 0
|
|
||||||
#define HCI_REQ_PEND 1
|
|
||||||
#define HCI_REQ_CANCELED 2
|
|
||||||
|
|
||||||
#define hci_req_lock(d) mutex_lock(&d->req_lock)
|
|
||||||
#define hci_req_unlock(d) mutex_unlock(&d->req_lock)
|
|
||||||
|
|
||||||
u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
|
u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
|
||||||
u16 to_multiplier);
|
u16 to_multiplier);
|
||||||
void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
|
void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
|
||||||
|
|
|
@ -54,6 +54,15 @@ DEFINE_RWLOCK(hci_cb_list_lock);
|
||||||
/* HCI ID Numbering */
|
/* HCI ID Numbering */
|
||||||
static DEFINE_IDA(hci_index_ida);
|
static DEFINE_IDA(hci_index_ida);
|
||||||
|
|
||||||
|
/* ----- HCI requests ----- */
|
||||||
|
|
||||||
|
#define HCI_REQ_DONE 0
|
||||||
|
#define HCI_REQ_PEND 1
|
||||||
|
#define HCI_REQ_CANCELED 2
|
||||||
|
|
||||||
|
#define hci_req_lock(d) mutex_lock(&d->req_lock)
|
||||||
|
#define hci_req_unlock(d) mutex_unlock(&d->req_lock)
|
||||||
|
|
||||||
/* ---- HCI notifications ---- */
|
/* ---- HCI notifications ---- */
|
||||||
|
|
||||||
static void hci_notify(struct hci_dev *hdev, int event)
|
static void hci_notify(struct hci_dev *hdev, int event)
|
||||||
|
@ -4432,6 +4441,11 @@ int hci_req_run(struct hci_request *req, hci_req_complete_t complete)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool hci_req_pending(struct hci_dev *hdev)
|
||||||
|
{
|
||||||
|
return (hdev->req_status == HCI_REQ_PEND);
|
||||||
|
}
|
||||||
|
|
||||||
static struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode,
|
static struct sk_buff *hci_prepare_cmd(struct hci_dev *hdev, u16 opcode,
|
||||||
u32 plen, const void *param)
|
u32 plen, const void *param)
|
||||||
{
|
{
|
||||||
|
|
|
@ -4624,7 +4624,7 @@ void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
|
||||||
/* Received events are (currently) only needed when a request is
|
/* Received events are (currently) only needed when a request is
|
||||||
* ongoing so avoid unnecessary memory allocation.
|
* ongoing so avoid unnecessary memory allocation.
|
||||||
*/
|
*/
|
||||||
if (hdev->req_status == HCI_REQ_PEND) {
|
if (hci_req_pending(hdev)) {
|
||||||
kfree_skb(hdev->recv_evt);
|
kfree_skb(hdev->recv_evt);
|
||||||
hdev->recv_evt = skb_clone(skb, GFP_KERNEL);
|
hdev->recv_evt = skb_clone(skb, GFP_KERNEL);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue