Bluetooth: controller: Fix endianness for length update.
Fix endianness when accessing length update parameters in PDU. Signed-off-by: Wolfgang Puffitsch <wopu@demant.com>
This commit is contained in:
parent
3f894250ef
commit
e8e668ae9c
1 changed files with 62 additions and 39 deletions
|
@ -2786,14 +2786,19 @@ static inline void event_len_prep(struct ll_conn *conn)
|
||||||
pdu_ctrl_tx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_REQ;
|
pdu_ctrl_tx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_REQ;
|
||||||
|
|
||||||
lr = &pdu_ctrl_tx->llctrl.length_req;
|
lr = &pdu_ctrl_tx->llctrl.length_req;
|
||||||
lr->max_rx_octets = LL_LENGTH_OCTETS_RX_MAX;
|
lr->max_rx_octets = sys_cpu_to_le16(LL_LENGTH_OCTETS_RX_MAX);
|
||||||
lr->max_tx_octets = conn->default_tx_octets;
|
lr->max_tx_octets = sys_cpu_to_le16(conn->default_tx_octets);
|
||||||
#if !defined(CONFIG_BT_CTLR_PHY)
|
#if !defined(CONFIG_BT_CTLR_PHY)
|
||||||
lr->max_rx_time = PKT_US(LL_LENGTH_OCTETS_RX_MAX, 0);
|
lr->max_rx_time =
|
||||||
lr->max_tx_time = PKT_US(conn->default_tx_octets, 0);
|
sys_cpu_to_le16(PKT_US(LL_LENGTH_OCTETS_RX_MAX, 0));
|
||||||
|
lr->max_tx_time =
|
||||||
|
sys_cpu_to_le16(PKT_US(conn->default_tx_octets, 0));
|
||||||
#else /* CONFIG_BT_CTLR_PHY */
|
#else /* CONFIG_BT_CTLR_PHY */
|
||||||
lr->max_rx_time = PKT_US(LL_LENGTH_OCTETS_RX_MAX, BIT(2));
|
lr->max_rx_time =
|
||||||
lr->max_tx_time = conn->default_tx_time;
|
sys_cpu_to_le16(PKT_US(LL_LENGTH_OCTETS_RX_MAX,
|
||||||
|
BIT(2)));
|
||||||
|
lr->max_tx_time =
|
||||||
|
sys_cpu_to_le16(conn->default_tx_time);
|
||||||
#endif /* CONFIG_BT_CTLR_PHY */
|
#endif /* CONFIG_BT_CTLR_PHY */
|
||||||
|
|
||||||
ctrl_tx_enqueue(conn, tx);
|
ctrl_tx_enqueue(conn, tx);
|
||||||
|
@ -2844,14 +2849,16 @@ static inline void event_len_prep(struct ll_conn *conn)
|
||||||
pdu_ctrl_rx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_RSP;
|
pdu_ctrl_rx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_RSP;
|
||||||
|
|
||||||
lr = &pdu_ctrl_rx->llctrl.length_rsp;
|
lr = &pdu_ctrl_rx->llctrl.length_rsp;
|
||||||
lr->max_rx_octets = lll->max_rx_octets;
|
lr->max_rx_octets = sys_cpu_to_le16(lll->max_rx_octets);
|
||||||
lr->max_tx_octets = lll->max_tx_octets;
|
lr->max_tx_octets = sys_cpu_to_le16(lll->max_tx_octets);
|
||||||
#if !defined(CONFIG_BT_CTLR_PHY)
|
#if !defined(CONFIG_BT_CTLR_PHY)
|
||||||
lr->max_rx_time = PKT_US(lll->max_rx_octets, 0);
|
lr->max_rx_time =
|
||||||
lr->max_tx_time = PKT_US(lll->max_tx_octets, 0);
|
sys_cpu_to_le16(PKT_US(lll->max_rx_octets, 0));
|
||||||
|
lr->max_tx_time =
|
||||||
|
sys_cpu_to_le16(PKT_US(lll->max_tx_octets, 0));
|
||||||
#else /* CONFIG_BT_CTLR_PHY */
|
#else /* CONFIG_BT_CTLR_PHY */
|
||||||
lr->max_rx_time = lll->max_rx_time;
|
lr->max_rx_time = sys_cpu_to_le16(lll->max_rx_time);
|
||||||
lr->max_tx_time = lll->max_tx_time;
|
lr->max_tx_time = sys_cpu_to_le16(lll->max_tx_time);
|
||||||
#endif /* CONFIG_BT_CTLR_PHY */
|
#endif /* CONFIG_BT_CTLR_PHY */
|
||||||
|
|
||||||
/* enqueue rx node towards Thread */
|
/* enqueue rx node towards Thread */
|
||||||
|
@ -3717,14 +3724,16 @@ static inline void reject_ind_dle_recv(struct ll_conn *conn,
|
||||||
pdu_rx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_RSP;
|
pdu_rx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_RSP;
|
||||||
|
|
||||||
lr = (void *)&pdu_rx->llctrl.length_req;
|
lr = (void *)&pdu_rx->llctrl.length_req;
|
||||||
lr->max_rx_octets = conn->lll.max_rx_octets;
|
lr->max_rx_octets = sys_cpu_to_le16(conn->lll.max_rx_octets);
|
||||||
lr->max_tx_octets = conn->lll.max_tx_octets;
|
lr->max_tx_octets = sys_cpu_to_le16(conn->lll.max_tx_octets);
|
||||||
#if !defined(CONFIG_BT_CTLR_PHY)
|
#if !defined(CONFIG_BT_CTLR_PHY)
|
||||||
lr->max_rx_time = PKT_US(conn->lll.max_rx_octets, 0);
|
lr->max_rx_time =
|
||||||
lr->max_tx_time = PKT_US(conn->lll.max_tx_octets, 0);
|
sys_cpu_to_le16(PKT_US(conn->lll.max_rx_octets, 0));
|
||||||
|
lr->max_tx_time =
|
||||||
|
sys_cpu_to_le16(PKT_US(conn->lll.max_tx_octets, 0));
|
||||||
#else /* CONFIG_BT_CTLR_PHY */
|
#else /* CONFIG_BT_CTLR_PHY */
|
||||||
lr->max_rx_time = conn->lll.max_rx_time;
|
lr->max_rx_time = sys_cpu_to_le16(conn->lll.max_rx_time);
|
||||||
lr->max_tx_time = conn->lll.max_tx_time;
|
lr->max_tx_time = sys_cpu_to_le16(conn->lll.max_tx_time);
|
||||||
#endif /* CONFIG_BT_CTLR_PHY */
|
#endif /* CONFIG_BT_CTLR_PHY */
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -3854,15 +3863,19 @@ static void length_resp_send(struct ll_conn *conn, struct node_tx *tx,
|
||||||
pdu_tx->len = offsetof(struct pdu_data_llctrl, length_rsp) +
|
pdu_tx->len = offsetof(struct pdu_data_llctrl, length_rsp) +
|
||||||
sizeof(struct pdu_data_llctrl_length_rsp);
|
sizeof(struct pdu_data_llctrl_length_rsp);
|
||||||
pdu_tx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_RSP;
|
pdu_tx->llctrl.opcode = PDU_DATA_LLCTRL_TYPE_LENGTH_RSP;
|
||||||
pdu_tx->llctrl.length_rsp.max_rx_octets = eff_rx_octets;
|
pdu_tx->llctrl.length_rsp.max_rx_octets =
|
||||||
pdu_tx->llctrl.length_rsp.max_tx_octets = eff_tx_octets;
|
sys_cpu_to_le16(eff_rx_octets);
|
||||||
|
pdu_tx->llctrl.length_rsp.max_tx_octets =
|
||||||
|
sys_cpu_to_le16(eff_tx_octets);
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_CTLR_PHY)
|
#if !defined(CONFIG_BT_CTLR_PHY)
|
||||||
pdu_tx->llctrl.length_rsp.max_rx_time = PKT_US(eff_rx_octets, 0);
|
pdu_tx->llctrl.length_rsp.max_rx_time =
|
||||||
pdu_tx->llctrl.length_rsp.max_tx_time = PKT_US(eff_tx_octets, 0);
|
sys_cpu_to_le16(PKT_US(eff_rx_octets, 0));
|
||||||
|
pdu_tx->llctrl.length_rsp.max_tx_time =
|
||||||
|
sys_cpu_to_le16(PKT_US(eff_tx_octets, 0));
|
||||||
#else /* CONFIG_BT_CTLR_PHY */
|
#else /* CONFIG_BT_CTLR_PHY */
|
||||||
pdu_tx->llctrl.length_rsp.max_rx_time = eff_rx_time;
|
pdu_tx->llctrl.length_rsp.max_rx_time = sys_cpu_to_le16(eff_rx_time);
|
||||||
pdu_tx->llctrl.length_rsp.max_tx_time = eff_tx_time;
|
pdu_tx->llctrl.length_rsp.max_tx_time = sys_cpu_to_le16(eff_tx_time);
|
||||||
#endif /* CONFIG_BT_CTLR_PHY */
|
#endif /* CONFIG_BT_CTLR_PHY */
|
||||||
|
|
||||||
ctrl_tx_enqueue(conn, tx);
|
ctrl_tx_enqueue(conn, tx);
|
||||||
|
@ -3920,22 +3933,28 @@ static inline int length_req_rsp_recv(struct ll_conn *conn, memq_link_t *link,
|
||||||
(pdu_rx->llctrl.opcode ==
|
(pdu_rx->llctrl.opcode ==
|
||||||
PDU_DATA_LLCTRL_TYPE_LENGTH_REQ)))))) {
|
PDU_DATA_LLCTRL_TYPE_LENGTH_REQ)))))) {
|
||||||
struct pdu_data_llctrl_length_req *lr;
|
struct pdu_data_llctrl_length_req *lr;
|
||||||
|
u16_t max_rx_octets;
|
||||||
|
u16_t max_tx_octets;
|
||||||
|
u16_t max_rx_time;
|
||||||
|
u16_t max_tx_time;
|
||||||
|
|
||||||
lr = &pdu_rx->llctrl.length_req;
|
lr = &pdu_rx->llctrl.length_req;
|
||||||
|
|
||||||
/* use the minimal of our default_tx_octets and
|
/* use the minimal of our default_tx_octets and
|
||||||
* peer max_rx_octets
|
* peer max_rx_octets
|
||||||
*/
|
*/
|
||||||
if (lr->max_rx_octets >= PDU_DC_PAYLOAD_SIZE_MIN) {
|
max_rx_octets = sys_le16_to_cpu(lr->max_rx_octets);
|
||||||
eff_tx_octets = MIN(lr->max_rx_octets,
|
if (max_rx_octets >= PDU_DC_PAYLOAD_SIZE_MIN) {
|
||||||
|
eff_tx_octets = MIN(max_rx_octets,
|
||||||
conn->default_tx_octets);
|
conn->default_tx_octets);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* use the minimal of our max supported and
|
/* use the minimal of our max supported and
|
||||||
* peer max_tx_octets
|
* peer max_tx_octets
|
||||||
*/
|
*/
|
||||||
if (lr->max_tx_octets >= PDU_DC_PAYLOAD_SIZE_MIN) {
|
max_tx_octets = sys_le16_to_cpu(lr->max_tx_octets);
|
||||||
eff_rx_octets = MIN(lr->max_tx_octets,
|
if (max_tx_octets >= PDU_DC_PAYLOAD_SIZE_MIN) {
|
||||||
|
eff_rx_octets = MIN(max_tx_octets,
|
||||||
LL_LENGTH_OCTETS_RX_MAX);
|
LL_LENGTH_OCTETS_RX_MAX);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3943,8 +3962,9 @@ static inline int length_req_rsp_recv(struct ll_conn *conn, memq_link_t *link,
|
||||||
/* use the minimal of our default_tx_time and
|
/* use the minimal of our default_tx_time and
|
||||||
* peer max_rx_time
|
* peer max_rx_time
|
||||||
*/
|
*/
|
||||||
if (lr->max_rx_time >= PKT_US(PDU_DC_PAYLOAD_SIZE_MIN, 0)) {
|
max_rx_time = sys_le16_to_cpu(lr->max_rx_time);
|
||||||
eff_tx_time = MIN(lr->max_rx_time,
|
if (max_rx_time >= PKT_US(PDU_DC_PAYLOAD_SIZE_MIN, 0)) {
|
||||||
|
eff_tx_time = MIN(max_rx_time,
|
||||||
conn->default_tx_time);
|
conn->default_tx_time);
|
||||||
#if defined(CONFIG_BT_CTLR_PHY_CODED)
|
#if defined(CONFIG_BT_CTLR_PHY_CODED)
|
||||||
eff_tx_time = MAX(eff_tx_time,
|
eff_tx_time = MAX(eff_tx_time,
|
||||||
|
@ -3956,16 +3976,17 @@ static inline int length_req_rsp_recv(struct ll_conn *conn, memq_link_t *link,
|
||||||
/* use the minimal of our max supported and
|
/* use the minimal of our max supported and
|
||||||
* peer max_tx_time
|
* peer max_tx_time
|
||||||
*/
|
*/
|
||||||
if (lr->max_tx_time >= PKT_US(PDU_DC_PAYLOAD_SIZE_MIN, 0)) {
|
max_tx_time = sys_le16_to_cpu(lr->max_tx_time);
|
||||||
|
if (max_tx_time >= PKT_US(PDU_DC_PAYLOAD_SIZE_MIN, 0)) {
|
||||||
#if defined(CONFIG_BT_CTLR_PHY_CODED)
|
#if defined(CONFIG_BT_CTLR_PHY_CODED)
|
||||||
eff_rx_time = MIN(lr->max_tx_time,
|
eff_rx_time = MIN(max_tx_time,
|
||||||
PKT_US(LL_LENGTH_OCTETS_RX_MAX,
|
PKT_US(LL_LENGTH_OCTETS_RX_MAX,
|
||||||
BIT(2)));
|
BIT(2)));
|
||||||
eff_rx_time = MAX(eff_rx_time,
|
eff_rx_time = MAX(eff_rx_time,
|
||||||
PKT_US(PDU_DC_PAYLOAD_SIZE_MIN,
|
PKT_US(PDU_DC_PAYLOAD_SIZE_MIN,
|
||||||
conn->lll.phy_rx));
|
conn->lll.phy_rx));
|
||||||
#else /* !CONFIG_BT_CTLR_PHY_CODED */
|
#else /* !CONFIG_BT_CTLR_PHY_CODED */
|
||||||
eff_rx_time = MIN(lr->max_tx_time,
|
eff_rx_time = MIN(max_tx_time,
|
||||||
PKT_US(LL_LENGTH_OCTETS_RX_MAX, 0));
|
PKT_US(LL_LENGTH_OCTETS_RX_MAX, 0));
|
||||||
#endif /* !CONFIG_BT_CTLR_PHY_CODED */
|
#endif /* !CONFIG_BT_CTLR_PHY_CODED */
|
||||||
}
|
}
|
||||||
|
@ -4036,15 +4057,17 @@ static inline int length_req_rsp_recv(struct ll_conn *conn, memq_link_t *link,
|
||||||
#endif /* CONFIG_BT_CTLR_PHY */
|
#endif /* CONFIG_BT_CTLR_PHY */
|
||||||
|
|
||||||
/* prepare event params */
|
/* prepare event params */
|
||||||
lr->max_rx_octets = eff_rx_octets;
|
lr->max_rx_octets = sys_cpu_to_le16(eff_rx_octets);
|
||||||
lr->max_tx_octets = eff_tx_octets;
|
lr->max_tx_octets = sys_cpu_to_le16(eff_tx_octets);
|
||||||
|
|
||||||
#if !defined(CONFIG_BT_CTLR_PHY)
|
#if !defined(CONFIG_BT_CTLR_PHY)
|
||||||
lr->max_rx_time = PKT_US(eff_rx_octets, 0);
|
lr->max_rx_time =
|
||||||
lr->max_tx_time = PKT_US(eff_tx_octets, 0);
|
sys_cpu_to_le16(PKT_US(eff_rx_octets, 0));
|
||||||
|
lr->max_tx_time =
|
||||||
|
sys_cpu_to_le16(PKT_US(eff_tx_octets, 0));
|
||||||
#else /* CONFIG_BT_CTLR_PHY */
|
#else /* CONFIG_BT_CTLR_PHY */
|
||||||
lr->max_rx_time = eff_rx_time;
|
lr->max_rx_time = sys_cpu_to_le16(eff_rx_time);
|
||||||
lr->max_tx_time = eff_tx_time;
|
lr->max_tx_time = sys_cpu_to_le16(eff_tx_time);
|
||||||
#endif /* CONFIG_BT_CTLR_PHY */
|
#endif /* CONFIG_BT_CTLR_PHY */
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue