Bluetooth: Refactor bt_dev struct
Groups LE stack specific values. Change-Id: Ia947d25c105f518287293b4f870466daa416385c Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
This commit is contained in:
parent
20d946efa8
commit
99bd06deaa
3 changed files with 36 additions and 30 deletions
|
@ -327,7 +327,7 @@ void bt_conn_send(struct bt_conn *conn, struct net_buf *buf)
|
|||
|
||||
nano_fifo_init(&frags);
|
||||
|
||||
len = min(remaining, bt_dev.le_mtu);
|
||||
len = min(remaining, bt_dev.le.mtu);
|
||||
|
||||
hdr = net_buf_push(buf, sizeof(*hdr));
|
||||
hdr->handle = sys_cpu_to_le16(bt_acl_handle_pack(conn->handle,
|
||||
|
@ -343,7 +343,7 @@ void bt_conn_send(struct bt_conn *conn, struct net_buf *buf)
|
|||
while (remaining) {
|
||||
buf = bt_l2cap_create_pdu(conn);
|
||||
|
||||
len = min(remaining, bt_dev.le_mtu);
|
||||
len = min(remaining, bt_dev.le.mtu);
|
||||
|
||||
/* Copy from original buffer */
|
||||
memcpy(net_buf_add(buf, len), ptr, len);
|
||||
|
@ -375,18 +375,18 @@ static void conn_tx_fiber(int arg1, int arg2)
|
|||
|
||||
/* Wait until the controller can accept ACL packets */
|
||||
BT_DBG("calling sem_take_wait\n");
|
||||
nano_fiber_sem_take_wait(&bt_dev.le_pkts_sem);
|
||||
nano_fiber_sem_take_wait(&bt_dev.le.pkts_sem);
|
||||
|
||||
/* check for disconnection */
|
||||
if (conn->state != BT_CONN_CONNECTED) {
|
||||
nano_fiber_sem_give(&bt_dev.le_pkts_sem);
|
||||
nano_fiber_sem_give(&bt_dev.le.pkts_sem);
|
||||
break;
|
||||
}
|
||||
|
||||
/* Get next ACL packet for connection */
|
||||
buf = nano_fifo_get_wait(&conn->tx_queue);
|
||||
if (conn->state != BT_CONN_CONNECTED) {
|
||||
nano_fiber_sem_give(&bt_dev.le_pkts_sem);
|
||||
nano_fiber_sem_give(&bt_dev.le.pkts_sem);
|
||||
net_buf_unref(buf);
|
||||
break;
|
||||
}
|
||||
|
@ -395,7 +395,7 @@ static void conn_tx_fiber(int arg1, int arg2)
|
|||
err = bt_dev.drv->send(BT_ACL_OUT, buf);
|
||||
if (err) {
|
||||
BT_ERR("Unable to send to driver (err %d)\n", err);
|
||||
nano_fiber_sem_give(&bt_dev.le_pkts_sem);
|
||||
nano_fiber_sem_give(&bt_dev.le.pkts_sem);
|
||||
} else {
|
||||
conn->pending_pkts++;
|
||||
}
|
||||
|
@ -413,7 +413,7 @@ static void conn_tx_fiber(int arg1, int arg2)
|
|||
/* Return any unacknowledged packets */
|
||||
if (conn->pending_pkts) {
|
||||
while (conn->pending_pkts--) {
|
||||
nano_fiber_sem_give(&bt_dev.le_pkts_sem);
|
||||
nano_fiber_sem_give(&bt_dev.le.pkts_sem);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -376,7 +376,7 @@ static void hci_num_completed_packets(struct net_buf *buf)
|
|||
bt_conn_unref(conn);
|
||||
|
||||
while (count--) {
|
||||
nano_fiber_sem_give(&bt_dev.le_pkts_sem);
|
||||
nano_fiber_sem_give(&bt_dev.le.pkts_sem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -481,12 +481,12 @@ static int update_conn_params(struct bt_conn *conn)
|
|||
}
|
||||
|
||||
if ((conn->role == BT_HCI_ROLE_SLAVE) &&
|
||||
!(bt_dev.le_features[0] & BT_HCI_LE_CONN_PARAM_REQ_PROC)) {
|
||||
!(bt_dev.le.features[0] & BT_HCI_LE_CONN_PARAM_REQ_PROC)) {
|
||||
return bt_l2cap_update_conn_param(conn);
|
||||
}
|
||||
|
||||
if ((conn->le_features[0] & BT_HCI_LE_CONN_PARAM_REQ_PROC) &&
|
||||
(bt_dev.le_features[0] & BT_HCI_LE_CONN_PARAM_REQ_PROC)) {
|
||||
(bt_dev.le.features[0] & BT_HCI_LE_CONN_PARAM_REQ_PROC)) {
|
||||
return bt_conn_le_conn_update(conn, LE_CONN_MIN_INTERVAL,
|
||||
LE_CONN_MAX_INTERVAL,
|
||||
LE_CONN_LATENCY, LE_CONN_TIMEOUT);
|
||||
|
@ -561,7 +561,7 @@ static void le_conn_complete(struct net_buf *buf)
|
|||
bt_conn_set_state(conn, BT_CONN_CONNECTED);
|
||||
|
||||
if ((evt->role == BT_HCI_ROLE_MASTER) ||
|
||||
(bt_dev.le_features[0] & BT_HCI_LE_SLAVE_FEATURES)) {
|
||||
(bt_dev.le.features[0] & BT_HCI_LE_SLAVE_FEATURES)) {
|
||||
err = hci_le_read_remote_features(conn);
|
||||
if (!err) {
|
||||
goto done;
|
||||
|
@ -1320,7 +1320,7 @@ static void read_le_features_complete(struct net_buf *buf)
|
|||
|
||||
BT_DBG("status %u\n", rp->status);
|
||||
|
||||
memcpy(bt_dev.le_features, rp->features, sizeof(bt_dev.le_features));
|
||||
memcpy(bt_dev.le.features, rp->features, sizeof(bt_dev.le.features));
|
||||
}
|
||||
|
||||
static void read_buffer_size_complete(struct net_buf *buf)
|
||||
|
@ -1330,12 +1330,12 @@ static void read_buffer_size_complete(struct net_buf *buf)
|
|||
BT_DBG("status %u\n", rp->status);
|
||||
|
||||
/* If LE-side has buffers we can ignore the BR/EDR values */
|
||||
if (bt_dev.le_mtu) {
|
||||
if (bt_dev.le.mtu) {
|
||||
return;
|
||||
}
|
||||
|
||||
bt_dev.le_mtu = sys_le16_to_cpu(rp->acl_max_len);
|
||||
bt_dev.le_pkts = sys_le16_to_cpu(rp->acl_max_num);
|
||||
bt_dev.le.mtu = sys_le16_to_cpu(rp->acl_max_len);
|
||||
bt_dev.le.pkts = sys_le16_to_cpu(rp->acl_max_num);
|
||||
}
|
||||
|
||||
static void le_read_buffer_size_complete(struct net_buf *buf)
|
||||
|
@ -1344,8 +1344,8 @@ static void le_read_buffer_size_complete(struct net_buf *buf)
|
|||
|
||||
BT_DBG("status %u\n", rp->status);
|
||||
|
||||
bt_dev.le_mtu = sys_le16_to_cpu(rp->le_max_len);
|
||||
bt_dev.le_pkts = rp->le_max_num;
|
||||
bt_dev.le.mtu = sys_le16_to_cpu(rp->le_max_len);
|
||||
bt_dev.le.pkts = rp->le_max_num;
|
||||
}
|
||||
|
||||
static int common_init(void)
|
||||
|
@ -1455,7 +1455,7 @@ static int br_init(void)
|
|||
}
|
||||
|
||||
/* Use BR/EDR buffer size if LE reports zero buffers */
|
||||
if (!bt_dev.le_mtu) {
|
||||
if (!bt_dev.le.mtu) {
|
||||
err = bt_hci_cmd_send_sync(BT_HCI_OP_READ_BUFFER_SIZE, NULL,
|
||||
&rsp);
|
||||
if (err) {
|
||||
|
@ -1494,7 +1494,7 @@ static int set_event_mask(void)
|
|||
#endif /* CONFIG_BLUETOOTH_CONN */
|
||||
|
||||
#if defined(CONFIG_BLUETOOTH_SMP)
|
||||
if (bt_dev.le_features[0] & BT_HCI_LE_ENCRYPTION) {
|
||||
if (bt_dev.le.features[0] & BT_HCI_LE_ENCRYPTION) {
|
||||
ev->events[0] |= 0x80; /* Encryption Change */
|
||||
ev->events[5] |= 0x80; /* Encryption Key Refresh Complete */
|
||||
}
|
||||
|
@ -1529,14 +1529,14 @@ static int hci_init(void)
|
|||
|
||||
BT_DBG("HCI ver %u rev %u, manufacturer %u\n", bt_dev.hci_version,
|
||||
bt_dev.hci_revision, bt_dev.manufacturer);
|
||||
BT_DBG("ACL buffers: pkts %u mtu %u\n", bt_dev.le_pkts, bt_dev.le_mtu);
|
||||
BT_DBG("ACL buffers: pkts %u mtu %u\n", bt_dev.le.pkts, bt_dev.le.mtu);
|
||||
|
||||
/* Initialize & prime the semaphore for counting controller-side
|
||||
* available ACL packet buffers.
|
||||
*/
|
||||
nano_sem_init(&bt_dev.le_pkts_sem);
|
||||
for (i = 0; i < bt_dev.le_pkts; i++) {
|
||||
nano_sem_give(&bt_dev.le_pkts_sem);
|
||||
nano_sem_init(&bt_dev.le.pkts_sem);
|
||||
for (i = 0; i < bt_dev.le.pkts; i++) {
|
||||
nano_sem_give(&bt_dev.le.pkts_sem);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -46,6 +46,16 @@ enum {
|
|||
BT_DEV_SCAN_FILTER_DUP,
|
||||
};
|
||||
|
||||
struct bt_dev_le {
|
||||
/* LE features */
|
||||
uint8_t features[8];
|
||||
|
||||
/* Controller buffer information */
|
||||
uint8_t pkts;
|
||||
uint16_t mtu;
|
||||
struct nano_sem pkts_sem;
|
||||
};
|
||||
|
||||
/* State tracking for the local Bluetooth controller */
|
||||
struct bt_dev {
|
||||
/* Local Bluetooth Device Address */
|
||||
|
@ -59,15 +69,11 @@ struct bt_dev {
|
|||
/* BR/EDR features page 0 */
|
||||
uint8_t features[8];
|
||||
|
||||
/* LE features */
|
||||
uint8_t le_features[8];
|
||||
|
||||
/* Current state of controller activity */
|
||||
atomic_t flags[1];
|
||||
|
||||
/* Controller buffer information */
|
||||
uint8_t le_pkts;
|
||||
uint16_t le_mtu;
|
||||
struct nano_sem le_pkts_sem;
|
||||
/* LE controller specific features */
|
||||
struct bt_dev_le le;
|
||||
|
||||
/* Number of commands controller can accept */
|
||||
uint8_t ncmd;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue