Re: [Bluez-devel] forcing SCO connection patch

2008-02-25 Thread Louis JANG
Hi Marcel


>> --- linux-2.6.23/net/bluetooth/hci_event.c.orig 2008-02-25
>> 17:17:11.0 +0900
>> +++ linux-2.6.23/net/bluetooth/hci_event.c 2008-02-25
>> 17:30:23.0 +0900
>> @@ -1313,8 +1313,17 @@
>> hci_dev_lock(hdev);
>>
>> conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
>> - if (!conn)
>> - goto unlock;
>> + if (!conn) {
>> + if (ev->link_type != ACL_LINK) {
>> + __u8 link_type = (ev->link_type == ESCO_LINK) ? SCO_LINK : ESCO_LINK;
>> +
>> + conn = hci_conn_hash_lookup_ba(hdev, link_type, &ev->bdaddr);
>> + if (conn)
>> + conn->type = ev->link_type;
>> + }
>> + if (!conn)
>> + goto unlock;
>> + }
>
> NAK. There is no need to check for ACL_LINK. The sync_complete will
> only be called for SCO or eSCO connections.
I see. I removed this check line in the patch.

Thanks.
Louis JANG
Signed-off-by: Louis JANG <[EMAIL PROTECTED]>
--- linux-2.6.23/net/bluetooth/hci_event.c.orig 2008-02-26 12:46:36.0 
+0900
+++ linux-2.6.23/net/bluetooth/hci_event.c  2008-02-26 12:47:23.0 
+0900
@@ -1313,8 +1313,15 @@
hci_dev_lock(hdev);
 
conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
-   if (!conn)
-   goto unlock;
+   if (!conn) {
+   __u8 link_type = (ev->link_type == ESCO_LINK) ? SCO_LINK : 
ESCO_LINK;
+
+   conn = hci_conn_hash_lookup_ba(hdev, link_type, &ev->bdaddr);
+   if (conn)
+   conn->type = ev->link_type;
+   else
+   goto unlock;
+   }
 
if (!ev->status) {
conn->handle = __le16_to_cpu(ev->handle);


Re: [Bluez-devel] forcing SCO connection patch

2008-02-25 Thread Louis JANG
Dave Young 쓴 글:
> On Mon, Feb 25, 2008 at 5:28 PM, Louis JANG <[EMAIL PROTECTED]> wrote:
>   
>>  > I ever asked marcel about the coding style. please see following thread:
>>  > http://lkml.org/lkml/2008/1/22/91
>>  >
>>  > I think the style problem marcel said is
>>  > 1. using kernel codeing style
>>  > 2. marcel's style
>>  > container_of or get_user_data calls at the top of the variable declaration
>>  > using the empty lines to seperate code blocks
>>  >
>>  > Please rework your patch and resend if you fixed them.
>>  >
>>  > BTW, please use the new bluetooth mailing list for kerne issue.
>>  > [EMAIL PROTECTED]
>>  >
>>  > (Thanks for andrew and davem)
>>  >
>>  > Regards
>>  > dave
>>  >
>>  > Regards
>>  > dave
>>  >
>>  >
>>
>>  Hi all,
>>
>>  I adjusted indentation of the patches
>> 
>
> Not enough.
>
> Please first read Documentation/CodingStyle, fix them, and
> then use scripts/checkpatch.pl to check your patch.
>   
I fixed all of errors except 80 characters warning.
Thanks

Louis JANG

Signed-off-by: Louis JANG <[EMAIL PROTECTED]>

--- linux-2.6.23/net/bluetooth/hci_event.c.orig 2008-02-25 17:17:11.0 
+0900
+++ linux-2.6.23/net/bluetooth/hci_event.c  2008-02-25 17:30:23.0 
+0900
@@ -1313,8 +1313,17 @@
hci_dev_lock(hdev);
 
conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
-   if (!conn)
-   goto unlock;
+   if (!conn) {
+   if (ev->link_type != ACL_LINK) {
+   __u8 link_type = (ev->link_type == ESCO_LINK) ? 
SCO_LINK : ESCO_LINK;
+
+   conn = hci_conn_hash_lookup_ba(hdev, link_type, 
&ev->bdaddr);
+   if (conn)
+   conn->type = ev->link_type;
+   }
+   if (!conn)
+   goto unlock;
+   }
 
if (!ev->status) {
conn->handle = __le16_to_cpu(ev->handle);
Signed-off-by: Louis JANG <[EMAIL PROTECTED]>

diff -uNr linux-2.6.23/include/net/bluetooth-orig/sco.h 
linux-2.6.23/include/net/bluetooth/sco.h
--- linux-2.6.23/include/net/bluetooth-orig/sco.h   2007-10-10 
05:31:38.0 +0900
+++ linux-2.6.23/include/net/bluetooth/sco.h2008-02-25 18:04:20.0 
+0900
@@ -51,6 +51,8 @@
__u8  dev_class[3];
 };
 
+#define SCO_FORCESCO   0x03
+
 /*  SCO connections  */
 struct sco_conn {
struct hci_conn *hcon;
@@ -74,6 +76,7 @@
struct bt_sock  bt;
__u32   flags;
struct sco_conn *conn;
+   unsigned intforce_sco :1;
 };
 
 #endif /* __SCO_H */
diff -uNr linux-2.6.23/net/bluetooth-orig/hci_conn.c 
linux-2.6.23/net/bluetooth/hci_conn.c
--- linux-2.6.23/net/bluetooth-orig/hci_conn.c  2008-02-25 17:58:27.0 
+0900
+++ linux-2.6.23/net/bluetooth/hci_conn.c   2008-02-25 18:02:04.0 
+0900
@@ -354,7 +354,7 @@
 
if (acl->state == BT_CONNECTED &&
(sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
-   if (lmp_esco_capable(hdev))
+   if (type == ESCO_LINK)
hci_setup_sync(sco, acl->handle);
else
hci_add_sco(sco, acl->handle);
diff -uNr linux-2.6.23/net/bluetooth-orig/sco.c linux-2.6.23/net/bluetooth/sco.c
--- linux-2.6.23/net/bluetooth-orig/sco.c   2008-02-25 17:58:27.0 
+0900
+++ linux-2.6.23/net/bluetooth/sco.c2008-02-25 18:08:51.0 +0900
@@ -200,7 +200,10 @@
 
err = -ENOMEM;
 
-   type = lmp_esco_capable(hdev) ? ESCO_LINK : SCO_LINK;
+   if (sco_pi(sk)->force_sco)
+   type = SCO_LINK;
+   else
+   type = lmp_esco_capable(hdev) ? ESCO_LINK : SCO_LINK;
 
hcon = hci_connect(hdev, type, dst);
if (!hcon)
@@ -660,12 +663,21 @@
 {
struct sock *sk = sock->sk;
int err = 0;
+   int force_sco;
 
BT_DBG("sk %p", sk);
 
lock_sock(sk);
 
switch (optname) {
+   case SCO_FORCESCO:
+   if (copy_from_user(&force_sco, optval, sizeof(int))) {
+   err = -EFAULT;
+   break;
+   }
+   sco_pi(sk)->force_sco = (force_sco != 0);
+   break;
+
default:
err = -ENOPROTOOPT;
break;
@@ -681,6 +693,7 @@
struct sco_options opts;
struct sco_conninfo cinfo;
int len, err = 0;
+   int force_sco;
 
BT_DBG("sk %p", sk);
 
@@ -721,6 +734,13 @@
 
break;
 
+   case SCO_FORCESCO:
+   force_sco = sco_pi(sock)->force_sco;
+   if (copy_to_user(optval, &force_sco, sizeof(int)))
+   err = -EFAULT;
+
+   break;
+
default:
err = -ENOPROTOOPT;
break;


Re: [Bluez-devel] forcing SCO connection patch

2008-02-25 Thread Louis JANG

> I ever asked marcel about the coding style. please see following thread:
> http://lkml.org/lkml/2008/1/22/91
>
> I think the style problem marcel said is
> 1. using kernel codeing style
> 2. marcel's style
> container_of or get_user_data calls at the top of the variable declaration
> using the empty lines to seperate code blocks
>
> Please rework your patch and resend if you fixed them.
>
> BTW, please use the new bluetooth mailing list for kerne issue.
> [EMAIL PROTECTED]
>
> (Thanks for andrew and davem)
>
> Regards
> dave
>
> Regards
> dave
>
>   

Hi all,

I adjusted indentation of the patches but I'm not sure what's wrong
about second comment of Marcel. please let me know if there are another
problems in this patch.

Thanks in advance,
Louis JANG

--- net/bluetooth/hci_event.c.orig  2008-02-25 17:17:11.0 +0900
+++ net/bluetooth/hci_event.c   2008-02-25 17:30:23.0 +0900
@@ -1313,8 +1313,17 @@
hci_dev_lock(hdev);
 
conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
-   if (!conn)
-   goto unlock;
+   if (!conn) {
+   if (ev->link_type != ACL_LINK) {
+   __u8 link_type = (ev->link_type == ESCO_LINK) ? 
SCO_LINK : ESCO_LINK;
+
+   conn = hci_conn_hash_lookup_ba(hdev, link_type, 
&ev->bdaddr);
+   if (conn) 
+   conn->type = ev->link_type;
+   }
+   if (!conn) 
+   goto unlock;
+   }
 
if (!ev->status) {
conn->handle = __le16_to_cpu(ev->handle);
diff -uNr include/net/bluetooth-orig/sco.h include/net/bluetooth/sco.h
--- include/net/bluetooth-orig/sco.h2007-10-10 05:31:38.0 +0900
+++ include/net/bluetooth/sco.h 2008-02-25 18:04:20.0 +0900
@@ -51,6 +51,8 @@
__u8  dev_class[3];
 };
 
+#define SCO_FORCESCO   0x03
+
 /*  SCO connections  */
 struct sco_conn {
struct hci_conn *hcon;
@@ -74,6 +76,7 @@
struct bt_sock  bt;
__u32   flags;
struct sco_conn *conn;
+   unsigned intforce_sco :1;
 };
 
 #endif /* __SCO_H */
diff -uNr net/bluetooth-orig/hci_conn.c net/bluetooth/hci_conn.c
--- net/bluetooth-orig/hci_conn.c   2008-02-25 17:58:27.0 +0900
+++ net/bluetooth/hci_conn.c2008-02-25 18:02:04.0 +0900
@@ -354,7 +354,7 @@
 
if (acl->state == BT_CONNECTED &&
(sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
-   if (lmp_esco_capable(hdev))
+   if (type == ESCO_LINK)
hci_setup_sync(sco, acl->handle);
else
hci_add_sco(sco, acl->handle);
diff -uNr net/bluetooth-orig/sco.c net/bluetooth/sco.c
--- net/bluetooth-orig/sco.c2008-02-25 17:58:27.0 +0900
+++ net/bluetooth/sco.c 2008-02-25 18:08:51.0 +0900
@@ -200,7 +200,10 @@
 
err = -ENOMEM;
 
-   type = lmp_esco_capable(hdev) ? ESCO_LINK : SCO_LINK;
+   if (sco_pi(sk)->force_sco) 
+   type = SCO_LINK;
+   else
+   type = lmp_esco_capable(hdev) ? ESCO_LINK : SCO_LINK;
 
hcon = hci_connect(hdev, type, dst);
if (!hcon)
@@ -660,12 +663,21 @@
 {
struct sock *sk = sock->sk;
int err = 0;
+   unsigned int force_sco;
 
BT_DBG("sk %p", sk);
 
lock_sock(sk);
 
switch (optname) {
+   case SCO_FORCESCO:
+   if (copy_from_user((char *)&force_sco, optval, sizeof(unsigned 
int))) {
+   err = -EFAULT;
+   break;
+   }
+   sco_pi(sk)->force_sco = (force_sco != 0);
+   break;
+
default:
err = -ENOPROTOOPT;
break;
@@ -681,6 +693,7 @@
struct sco_options opts;
struct sco_conninfo cinfo;
int len, err = 0;
+   unsigned int force_sco;
 
BT_DBG("sk %p", sk);
 
@@ -721,6 +734,13 @@
 
break;
 
+   case SCO_FORCESCO:
+   force_sco = sco_pi(sock)->force_sco;
+   if (copy_to_user(optval, (char *)&force_sco, sizeof(unsigned 
int)))
+   err = -EFAULT;
+
+   break;
+   
default:
err = -ENOPROTOOPT;
break;