2007-02-09 17:24:33 +03:00
/*
2005-04-17 02:20:36 +04:00
BlueZ - Bluetooth protocol stack for Linux
Copyright ( C ) 2000 - 2001 Qualcomm Incorporated
Written 2000 , 2001 by Maxim Krasnyansky < maxk @ qualcomm . com >
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
2007-02-09 17:24:33 +03:00
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
2005-04-17 02:20:36 +04:00
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE .
2007-02-09 17:24:33 +03:00
ALL LIABILITY , INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS ,
COPYRIGHTS , TRADEMARKS OR OTHER RIGHTS , RELATING TO USE OF THIS
2005-04-17 02:20:36 +04:00
SOFTWARE IS DISCLAIMED .
*/
/* Bluetooth kernel library. */
2012-02-17 11:32:42 +04:00
# define pr_fmt(fmt) "Bluetooth: " fmt
2012-05-23 11:04:22 +04:00
# include <linux/export.h>
2005-04-17 02:20:36 +04:00
# include <net/bluetooth/bluetooth.h>
2017-09-01 23:41:17 +03:00
void baswap ( bdaddr_t * dst , const bdaddr_t * src )
2005-04-17 02:20:36 +04:00
{
2017-09-01 23:41:17 +03:00
const unsigned char * s = ( const unsigned char * ) src ;
unsigned char * d = ( unsigned char * ) dst ;
2005-04-17 02:20:36 +04:00
unsigned int i ;
for ( i = 0 ; i < 6 ; i + + )
d [ i ] = s [ 5 - i ] ;
}
EXPORT_SYMBOL ( baswap ) ;
/* Bluetooth error codes to Unix errno mapping */
2011-06-30 05:18:29 +04:00
int bt_to_errno ( __u16 code )
2005-04-17 02:20:36 +04:00
{
switch ( code ) {
case 0 :
return 0 ;
case 0x01 :
return EBADRQC ;
case 0x02 :
return ENOTCONN ;
case 0x03 :
return EIO ;
case 0x04 :
2014-03-24 22:21:52 +04:00
case 0x3c :
2005-04-17 02:20:36 +04:00
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 ;
}
}
2011-06-30 05:18:29 +04:00
EXPORT_SYMBOL ( bt_to_errno ) ;
2011-07-01 02:15:37 +04:00
2014-09-22 22:17:41 +04:00
void bt_info ( const char * format , . . . )
2012-02-17 11:32:42 +04:00
{
struct va_format vaf ;
va_list args ;
va_start ( args , format ) ;
vaf . fmt = format ;
vaf . va = & args ;
2014-09-22 22:17:41 +04:00
pr_info ( " %pV " , & vaf ) ;
2012-02-17 11:32:42 +04:00
va_end ( args ) ;
}
EXPORT_SYMBOL ( bt_info ) ;
2015-09-23 19:18:07 +03:00
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 ) ;
2014-09-22 22:17:41 +04:00
void bt_err ( const char * format , . . . )
2011-07-01 02:15:37 +04:00
{
struct va_format vaf ;
va_list args ;
va_start ( args , format ) ;
vaf . fmt = format ;
vaf . va = & args ;
2014-09-22 22:17:41 +04:00
pr_err ( " %pV " , & vaf ) ;
2011-07-01 02:15:37 +04:00
va_end ( args ) ;
}
2012-02-17 11:32:42 +04:00
EXPORT_SYMBOL ( bt_err ) ;
2015-09-16 21:21:53 +03:00
2020-05-06 10:57:52 +03:00
# 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
2019-12-11 04:54:43 +03:00
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 ) ;
2015-09-16 21:21:53 +03:00
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 ) ;