123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320 |
- /*
- BlueZ - Bluetooth protocol stack for Linux
- Copyright (C) 2000-2001 Qualcomm Incorporated
- Written 2000,2001 by Maxim Krasnyansky <[email protected]>
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License version 2 as
- published by the Free Software Foundation;
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
- IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
- CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
- COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
- SOFTWARE IS DISCLAIMED.
- */
- /* Bluetooth kernel library. */
- #define pr_fmt(fmt) "Bluetooth: " fmt
- #include <linux/export.h>
- #include <net/bluetooth/bluetooth.h>
- void baswap(bdaddr_t *dst, const bdaddr_t *src)
- {
- const unsigned char *s = (const unsigned char *)src;
- unsigned char *d = (unsigned char *)dst;
- unsigned int i;
- for (i = 0; i < 6; i++)
- d[i] = s[5 - i];
- }
- EXPORT_SYMBOL(baswap);
- /* Bluetooth error codes to Unix errno mapping */
- int bt_to_errno(__u16 code)
- {
- switch (code) {
- case 0:
- return 0;
- case 0x01:
- return EBADRQC;
- case 0x02:
- return ENOTCONN;
- case 0x03:
- return EIO;
- case 0x04:
- case 0x3c:
- return EHOSTDOWN;
- case 0x05:
- return EACCES;
- case 0x06:
- return EBADE;
- case 0x07:
- return ENOMEM;
- case 0x08:
- return ETIMEDOUT;
- case 0x09:
- return EMLINK;
- case 0x0a:
- return EMLINK;
- case 0x0b:
- return EALREADY;
- case 0x0c:
- return EBUSY;
- case 0x0d:
- case 0x0e:
- case 0x0f:
- return ECONNREFUSED;
- case 0x10:
- return ETIMEDOUT;
- case 0x11:
- case 0x27:
- case 0x29:
- case 0x20:
- return EOPNOTSUPP;
- case 0x12:
- return EINVAL;
- case 0x13:
- case 0x14:
- case 0x15:
- return ECONNRESET;
- case 0x16:
- return ECONNABORTED;
- case 0x17:
- return ELOOP;
- case 0x18:
- return EACCES;
- case 0x1a:
- return EPROTONOSUPPORT;
- case 0x1b:
- return ECONNREFUSED;
- case 0x19:
- case 0x1e:
- case 0x23:
- case 0x24:
- case 0x25:
- return EPROTO;
- default:
- return ENOSYS;
- }
- }
- 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;
- va_list args;
- va_start(args, format);
- vaf.fmt = format;
- vaf.va = &args;
- pr_info("%pV", &vaf);
- va_end(args);
- }
- EXPORT_SYMBOL(bt_info);
- void bt_warn(const char *format, ...)
- {
- struct va_format vaf;
- va_list args;
- va_start(args, format);
- vaf.fmt = format;
- vaf.va = &args;
- pr_warn("%pV", &vaf);
- va_end(args);
- }
- EXPORT_SYMBOL(bt_warn);
- void bt_err(const char *format, ...)
- {
- struct va_format vaf;
- va_list args;
- va_start(args, format);
- vaf.fmt = format;
- vaf.va = &args;
- pr_err("%pV", &vaf);
- va_end(args);
- }
- EXPORT_SYMBOL(bt_err);
- #ifdef CONFIG_BT_FEATURE_DEBUG
- static bool debug_enable;
- void bt_dbg_set(bool enable)
- {
- debug_enable = enable;
- }
- bool bt_dbg_get(void)
- {
- return debug_enable;
- }
- void bt_dbg(const char *format, ...)
- {
- struct va_format vaf;
- va_list args;
- if (likely(!debug_enable))
- return;
- va_start(args, format);
- vaf.fmt = format;
- vaf.va = &args;
- printk(KERN_DEBUG pr_fmt("%pV"), &vaf);
- va_end(args);
- }
- EXPORT_SYMBOL(bt_dbg);
- #endif
- void bt_warn_ratelimited(const char *format, ...)
- {
- struct va_format vaf;
- va_list args;
- va_start(args, format);
- vaf.fmt = format;
- vaf.va = &args;
- pr_warn_ratelimited("%pV", &vaf);
- va_end(args);
- }
- EXPORT_SYMBOL(bt_warn_ratelimited);
- void bt_err_ratelimited(const char *format, ...)
- {
- struct va_format vaf;
- va_list args;
- va_start(args, format);
- vaf.fmt = format;
- vaf.va = &args;
- pr_err_ratelimited("%pV", &vaf);
- va_end(args);
- }
- EXPORT_SYMBOL(bt_err_ratelimited);
|