From f6adcd7dd6d71063f7653860cedfacddff5ac4b0 Mon Sep 17 00:00:00 2001 From: Harald Welte Date: Mon, 1 May 2017 00:19:13 +0200 Subject: [PATCH] sercomm: make rx msg size configurable per instance Change-Id: I835506e26e83232e1e7290c0da04d389c8d7fb40 --- include/osmocom/core/sercomm.h | 1 + src/sercomm.c | 10 ++++++---- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/include/osmocom/core/sercomm.h b/include/osmocom/core/sercomm.h index 10deb7cc9..d84786e18 100644 --- a/include/osmocom/core/sercomm.h +++ b/include/osmocom/core/sercomm.h @@ -39,6 +39,7 @@ struct osmo_sercomm_inst { /* receive side */ struct { dlci_cb_t dlci_handler[_SC_DLCI_MAX]; + unsigned int msg_size; struct msgb *msg; int state; uint8_t dlci; diff --git a/src/sercomm.c b/src/sercomm.c index b0ba4928a..f96be83f2 100644 --- a/src/sercomm.c +++ b/src/sercomm.c @@ -28,7 +28,7 @@ #ifdef HOST_BUILD -# define SERCOMM_RX_MSG_SIZE 2048 +# define DEFAULT_RX_MSG_SIZE 2048 # ifndef ARRAY_SIZE # define ARRAY_SIZE(x) (sizeof(x)/sizeof(x[0])) # endif @@ -39,7 +39,7 @@ static inline void sercomm_unlock(unsigned long __attribute__((unused)) *flags) #else -# define SERCOMM_RX_MSG_SIZE 256 +# define DEFAULT_RX_MSG_SIZE 256 # include # include # include @@ -87,6 +87,8 @@ void osmo_sercomm_init(struct osmo_sercomm_inst *sercomm) INIT_LLIST_HEAD(&sercomm->tx.dlci_queues[i]); sercomm->rx.msg = NULL; + if (!sercomm->rx.msg_size) + sercomm->rx.msg_size = DEFAULT_RX_MSG_SIZE; sercomm->initialized = 1; /* set up the echo dlci */ @@ -262,12 +264,12 @@ int osmo_sercomm_drv_rx_char(struct osmo_sercomm_inst *sercomm, uint8_t ch) * which means that any data structures we use need to be for * our exclusive access */ if (!sercomm->rx.msg) - sercomm->rx.msg = osmo_sercomm_alloc_msgb(SERCOMM_RX_MSG_SIZE); + sercomm->rx.msg = osmo_sercomm_alloc_msgb(sercomm->rx.msg_size); if (msgb_tailroom(sercomm->rx.msg) == 0) { //cons_puts("sercomm_drv_rx_char() overflow!\n"); msgb_free(sercomm->rx.msg); - sercomm->rx.msg = osmo_sercomm_alloc_msgb(SERCOMM_RX_MSG_SIZE); + sercomm->rx.msg = osmo_sercomm_alloc_msgb(sercomm->rx.msg_size); sercomm->rx.state = RX_ST_WAIT_START; return 0; }