diff mbox series

[1/3] Bluetooth: Add bt_status

Message ID 20220513234611.1360704-1-luiz.dentz@gmail.com
State Superseded
Headers show
Series [1/3] Bluetooth: Add bt_status | expand

Commit Message

Luiz Augusto von Dentz May 13, 2022, 11:46 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

This adds bt_status which can be used to convert Unix errno to
Bluetooth status.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
---
 include/net/bluetooth/bluetooth.h |  1 +
 net/bluetooth/lib.c               | 71 +++++++++++++++++++++++++++++++
 2 files changed, 72 insertions(+)

Comments

Marcel Holtmann May 19, 2022, 6:07 p.m. UTC | #1
Hi Luiz,

> This adds bt_status which can be used to convert Unix errno to
> Bluetooth status.
> 
> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> ---
> include/net/bluetooth/bluetooth.h |  1 +
> net/bluetooth/lib.c               | 71 +++++++++++++++++++++++++++++++
> 2 files changed, 72 insertions(+)
> 
> diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
> index 6b48d9e2aab9..cfe6159f26bc 100644
> --- a/include/net/bluetooth/bluetooth.h
> +++ b/include/net/bluetooth/bluetooth.h
> @@ -521,6 +521,7 @@ static inline struct sk_buff *bt_skb_sendmmsg(struct sock *sk,
> }
> 
> int bt_to_errno(u16 code);
> +__u8 bt_status(int err);
> 
> void hci_sock_set_flag(struct sock *sk, int nr);
> void hci_sock_clear_flag(struct sock *sk, int nr);
> diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c
> index 5326f41a58b7..469a0c95b6e8 100644
> --- a/net/bluetooth/lib.c
> +++ b/net/bluetooth/lib.c
> @@ -135,6 +135,77 @@ int bt_to_errno(__u16 code)
> }
> EXPORT_SYMBOL(bt_to_errno);
> 
> +/* Unix errno to Bluetooth error codes mapping */
> +__u8 bt_status(int err)
> +{
> +	/* Don't convert if already positive value */
> +	if (err >= 0)
> +		return err;
> +
> +	switch (err) {
> +	case -EBADRQC:
> +		return 0x01;
> +
> +	case -ENOTCONN:
> +		return 0x02;
> +
> +	case -EIO:
> +		return 0x03;
> +
> +	case -EHOSTDOWN:
> +		return 0x04;
> +
> +	case -EACCES:
> +		return 0x05;
> +
> +	case -EBADE:
> +		return 0x06;
> +
> +	case -ENOMEM:
> +		return 0x07;
> +
> +	case -ETIMEDOUT:
> +		return 0x08;
> +
> +	case -EMLINK:
> +		return 0x09;
> +
> +	case EALREADY:
> +		return 0x0b;
> +
> +	case -EBUSY:
> +		return 0x0c;
> +
> +	case -ECONNREFUSED:
> +		return 0x0d;
> +
> +	case -EOPNOTSUPP:
> +		return 0x11;
> +
> +	case -EINVAL:
> +		return 0x12;
> +
> +	case -ECONNRESET:
> +		return 0x13;
> +
> +	case -ECONNABORTED:
> +		return 0x16;
> +
> +	case ELOOP:
> +		return 0x17;
> +
> +	case -EPROTONOSUPPORT:
> +		return 0x1a;
> +
> +	case -EPROTO:
> +		return 0x19;
> +
> +	default:
> +		return 0x1f;
> +	}
> +}
> +EXPORT_SYMBOL(bt_status);
> +

why are exporting this?

Regards

Marcel
Luiz Augusto von Dentz May 19, 2022, 8:18 p.m. UTC | #2
Hi Marcel,

On Thu, May 19, 2022 at 11:07 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> Hi Luiz,
>
> > This adds bt_status which can be used to convert Unix errno to
> > Bluetooth status.
> >
> > Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> > ---
> > include/net/bluetooth/bluetooth.h |  1 +
> > net/bluetooth/lib.c               | 71 +++++++++++++++++++++++++++++++
> > 2 files changed, 72 insertions(+)
> >
> > diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
> > index 6b48d9e2aab9..cfe6159f26bc 100644
> > --- a/include/net/bluetooth/bluetooth.h
> > +++ b/include/net/bluetooth/bluetooth.h
> > @@ -521,6 +521,7 @@ static inline struct sk_buff *bt_skb_sendmmsg(struct sock *sk,
> > }
> >
> > int bt_to_errno(u16 code);
> > +__u8 bt_status(int err);
> >
> > void hci_sock_set_flag(struct sock *sk, int nr);
> > void hci_sock_clear_flag(struct sock *sk, int nr);
> > diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c
> > index 5326f41a58b7..469a0c95b6e8 100644
> > --- a/net/bluetooth/lib.c
> > +++ b/net/bluetooth/lib.c
> > @@ -135,6 +135,77 @@ int bt_to_errno(__u16 code)
> > }
> > EXPORT_SYMBOL(bt_to_errno);
> >
> > +/* Unix errno to Bluetooth error codes mapping */
> > +__u8 bt_status(int err)
> > +{
> > +     /* Don't convert if already positive value */
> > +     if (err >= 0)
> > +             return err;
> > +
> > +     switch (err) {
> > +     case -EBADRQC:
> > +             return 0x01;
> > +
> > +     case -ENOTCONN:
> > +             return 0x02;
> > +
> > +     case -EIO:
> > +             return 0x03;
> > +
> > +     case -EHOSTDOWN:
> > +             return 0x04;
> > +
> > +     case -EACCES:
> > +             return 0x05;
> > +
> > +     case -EBADE:
> > +             return 0x06;
> > +
> > +     case -ENOMEM:
> > +             return 0x07;
> > +
> > +     case -ETIMEDOUT:
> > +             return 0x08;
> > +
> > +     case -EMLINK:
> > +             return 0x09;
> > +
> > +     case EALREADY:
> > +             return 0x0b;
> > +
> > +     case -EBUSY:
> > +             return 0x0c;
> > +
> > +     case -ECONNREFUSED:
> > +             return 0x0d;
> > +
> > +     case -EOPNOTSUPP:
> > +             return 0x11;
> > +
> > +     case -EINVAL:
> > +             return 0x12;
> > +
> > +     case -ECONNRESET:
> > +             return 0x13;
> > +
> > +     case -ECONNABORTED:
> > +             return 0x16;
> > +
> > +     case ELOOP:
> > +             return 0x17;
> > +
> > +     case -EPROTONOSUPPORT:
> > +             return 0x1a;
> > +
> > +     case -EPROTO:
> > +             return 0x19;
> > +
> > +     default:
> > +             return 0x1f;
> > +     }
> > +}
> > +EXPORT_SYMBOL(bt_status);
> > +
>
> why are exporting this?

Isn't it supposed to be exported since it is part of lib.c? All
functions in this file use it.

> Regards
>
> Marcel
>
Marcel Holtmann May 20, 2022, 9:16 a.m. UTC | #3
Hi Luiz,

>>> This adds bt_status which can be used to convert Unix errno to
>>> Bluetooth status.
>>> 
>>> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>>> ---
>>> include/net/bluetooth/bluetooth.h | 1 +
>>> net/bluetooth/lib.c | 71 +++++++++++++++++++++++++++++++
>>> 2 files changed, 72 insertions(+)
>>> 
>>> diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
>>> index 6b48d9e2aab9..cfe6159f26bc 100644
>>> --- a/include/net/bluetooth/bluetooth.h
>>> +++ b/include/net/bluetooth/bluetooth.h
>>> @@ -521,6 +521,7 @@ static inline struct sk_buff *bt_skb_sendmmsg(struct sock *sk,
>>> }
>>> 
>>> int bt_to_errno(u16 code);
>>> +__u8 bt_status(int err);
>>> 
>>> void hci_sock_set_flag(struct sock *sk, int nr);
>>> void hci_sock_clear_flag(struct sock *sk, int nr);
>>> diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c
>>> index 5326f41a58b7..469a0c95b6e8 100644
>>> --- a/net/bluetooth/lib.c
>>> +++ b/net/bluetooth/lib.c
>>> @@ -135,6 +135,77 @@ int bt_to_errno(__u16 code)
>>> }
>>> EXPORT_SYMBOL(bt_to_errno);
>>> 
>>> +/* Unix errno to Bluetooth error codes mapping */
>>> +__u8 bt_status(int err)
>>> +{
>>> + /* Don't convert if already positive value */
>>> + if (err >= 0)
>>> + return err;
>>> +
>>> + switch (err) {
>>> + case -EBADRQC:
>>> + return 0x01;
>>> +
>>> + case -ENOTCONN:
>>> + return 0x02;
>>> +
>>> + case -EIO:
>>> + return 0x03;
>>> +
>>> + case -EHOSTDOWN:
>>> + return 0x04;
>>> +
>>> + case -EACCES:
>>> + return 0x05;
>>> +
>>> + case -EBADE:
>>> + return 0x06;
>>> +
>>> + case -ENOMEM:
>>> + return 0x07;
>>> +
>>> + case -ETIMEDOUT:
>>> + return 0x08;
>>> +
>>> + case -EMLINK:
>>> + return 0x09;
>>> +
>>> + case EALREADY:
>>> + return 0x0b;
>>> +
>>> + case -EBUSY:
>>> + return 0x0c;
>>> +
>>> + case -ECONNREFUSED:
>>> + return 0x0d;
>>> +
>>> + case -EOPNOTSUPP:
>>> + return 0x11;
>>> +
>>> + case -EINVAL:
>>> + return 0x12;
>>> +
>>> + case -ECONNRESET:
>>> + return 0x13;
>>> +
>>> + case -ECONNABORTED:
>>> + return 0x16;
>>> +
>>> + case ELOOP:
>>> + return 0x17;
>>> +
>>> + case -EPROTONOSUPPORT:
>>> + return 0x1a;
>>> +
>>> + case -EPROTO:
>>> + return 0x19;
>>> +
>>> + default:
>>> + return 0x1f;
>>> + }
>>> +}
>>> +EXPORT_SYMBOL(bt_status);
>>> +
>> 
>> why are exporting this?
> 
> Isn't it supposed to be exported since it is part of lib.c? All
> functions in this file use it.

is it used outside of bluetooth.ko?

Regards

Marcel
Luiz Augusto von Dentz May 31, 2022, 9:27 p.m. UTC | #4
Hi Marcel,

On Fri, May 20, 2022 at 2:16 AM Marcel Holtmann <marcel@holtmann.org> wrote:
>
> Hi Luiz,
>
> >>> This adds bt_status which can be used to convert Unix errno to
> >>> Bluetooth status.
> >>>
> >>> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
> >>> ---
> >>> include/net/bluetooth/bluetooth.h | 1 +
> >>> net/bluetooth/lib.c | 71 +++++++++++++++++++++++++++++++
> >>> 2 files changed, 72 insertions(+)
> >>>
> >>> diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
> >>> index 6b48d9e2aab9..cfe6159f26bc 100644
> >>> --- a/include/net/bluetooth/bluetooth.h
> >>> +++ b/include/net/bluetooth/bluetooth.h
> >>> @@ -521,6 +521,7 @@ static inline struct sk_buff *bt_skb_sendmmsg(struct sock *sk,
> >>> }
> >>>
> >>> int bt_to_errno(u16 code);
> >>> +__u8 bt_status(int err);
> >>>
> >>> void hci_sock_set_flag(struct sock *sk, int nr);
> >>> void hci_sock_clear_flag(struct sock *sk, int nr);
> >>> diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c
> >>> index 5326f41a58b7..469a0c95b6e8 100644
> >>> --- a/net/bluetooth/lib.c
> >>> +++ b/net/bluetooth/lib.c
> >>> @@ -135,6 +135,77 @@ int bt_to_errno(__u16 code)
> >>> }
> >>> EXPORT_SYMBOL(bt_to_errno);
> >>>
> >>> +/* Unix errno to Bluetooth error codes mapping */
> >>> +__u8 bt_status(int err)
> >>> +{
> >>> + /* Don't convert if already positive value */
> >>> + if (err >= 0)
> >>> + return err;
> >>> +
> >>> + switch (err) {
> >>> + case -EBADRQC:
> >>> + return 0x01;
> >>> +
> >>> + case -ENOTCONN:
> >>> + return 0x02;
> >>> +
> >>> + case -EIO:
> >>> + return 0x03;
> >>> +
> >>> + case -EHOSTDOWN:
> >>> + return 0x04;
> >>> +
> >>> + case -EACCES:
> >>> + return 0x05;
> >>> +
> >>> + case -EBADE:
> >>> + return 0x06;
> >>> +
> >>> + case -ENOMEM:
> >>> + return 0x07;
> >>> +
> >>> + case -ETIMEDOUT:
> >>> + return 0x08;
> >>> +
> >>> + case -EMLINK:
> >>> + return 0x09;
> >>> +
> >>> + case EALREADY:
> >>> + return 0x0b;
> >>> +
> >>> + case -EBUSY:
> >>> + return 0x0c;
> >>> +
> >>> + case -ECONNREFUSED:
> >>> + return 0x0d;
> >>> +
> >>> + case -EOPNOTSUPP:
> >>> + return 0x11;
> >>> +
> >>> + case -EINVAL:
> >>> + return 0x12;
> >>> +
> >>> + case -ECONNRESET:
> >>> + return 0x13;
> >>> +
> >>> + case -ECONNABORTED:
> >>> + return 0x16;
> >>> +
> >>> + case ELOOP:
> >>> + return 0x17;
> >>> +
> >>> + case -EPROTONOSUPPORT:
> >>> + return 0x1a;
> >>> +
> >>> + case -EPROTO:
> >>> + return 0x19;
> >>> +
> >>> + default:
> >>> + return 0x1f;
> >>> + }
> >>> +}
> >>> +EXPORT_SYMBOL(bt_status);
> >>> +
> >>
> >> why are exporting this?
> >
> > Isn't it supposed to be exported since it is part of lib.c? All
> > functions in this file use it.
>
> is it used outside of bluetooth.ko?

Currently not, I just thought it would be convenient to have it
accessible for the drivers as well since it is complementary to
bt_to_errno.

> Regards
>
> Marcel
>
Marcel Holtmann June 2, 2022, 3:30 p.m. UTC | #5
Hi Luiz,

>>>>> This adds bt_status which can be used to convert Unix errno to
>>>>> Bluetooth status.
>>>>> 
>>>>> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
>>>>> ---
>>>>> include/net/bluetooth/bluetooth.h | 1 +
>>>>> net/bluetooth/lib.c | 71 +++++++++++++++++++++++++++++++
>>>>> 2 files changed, 72 insertions(+)
>>>>> 
>>>>> diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
>>>>> index 6b48d9e2aab9..cfe6159f26bc 100644
>>>>> --- a/include/net/bluetooth/bluetooth.h
>>>>> +++ b/include/net/bluetooth/bluetooth.h
>>>>> @@ -521,6 +521,7 @@ static inline struct sk_buff *bt_skb_sendmmsg(struct sock *sk,
>>>>> }
>>>>> 
>>>>> int bt_to_errno(u16 code);
>>>>> +__u8 bt_status(int err);
>>>>> 
>>>>> void hci_sock_set_flag(struct sock *sk, int nr);
>>>>> void hci_sock_clear_flag(struct sock *sk, int nr);
>>>>> diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c
>>>>> index 5326f41a58b7..469a0c95b6e8 100644
>>>>> --- a/net/bluetooth/lib.c
>>>>> +++ b/net/bluetooth/lib.c
>>>>> @@ -135,6 +135,77 @@ int bt_to_errno(__u16 code)
>>>>> }
>>>>> EXPORT_SYMBOL(bt_to_errno);
>>>>> 
>>>>> +/* Unix errno to Bluetooth error codes mapping */
>>>>> +__u8 bt_status(int err)
>>>>> +{
>>>>> + /* Don't convert if already positive value */
>>>>> + if (err >= 0)
>>>>> + return err;
>>>>> +
>>>>> + switch (err) {
>>>>> + case -EBADRQC:
>>>>> + return 0x01;
>>>>> +
>>>>> + case -ENOTCONN:
>>>>> + return 0x02;
>>>>> +
>>>>> + case -EIO:
>>>>> + return 0x03;
>>>>> +
>>>>> + case -EHOSTDOWN:
>>>>> + return 0x04;
>>>>> +
>>>>> + case -EACCES:
>>>>> + return 0x05;
>>>>> +
>>>>> + case -EBADE:
>>>>> + return 0x06;
>>>>> +
>>>>> + case -ENOMEM:
>>>>> + return 0x07;
>>>>> +
>>>>> + case -ETIMEDOUT:
>>>>> + return 0x08;
>>>>> +
>>>>> + case -EMLINK:
>>>>> + return 0x09;
>>>>> +
>>>>> + case EALREADY:
>>>>> + return 0x0b;
>>>>> +
>>>>> + case -EBUSY:
>>>>> + return 0x0c;
>>>>> +
>>>>> + case -ECONNREFUSED:
>>>>> + return 0x0d;
>>>>> +
>>>>> + case -EOPNOTSUPP:
>>>>> + return 0x11;
>>>>> +
>>>>> + case -EINVAL:
>>>>> + return 0x12;
>>>>> +
>>>>> + case -ECONNRESET:
>>>>> + return 0x13;
>>>>> +
>>>>> + case -ECONNABORTED:
>>>>> + return 0x16;
>>>>> +
>>>>> + case ELOOP:
>>>>> + return 0x17;
>>>>> +
>>>>> + case -EPROTONOSUPPORT:
>>>>> + return 0x1a;
>>>>> +
>>>>> + case -EPROTO:
>>>>> + return 0x19;
>>>>> +
>>>>> + default:
>>>>> + return 0x1f;
>>>>> + }
>>>>> +}
>>>>> +EXPORT_SYMBOL(bt_status);
>>>>> +
>>>> 
>>>> why are exporting this?
>>> 
>>> Isn't it supposed to be exported since it is part of lib.c? All
>>> functions in this file use it.
>> 
>> is it used outside of bluetooth.ko?
> 
> Currently not, I just thought it would be convenient to have it
> accessible for the drivers as well since it is complementary to
> bt_to_errno.

drivers should really not need this. They should not have to look at HCI error status. They are pure transport drivers.

Regards

Marcel
diff mbox series

Patch

diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index 6b48d9e2aab9..cfe6159f26bc 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -521,6 +521,7 @@  static inline struct sk_buff *bt_skb_sendmmsg(struct sock *sk,
 }
 
 int bt_to_errno(u16 code);
+__u8 bt_status(int err);
 
 void hci_sock_set_flag(struct sock *sk, int nr);
 void hci_sock_clear_flag(struct sock *sk, int nr);
diff --git a/net/bluetooth/lib.c b/net/bluetooth/lib.c
index 5326f41a58b7..469a0c95b6e8 100644
--- a/net/bluetooth/lib.c
+++ b/net/bluetooth/lib.c
@@ -135,6 +135,77 @@  int bt_to_errno(__u16 code)
 }
 EXPORT_SYMBOL(bt_to_errno);
 
+/* Unix errno to Bluetooth error codes mapping */
+__u8 bt_status(int err)
+{
+	/* Don't convert if already positive value */
+	if (err >= 0)
+		return err;
+
+	switch (err) {
+	case -EBADRQC:
+		return 0x01;
+
+	case -ENOTCONN:
+		return 0x02;
+
+	case -EIO:
+		return 0x03;
+
+	case -EHOSTDOWN:
+		return 0x04;
+
+	case -EACCES:
+		return 0x05;
+
+	case -EBADE:
+		return 0x06;
+
+	case -ENOMEM:
+		return 0x07;
+
+	case -ETIMEDOUT:
+		return 0x08;
+
+	case -EMLINK:
+		return 0x09;
+
+	case EALREADY:
+		return 0x0b;
+
+	case -EBUSY:
+		return 0x0c;
+
+	case -ECONNREFUSED:
+		return 0x0d;
+
+	case -EOPNOTSUPP:
+		return 0x11;
+
+	case -EINVAL:
+		return 0x12;
+
+	case -ECONNRESET:
+		return 0x13;
+
+	case -ECONNABORTED:
+		return 0x16;
+
+	case ELOOP:
+		return 0x17;
+
+	case -EPROTONOSUPPORT:
+		return 0x1a;
+
+	case -EPROTO:
+		return 0x19;
+
+	default:
+		return 0x1f;
+	}
+}
+EXPORT_SYMBOL(bt_status);
+
 void bt_info(const char *format, ...)
 {
 	struct va_format vaf;