Skip to content
Permalink
Browse files

Bluetooth: L2CAP: Make use of Z_STRUCT_SECTION_ITERABLE

This makes use of Z_STRUCT_SECTION_ITERABLE to define fixed channel
sections.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
  • Loading branch information...
Vudentz authored and jhedberg committed Jul 1, 2019
1 parent 8b9920f commit 4e8ddfd640f95297af815b8af0bee814f0e33f2f
@@ -78,17 +78,17 @@

SECTION_DATA_PROLOGUE(_bt_channels_area,,SUBALIGN(4))
{
_bt_channels_start = .;
KEEP(*(SORT_BY_NAME("._bt_channels.static.*")))
_bt_channels_end = .;
_bt_l2cap_fixed_chan_list_start = .;
KEEP(*(SORT_BY_NAME("._bt_l2cap_fixed_chan.static.*")))
_bt_l2cap_fixed_chan_list_end = .;
} GROUP_LINK_IN(ROMABLE_REGION)

#if defined(CONFIG_BT_BREDR)
SECTION_DATA_PROLOGUE(_bt_br_channels_area,,SUBALIGN(4))
{
_bt_br_channels_start = .;
KEEP(*(SORT_BY_NAME("._bt_br_channels.static.*")))
_bt_br_channels_end = .;
_bt_l2cap_br_fixed_chan_list_start = .;
KEEP(*(SORT_BY_NAME("._bt_l2cap_br_fixed_chan.static.*")))
_bt_l2cap_br_fixed_chan_list_end = .;
} GROUP_LINK_IN(ROMABLE_REGION)
#endif

@@ -50,10 +50,6 @@
#define L2CAP_CONN_TIMEOUT K_SECONDS(40)
#define L2CAP_DISC_TIMEOUT K_SECONDS(2)

/* Linker-defined symbols bound to the bt_l2cap_fixed_chan structs */
extern const struct bt_l2cap_fixed_chan _bt_channels_start[];
extern const struct bt_l2cap_fixed_chan _bt_channels_end[];

#if defined(CONFIG_BT_L2CAP_DYNAMIC_CHANNEL)
/* Size of MTU is based on the maximum amount of data the buffer can hold
* excluding ACL and driver headers.
@@ -323,7 +319,6 @@ static bool l2cap_chan_add(struct bt_conn *conn, struct bt_l2cap_chan *chan,

void bt_l2cap_connected(struct bt_conn *conn)
{
const struct bt_l2cap_fixed_chan *fchan;
struct bt_l2cap_chan *chan;

if (IS_ENABLED(CONFIG_BT_BREDR) &&
@@ -332,7 +327,7 @@ void bt_l2cap_connected(struct bt_conn *conn)
return;
}

for (fchan = _bt_channels_start; fchan < _bt_channels_end; fchan++) {
Z_STRUCT_SECTION_FOREACH(bt_l2cap_fixed_chan, fchan) {
struct bt_l2cap_le_chan *ch;

if (fchan->accept(conn, &chan) < 0) {
@@ -79,9 +79,6 @@ enum {

static sys_slist_t br_servers;

/* Linker-defined symbols bound to the bt_l2cap_fixed_chan structs */
extern const struct bt_l2cap_fixed_chan _bt_br_channels_start[];
extern const struct bt_l2cap_fixed_chan _bt_br_channels_end[];

/* Pool for outgoing BR/EDR signaling packets, min MTU is 48 */
NET_BUF_POOL_DEFINE(br_sig_pool, CONFIG_BT_MAX_CONN,
@@ -386,12 +383,10 @@ static int l2cap_br_info_rsp(struct bt_l2cap_br *l2cap, u8_t ident,

static u8_t get_fixed_channels_mask(void)
{
const struct bt_l2cap_fixed_chan *fchan;
u8_t mask = 0U;

/* this needs to be enhanced if AMP Test Manager support is added */
for (fchan = _bt_br_channels_start; fchan < _bt_br_channels_end;
fchan++) {
Z_STRUCT_SECTION_FOREACH(bt_l2cap_br_fixed_chan, fchan) {
mask |= BIT(fchan->cid);
}

@@ -454,11 +449,9 @@ static int l2cap_br_info_req(struct bt_l2cap_br *l2cap, u8_t ident,

void bt_l2cap_br_connected(struct bt_conn *conn)
{
const struct bt_l2cap_fixed_chan *fchan;
struct bt_l2cap_chan *chan;

for (fchan = _bt_br_channels_start; fchan < _bt_br_channels_end;
fchan++) {
Z_STRUCT_SECTION_FOREACH(bt_l2cap_br_fixed_chan, fchan) {
struct bt_l2cap_br_chan *ch;

if (!fchan->accept) {
@@ -1550,7 +1543,7 @@ static int l2cap_br_accept(struct bt_conn *conn, struct bt_l2cap_chan **chan)
return -ENOMEM;
}

BT_L2CAP_CHANNEL_DEFINE(br_fixed_chan, BT_L2CAP_CID_BR_SIG, l2cap_br_accept);
BT_L2CAP_BR_CHANNEL_DEFINE(br_fixed_chan, BT_L2CAP_CID_BR_SIG, l2cap_br_accept);

void bt_l2cap_br_init(void)
{
@@ -205,8 +205,16 @@ struct bt_l2cap_fixed_chan {
};

#define BT_L2CAP_CHANNEL_DEFINE(_name, _cid, _accept) \
const struct bt_l2cap_fixed_chan _name __aligned(4) \
__in_section(_bt_channels, static, _name) = { \
const Z_STRUCT_SECTION_ITERABLE(bt_l2cap_fixed_chan, _name) = { \
.cid = _cid, \
.accept = _accept, \
}

/* Need a different name for the sections not to conflict */
#define bt_l2cap_br_fixed_chan bt_l2cap_fixed_chan

#define BT_L2CAP_BR_CHANNEL_DEFINE(_name, _cid, _accept) \
const Z_STRUCT_SECTION_ITERABLE(bt_l2cap_br_fixed_chan, _name) = { \
.cid = _cid, \
.accept = _accept, \
}

0 comments on commit 4e8ddfd

Please sign in to comment.
You can’t perform that action at this time.