Linux bluetooth development
 help / color / mirror / Atom feed
* [PATCH v7 05/16] adapter: Move pairable read to load_config()
From: Frédéric Danis @ 2012-10-24 14:34 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1351089258-25179-1-git-send-email-frederic.danis@linux.intel.com>

---
 src/adapter.c |    8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 310d1cf..d0a8404 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2499,6 +2499,10 @@ static void load_config(struct btd_adapter *adapter)
 
 	/* Set class */
 	adapter->dev_class = main_opts.class;
+
+	/* Get pairable mode */
+	if (read_device_pairable(&adapter->bdaddr, &adapter->pairable) < 0)
+		adapter->pairable = TRUE;
 }
 
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
@@ -2526,10 +2530,6 @@ gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
 	clear_blocked(adapter);
 	load_devices(adapter);
 
-	/* Set pairable mode */
-	if (read_device_pairable(&adapter->bdaddr, &adapter->pairable) < 0)
-		adapter->pairable = TRUE;
-
 	/* retrieve the active connections: address the scenario where
 	 * the are active connections before the daemon've started */
 	load_connections(adapter);
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH v7 04/16] adapter: Remove device class storage
From: Frédéric Danis @ 2012-10-24 14:34 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1351089258-25179-1-git-send-email-frederic.danis@linux.intel.com>

---
 src/adapter.c |   18 +++++-------------
 src/adapter.h |    2 +-
 src/mgmt.c    |    2 +-
 3 files changed, 7 insertions(+), 15 deletions(-)

diff --git a/src/adapter.c b/src/adapter.c
index 6333837..310d1cf 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -756,8 +756,6 @@ void btd_adapter_class_changed(struct btd_adapter *adapter, uint8_t *new_class)
 	if (class == adapter->dev_class)
 		return;
 
-	write_local_class(&adapter->bdaddr, new_class);
-
 	adapter->dev_class = class;
 
 	if (main_opts.gatt_enabled) {
@@ -2169,18 +2167,11 @@ void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
 		*pairable = adapter->pairable;
 }
 
-void btd_adapter_read_class(struct btd_adapter *adapter, uint8_t *major,
+void btd_adapter_get_major_minor(struct btd_adapter *adapter, uint8_t *major,
 								uint8_t *minor)
 {
-	uint8_t cls[3];
-
-	if (read_local_class(&adapter->bdaddr, cls) < 0) {
-		uint32_t class = htobl(main_opts.class);
-		memcpy(cls, &class, 3);
-	}
-
-	*major = cls[1];
-	*minor = cls[0];
+	*major = (adapter->dev_class >> 8) & 0xFF;
+	*minor = adapter->dev_class & 0xFF;
 }
 
 uint32_t btd_adapter_get_class(struct btd_adapter *adapter)
@@ -2249,7 +2240,6 @@ void btd_adapter_start(struct btd_adapter *adapter)
 
 	ba2str(&adapter->bdaddr, address);
 
-	adapter->dev_class = 0;
 	adapter->off_requested = FALSE;
 	adapter->up = TRUE;
 	adapter->discov_timeout = get_discoverable_timeout(address);
@@ -2507,6 +2497,8 @@ static void load_config(struct btd_adapter *adapter)
 	else
 		adapter->name = g_strdup(name);
 
+	/* Set class */
+	adapter->dev_class = main_opts.class;
 }
 
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
diff --git a/src/adapter.h b/src/adapter.h
index d53c658..be69781 100644
--- a/src/adapter.h
+++ b/src/adapter.h
@@ -85,7 +85,7 @@ void btd_adapter_get_mode(struct btd_adapter *adapter, uint8_t *mode,
 						uint16_t *discoverable_timeout,
 						gboolean *pairable);
 
-void btd_adapter_read_class(struct btd_adapter *adapter, uint8_t *major,
+void btd_adapter_get_major_minor(struct btd_adapter *adapter, uint8_t *major,
 							uint8_t *minor);
 
 uint32_t btd_adapter_get_class(struct btd_adapter *adapter);
diff --git a/src/mgmt.c b/src/mgmt.c
index bef66cd..f179dfa 100644
--- a/src/mgmt.c
+++ b/src/mgmt.c
@@ -1105,7 +1105,7 @@ static void read_info_complete(int sk, uint16_t index, void *buf, size_t len)
 	else
 		adapter_name_changed(adapter, (char *) rp->name);
 
-	btd_adapter_read_class(adapter, &major, &minor);
+	btd_adapter_get_major_minor(adapter, &major, &minor);
 	mgmt_set_dev_class(index, major, minor);
 
 	btd_adapter_get_mode(adapter, &mode, NULL, NULL, NULL);
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH v7 03/16] adaptername: Retrieve config name from adapter
From: Frédéric Danis @ 2012-10-24 14:34 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1351089258-25179-1-git-send-email-frederic.danis@linux.intel.com>

---
 plugins/adaptername.c |    6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/plugins/adaptername.c b/plugins/adaptername.c
index f58fb0f..353f11c 100644
--- a/plugins/adaptername.c
+++ b/plugins/adaptername.c
@@ -211,8 +211,10 @@ static int adaptername_probe(struct btd_adapter *adapter)
 	adapter_set_allow_name_changes(adapter, TRUE);
 	current_id = adapter_get_dev_id(adapter);
 
-	if (read_local_name(adapter_get_address(adapter), name) < 0)
-		expand_name(name, MAX_NAME_LENGTH, main_opts.name, current_id);
+	if (btd_adapter_get_name(adapter) != NULL)
+		return 0;
+
+	expand_name(name, MAX_NAME_LENGTH, main_opts.name, current_id);
 
 	DBG("Setting name '%s' for device 'hci%d'", name, current_id);
 	adapter_set_name(adapter, name);
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH v7 02/16] adapter: Read name in storage at init
From: Frédéric Danis @ 2012-10-24 14:34 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1351089258-25179-1-git-send-email-frederic.danis@linux.intel.com>

---
 src/adapter.c |   13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/src/adapter.c b/src/adapter.c
index 9ed8af2..6333837 100644
--- a/src/adapter.c
+++ b/src/adapter.c
@@ -2497,6 +2497,18 @@ void btd_adapter_unref(struct btd_adapter *adapter)
 	g_free(path);
 }
 
+static void load_config(struct btd_adapter *adapter)
+{
+	char name[MAX_NAME_LENGTH + 1];
+
+	/* Get name */
+	if (read_local_name(&adapter->bdaddr, name) < 0)
+		adapter->name = NULL;
+	else
+		adapter->name = g_strdup(name);
+
+}
+
 gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
 {
 	adapter->up = up;
@@ -2516,6 +2528,7 @@ gboolean adapter_init(struct btd_adapter *adapter, gboolean up)
 	if (main_opts.gatt_enabled)
 		btd_adapter_gatt_server_start(adapter);
 
+	load_config(adapter);
 	load_drivers(adapter);
 	btd_profile_foreach(probe_profile, adapter);
 	clear_blocked(adapter);
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH v7 01/16] doc: Add settings storage documentation
From: Frédéric Danis @ 2012-10-24 14:34 UTC (permalink / raw)
  To: linux-bluetooth
In-Reply-To: <1351089258-25179-1-git-send-email-frederic.danis@linux.intel.com>

---
 doc/settings-storage.txt |  183 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 183 insertions(+)
 create mode 100644 doc/settings-storage.txt

diff --git a/doc/settings-storage.txt b/doc/settings-storage.txt
new file mode 100644
index 0000000..a9ff260
--- /dev/null
+++ b/doc/settings-storage.txt
@@ -0,0 +1,183 @@
+BlueZ settings storage
+**********************
+
+Purpose
+=======
+
+The purpose of this document is to describe the directory structure of BlueZ
+settings storage. In effect, this document will serve as the primary, up to
+date source of BlueZ storage information.  It is intended for developers,
+managers and users needing to understand the storage directory.
+
+Adapter and remote device info are read form the storage during object
+initialization.
+Write to storage is performed immediately on every value change.
+
+Default storage directory is /var/lib/bluetooth.
+
+All files are in ini-file format.
+
+Storage directory structure
+===========================
+
+There is one directory per adapter, named by its bluetooth address, which
+contains:
+ - a settings file for the local adapter
+ - an attributes file containing attributes of supported LE services
+ - a cache directory containing:
+    - one file per device, named by remote device address, which contains
+    device name
+ - one directory per remote device, named by remote device address, which
+   contains:
+    - an info file
+    - an attributes file containing attributes of remote LE services
+
+So the directory structure is:
+    /var/lib/bluetooth/<adapter address>/
+        ./settings
+        ./attributes
+        ./cache/
+            ./<remote device address>
+            ./<remote device address>
+            ...
+        ./<remote device address>/
+            ./info
+            ./attributes
+        ./<remote device address>/
+            ./info
+            ./attributes
+        ...
+
+Settings file format
+====================
+
+Settings file contains one [General] group with adapter info like:
+
+  Name			String		Friendly name advertised for
+					this adapter
+
+  Discoverable		Boolean		Discoverability of the adapter
+
+  Connectable		Boolean 	Connectability of the adapter
+
+  Pairable		Boolean 	Can the adapter accept pairing
+					request ?
+
+  Powered		Boolean 	Is the adapter powered ?
+
+  PairableTimeout	Integer		How long to stay in pairable mode
+					before going back to non-pairable.
+					The value is in seconds.
+					0 = disable timer, i.e. stay
+					pairable forever
+
+  DiscoverableTimeout	Integer		How long to stay in discoverable mode
+					before going back to non-discoverable.
+					The value is in seconds.
+					0 = disable timer, i.e. stay
+					discoverable forever
+
+Sample:
+  [General]
+  Name=My PC
+  Discoverable=false
+  Connectable=true
+  Pairable=true
+  Powered=true
+  DiscoverableTimeout=0
+
+Attributes file format
+======================
+
+The attributes file lists all attributes supported by the local adapter or
+remote device.
+
+Attributes are stored using their handle as group name (decimal format).
+
+Each group contains:
+
+  UUID		String		128-bit UUID of the attribute
+
+  Value		String		Value of the attribute as hexadecimal encoded
+				string
+
+Sample:
+  [1]
+  UUID=00002800-0000-1000-8000-00805f9b34fb
+  Value=0018
+
+  [4]
+  UUID=00002803-0000-1000-8000-00805f9b34fb
+  Value=020600002A
+
+  [6]
+  UUID=00002a00-0000-1000-8000-00805f9b34fb
+  Value=4578616D706C6520446576696365
+
+Cache directory file format
+============================
+
+Each file, named by remote device address, contains one [General] group.
+This general group contains:
+
+  Name		String		Remote device friendly name
+
+  ShortName	String		Remote device shortened name
+
+Info file format
+================
+
+Info file may includes multiple groups (General, Device ID, Link key and
+Long term key) related to a remote device.
+
+[General] group contains:
+
+  Alias			String		Alias name
+
+  Class			String		Device class in hexadecimal,
+  					i.e. 0x000000
+
+  Features		String		Bluetooth device features in
+  					hexadecimal, i.e. 0x0000000000000000
+
+  AddressType		String		An address can be "static" or "public"
+
+  Trusted		Boolean		True if the remote device is trusted
+
+  Profiles		List of		List of profiles advertised by remote,
+  			strings		in 128-bits UUID format, separated by
+  					";"
+
+
+[DeviceID] group contains:
+
+  Source		Integer		Assigner of Device ID
+
+  Vendor		Integer		Device vendor
+
+  Product		Integer		Device product
+
+  Version		Integer		Device version
+
+
+[LinkKey] group contains:
+
+  Key			String		Key in hexadecimal format
+
+  Type			Integer		Type of link key
+
+  PINLength		Integer		Length of PIN
+
+
+[LongTermKey] group contains:
+
+  Key			String		Long term key in hexadecimal format
+
+  Authenticated		Boolean		True if remote device has been
+  					authenticated
+
+  EncSize		Integer		Encrypted size
+
+  EDiv			Integer		Encrypted diversifier
+
+  Rand			Integer		Randomizer
-- 
1.7.9.5


^ permalink raw reply related

* [PATCH v7 00/16] Move storage config and names files to ini-file format
From: Frédéric Danis @ 2012-10-24 14:34 UTC (permalink / raw)
  To: linux-bluetooth

Adapter saved configuration will be saved to /var/lib/bluetooth/<adapter address>/settings
in ini-file format for BlueZ 5.
Devices name cache will be saved in 1 file per device (named by device address)
under /var/lib/bluetooth/<adapter address>/cache/ directory.
If this files does not exist, we try to convert legacy files to this new format.

Access to variables during run-time is performed in adapter structure which is
populated by loading saved configuration during initialization.

Patches 2 to 8 remove access to config file from run-time.
Patch 9 moves to ini-file format style (load, save and convert).
Patches 11 to 16 move devices name cache to new files (read, write and convert).

Frédéric Danis (16):
  doc: Add settings storage documentation
  adapter: Read name in storage at init
  adaptername: Retrieve config name from adapter
  adapter: Remove device class storage
  adapter: Move pairable read to load_config()
  adapter: Read pairable timeout in storage at init
  adapter: Read discoverable timeout in storage at init
  adapter: Read mode in storage at init
  adapter: Move saved config to ini-file format
  TODO: Add entry to remove storage convertion function
  adapter: Move storage names to cache directory
  event: Remove write of LastSeen info
  device: Retrieve name from cache directory
  dbusoob: Store device name in cache directory
  input: Retrieve device name from cache directory
  hcitool: Retrieve names from cache directory

 Makefile.tools           |    2 +-
 TODO                     |    6 +
 doc/settings-storage.txt |  183 ++++++++++++++++++++++
 plugins/adaptername.c    |    6 +-
 plugins/dbusoob.c        |   26 +++-
 plugins/neard.c          |    2 +-
 profiles/input/device.c  |   26 +++-
 src/adapter.c            |  387 +++++++++++++++++++++++++++++++++++-----------
 src/adapter.h            |    3 +-
 src/device.c             |   25 ++-
 src/event.c              |   37 +++--
 src/mgmt.c               |   19 +--
 src/mgmt.h               |    1 +
 tools/hcitool.c          |   31 +++-
 14 files changed, 615 insertions(+), 139 deletions(-)
 create mode 100644 doc/settings-storage.txt

-- 
1.7.9.5


^ permalink raw reply

* Re: [PATCH 5/5 v2] Bluetooth: Read adversiting channel TX power during init sequence
From: Gustavo Padovan @ 2012-10-24 13:26 UTC (permalink / raw)
  To: Johan Hedberg; +Cc: linux-bluetooth
In-Reply-To: <1350669469-7719-6-git-send-email-johan.hedberg@gmail.com>

Hi Johan,

* Johan Hedberg <johan.hedberg@gmail.com> [2012-10-19 20:57:49 +0300]:

> From: Johan Hedberg <johan.hedberg@intel.com>
> 
> This patch adds the reading of the LE advertising channel TX power to
> the HCI init sequence of LE-capable controllers. This data will be used
> e.g. for inclusion in the advertising data packets when advertising is
> enabled.
> 
> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
> Acked-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  include/net/bluetooth/hci.h      |    6 ++++++
>  include/net/bluetooth/hci_core.h |    2 ++
>  net/bluetooth/hci_event.c        |   20 ++++++++++++++++++++
>  3 files changed, 28 insertions(+)

All patches but patch 4 were applied to bluetooth-next. Patch 4 doesn't apply
on current bluetooth-next. I also change functions on patch 1 to use _setup().
Thanks.

	Gustavo

^ permalink raw reply

* Re: [PATCH RESEND net-next] bluetooth: hci_core: Replace list_for_each with list_for_each_entry() helper
From: Gustavo Padovan @ 2012-10-24 13:22 UTC (permalink / raw)
  To: Denis Kirjanov; +Cc: davem, linux-bluetooth, netdev, linux-kernel
In-Reply-To: <1350912121-24171-1-git-send-email-kirjanov@gmail.com>

Hi Denis,

* Denis Kirjanov <kirjanov@gmail.com> [2012-10-22 17:22:01 +0400]:

> Replace list_for_each with list_for_each_entry() helper
> 
> Signed-off-by: Denis Kirjanov <kirjanov@gmail.com>
> ---
>  include/net/bluetooth/hci_core.h |   20 ++++++++------------
>  1 files changed, 8 insertions(+), 12 deletions(-)

Patch has been applied to bluetooth-next. Thanks.

	Gustavo

^ permalink raw reply

* Re: [PATCH] Bluetooth: Fix having bogus entries in mgmt_read_index_list reply
From: Gustavo Padovan @ 2012-10-24 13:04 UTC (permalink / raw)
  To: Johan Hedberg; +Cc: linux-bluetooth
In-Reply-To: <1350666646-6276-1-git-send-email-johan.hedberg@gmail.com>

Hi Johan,

* Johan Hedberg <johan.hedberg@gmail.com> [2012-10-19 20:10:46 +0300]:

> From: Johan Hedberg <johan.hedberg@intel.com>
> 
> The mgmt_read_index_list uses one loop to calculate the max needed size
> of its response with the help of an upper-bound of the controller count.
> The second loop is more strict as it checks for HCI_SETUP (which might
> have gotten set after the first loop) and could result in some indexes
> being skipped. Because of this the function needs to readjust the event
> length and index count after filling in the response array.
> 
> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
> Cc: stable@vger.kernel.org
> ---
>  net/bluetooth/mgmt.c |   11 ++++++-----
>  1 file changed, 6 insertions(+), 5 deletions(-)

Patch has been applied to bluetooth.git. Thanks.

	Gustavo

^ permalink raw reply

* Re: [RFC v0 05/15] network: Add network .connect and .disconnect
From: Anderson Lizardo @ 2012-10-24 12:28 UTC (permalink / raw)
  To: Mikel Astiz; +Cc: linux-bluetooth, Mikel Astiz
In-Reply-To: <1350661172-18125-6-git-send-email-mikel.astiz.oss@gmail.com>

Hi Mikel,

On Fri, Oct 19, 2012 at 11:39 AM, Mikel Astiz <mikel.astiz.oss@gmail.com> wrote:
> +static void connect_profile_cb(struct btd_device *device, int err,
> +                                               const char *pdev, void *data)
> +{
> +       struct connect_req *req = data;
> +
> +       req->cb(req->profile, req->device, err);
> +
> +       g_free(req);
> +}
> +
> +static int connect_profile(struct btd_device *dev, struct btd_profile *profile,
> +                                               uint16_t id, btd_profile_cb cb)
> +{
> +       struct connect_req *req;
> +       int err;
> +
> +       DBG("path %s id %u", device_get_path(dev), id);
> +
> +       req  = g_new0(struct connect_req, 1);
> +       req->device = dev;

Isn't btd_device_ref() required here?

> +       req->profile = profile;
> +       req->cb = cb;
> +
> +       err = connection_connect(dev, BNEP_SVC_PANU, NULL, connect_profile_cb,
> +                                                                       req);
> +       if (err < 0) {
> +               g_free(req);
> +               return err;
> +       }
> +
> +       return 0;
> +}

Regards,
-- 
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil

^ permalink raw reply

* Re: [PATCH] Bluetooth: Add support for BCM20702A0 [0b05, 17b5]
From: Anderson Lizardo @ 2012-10-24 12:20 UTC (permalink / raw)
  To: jeff; +Cc: marcel, gustavo, johan.hedberg, linux-bluetooth, linux-kernel
In-Reply-To: <5087B517.9090703@deserettechnology.com>

Hi Jeff,

On Wed, Oct 24, 2012 at 5:29 AM, Jeff Cook <jeff@deserettechnology.com> wrote:
> Hello all,
>
> Please see included patch. First-time submitter so let me know if I did
> something wrong.

Just one more suggestion (adding to Gustavo's comments), you may want to read:

http://www.kernel.org/doc/Documentation/SubmittingPatches

Specially sections 12 and 15.

Best Regards,
-- 
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil

^ permalink raw reply

* Re: [PATCH] Bluetooth: Add support for BCM20702A0 [0b05, 17b5]
From: Gustavo Padovan @ 2012-10-24 12:11 UTC (permalink / raw)
  To: Jeff Cook; +Cc: marcel, johan.hedberg, linux-bluetooth, linux-kernel
In-Reply-To: <5087B517.9090703@deserettechnology.com>

Hi Jeff,

* Jeff Cook <jeff@deserettechnology.com> [2012-10-24 03:29:59 -0600]:

> Hello all,
> 
> Please see included patch. First-time submitter so let me know if I did 
> something wrong.

Your patch is good, but you need to improve the way you submit it. We recommend
using 'git send-email' like this:

$ git send-email HEAD~1..HEAD

For sending the patch on the top of tree. You can also do combined use of 'git
format-patch' and 'git send-email' in case you want to add some message or to your
patch like the first-time submitter message you did here and these messages
needs to be added...

> 
> Thanks,
> Jeff
> --------------------
> 
> Vendor-specific ID for BCM20702A0.
> Support for bluetooth over Asus Wi-Fi GO!, included with Asus P8Z77-V
> Deluxe.
> 
> T:  Bus=07 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
> D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
> P:  Vendor=0b05 ProdID=17b5 Rev=01.12
> S:  Manufacturer=Broadcom Corp
> S:  Product=BCM20702A0
> S:  SerialNumber=94DBC98AC113
> C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
> I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
> I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
> I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
> I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
> ---

... after these 3 dashes lines so they don't go the final commit when I apply
your patch.

	Gustavo

^ permalink raw reply

* Re: [PATCH 2/7] Bluetooth: mgmt: Restrict BR/EDR settings to BR/EDR-only adapters
From: Anderson Lizardo @ 2012-10-24 12:11 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: Johan Hedberg, linux-bluetooth
In-Reply-To: <1351028768.1785.57.camel@aeonflux>

Hi Marcel,

On Tue, Oct 23, 2012 at 5:46 PM, Marcel Holtmann <marcel@holtmann.org> wrote:
> That is why I like the explanation above, if we set ourselves as
> peripheral, then we are peripheral and everything else is out of the
> question. So either LE is enabled and we act as central or we are acting
> as peripheral.
>
> So broadcaster and observer are extra features on top of central. For me
> that means we have treat them independent. How much you can be
> broadcaster and observer and central at the same time is then again a
> different question that we need to answer.

So do you suggest we keep Broadcaster/Observer as separate settings
(which actually we prefer, given that we have been working on
supporting those modes for BR/EDR only adapters, by using EIR for
broadcasting data allowed on EIR, such as Manufacturer Specific Data,
and parsing them from Device Found mgmt event when on Observer mode),
and keep "Set Low Energy" setting just for Central/Peripheral modes?

Regards
-- 
Anderson Lizardo
Instituto Nokia de Tecnologia - INdT
Manaus - Brazil

^ permalink raw reply

* Re: [PATCH] Bluetooth: Add support for Atheros [04ca:3004]
From: Gustavo Padovan @ 2012-10-24 11:56 UTC (permalink / raw)
  To: Dwaine Garden VE3GIF; +Cc: linux-bluetooth@vger.kernel.org
In-Reply-To: <1351054633.13513.YahooMailNeo@web125402.mail.ne1.yahoo.com>

Hi Dwaine,

* Dwaine Garden VE3GIF <dwainegarden@rogers.com> [2012-10-23 21:57:13 -0700]:

> Add another vendor specific ID for Atheros AR3012 device.
> This chip is wrapped by Lite-On Technology Corp.
> 
> output of usb-devices:T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  3 Spd=12   MxCh= 0

Break a line before pasting the output in the patch.

> D:  Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
> P:  Vendor=04ca ProdID=3004 Rev= 0.02
> S:  Manufacturer=Atheros Communications
> S:  Product=Bluetooth USB Host Controller
> S:  SerialNumber=Alaska Day 2006
> 
> Signed-off-by: Dwaine Garden <DwaineGarden@rogers.com>  ---
> 
> diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
> index fc2de55..1486f15 100644
> --- a/drivers/bluetooth/ath3k.c
> +++ b/drivers/bluetooth/ath3k.c
> @@ -75,6 +75,7 @@ static struct usb_device_id ath3k_table[] = {
> { USB_DEVICE(0x0CF3, 0x3004) },
> { USB_DEVICE(0x0CF3, 0x311D) },
> { USB_DEVICE(0x13d3, 0x3375) },
> +	{ USB_DEVICE(0x04CA, 0x3004) },
> { USB_DEVICE(0x04CA, 0x3005) },
> { USB_DEVICE(0x13d3, 0x3362) },
> { USB_DEVICE(0x0CF3, 0xE004) },
> @@ -102,6 +103,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
> { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
> +	{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x04ca, 0x3005), .driver_info =
>  BTUSB_ATH3012 },
> {
>  USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
> index debda27..0529cee 100644
> --- a/drivers/bluetooth/btusb.c
> +++ b/drivers/bluetooth/btusb.c
> @@ -132,6 +132,7 @@ static struct usb_device_id blacklist_table[] = {
> { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
> +	{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
> { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },

You patch is still broken, please use git-send-email to send it to the mailing
list and also make sure it apply cleanly on the latest bluetooth-next tree
before sending. Thanks.

	Gustavo

^ permalink raw reply

* [PATCH] Bluetooth: Add support for BCM20702A0 [0b05, 17b5]
From: Jeff Cook @ 2012-10-24  9:29 UTC (permalink / raw)
  To: marcel, gustavo, johan.hedberg; +Cc: linux-bluetooth, linux-kernel

Hello all,

Please see included patch. First-time submitter so let me know if I did 
something wrong.

Thanks,
Jeff
--------------------

Vendor-specific ID for BCM20702A0.
Support for bluetooth over Asus Wi-Fi GO!, included with Asus P8Z77-V
Deluxe.

T:  Bus=07 Lev=02 Prnt=02 Port=00 Cnt=01 Dev#=  3 Spd=12  MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=0b05 ProdID=17b5 Rev=01.12
S:  Manufacturer=Broadcom Corp
S:  Product=BCM20702A0
S:  SerialNumber=94DBC98AC113
C:  #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=0mA
I:  If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=01 Prot=01 Driver=btusb
I:  If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
I:  If#= 3 Alt= 0 #EPs= 0 Cls=fe(app. ) Sub=01 Prot=01 Driver=(none)
---
 drivers/bluetooth/btusb.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 654e248..1d7b126 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -96,6 +96,7 @@ static struct usb_device_id btusb_table[] = {
 	{ USB_DEVICE(0x0c10, 0x0000) },
 
 	/* Broadcom BCM20702A0 */
+	{ USB_DEVICE(0x0b05, 0x17b5) },
 	{ USB_DEVICE(0x0489, 0xe042) },
 	{ USB_DEVICE(0x413c, 0x8197) },
 
-- 
1.8.0

^ permalink raw reply related

* Re: [PATCH BlueZ v2] AVDTP: Do not keep a internal reference
From: Luiz Augusto von Dentz @ 2012-10-24  8:51 UTC (permalink / raw)
  To: Ludek Finstrle; +Cc: linux-bluetooth
In-Reply-To: <20121023131633.GA12443@pzkagis.cz>

Hi Ludek,

On Tue, Oct 23, 2012 at 3:16 PM, Ludek Finstrle <luf@pzkagis.cz> wrote:
>> +     avdtp_cancel_authorization(session);
>
> Why do you call avdtp_cancel_authorization here? It's useless as above you have
> in the same function:
>         if (session->state != AVDTP_SESSION_STATE_DISCONNECTED)
>                 avdtp_set_state(session, AVDTP_SESSION_STATE_DISCONNECTED);
>
> and the first if statement inf avdtp_cancel_authorization is to check if the
> state is AVDTP_SESSION_STATE_CONNECTING (otherwise return).

Right, that could be removed then.

> See below. Why you deinitialize the session different way for ref=0?
>
>> +     else if (session->ref > 0)
>> +             connection_lost(session, ETIMEDOUT);
>> +     else {
>> +             struct avdtp_server *server = session->server;
>> +
>> +             server->sessions = g_slist_remove(server->sessions, session);
>> +             avdtp_free(session);
>> +     }

The reason is simple, if there is nobody holding a reference it is
useless to call connection_lost.

> If I change whole block above (starting else if ((session->ref > 0)) this
> way it works with N900 as expected:
>
>         else {
>                 connection_lost(session, ETIMEDOUT);
>
>                 if (session->ref <= 0) {
>                         struct avdtp_server *server = session->server;
>
>                         server->sessions = g_slist_remove(server->sessions, session);
>                         avdtp_free(session);
>                 }
>         }

hmm, that actually make sense if the caller releases its reference on
connection_lost then we can free immediately but the mystery here is
how you end up in disconnect_timeout if there are still a reference
being held.

-- 
Luiz Augusto von Dentz

^ permalink raw reply

* RE: [RFC 1/2] Bluetooth: Add driver extension for vendor specific init
From: Ho, Albert O @ 2012-10-24  8:27 UTC (permalink / raw)
  To: Marcel Holtmann
  Cc: linux-bluetooth, Hedberg, Johan, tedd.hj.an@gmail.com, An, Tedd
In-Reply-To: <1349346013.27233.28.camel@aeonflux>

SGkgTWFyY2VsLA0KDQpJIGhhdmUgYSBxdWVzdGlvbiBhZnRlciBvdXIgY2hhdCB2aWEgSVJDLiAg
U2VlIGJlbG93Lg0KIA0KDQo+IFRoaXMgcGF0Y2ggcHJvdmlkZXMgYW4gZXh0ZW5zaW9uIG9mIGJ0
dXNiIHRvIHN1cHBvcnQgZGV2aWNlIHZlbmRvciBjYW4gDQo+IGltcGxlbWVudCB0aGVpciBvd24g
bW9kdWxlIHRvIGV4ZWN1dGUgdGhlIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgDQo+IGluaXRpYWxp
emF0aW9uIGJlZm9yZSB0aGUgc3RhY2sgc2VuZHMgZ2VuZXJpYyBCVCBkZXZpY2UgDQo+IGluaXRp
YWxpemF0aW9uLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogVGVkZCBIby1KZW9uZyBBbiA8dGVkZC5h
bkBpbnRlbC5jb20+DQo+IC0tLQ0KPiAgZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyAgICAgICAg
fCAgMTkxICsrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tDQo+ICBkcml2ZXJz
L2JsdWV0b290aC9idHVzYi5oICAgICAgICB8ICAgNTMgKysrKysrKysrKysNCj4gIGluY2x1ZGUv
bmV0L2JsdWV0b290aC9oY2lfY29yZS5oIHwgICAxMCArKw0KPiAgbmV0L2JsdWV0b290aC9oY2lf
Y29yZS5jICAgICAgICAgfCAgIDE1ICsrLQ0KPiAgNCBmaWxlcyBjaGFuZ2VkLCAyMDQgaW5zZXJ0
aW9ucygrKSwgNjUgZGVsZXRpb25zKC0pICBjcmVhdGUgbW9kZSANCj4gMTAwNjQ0IGRyaXZlcnMv
Ymx1ZXRvb3RoL2J0dXNiLmgNCj4gDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2JsdWV0b290aC9i
dHVzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYyANCj4gaW5kZXggZjYzN2MyNS4uYWZh
MTU1OCAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9ibHVldG9vdGgvYnR1c2IuYw0KPiArKysgYi9k
cml2ZXJzL2JsdWV0b290aC9idHVzYi5jDQo+IEBAIC0yNiw2ICsyNiw3IEBADQo+ICANCj4gICNp
bmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPg0KPiAgI2luY2x1ZGUgPG5ldC9ibHVl
dG9vdGgvaGNpX2NvcmUuaD4NCj4gKyNpbmNsdWRlICJidHVzYi5oIg0KPiAgDQo+ICAjZGVmaW5l
IFZFUlNJT04gIjAuNiINCj4gIA0KPiBAQCAtMzksMTQgKzQwLDU5IEBAIHN0YXRpYyBib29sIHJl
c2V0ID0gMTsNCj4gIA0KPiAgc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGJ0dXNiX2RyaXZlcjsN
Cj4gIA0KPiAtI2RlZmluZSBCVFVTQl9JR05PUkUJCTB4MDENCj4gLSNkZWZpbmUgQlRVU0JfRElH
SUFOU1dFUgkweDAyDQo+IC0jZGVmaW5lIEJUVVNCX0NTUgkJMHgwNA0KPiAtI2RlZmluZSBCVFVT
Ql9TTklGRkVSCQkweDA4DQo+IC0jZGVmaW5lIEJUVVNCX0JDTTkyMDM1CQkweDEwDQo+IC0jZGVm
aW5lIEJUVVNCX0JST0tFTl9JU09DCTB4MjANCj4gLSNkZWZpbmUgQlRVU0JfV1JPTkdfU0NPX01U
VQkweDQwDQo+IC0jZGVmaW5lIEJUVVNCX0FUSDMwMTIJCTB4ODANCj4gKy8qDQo+ICsgKiBDcmVh
dGUgYnR1c2JfZHJpdmVyX2luZm8gc3RydWN0IGZvciBlYWNoIGRyaXZlcl9pbmZvIGZsYWdzIHVz
ZWQgYnkNCj4gKyAqIGJsYWNrbGlzdCBzaW5jZSB2ZW5kb3IncyBidHVzYiBkcml2ZXIgd2lsbCBy
ZXR1cm4gYnR1c2JfZHJpdmVyX2luZm8gc3RydWN0Lg0KPiArICovDQo+ICsNCj4gKy8qDQo+ICsg
KiBpZiB0aGUgZGV2aWNlIGlzIHNldCB0byB0aGlzLCB0aGlzIG1lbmFzIHRoYXQgdGhlIGRldmlj
ZSBpcyANCj4gK2dlbmVyaWMgYW5kDQo+ICsgKiBkb2Vzbid0IHJlcXVpcmUgYW55IHZlbmRvciBz
cGVjaWZpYyBoYW5kbGluZyAgKi8gc3RhdGljIGNvbnN0IA0KPiArc3RydWN0IGJ0dXNiX2RyaXZl
cl9pbmZvIGdlbmVyaWMgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0gIkJUVVNCIEdlbmVyaWMiLA0K
PiArCS5mbGFncwkJPSBCVFVTQl9HRU5FUklDLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0
IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBpZ25vcmUgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0g
IkJUVVNCIElnbm9yZSIsDQo+ICsJLmZsYWdzCQk9IEJUVVNCX0lHTk9SRSwNCj4gK307DQoNCj4+
IEkgbGlrZSB0aGUgZWZmb3J0LCBidXQgSSB0aGluayB5b3Ugd2VudCBhIGxpdHRsZSBiaXQgdG9v
IGZhciBoZXJlLiBGb3IgdGhlc2Ugc2ltcGxlIG9uZXMsIHdlIGNhbiBlYXNpbHkga2VlcCBvdXIg
c2ltcGxlIGJsYWNrbGlzdC4gSXQga2VlcHMgdGhlIGNvZGUgbW9yZSByZWFkYWJsZSB0aGFuIHRo
aXMgcGFydC4gQnV0IEkgZG8gYXBwcmVjaWF0ZSB0aGUgYXR0ZW1wdCBpbiB1bmlmeWluZyB0aGlz
Lg0KDQoNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBkaWdp
YW5zd2VyID0gew0KPiArCS5kZXNjcmlwdGlvbgk9ICJCVFVTQiBESUdJQU5TV0VSIiwNCj4gKwku
ZmxhZ3MJCT0gQlRVU0JfRElHSUFOU1dFUiwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBz
dHJ1Y3QgYnR1c2JfZHJpdmVyX2luZm8gY3NyID0gew0KPiArCS5kZXNjcmlwdGlvbgk9ICJCVFVT
QiBDU1IiLA0KPiArCS5mbGFncwkJPSBCVFVTQl9DU1IsDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMg
Y29uc3Qgc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvIHNuaWZmZXIgPSB7DQo+ICsJLmRlc2NyaXB0
aW9uCT0gIkJUVVNCIFNuaWZmZXIiLA0KPiArCS5mbGFncwkJPSBCVFVTQl9TTklGRkVSLA0KPiAr
fTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBiY205MjAz
NSA9IHsNCj4gKwkuZGVzY3JpcHRpb24JPSAiQlRVU0IgQkNNOTIwMzUiLA0KPiArCS5mbGFncwkJ
PSBCVFVTQl9CQ005MjAzNSwNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnR1
c2JfZHJpdmVyX2luZm8gYnJva2VuX2lzb2MgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0gIkJUVVNC
IEJyb2tlbiBJU09DIiwNCj4gKwkuZmxhZ3MJCT0gQlRVU0JfQlJPS0VOX0lTT0MsDQo+ICt9Ow0K
PiArDQo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvIHdyb25nX3Njb19t
dHUgPSB7DQo+ICsJLmRlc2NyaXB0aW9uCT0gIkJUVVNCIFdyb25nIFNDTyBNVFUiLA0KPiArCS5m
bGFncwkJPSBCVFVTQl9XUk9OR19TQ09fTVRVLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0
IHN0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyBhdGgzMDEyID0gew0KPiArCS5kZXNjcmlwdGlvbgk9
ICJCVFVTQiBBdGgzMDEyIiwNCj4gKwkuZmxhZ3MJCT0gQlRVU0JfQVRIMzAxMiwNCj4gK307DQo+
ICANCj4gIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gew0KPiAg
CS8qIEdlbmVyaWMgQmx1ZXRvb3RoIFVTQiBkZXZpY2UgKi8NCj4gQEAgLTEwNSw5MCArMTUxLDg5
IEBAIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBidHVzYl90YWJsZVtdID0gew0KPiAgDQo+
ICAJeyB9CS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovDQo+ICB9Ow0KPiAtDQo+ICBNT0RVTEVfREVW
SUNFX1RBQkxFKHVzYiwgYnR1c2JfdGFibGUpOw0KPiAgDQo+ICBzdGF0aWMgc3RydWN0IHVzYl9k
ZXZpY2VfaWQgYmxhY2tsaXN0X3RhYmxlW10gPSB7DQo+ICAJLyogQ1NSIEJsdWVDb3JlIGRldmlj
ZXMgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTEyLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBC
VFVTQl9DU1IgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTEyLCAweDAwMDEpLCAuZHJpdmVyX2lu
Zm8gPSAodW5zaWduZWQgbG9uZykgJmNzciB9LA0KDQo+PiBLZWVwIHRoZSBibGFja2xpc3RfdGFi
bGUgYXMgaXQgaXMuIFRoZSBpbXBvcnRhbnQgdGFibGUgdG8gbW9kaWZ5IGlzIGJ0dXNiX3RhYmxl
IGFuZCB1c2UgYSBjb21tb24gZHJpdmVyX2luZm8gdGhhdCB3aWxsIGJlIHNoYXJlZCBiZXR3ZWVu
IGRyaXZlcnMuDQoNCj4+IFRoYXQgd291bGQgYWxzbyBtYWtlIGl0IHNpbXBsZSB0byBqdXN0IGFk
ZCBCVFVTQl9JR05PUkUgb3IgYSBuZXcgQlRVU0JfVkVORE9SIGZsYWcgdG8gY2FsbCBvdXQgdGhl
IGRyaXZlcnMgdGhhdCBoYXZlIGEgc2VwYXJhdGUgZHJpdmVyIHdpdGggYSB2ZW5kb3IgaW5pdCBm
dW5jdGlvbiwgYnV0IHdvdWxkIG1hdGNoID4+IHRoZSBCbHVldG9vdGggZ2VuZXJhbCBVU0IgZGVz
Y3JpcHRvcnMuDQoNCkkgbG9va2VkIGF0IHVzYm5ldCBtaW5pZHJpdmVyIGFzIHlvdSBzdWdnZXN0
ZWQuICBJZiB3ZSBkbyBhIHNpbWlsYXIgc2NoZW1lIHN1Y2ggdGhhdCBidHVzYl9wcm9iZSgpIGlu
dm9rZXMgdGhlIG1pbmlfZHJpdmVyJ3MgYmluZCgpL3VuYmluZCgpIHRoZW4gYnR1c2IncyB1c2Fn
ZSBvZiBkcml2ZXJfaW5mbyB3aWxsIG5lZWQgdG8gY2hhbmdlIGZyb20gc3RvcmluZyBmbGFncyAo
ZXg6IEJUVVNCX0lHTk9SRSkgYW5kIGNoYW5nZSB0byBzdG9yZSAic3RhdGljIGNvbnN0IHN0cnVj
dCIgd2hlcmUgaXQgaG9sZHMgYSBzdHJ1Y3QgY29udGFpbmluZyB0aGUgbWluaS1kcml2ZXIncyBi
aW5kL3VuYmluZCBmdW5jdGlvbnMgKGp1c3QgbGlrZSB1c2JuZXQgbWluaWRyaXZlcikuICAgQXJl
IHlvdSBnb29kIHdpdGggdGhpcyBjaGFuZ2U/ICBJIGFsc28gd2FudCB0byBtZW50aW9uIHRoYXQg
aW4gdGhlIHBhdGNoIGNvbnRhaW5pbmcgdGhlIEJUIFVTQiBtaW5pIGRyaXZlciB0ZW1wbGF0ZSwg
aXQgYWxyZWFkeSBoYXMgaXRzIG93biBtb2R1bGVfdXNiX2RyaXZlcigpIHNlY3Rpb24gd2l0aCBp
dHMgVklEL1BJRCBsaXN0ZWQuDQoNCg0KPj4gVGhlbiBvdmVyIHRpbWUsIHdlIGNhbiBtb3ZlIHRo
ZSBCVFVTQl9CQ005MjAzNSBmb3IgZXhhbXBsZSBpbnRvIGl0cyBzZXBhcmF0ZSBkcml2ZXIuIEFu
ZCBhbHNvIGRlYWwgd2l0aCBjbGVhbmluZyB1cCBhbGwgdGhlIG90aGVyIEJyb2FkY29tIHNwZWNp
YWx0aWVzLg0KDQo+ICANCj4gIAkvKiBCcm9hZGNvbSBCQ00yMDMzIHdpdGhvdXQgZmlybXdhcmUg
Ki8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzMpLCAuZHJpdmVyX2luZm8gPSBCVFVT
Ql9JR05PUkUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzMpLCAuZHJpdmVyX2lu
Zm8gPSAodW5zaWduZWQgbG9uZykgJmlnbm9yZSANCj4gK30sDQo+ICANCj4gIAkvKiBBdGhlcm9z
IDMwMTEgd2l0aCBzZmxhc2ggZmlybXdhcmUgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAw
eDMwMDIpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwNCj4gLQl7IFVTQl9ERVZJQ0Uo
MHgwY2YzLCAweGUwMTkpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwNCj4gLQl7IFVT
Ql9ERVZJQ0UoMHgxM2QzLCAweDMzMDQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9JR05PUkUgfSwN
Cj4gLQl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9J
R05PUkUgfSwNCj4gLQl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwM2QpLCAuZHJpdmVyX2luZm8g
PSBCVFVTQl9JR05PUkUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDIpLCAuZHJp
dmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmlnbm9yZSB9LA0KPiArCXsgVVNCX0RFVklDRSgw
eDBjZjMsIDB4ZTAxOSksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3JlIH0s
DQo+ICsJeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzA0KSwgLmRyaXZlcl9pbmZvID0gKHVuc2ln
bmVkIGxvbmcpICZpZ25vcmUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTUpLCAu
ZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmlnbm9yZSB9LA0KPiArCXsgVVNCX0RFVklD
RSgweDA0ODksIDB4ZTAzZCksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3Jl
IA0KPiArfSwNCj4gIA0KPiAgCS8qIEF0aGVyb3MgQVI5Mjg1IE1hbGJlYyB3aXRoIHNmbGFzaCBm
aXJtd2FyZSAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MzExZCksIC5kcml2ZXJfaW5m
byA9IEJUVVNCX0lHTk9SRSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MzExZCksIC5k
cml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3JlIA0KPiArfSwNCj4gIA0KPiAgCS8q
IEF0aGVyb3MgMzAxMiB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLw0KPiAtCXsgVVNCX0RFVklDRSgw
eDBjZjMsIDB4MzAwNCksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwNCj4gLQl7IFVT
Ql9ERVZJQ0UoMHgwY2YzLCAweDMxMWQpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0s
DQo+IC0JeyBVU0JfREVWSUNFKDB4MTNkMywgMHgzMzc1KSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf
QVRIMzAxMiB9LA0KPiAtCXsgVVNCX0RFVklDRSgweDA0Y2EsIDB4MzAwNSksIC5kcml2ZXJfaW5m
byA9IEJUVVNCX0FUSDMwMTIgfSwNCj4gLQl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzNjIpLCAu
ZHJpdmVyX2luZm8gPSBCVFVTQl9BVEgzMDEyIH0sDQo+IC0JeyBVU0JfREVWSUNFKDB4MGNmMywg
MHhlMDA0KSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfQVRIMzAxMiB9LA0KPiAtCXsgVVNCX0RFVklD
RSgweDA5MzAsIDB4MDIxOSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0FUSDMwMTIgfSwNCj4gKwl7
IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMwMDQpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9u
ZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwY2YzLCAweDMxMWQpLCAuZHJpdmVy
X2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgx
M2QzLCAweDMzNzUpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMwMTIgfSwN
Cj4gKwl7IFVTQl9ERVZJQ0UoMHgwNGNhLCAweDMwMDUpLCAuZHJpdmVyX2luZm8gPSAodW5zaWdu
ZWQgbG9uZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgxM2QzLCAweDMzNjIpLCAu
ZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMwMTIgfSwNCj4gKwl7IFVTQl9ERVZJ
Q0UoMHgwY2YzLCAweGUwMDQpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF0aDMw
MTIgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwOTMwLCAweDAyMTkpLCAuZHJpdmVyX2luZm8gPSAo
dW5zaWduZWQgbG9uZykgDQo+ICsmYXRoMzAxMiB9LA0KPiAgDQo+ICAJLyogQXRoZXJvcyBBUjVC
QlUxMiB3aXRoIHNmbGFzaCBmaXJtd2FyZSAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDA0ODksIDB4
ZTAyYyksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0lHTk9SRSB9LA0KPiArCXsgVVNCX0RFVklDRSgw
eDA0ODksIDB4ZTAyYyksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmaWdub3JlIA0K
PiArfSwNCj4gIA0KPiAgCS8qIEF0aGVyb3MgQVI1QkJVMTIgd2l0aCBzZmxhc2ggZmlybXdhcmUg
Ki8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwNDg5LCAweGUwM2MpLCAuZHJpdmVyX2luZm8gPSBCVFVT
Ql9BVEgzMDEyIH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4MDQ4OSwgMHhlMDNjKSwgLmRyaXZlcl9p
bmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJmF0aDMwMTIgfSwNCj4gIA0KPiAgCS8qIEJyb2Fk
Y29tIEJDTTIwMzUgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIwMzUpLCAuZHJpdmVy
X2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+IC0JeyBVU0JfREVWSUNFKDB4MGE1Yywg
MHgyMDBhKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01UVSB9LA0KPiAtCXsgVVNC
X0RFVklDRSgweDBhNWMsIDB4MjAwOSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JDTTkyMDM1IH0s
DQo+ICsJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDM1KSwgLmRyaXZlcl9pbmZvID0gKHVuc2ln
bmVkIGxvbmcpICZ3cm9uZ19zY29fbXR1IH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgy
MDBhKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZ3cm9uZ19zY29fbXR1IH0sDQo+
ICsJeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDA5KSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVk
IGxvbmcpIA0KPiArJmJjbTkyMDM1IH0sDQo+ICANCj4gIAkvKiBCcm9hZGNvbSBCQ00yMDQ1ICov
DQo+IC0JeyBVU0JfREVWSUNFKDB4MGE1YywgMHgyMDM5KSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf
V1JPTkdfU0NPX01UVSB9LA0KPiAtCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjEwMSksIC5kcml2
ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTVj
LCAweDIwMzkpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJndyb25nX3Njb19tdHUg
fSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwYTVjLCAweDIxMDEpLCAuZHJpdmVyX2luZm8gPSAodW5z
aWduZWQgbG9uZykgDQo+ICsmd3Jvbmdfc2NvX210dSB9LA0KPiAgDQo+ICAJLyogSUJNL0xlbm92
byBUaGlua1BhZCB3aXRoIEJyb2FkY29tIGNoaXAgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgwYTVj
LCAweDIwMWUpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+IC0JeyBV
U0JfREVWSUNFKDB4MGE1YywgMHgyMTEwKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NP
X01UVSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBhNWMsIDB4MjAxZSksIC5kcml2ZXJfaW5mbyA9
ICh1bnNpZ25lZCBsb25nKSAmd3Jvbmdfc2NvX210dSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBh
NWMsIDB4MjExMCksIC5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSANCj4gKyZ3cm9uZ19z
Y29fbXR1IH0sDQo+ICANCj4gIAkvKiBIUCBsYXB0b3Agd2l0aCBCcm9hZGNvbSBjaGlwICovDQo+
IC0JeyBVU0JfREVWSUNFKDB4MDNmMCwgMHgxNzFkKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JP
TkdfU0NPX01UVSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDAzZjAsIDB4MTcxZCksIC5kcml2ZXJf
aW5mbyA9ICh1bnNpZ25lZCBsb25nKSANCj4gKyZ3cm9uZ19zY29fbXR1IH0sDQo+ICANCj4gIAkv
KiBEZWxsIGxhcHRvcCB3aXRoIEJyb2FkY29tIGNoaXAgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHg0
MTNjLCAweDgxMjYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+ICsJ
eyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTI2KSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxv
bmcpIA0KPiArJndyb25nX3Njb19tdHUgfSwNCj4gIA0KPiAgCS8qIERlbGwgV2lyZWxlc3MgMzcw
IGFuZCA0MTAgZGV2aWNlcyAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDQxM2MsIDB4ODE1MiksIC5k
cml2ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUgfSwNCj4gLQl7IFVTQl9ERVZJQ0UoMHg0
MTNjLCAweDgxNTYpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9XUk9OR19TQ09fTVRVIH0sDQo+ICsJ
eyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTUyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxv
bmcpICZ3cm9uZ19zY29fbXR1IH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4NDEzYywgMHg4MTU2KSwg
LmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJndyb25nX3Njb19tdHUgfSwNCj4g
IA0KPiAgCS8qIEJlbGtpbiBGOFQwMTIgYW5kIEY4VDAxMyBkZXZpY2VzICovDQo+IC0JeyBVU0Jf
REVWSUNFKDB4MDUwZCwgMHgwMDEyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfV1JPTkdfU0NPX01U
VSB9LA0KPiAtCXsgVVNCX0RFVklDRSgweDA1MGQsIDB4MDAxMyksIC5kcml2ZXJfaW5mbyA9IEJU
VVNCX1dST05HX1NDT19NVFUgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwNTBkLCAweDAwMTIpLCAu
ZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJndyb25nX3Njb19tdHUgfSwNCj4gKwl7IFVT
Ql9ERVZJQ0UoMHgwNTBkLCAweDAwMTMpLCAuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykg
DQo+ICsmd3Jvbmdfc2NvX210dSB9LA0KPiAgDQo+ICAJLyogQXN1cyBXTC1CVEQyMDIgZGV2aWNl
ICovDQo+IC0JeyBVU0JfREVWSUNFKDB4MGIwNSwgMHgxNzE1KSwgLmRyaXZlcl9pbmZvID0gQlRV
U0JfV1JPTkdfU0NPX01UVSB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBiMDUsIDB4MTcxNSksIC5k
cml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSANCj4gKyZ3cm9uZ19zY29fbXR1IH0sDQo+ICAN
Cj4gIAkvKiBLZW5zaW5ndG9uIEJsdWV0b290aCBVU0IgYWRhcHRlciAqLw0KPiAtCXsgVVNCX0RF
VklDRSgweDA0N2QsIDB4MTA1ZSksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX1dST05HX1NDT19NVFUg
fSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwNDdkLCAweDEwNWUpLCAuZHJpdmVyX2luZm8gPSAodW5z
aWduZWQgbG9uZykgDQo+ICsmd3Jvbmdfc2NvX210dSB9LA0KPiAgDQo+ICAJLyogUlRYIFRlbGVj
b20gYmFzZWQgYWRhcHRlcnMgd2l0aCBidWdneSBTQ08gc3VwcG9ydCAqLw0KPiAtCXsgVVNCX0RF
VklDRSgweDA0MDAsIDB4MDgwNyksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JST0tFTl9JU09DIH0s
DQo+IC0JeyBVU0JfREVWSUNFKDB4MDQwMCwgMHgwODBhKSwgLmRyaXZlcl9pbmZvID0gQlRVU0Jf
QlJPS0VOX0lTT0MgfSwNCj4gKwl7IFVTQl9ERVZJQ0UoMHgwNDAwLCAweDA4MDcpLCAuZHJpdmVy
X2luZm8gPSAodW5zaWduZWQgbG9uZykgJmJyb2tlbl9pc29jIH0sDQo+ICsJeyBVU0JfREVWSUNF
KDB4MDQwMCwgMHgwODBhKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJmJy
b2tlbl9pc29jIH0sDQo+ICANCj4gIAkvKiBDT05XSVNFIFRlY2hub2xvZ3kgYmFzZWQgYWRhcHRl
cnMgd2l0aCBidWdneSBTQ08gc3VwcG9ydCAqLw0KPiAtCXsgVVNCX0RFVklDRSgweDBlNWUsIDB4
NjYyMiksIC5kcml2ZXJfaW5mbyA9IEJUVVNCX0JST0tFTl9JU09DIH0sDQo+ICsJeyBVU0JfREVW
SUNFKDB4MGU1ZSwgMHg2NjIyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiAr
JmJyb2tlbl9pc29jIH0sDQo+ICANCj4gIAkvKiBEaWdpYW5zd2VyIGRldmljZXMgKi8NCj4gLQl7
IFVTQl9ERVZJQ0UoMHgwOGZkLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9ESUdJQU5T
V0VSIH0sDQo+IC0JeyBVU0JfREVWSUNFKDB4MDhmZCwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0g
QlRVU0JfSUdOT1JFIH0sDQo+ICsJeyBVU0JfREVWSUNFKDB4MDhmZCwgMHgwMDAxKSwgLmRyaXZl
cl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZkaWdpYW5zd2VyIH0sDQo+ICsJeyBVU0JfREVWSUNF
KDB4MDhmZCwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpICZpZ25vcmUg
DQo+ICt9LA0KPiAgDQo+ICAJLyogQ1NSIEJsdWVDb3JlIEJsdWV0b290aCBTbmlmZmVyICovDQo+
IC0JeyBVU0JfREVWSUNFKDB4MGExMiwgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gQlRVU0JfU05J
RkZFUiB9LA0KPiArCXsgVVNCX0RFVklDRSgweDBhMTIsIDB4MDAwMiksIC5kcml2ZXJfaW5mbyA9
ICh1bnNpZ25lZCBsb25nKSANCj4gKyZzbmlmZmVyIH0sDQo+ICANCj4gIAkvKiBGcm9udGxpbmUg
Q29tUHJvYmUgQmx1ZXRvb3RoIFNuaWZmZXIgKi8NCj4gLQl7IFVTQl9ERVZJQ0UoMHgxNmQzLCAw
eDAwMDIpLCAuZHJpdmVyX2luZm8gPSBCVFVTQl9TTklGRkVSIH0sDQo+ICsJeyBVU0JfREVWSUNF
KDB4MTZkMywgMHgwMDAyKSwgLmRyaXZlcl9pbmZvID0gKHVuc2lnbmVkIGxvbmcpIA0KPiArJnNu
aWZmZXIgfSwNCj4gIA0KPiAgCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLw0KPiAgfTsNCj4g
QEAgLTkxMCwxMiArOTU1LDEyIEBAIHN0YXRpYyB2b2lkIGJ0dXNiX3dha2VyKHN0cnVjdCB3b3Jr
X3N0cnVjdCAqd29yaykNCj4gIAl1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoZGF0YS0+aW50Zik7
DQo+ICB9DQo+ICANCj4gLXN0YXRpYyBpbnQgYnR1c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZh
Y2UgKmludGYsDQo+IC0JCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQ0KPiAraW50
IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgDQo+
ICt1c2JfZGV2aWNlX2lkICppZCkNCj4gIHsNCj4gIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2Ny
aXB0b3IgKmVwX2Rlc2M7DQo+ICAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGE7DQo+ICAJc3RydWN0
IGhjaV9kZXYgKmhkZXY7DQo+ICsJc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvICppbmZvOw0KPiAg
CWludCBpLCBlcnI7DQo+ICANCj4gIAlCVF9EQkcoImludGYgJXAgaWQgJXAiLCBpbnRmLCBpZCk7
DQo+IEBAIC05MzEsMTkgKzk3NiwyOCBAQCBzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1
c2JfaW50ZXJmYWNlICppbnRmLA0KPiAgCQkJaWQgPSBtYXRjaDsNCj4gIAl9DQo+ICANCj4gLQlp
ZiAoaWQtPmRyaXZlcl9pbmZvID09IEJUVVNCX0lHTk9SRSkNCj4gKwkvKg0KPiArCSAqIE1ha2Ug
c3VyZSB0aGUgZHJpdmVyX2luZm8gaXMgbm90IG51bGwgb3IgMCBiZWNhdXNlIHRoZSBjb2RlIGJl
bG93DQo+ICsJICogbmVlZCB0byBhY2Nlc3MgdGhlIGZsYWdzDQo+ICsJICovDQo+ICsJaWYgKCFp
ZC0+ZHJpdmVyX2luZm8pDQo+ICsJCWluZm8gPSAoc3RydWN0IGJ0dXNiX2RyaXZlcl9pbmZvICop
ICZnZW5lcmljOw0KPiArCWVsc2UNCj4gKwkJaW5mbyA9IChzdHJ1Y3QgYnR1c2JfZHJpdmVyX2lu
Zm8gKikgaWQtPmRyaXZlcl9pbmZvOw0KPiArDQo+ICsJaWYgKGluZm8tPmZsYWdzID09IEJUVVNC
X0lHTk9SRSkNCj4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ICANCj4gLQlpZiAoaWdub3JlX2RnYSAm
JiBpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9ESUdJQU5TV0VSKQ0KPiArCWlmIChpZ25vcmVfZGdh
ICYmIChpbmZvLT5mbGFncyAmIEJUVVNCX0RJR0lBTlNXRVIpKQ0KPiAgCQlyZXR1cm4gLUVOT0RF
VjsNCj4gIA0KPiAtCWlmIChpZ25vcmVfY3NyICYmIGlkLT5kcml2ZXJfaW5mbyAmIEJUVVNCX0NT
UikNCj4gKwlpZiAoaWdub3JlX2NzciAmJiAoaW5mby0+ZmxhZ3MgJiBCVFVTQl9DU1IpKQ0KPiAg
CQlyZXR1cm4gLUVOT0RFVjsNCj4gIA0KPiAtCWlmIChpZ25vcmVfc25pZmZlciAmJiBpZC0+ZHJp
dmVyX2luZm8gJiBCVFVTQl9TTklGRkVSKQ0KPiArCWlmIChpZ25vcmVfc25pZmZlciAmJiAoaW5m
by0+ZmxhZ3MgJiBCVFVTQl9TTklGRkVSKSkNCj4gIAkJcmV0dXJuIC1FTk9ERVY7DQo+ICANCj4g
LQlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfQVRIMzAxMikgew0KPiArCWlmIChpbmZvLT5m
bGFncyAmIEJUVVNCX0FUSDMwMTIpIHsNCj4gIAkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBp
bnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOw0KPiAgDQo+ICAJCS8qIE9sZCBmaXJtd2FyZSB3b3Vs
ZCBvdGhlcndpc2UgbGV0IGF0aDNrIGRyaXZlciBsb2FkIEBAIC0xMDEyLDI2IA0KPiArMTA2Niwz
MCBAQCBzdGF0aWMgaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLA0K
PiAgCWhkZXYtPnNlbmQgICAgID0gYnR1c2Jfc2VuZF9mcmFtZTsNCj4gIAloZGV2LT5ub3RpZnkg
ICA9IGJ0dXNiX25vdGlmeTsNCj4gIA0KPiArCS8qIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgaW5p
dGlhbGl6YXRpb24gcm91dGluZXMgKi8NCj4gKwloZGV2LT52c2Rldl9pbml0ID0gaW5mby0+dnNk
ZXZfaW5pdDsNCj4gKwloZGV2LT52c2Rldl9ldmVudCA9IGluZm8tPnZzZGV2X2V2ZW50Ow0KPiAr
DQo+ICAJLyogSW50ZXJmYWNlIG51bWJlcnMgYXJlIGhhcmRjb2RlZCBpbiB0aGUgc3BlY2lmaWNh
dGlvbiAqLw0KPiAgCWRhdGEtPmlzb2MgPSB1c2JfaWZudW1fdG9faWYoZGF0YS0+dWRldiwgMSk7
DQo+ICANCj4gIAlpZiAoIXJlc2V0KQ0KPiAgCQlzZXRfYml0KEhDSV9RVUlSS19SRVNFVF9PTl9D
TE9TRSwgJmhkZXYtPnF1aXJrcyk7DQo+ICANCj4gLQlpZiAoZm9yY2Vfc2NvZml4IHx8IGlkLT5k
cml2ZXJfaW5mbyAmIEJUVVNCX1dST05HX1NDT19NVFUpIHsNCj4gKwlpZiAoZm9yY2Vfc2NvZml4
IHx8IChpbmZvLT5mbGFncyAmIEJUVVNCX1dST05HX1NDT19NVFUpKSB7DQo+ICAJCWlmICghZGlz
YWJsZV9zY29maXgpDQo+ICAJCQlzZXRfYml0KEhDSV9RVUlSS19GSVhVUF9CVUZGRVJfU0laRSwg
JmhkZXYtPnF1aXJrcyk7DQo+ICAJfQ0KPiAgDQo+IC0JaWYgKGlkLT5kcml2ZXJfaW5mbyAmIEJU
VVNCX0JST0tFTl9JU09DKQ0KPiArCWlmIChpbmZvLT5mbGFncyAmIEJUVVNCX0JST0tFTl9JU09D
KQ0KPiAgCQlkYXRhLT5pc29jID0gTlVMTDsNCj4gIA0KPiAtCWlmIChpZC0+ZHJpdmVyX2luZm8g
JiBCVFVTQl9ESUdJQU5TV0VSKSB7DQo+ICsJaWYgKGluZm8tPmZsYWdzICYgQlRVU0JfRElHSUFO
U1dFUikgew0KPiAgCQlkYXRhLT5jbWRyZXFfdHlwZSA9IFVTQl9UWVBFX1ZFTkRPUjsNCj4gIAkJ
c2V0X2JpdChIQ0lfUVVJUktfUkVTRVRfT05fQ0xPU0UsICZoZGV2LT5xdWlya3MpOw0KPiAgCX0N
Cj4gIA0KPiAtCWlmIChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9DU1IpIHsNCj4gKwlpZiAoaW5m
by0+ZmxhZ3MgJiBCVFVTQl9DU1IpIHsNCj4gIAkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBk
YXRhLT51ZGV2Ow0KPiAgDQo+ICAJCS8qIE9sZCBmaXJtd2FyZSB3b3VsZCBvdGhlcndpc2UgZXhl
Y3V0ZSBVU0IgcmVzZXQgKi8gQEAgLTEwMzksNyANCj4gKzEwOTcsNyBAQCBzdGF0aWMgaW50IGJ0
dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLA0KPiAgCQkJc2V0X2JpdChIQ0lf
UVVJUktfUkVTRVRfT05fQ0xPU0UsICZoZGV2LT5xdWlya3MpOw0KPiAgCX0NCj4gIA0KPiAtCWlm
IChpZC0+ZHJpdmVyX2luZm8gJiBCVFVTQl9TTklGRkVSKSB7DQo+ICsJaWYgKGluZm8tPmZsYWdz
ICYgQlRVU0JfU05JRkZFUikgew0KPiAgCQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGRhdGEt
PnVkZXY7DQo+ICANCj4gIAkJLyogTmV3IHNuaWZmZXIgZmlybXdhcmUgaGFzIGNyaXBwbGVkIEhD
SSBpbnRlcmZhY2UgKi8gQEAgLTEwNDksNyANCj4gKzExMDcsNyBAQCBzdGF0aWMgaW50IGJ0dXNi
X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLA0KPiAgCQlkYXRhLT5pc29jID0gTlVM
TDsNCj4gIAl9DQo+ICANCj4gLQlpZiAoaWQtPmRyaXZlcl9pbmZvICYgQlRVU0JfQkNNOTIwMzUp
IHsNCj4gKwlpZiAoaW5mby0+ZmxhZ3MgJiBCVFVTQl9CQ005MjAzNSkgew0KPiAgCQl1bnNpZ25l
ZCBjaGFyIGNtZFtdID0geyAweDNiLCAweGZjLCAweDAxLCAweDAwIH07DQo+ICAJCXN0cnVjdCBz
a19idWZmICpza2I7DQo+ICANCj4gQEAgLTEwNzksOCArMTEzNyw5IEBAIHN0YXRpYyBpbnQgYnR1
c2JfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgDQo+ICppbnRmLA0KPiAgDQo+ICAJcmV0dXJu
IDA7DQo+ICB9DQo+ICtFWFBPUlRfU1lNQk9MX0dQTChidHVzYl9wcm9iZSk7DQo+ICANCj4gLXN0
YXRpYyB2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpDQo+
ICt2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpDQo+ICB7
DQo+ICAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOw0K
PiAgCXN0cnVjdCBoY2lfZGV2ICpoZGV2Ow0KPiBAQCAtMTEwNSw5ICsxMTY0LDEwIEBAIHN0YXRp
YyB2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0IA0KPiB1c2JfaW50ZXJmYWNlICppbnRmKQ0K
PiAgDQo+ICAJaGNpX2ZyZWVfZGV2KGhkZXYpOw0KPiAgfQ0KPiArRVhQT1JUX1NZTUJPTF9HUEwo
YnR1c2JfZGlzY29ubmVjdCk7DQo+ICANCj4gICNpZmRlZiBDT05GSUdfUE0NCj4gLXN0YXRpYyBp
bnQgYnR1c2Jfc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90
IA0KPiBtZXNzYWdlKQ0KPiAraW50IGJ0dXNiX3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2Ug
KmludGYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKQ0KPiAgew0KPiAgCXN0cnVjdCBidHVzYl9kYXRh
ICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsNCj4gIA0KPiBAQCAtMTEzMyw2ICsxMTkz
LDcgQEAgc3RhdGljIGludCBidHVzYl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlIA0KPiAq
aW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpDQo+ICANCj4gIAlyZXR1cm4gMDsNCj4gIH0NCj4g
K0VYUE9SVF9TWU1CT0xfR1BMKGJ0dXNiX3N1c3BlbmQpOw0KPiAgDQo+ICBzdGF0aWMgdm9pZCBw
bGF5X2RlZmVycmVkKHN0cnVjdCBidHVzYl9kYXRhICpkYXRhKSAgeyBAQCAtMTE0OSw3IA0KPiAr
MTIxMCw3IEBAIHN0YXRpYyB2b2lkIHBsYXlfZGVmZXJyZWQoc3RydWN0IGJ0dXNiX2RhdGEgKmRh
dGEpDQo+ICAJdXNiX3NjdXR0bGVfYW5jaG9yZWRfdXJicygmZGF0YS0+ZGVmZXJyZWQpOw0KPiAg
fQ0KPiAgDQo+IC1zdGF0aWMgaW50IGJ0dXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAq
aW50ZikNCj4gK2ludCBidHVzYl9yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpDQo+
ICB7DQo+ICAJc3RydWN0IGJ0dXNiX2RhdGEgKmRhdGEgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYp
Ow0KPiAgCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGF0YS0+aGRldjsNCj4gQEAgLTEyMDUsOCAr
MTI2NiwxMCBAQCBkb25lOg0KPiAgDQo+ICAJcmV0dXJuIGVycjsNCj4gIH0NCj4gK0VYUE9SVF9T
WU1CT0xfR1BMKGJ0dXNiX3Jlc3VtZSk7DQo+ICAjZW5kaWYNCj4gIA0KPiArDQo+ICBzdGF0aWMg
c3RydWN0IHVzYl9kcml2ZXIgYnR1c2JfZHJpdmVyID0gew0KPiAgCS5uYW1lCQk9ICJidHVzYiIs
DQo+ICAJLnByb2JlCQk9IGJ0dXNiX3Byb2JlLA0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVl
dG9vdGgvYnR1c2IuaCBiL2RyaXZlcnMvYmx1ZXRvb3RoL2J0dXNiLmggbmV3IA0KPiBmaWxlIG1v
ZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAuLmMyNmE4NDUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg
Yi9kcml2ZXJzL2JsdWV0b290aC9idHVzYi5oDQo+IEBAIC0wLDAgKzEsNTMgQEANCj4gKy8qDQo+
ICsgKg0KPiArICogIEdlbmVyaWMgQmx1ZXRvb3RoIFVTQiBkcml2ZXINCj4gKyAqDQo+ICsgKiAg
Q29weXJpZ2h0IChDKSAyMDA1LTIwMDggIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5u
Lm9yZz4NCj4gKyAqDQo+ICsgKg0KPiArICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgDQo+ICttb2RpZnkNCj4gKyAqICBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCANCj4gK2J5DQo+ICsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3INCj4gKyAqICAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLg0KPiArICoNCj4gKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCj4gKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KPiAr
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUNCj4gKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLg0KPiArICoNCj4gKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KPiArICogIGFsb25nIHdpdGggdGhpcyBwcm9n
cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlDQo+ICsgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIA0KPiArMDIx
MTEtMTMwNyAgVVNBDQo+ICsgKg0KPiArICovDQo+ICsjaWZuZGVmIF9CVFVTQl9IDQo+ICsjZGVm
aW5lIF9CVFVTQl9IDQo+ICsNCj4gK3N0cnVjdCBidHVzYl9kcml2ZXJfaW5mbyB7DQo+ICsJY2hh
cgkqZGVzY3JpcHRpb247DQo+ICsJaW50CWZsYWdzOw0KPiArI2RlZmluZSBCVFVTQl9HRU5FUklD
CQkweDAwDQo+ICsjZGVmaW5lIEJUVVNCX0lHTk9SRQkJMHgwMQ0KPiArI2RlZmluZSBCVFVTQl9E
SUdJQU5TV0VSCTB4MDINCj4gKyNkZWZpbmUgQlRVU0JfQ1NSCQkweDA0DQo+ICsjZGVmaW5lIEJU
VVNCX1NOSUZGRVIJCTB4MDgNCj4gKyNkZWZpbmUgQlRVU0JfQkNNOTIwMzUJCTB4MTANCj4gKyNk
ZWZpbmUgQlRVU0JfQlJPS0VOX0lTT0MJMHgyMA0KPiArI2RlZmluZSBCVFVTQl9XUk9OR19TQ09f
TVRVCTB4NDANCj4gKyNkZWZpbmUgQlRVU0JfQVRIMzAxMgkJMHg4MA0KPiArDQo+ICsJLyogZW50
cnkgcG9pbnQgZm9yIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhbGl6YXRpb24gKi8NCj4g
KwlpbnQJKCp2c2Rldl9pbml0KShzdHJ1Y3QgaGNpX2RldiAqaGRldik7DQoNCj4+IEtlZXAgaXQg
c2ltcGxlLiBDYWxsIHRoaXMgKCpzZXR1cCkuDQoNCj4gKw0KPiArCS8qIGV2ZW50IGhhbmRsZXIg
ZHVyaW5nIHZlbmRvciBzcGVjaWZpYyBkZXZpY2UgaW5pdGlhdGlvbiBwaGFzZSAqLw0KPiArCXZv
aWQJKCp2c2Rldl9ldmVudCkoc3RydWN0IGhjaV9kZXYgKmhkZXYsIHN0cnVjdCBza19idWZmICpz
a2IpOw0KDQo+PkFuZCB0aGlzIGp1c3QgKCpldmVudCkuDQoNCj4+IEkgYW0gc3RpbGwgY3VyaW91
cyBpZiB3ZSB3b3VsZCBuZWVkIHRoZSBldmVudCBwYXJ0IGF0IGFsbCB3aGVuIHVzaW5nIEhDSSBj
b21tYW5kIGhhbmRsaW5nIHdpdGggY2FsbGJhY2tzLCBidXQgSSBrbm93IGF0IGxlYXN0IHRoYXQg
Q1NSIGlzIG5vdCBmb2xsb3dpbmcgdGhlIEhDSSBzcGVjaWZpY2F0aW9uIGZvciBjb21tYW5kICsg
ZXZlbnQsIHNvIGl0IG1pZ2h0IGJlIGEgZ29vZCBpZGVhLg0KDQo+ICt9Ow0KPiArDQo+ICtleHRl
cm4gaW50IGJ0dXNiX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICosIGNvbnN0IHN0cnVjdCAN
Cj4gK3VzYl9kZXZpY2VfaWQgKik7IGV4dGVybiB2b2lkIGJ0dXNiX2Rpc2Nvbm5lY3Qoc3RydWN0
IHVzYl9pbnRlcmZhY2UgDQo+ICsqKTsgI2lmZGVmIENPTkZJR19QTSBleHRlcm4gaW50IGJ0dXNi
X3N1c3BlbmQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKiwgDQo+ICtwbV9tZXNzYWdlX3QpOyBleHRl
cm4gaW50IGJ0dXNiX3Jlc3VtZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqKTsgDQo+ICsjZW5kaWYN
Cj4gKw0KPiArI2VuZGlmIC8qIF9CVFVTQl9IICovDQo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL25l
dC9ibHVldG9vdGgvaGNpX2NvcmUuaCANCj4gYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2Nv
cmUuaA0KPiBpbmRleCA2YTMzMzdlLi40YWY2MDFkIDEwMDY0NA0KPiAtLS0gYS9pbmNsdWRlL25l
dC9ibHVldG9vdGgvaGNpX2NvcmUuaA0KPiArKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNp
X2NvcmUuaA0KPiBAQCAtMjc1LDYgKzI3NSwxNiBAQCBzdHJ1Y3QgaGNpX2RldiB7DQo+ICAJaW50
ICgqc2VuZCkoc3RydWN0IHNrX2J1ZmYgKnNrYik7DQo+ICAJdm9pZCAoKm5vdGlmeSkoc3RydWN0
IGhjaV9kZXYgKmhkZXYsIHVuc2lnbmVkIGludCBldnQpOw0KPiAgCWludCAoKmlvY3RsKShzdHJ1
Y3QgaGNpX2RldiAqaGRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyANCj4gYXJn
KTsNCj4gKw0KPiArCS8qDQo+ICsJICogVE9ETzogQWRkZWQgZm9sbG93aW5nIG1lbWJlcnMgZm9y
IHZlbmRvciBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiB0bw0KPiArCSAqIG1ha2UgdGhlIGJsdWV0
b290aC5rbyB0cmFuc3BhcmVudCB0byB0aGUgaW50ZXJmYWNlLg0KPiArCSAqIFRoZXNlIG1lbWJl
cnMgYXJlIHNldCBieSB0aGUgdmVuZG9yIHByb3ZpZGVkIGRyaXZlcg0KPiArCSAqLw0KPiArCWlu
dAkJCXZzZGV2X2luaXRfZG9uZTsNCg0KPj4gRm9yIHRoaXMsIHBsZWFzZSB1c2UgZGV2X2ZsYWdz
LiBObyBuZWVkIHdhc3RlIHNwYWNlIHdpdGggYW5vdGhlciB2YXJpYWJsZS4NCg0KPiArCXZvaWQJ
CQkqdnNkZXZfcHJpdl9kYXRhOw0KPiArCWludCAoKnZzZGV2X2luaXQpKHN0cnVjdCBoY2lfZGV2
ICpoZGV2KTsNCj4gKwl2b2lkICgqdnNkZXZfZXZlbnQpKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBz
dHJ1Y3Qgc2tfYnVmZiAqc2tiKTsNCj4gIH07DQoNCj4+IFJhdGhlciBsaWtlIHZlbmRvcl9zZXR1
cCBhbmQgdmVuZG9yX2V2ZW50IGhlcmUuIEkgZG8gbm90IGV2ZW4gd2FudCB0byBrbm93IHdoYXQg
dnMgc3RhbmRzIGZvciA7KQ0KDQo+PiBIb3BlIHdlIGFyZSBub3QgZ2V0dGluZyBpbnRvIHRyb3Vi
bGUgd2l0aCBkcml2ZXIgaWQgdGFibGVzIG5vcm1hbGx5IGJlaW5nIGNvbnN0Lg0KDQo+ICANCj4g
IHN0cnVjdCBoY2lfY29ubiB7DQo+IGRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3Jl
LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMgaW5kZXggDQo+IGU0MDcwNTEuLjgwYWExM2Yg
MTAwNjQ0DQo+IC0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYw0KPiArKysgYi9uZXQvYmx1
ZXRvb3RoL2hjaV9jb3JlLmMNCj4gQEAgLTY4NSw2ICs2ODUsMTUgQEAgaW50IGhjaV9kZXZfb3Bl
bihfX3UxNiBkZXYpDQo+ICAJCXNldF9iaXQoSENJX0lOSVQsICZoZGV2LT5mbGFncyk7DQo+ICAJ
CWhkZXYtPmluaXRfbGFzdF9jbWQgPSAwOw0KPiAgDQo+ICsJCS8qIHZlbmRvciBzcGVjaWZpYyBk
ZXZpY2UgaW5pdGlhbGl6YXRpb24gKi8NCj4gKwkJaWYgKGhkZXYtPnZzZGV2X2luaXQpIHsNCj4g
KwkJCXJldCA9IGhkZXYtPnZzZGV2X2luaXQoaGRldik7DQo+ICsJCQloZGV2LT52c2Rldl9pbml0
X2RvbmUgPSAxOw0KPiArCQkJaGRldi0+dnNkZXZfZXZlbnQgPSBOVUxMOw0KPiArCQkJaWYgKHJl
dCA8IDApDQo+ICsJCQkJZ290byBkb25lOw0KPiArCQl9DQo+ICsNCg0KPj4gRG8geW91IHJlYWxs
eSB3YW50IHRvIGRvIHRoaXMgb24gZXZlcnkgaGNpY29uZmlnIGhjaTAgdXA/IEkgYXNzdW1lZCB0
aGlzIGlzIGEgb25lIHRpbWUgdGFzay4gU28geW91IG1pZ2h0IGJldHRlciBsb29rIGF0IGhjaV9w
b3dlcl9vbigpIGZvciB0aGlzLg0KDQo+PiBJcyBhIEhDSV9SZXNldCBjb21tYW5kIHVubG9hZGlu
ZyB0aGUgZmlybXdhcmUgcGF0Y2hlcy4NCg0KPiAgCQlyZXQgPSBfX2hjaV9yZXF1ZXN0KGhkZXYs
IGhjaV9pbml0X3JlcSwgMCwgSENJX0lOSVRfVElNRU9VVCk7DQo+ICANCj4gIAkJaWYgKGxtcF9o
b3N0X2xlX2NhcGFibGUoaGRldikpDQo+IEBAIC0yMTE5LDYgKzIxMjgsNyBAQCBpbnQgaGNpX3Nl
bmRfY21kKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3UxNiANCj4gb3Bjb2RlLCBfX3UzMiBwbGVu
LCB2b2lkICpwYXJhbSkNCj4gIA0KPiAgCXJldHVybiAwOw0KPiAgfQ0KPiArRVhQT1JUX1NZTUJP
TChoY2lfc2VuZF9jbWQpOw0KPiAgDQo+ICAvKiBHZXQgZGF0YSBmcm9tIHRoZSBwcmV2aW91c2x5
IHNlbnQgY29tbWFuZCAqLyAgdm9pZCANCj4gKmhjaV9zZW50X2NtZF9kYXRhKHN0cnVjdCBoY2lf
ZGV2ICpoZGV2LCBfX3UxNiBvcGNvZGUpIEBAIC0yODAwLDcgDQo+ICsyODEwLDEwIEBAIHN0YXRp
YyB2b2lkIGhjaV9yeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykNCj4gIAkJc3dpdGNo
IChidF9jYihza2IpLT5wa3RfdHlwZSkgew0KPiAgCQljYXNlIEhDSV9FVkVOVF9QS1Q6DQo+ICAJ
CQlCVF9EQkcoIiVzIEV2ZW50IHBhY2tldCIsIGhkZXYtPm5hbWUpOw0KPiAtCQkJaGNpX2V2ZW50
X3BhY2tldChoZGV2LCBza2IpOw0KPiArCQkJaWYgKGhkZXYtPnZzZGV2X2V2ZW50ICYmICFoZGV2
LT52c2Rldl9pbml0X2RvbmUpDQo+ICsJCQkJaGRldi0+dnNkZXZfZXZlbnQoaGRldiwgc2tiKTsN
Cj4gKwkJCWVsc2UNCj4gKwkJCQloY2lfZXZlbnRfcGFja2V0KGhkZXYsIHNrYik7DQo+ICAJCQli
cmVhazsNCg0KPj4gTm90IGdvaW5nIHRocm91Z2ggaGNpX2V2ZW50X3BhY2tldCBpcyBhIGJhZCBp
ZGVhLiBUaGF0IHdpbGwgc2NyZXcgb3ZlciB0aGUgZmxvdyBjb250cm9sIGhhbmRsaW5nIGZvciBj
b21tYW5kcy4NCg0KPj4gUmVnYXJkcw0KDQo+PiBNYXJjZWwNCg0KUmVnYXJkcywNCkFsYmVydA0K
DQoNCg0K

^ permalink raw reply

* Re: [PATCHv5 00/18] L2CAP signaling for AMP channel create/move
From: Andrei Emeltchenko @ 2012-10-24  4:58 UTC (permalink / raw)
  To: Marcel Holtmann; +Cc: sunnyk, gustavo, linux-bluetooth, Mat Martineau
In-Reply-To: <1351031906.1785.64.camel@aeonflux>

[-- Attachment #1: Type: text/plain, Size: 430 bytes --]

Hi Marcel,

> > Here are the changes that process commands on the L2CAP signaling
> > channel for setting up AMP channels.  There's still a lot of
> > integration to do as other AMP functionality is implemented.  I've
> > marked places that require this integration with "Placeholder"
> > comments (look for that string).
>
> this looks fine to me now.
>
> Andrei, what is left to do on your side?

Looks OK now.

Regards,
Andrei

[-- Attachment #2: Type: text/html, Size: 573 bytes --]

^ permalink raw reply

* [PATCH] Bluetooth: Add support for Atheros [04ca:3004]
From: Dwaine Garden VE3GIF @ 2012-10-24  4:57 UTC (permalink / raw)
  To: linux-bluetooth@vger.kernel.org

Add another vendor specific ID for Atheros AR3012 device.
This chip is wrapped by Lite-On Technology Corp.

output of usb-devices:T:  Bus=01 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  3 Spd=12   MxCh= 0
D:  Ver= 1.10 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
P:  Vendor=04ca ProdID=3004 Rev= 0.02
S:  Manufacturer=Atheros Communications
S:  Product=Bluetooth USB Host Controller
S:  SerialNumber=Alaska Day 2006

Signed-off-by: Dwaine Garden <DwaineGarden@rogers.com>  ---

diff --git a/drivers/bluetooth/ath3k.c b/drivers/bluetooth/ath3k.c
index fc2de55..1486f15 100644
--- a/drivers/bluetooth/ath3k.c
+++ b/drivers/bluetooth/ath3k.c
@@ -75,6 +75,7 @@ static struct usb_device_id ath3k_table[] = {
{ USB_DEVICE(0x0CF3, 0x3004) },
{ USB_DEVICE(0x0CF3, 0x311D) },
{ USB_DEVICE(0x13d3, 0x3375) },
+	{ USB_DEVICE(0x04CA, 0x3004) },
{ USB_DEVICE(0x04CA, 0x3005) },
{ USB_DEVICE(0x13d3, 0x3362) },
{ USB_DEVICE(0x0CF3, 0xE004) },
@@ -102,6 +103,7 @@ static struct usb_device_id ath3k_blist_tbl[] = {
{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0x311D), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
+	{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x04ca, 0x3005), .driver_info =
 BTUSB_ATH3012 },
{
 USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index debda27..0529cee 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -132,6 +132,7 @@ static struct usb_device_id blacklist_table[] = {
{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
+	{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },

^ permalink raw reply related

* Re: [PATCH 3/5] Bluetooth: Replace include linux/module.h with linux/export.h
From: Gustavo Padovan @ 2012-10-24  2:47 UTC (permalink / raw)
  To: Syam Sidhardhan; +Cc: linux-bluetooth
In-Reply-To: <1350999140-7481-3-git-send-email-s.syam@samsung.com>

Hi Syam,

* Syam Sidhardhan <s.syam@samsung.com> [2012-10-23 19:02:18 +0530]:

> include <linux/export.h> is the right to go here.
> 
> Signed-off-by: Syam Sidhardhan <s.syam@samsung.com>
> ---
>  net/bluetooth/cmtp/capi.c |    2 +-
>  net/bluetooth/cmtp/sock.c |    2 +-
>  2 files changed, 2 insertions(+), 2 deletions(-)

Patch has been applied to bluetooth-next. Thanks.

	Gustavo

^ permalink raw reply

* Re: [PATCH 1/5] Bluetooth: trivial: Remove newline before EOF
From: Gustavo Padovan @ 2012-10-24  2:46 UTC (permalink / raw)
  To: Syam Sidhardhan; +Cc: linux-bluetooth
In-Reply-To: <1350999140-7481-1-git-send-email-s.syam@samsung.com>

Hi Syam,

* Syam Sidhardhan <s.syam@samsung.com> [2012-10-23 19:02:16 +0530]:

> Trivial fix.
> 
> Signed-off-by: Syam Sidhardhan <s.syam@samsung.com>
> ---
>  net/bluetooth/Kconfig |    1 -
>  1 file changed, 1 deletion(-)

Patch has been applied to bluetooth-next. Thanks.

	Gustavo

^ permalink raw reply

* Re: [PATCHv5 18/18] Bluetooth: Start channel move when socket option is changed
From: Gustavo Padovan @ 2012-10-24  2:45 UTC (permalink / raw)
  To: Mat Martineau; +Cc: linux-bluetooth, sunnyk, marcel, andrei.emeltchenko.news
In-Reply-To: <1351031063-11791-19-git-send-email-mathewm@codeaurora.org>

Hi Mat,

* Mat Martineau <mathewm@codeaurora.org> [2012-10-23 15:24:23 -0700]:

> Channel moves are triggered by changes to the BT_CHANNEL_POLICY
> sockopt when an ERTM or streaming-mode channel is connected.
> 
> Moves are only started if enable_hs is true.
> 
> Signed-off-by: Mat Martineau <mathewm@codeaurora.org>
> Acked-by: Marcel Holtmann <marcel@holtmann.org>
> ---
>  include/net/bluetooth/l2cap.h |  1 +
>  net/bluetooth/l2cap_core.c    | 19 +++++++++++++++++++
>  net/bluetooth/l2cap_sock.c    |  5 +++++
>  3 files changed, 25 insertions(+)

all 18 patches have been applied upstream. Thanks.

	Gustavo

^ permalink raw reply

* Re: [PATCHv5 00/18] L2CAP signaling for AMP channel create/move
From: Marcel Holtmann @ 2012-10-23 22:38 UTC (permalink / raw)
  To: Mat Martineau; +Cc: linux-bluetooth, gustavo, sunnyk, andrei.emeltchenko.news
In-Reply-To: <1351031063-11791-1-git-send-email-mathewm@codeaurora.org>

Hi Mat,

> Here are the changes that process commands on the L2CAP signaling
> channel for setting up AMP channels.  There's still a lot of
> integration to do as other AMP functionality is implemented.  I've
> marked places that require this integration with "Placeholder"
> comments (look for that string).

this looks fine to me now.

Andrei, what is left to do on your side?

Regards

Marcel



^ permalink raw reply

* Re: [PATCHv5 10/18] Bluetooth: Add logical link confirm
From: Marcel Holtmann @ 2012-10-23 22:36 UTC (permalink / raw)
  To: Mat Martineau; +Cc: linux-bluetooth, gustavo, sunnyk, andrei.emeltchenko.news
In-Reply-To: <1351031063-11791-11-git-send-email-mathewm@codeaurora.org>

Hi Mat,

> The logical link confirm callback is executed when the AMP controller
> completes its logical link setup.  During a channel move, a newly
> formed logical link allows a move responder to send a move channel
> response.  A move initiator will send a move channel confirm.  A
> failed logical link will end the channel move and send an appropriate
> response or confirm command indicating a failure.
> 
> If the channel is being created on an AMP controller, L2CAP
> configuration is completed after the logical link is set up.
> 
> Signed-off-by: Mat Martineau <mathewm@codeaurora.org>
> ---
>  net/bluetooth/l2cap_core.c | 134 +++++++++++++++++++++++++++++++++++++++++----
>  1 file changed, 123 insertions(+), 11 deletions(-)

Acked-by: Marcel Holtmann <marcel@holtmann.org>

Regards

Marcel



^ permalink raw reply

* [PATCHv5 18/18] Bluetooth: Start channel move when socket option is changed
From: Mat Martineau @ 2012-10-23 22:24 UTC (permalink / raw)
  To: linux-bluetooth, gustavo; +Cc: sunnyk, marcel, andrei.emeltchenko.news
In-Reply-To: <1351031063-11791-1-git-send-email-mathewm@codeaurora.org>

Channel moves are triggered by changes to the BT_CHANNEL_POLICY
sockopt when an ERTM or streaming-mode channel is connected.

Moves are only started if enable_hs is true.

Signed-off-by: Mat Martineau <mathewm@codeaurora.org>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
---
 include/net/bluetooth/l2cap.h |  1 +
 net/bluetooth/l2cap_core.c    | 19 +++++++++++++++++++
 net/bluetooth/l2cap_sock.c    |  5 +++++
 3 files changed, 25 insertions(+)

diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index b4c3c65..49783e9 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -809,5 +809,6 @@ void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
 void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan);
 void l2cap_chan_del(struct l2cap_chan *chan, int err);
 void l2cap_send_conn_req(struct l2cap_chan *chan);
+void l2cap_move_start(struct l2cap_chan *chan);
 
 #endif /* __L2CAP_H */
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 93f1ebb..fae0c70 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -4453,6 +4453,25 @@ static void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
 	}
 }
 
+void l2cap_move_start(struct l2cap_chan *chan)
+{
+	BT_DBG("chan %p", chan);
+
+	if (chan->local_amp_id == HCI_BREDR_ID) {
+		if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED)
+			return;
+		chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
+		chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
+		/* Placeholder - start physical link setup */
+	} else {
+		chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
+		chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
+		chan->move_id = 0;
+		l2cap_move_setup(chan);
+		l2cap_send_move_chan_req(chan, 0);
+	}
+}
+
 static void l2cap_do_create(struct l2cap_chan *chan, int result,
 			    u8 local_amp_id, u8 remote_amp_id)
 {
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 89f1472..1bcfb84 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -736,6 +736,11 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
 		}
 
 		chan->chan_policy = (u8) opt;
+
+		if (sk->sk_state == BT_CONNECTED &&
+		    chan->move_role == L2CAP_MOVE_ROLE_NONE)
+			l2cap_move_start(chan);
+
 		break;
 
 	default:
-- 
1.8.0

--
Mat Martineau

Employee of Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation

^ permalink raw reply related


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox