Return-Path: MIME-Version: 1.0 In-Reply-To: <000001cac51b$9563e060$c02ba120$@org> References: <1268699189-2910-1-git-send-email-gustavo@padovan.org> <000001cac51b$9563e060$c02ba120$@org> Date: Tue, 16 Mar 2010 12:30:20 -0300 Message-ID: <6b53b1991003160830s72c84d97m28900de9cbb1302c@mail.gmail.com> Subject: Re: [PATCH 1/4] Bluetooth: Add sockopt configuration for txWindow on L2CAP From: "Gustavo F. Padovan" To: Mat Martineau Cc: linux-bluetooth@vger.kernel.org Content-Type: text/plain; charset=ISO-8859-1 Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Hi Mat, On Tue, Mar 16, 2010 at 12:15 PM, Mat Martineau wrote: > Gustavo - > >> -----Original Message----- >> From: linux-bluetooth-owner@vger.kernel.org [mailto:linux-bluetooth- >> owner@vger.kernel.org] On Behalf Of Gustavo F. Padovan >> Sent: Monday, March 15, 2010 5:26 PM >> To: linux-bluetooth@vger.kernel.org >> Cc: marcel@holtmann.org; gustavo@padovan.org >> Subject: [PATCH 1/4] Bluetooth: Add sockopt configuration for txWindow >> on L2CAP >> >> Now can set/get Transmission Window size via sockopt. > > It would be better to use __u16 for the Tx Window size, so we can use > extended window sizes in the future. ?This is important for AMP, where the > amount of data in-flight can be large enough for the extended Tx Window to > matter. It's better to update it to __u16 when we actually implement the Extended Tx Window. > >> >> Signed-off-by: Gustavo F. Padovan >> --- >> ?include/net/bluetooth/l2cap.h | ? ?2 ++ >> ?net/bluetooth/l2cap.c ? ? ? ? | ? ?7 ++++++- >> ?2 files changed, 8 insertions(+), 1 deletions(-) >> >> diff --git a/include/net/bluetooth/l2cap.h >> b/include/net/bluetooth/l2cap.h >> index 48f10f4..c7bf676 100644 >> --- a/include/net/bluetooth/l2cap.h >> +++ b/include/net/bluetooth/l2cap.h >> @@ -56,6 +56,7 @@ struct l2cap_options { >> ? ? ? __u16 flush_to; >> ? ? ? __u8 ?mode; >> ? ? ? __u8 ?fcs; >> + ? ? __u8 ?txwin_size; >> ?}; >> >> ?#define L2CAP_CONNINFO ? ? ? 0x02 >> @@ -339,6 +340,7 @@ struct l2cap_pinfo { >> >> ? ? ? __u8 ? ? ? ? ? ?ident; >> >> + ? ? __u8 ? ? ? ? ? ?tx_win; >> ? ? ? __u8 ? ? ? ? ? ?remote_tx_win; >> ? ? ? __u8 ? ? ? ? ? ?remote_max_tx; >> ? ? ? __u16 ? ? ? ? ? retrans_timeout; >> diff --git a/net/bluetooth/l2cap.c b/net/bluetooth/l2cap.c >> index 930f987..6679418 100644 >> --- a/net/bluetooth/l2cap.c >> +++ b/net/bluetooth/l2cap.c >> @@ -780,6 +780,7 @@ static void l2cap_sock_init(struct sock *sk, struct >> sock *parent) >> ? ? ? ? ? ? ? pi->omtu = l2cap_pi(parent)->omtu; >> ? ? ? ? ? ? ? pi->mode = l2cap_pi(parent)->mode; >> ? ? ? ? ? ? ? pi->fcs ?= l2cap_pi(parent)->fcs; >> + ? ? ? ? ? ? pi->tx_win = l2cap_pi(parent)->tx_win; >> ? ? ? ? ? ? ? pi->sec_level = l2cap_pi(parent)->sec_level; >> ? ? ? ? ? ? ? pi->role_switch = l2cap_pi(parent)->role_switch; >> ? ? ? ? ? ? ? pi->force_reliable = l2cap_pi(parent)->force_reliable; >> @@ -788,6 +789,7 @@ static void l2cap_sock_init(struct sock *sk, struct >> sock *parent) >> ? ? ? ? ? ? ? pi->omtu = 0; >> ? ? ? ? ? ? ? pi->mode = L2CAP_MODE_BASIC; >> ? ? ? ? ? ? ? pi->fcs ?= L2CAP_FCS_CRC16; >> + ? ? ? ? ? ? pi->tx_win = L2CAP_DEFAULT_TX_WINDOW; >> ? ? ? ? ? ? ? pi->sec_level = BT_SECURITY_LOW; >> ? ? ? ? ? ? ? pi->role_switch = 0; >> ? ? ? ? ? ? ? pi->force_reliable = 0; >> @@ -1776,6 +1778,7 @@ static int l2cap_sock_setsockopt_old(struct >> socket *sock, int optname, char __us >> ? ? ? ? ? ? ? opts.flush_to = l2cap_pi(sk)->flush_to; >> ? ? ? ? ? ? ? opts.mode ? ? = l2cap_pi(sk)->mode; >> ? ? ? ? ? ? ? opts.fcs ? ? ?= l2cap_pi(sk)->fcs; >> + ? ? ? ? ? ? opts.txwin_size = l2cap_pi(sk)->tx_win; >> >> ? ? ? ? ? ? ? len = min_t(unsigned int, sizeof(opts), optlen); >> ? ? ? ? ? ? ? if (copy_from_user((char *) &opts, optval, len)) { >> @@ -1787,6 +1790,7 @@ static int l2cap_sock_setsockopt_old(struct >> socket *sock, int optname, char __us >> ? ? ? ? ? ? ? l2cap_pi(sk)->omtu = opts.omtu; >> ? ? ? ? ? ? ? l2cap_pi(sk)->mode = opts.mode; >> ? ? ? ? ? ? ? l2cap_pi(sk)->fcs ?= opts.fcs; >> + ? ? ? ? ? ? l2cap_pi(sk)->tx_win = opts.txwin_size; >> ? ? ? ? ? ? ? break; >> >> ? ? ? case L2CAP_LM: >> @@ -1901,6 +1905,7 @@ static int l2cap_sock_getsockopt_old(struct >> socket *sock, int optname, char __us >> ? ? ? ? ? ? ? opts.flush_to = l2cap_pi(sk)->flush_to; >> ? ? ? ? ? ? ? opts.mode ? ? = l2cap_pi(sk)->mode; >> ? ? ? ? ? ? ? opts.fcs ? ? ?= l2cap_pi(sk)->fcs; >> + ? ? ? ? ? ? opts.txwin_size = l2cap_pi(sk)->tx_win; >> >> ? ? ? ? ? ? ? len = min_t(unsigned int, len, sizeof(opts)); >> ? ? ? ? ? ? ? if (copy_to_user(optval, (char *) &opts, len)) >> @@ -2318,7 +2323,7 @@ done: >> >> ? ? ? case L2CAP_MODE_ERTM: >> ? ? ? ? ? ? ? rfc.mode ? ? ? ? ? ?= L2CAP_MODE_ERTM; >> - ? ? ? ? ? ? rfc.txwin_size ? ? ?= L2CAP_DEFAULT_TX_WINDOW; >> + ? ? ? ? ? ? rfc.txwin_size ? ? ?= pi->tx_win; >> ? ? ? ? ? ? ? rfc.max_transmit ? ?= max_transmit; >> ? ? ? ? ? ? ? rfc.retrans_timeout = 0; >> ? ? ? ? ? ? ? rfc.monitor_timeout = 0; > > > Mat Martineau > Qualcomm Innovation Center, Inc., > A member of the Code Aurora Forum > > > -- Gustavo F. Padovan http://padovan.org