Message ID | 20220513234611.1360704-1-luiz.dentz@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | [1/3] Bluetooth: Add bt_status | expand |
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
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 >
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
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 >
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 --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;