linux/drivers/bluetooth/hci_ll.c
<<
v40.3 v3.18.10 v3.18.9 v3.18.8 v3.18.7 v3.18.6 v3.18.5 v3.18.5 34.8.33 6option value="v6 3 6 v3.16.35 v3.16.7 v3.16.6 v3.16.5 v3.16.5 v3.16 v3.15.10 v3.15.9 v3.15.8 v3.15.7 v3.15.6 v3.15.5 v3.15.5 v3.15.5 v3.15.6 v3.15.5 34.18.9 3.v4.08 v3.18.3 v3.16 v3.15.10 v3.15.5 v3.15.5 v4.1 v4.1 v4.1 v4.1 v4.4. v4.1 v4.1 4p0op0ion value=44.1.10" > v4.1. 4op0o9ion value=44.4.19" > v4.4. 4op0o9ption valu4"v4.1.8" > v4.1 4op0o9n value="v414.67" > v3.14.67<0o96ion> 4op0o9ption valu4"v4.1.6" > v4.1 4op0o95tion valu4"v4.1.2" > v4.1 4op0o9ption valu4"v4.1.4" > v4.1 4op0o9oon value=44.4.21" > v4.4. 4op0o9ption valu4"v4.1.2" > v4.1 4op0o9otion valu4"v4.1.2" > v4.1 4op0o9ion value=44.1.10" > v4.1. 4op0o8ion value=44.4.19" > v4.4. 4op0o8ption valu4"v4.1.8" > v4.1 4op0o8n value="v414.67" > v3.14.67<0o86ion> 4op0o8ption valu4"v4.1.6" > v4.1 4op0o85tion valu4"v4.1.2" > v4.1 4op0o8ption valu4"v4.1.4" > v4.1 ption> v3.15.3 v3.15.2 v3.15 2option value="v214.75" > v3.14.75 3ion> v4.4. v4.3 v4.3 v4.3 v3.14.70<2option> v3.14.69<2option> v3.14.68<2option> v3.14.67<2option> v3.14.66<2option> v3.14.65<2option> v3.14.64<2option> v3.14.63<2option> v3.14.62<2option> v3.14.61<2option> v3.14.60<2option> v3.14.59<2option> v3.14.58<2option> v3.14.57<2option> v3.14.56<2option> v3.14.55<2option> v3.14.54<2option> v3.14.53<2option> v3.14.52<2option> v3.14.51<2option> v3.14.50<2option> v3.14.49<2option> v3.14.48<2option> v3.14.47<2option> v3.14.46<2option> v3.14.45<2option> v3.14.44<2option> v3.14.43<2option> v3.14.42<2option> v3.14.41<2option> v3.14.40<2option> v3.14.39<2option> v3.14.38<2option> v3.14.37<2option> v3.14.36<2option> v3.14.35<2option> v3.14.34<2option> v3.14.33<2option> v3.14.32<2option> v3.14.31<2option> v3.14.30<2option> v3.14.29<2option> v3.14.28<2option> 4.27<2option> v3.18.24<2option> v4.4. v3.18.22<2option> v4.4. v3.18.20<2option> v4.4. v3.18<21 2ption value=v4.4.17" > v4.4. 2pttion> v3.16<21 2ption value=v4.4.15" > v4.4. 2pttion> v4.4. v4.3 v3.18.12<2option> v4.4. v3.15.10<2.tio> v4.4. v3.18<21/opion> 2pn vlue="v3.14.67" > v3.14.67<2opio> v3.14.51<2opio> v3.14.41<2opio v3.14.41<2opiopion> v3.14.39<0optio> v318.33 2nvalue= ion value=2nvalv4.4.15" > v4.4. opttion> 2nvalv4.0ion value=2nval.18.14" > v3.18.14<4option> 2nval.19ion value=2nval"v4.4.13" > v4.4. 2nval"vvion value=2nval"v3.18.12" > v3.18.12<4option2nval"v7option val2nvallue="v4.4.11" > v4.4. v3.15.10<4.t2nvalluoption valu2nval v3.18<412nvalue3ion value=2nvalv44.17" > v4.4. opttion> 2nvalv42ion value=2nvalue"v3.16" > v3.16<412nvalue=ion value=2nval.18v3.16" > v3.16<412nvaluion value=2nval.v3.16" > v3.16<412nval3 > A36ption2nval3 > v3.16" > v3.16<412nval3 19ion value=2nval3 .14.3 v3.18<412nval3e=3ion value=2nval34.4.17" > v4.4. opttion> 2nval34.2ion value=2nval3e="v3.16" > v3.16<412nval3e= ion value=2nval34.4.15" > v4.4. opttion> 2nval34.0ion value=2nvalon vlue="v3.14.54" > p0in41" 0o2nvalon9ion value=2nval3 14.3 v3.18<412nval3e3ion value=2nval344.17" > v4.4. opttion> 2nval342ion value=2nval3e"v3.16" > v3.16<412nval3e=ion value=2nvalon v3.16" > v3.16<412nval3ion value=2nvalov3.16" > v3.16<412nval2option value=2nval2optv3.16" > v3.16<412nval2op0ion value=2nvalon value="v4.4.21" > v4.4. v3.14.73<0option> 2nval214vion value=2nval214.72" > v3.14.72<0option> 2nval2147option val2nval214.71" > v3.14.71<0option> 2nval214vion value=2nval214.70" > v3.14.70<0option> 2nval214option valu2nval214.69" > v3.14.69<0option> 2nval214v3.14lue="p2nval214.68" > v3.14.68<0option> 2nval2143ion value=2nval214.67" > v3.14.67<0option> 2nval2142ion value=2nval214.66" > v3.14.66<0option> 2nval214tion value=2nval2o4.65" > v3.14.65<0option> 2nval2o40ion value=2nvalon4.64" > v3.14.64<0option> 2nvalon59ion value=2nval214.63" > v3.14.63<0option> 2nval214vion value=2nval214.62" > v3.14.62<0option> 2nval2147option val2nval214.61" > v3.14.61<0option> 2nval214vion value=2nval214.60" > v3.14.60<0option> 2nval214option valu2nval214.59" > v3.14.59<0option> 2nval214v3.14lue="p2nval214.58" > v3.14.58<0option> 2nval2143ion value=2nval214.57" > v3.14.57<0option> 2nval2142ion value=2nval214.56" > v3.14.56<0option> 2nval214tion value=2nval2o4.55" > v3.14.55<0option> 2nval2o40ion value=2nvalon4.54" > v3.14.54<0option> 2nvalon49ion value=2nval214.53" > v3.14.53<0option> 2nval214vion value=2nval214.52" > v3.14.52<0option> 2nval2147option val2nval214.51" > v3.14.51<0option> 2nval214vion value=2nval214.50" > v3.14.50<0option> 2nval214option valu2nval214.49" > v3.14.49<0option> 2nval214v3.14lue="p2nval214.48" > v3.14.48<0option> 2nval2143ion value=2nval214.47" > v3.14.47<0option> 2nval2142ion value=2nval214.46" > v3.14.46<0option> 2nval214tion value=2nval2o4.45" > v3.14.45<0option> 2nval2o40ion value=2nvalon4.44" > v3.14.44<0option> 2nvalonl9ion value=2nval.14.43" > v3.14.43<2option> 2nval.14vion value=2nval21lvue="v3.18.5" > v3.18.5 v3.14.41<2option> 2nval.14vion value=2nval21lvue="v3.16.5" > v3.16.5 v3.14.39<2option> 2nval.14v3.14lue="p2nval21l.v3.16" > v3.16<412nval2al3ion value=2nval.14.37" > v3.14.37<2option> 2nval.142ion value=2nval214.36" > v3.14.36<0option> 2nval214tion value=2nval2o4.35" > v3.14.35<0option> 2nval2o40ion value=2nvalon4.34" > v3.14.34<0option> 2nvalon29ion value=2nval.14.33" > v3.14.33<0option> 2nval.14vion value=2nval214.32" > v3.14.32<0option> 2nval214vion value=2nval.14.31" > v3.14.31<0option> 2nval.14vion value=2nval214.30" > v3.14.30<0option> 2nval2145ion value=2nval.14.29" > v3.14.29<0option> 2nval.14v3.14lue="p2nval214.28" > v3.14.28<0option> 2nval2143ion value=2nval.14ue="v4.9.4" >4.27<0option> 2nval.142ion value=2nval214.27 2nval2 19ion value=2nvalv4.4.23" > v4.4. 2nvalv4.vion value=2nval21 v4.4. 2nvalv4.vion value=2nval21 .14.3 v4.4. 2nvalv4.v3.14lue="p2nval21="v3.18" > v3.18<412nval2e=3ion value=2nvalv4.4.17" > v4.4. 2pttion> 2nvalv4.2ion value=2nval21="v3.16" > v3.16<412nval2e= ion value=2nvalv4.4.15" > v4.4. 2pttion> 2nvalv4.0ion value=2nvalon vlue="v3.14.54" > p0in41" 0o2nval2n9ion value=2nvale="v4.3.2" > v4.3 2nvale=vion value=2nval21 v3.14.71<0option> 2nval214ion value=2nvalon455" > v3.14.55<0option> 2nval2o4ion value=2nvalon445" > v3.14.45<0option> 2nval2o4ion value=2nvalon435" > v3.14.35<0option> 2nval2o4ion value=2nvalon4> v4.4. 2pttion> 2nvalv4.ion value=2nvalon .15" > v4.4. 2pttion> 2nvalvion value=2nvalo.15" > v4.4. 2pttion> 2nval14.v3.14lue="p2nval11="v3.18" > v3.18<412nval1e=3ion value=2nval14.4.17" > v4.4. 2pttion> 2nval14.2ion value=2nval11="v3.16" > v3.16<412nval1e= ion value=2nval14.4.15" > v4.4. 2pttion> 2nval14.0ion value=2nvaloalue="v3.14.39" .3.3 v3.14.39<0op2nval. vion value=2nval"3.16.6" n value="v4.1.3uv3.14t2nval"37option val2nval318.33 2nval1e3ion value=2nval144.17" > v4.4. 2pttion> 2nval142ion value=2nval11"v3.16" > v3.16<412nval1e=ion value=2nvaloalv3.16" > v3.16<412nval1ion value=2nvalov3.16" > v3.16<412nval04.0ion value=2nvalvalue="v3.14.39" .3.3 v3.14.39<0op2nval3 vion value=2nvalv3.16.6" n value="v4.1.3uv3.14t2nvalv37option val2nval.18.33 2nva43.8ion value=2nva43..16.6" n value="v4.1.3uv3.14t2nva2 7option val2nva2 8.33 2nva271l3ion value=2nva2714.37" > v3.14.37<2option> 2nva27142ion value=2nva271lo.15" > v4.4. 2pttion> 2nva271l1ion value=2nva27olov3.16" > v3.16<412nva27ol0ion value=2nva27nlvlue="v3.14.54" > p0in41" 0o2nva27a29ion value=2nva47a4.33" > v3.14.33<0option> 2nva27a4vion value=2nva47a4.32" > v3.14.32<0option> 2nva2714vion value=2nva2714v32" > v3.14.32<0option> 2nva27146option val2nva2714.30" > v3.14.30<0option> 2nva27145option val2nva2714.29" > v3.14.29<0option> 2nva2714pion value=2nva2714.28" > v3.14.28<0option> 2nva27143ion value=2nva2714ue="v4.9.4" >4.27<0option> 2nva27142ion value=2nva2714.27 2nva27n19ion value=2nva27n19v3.16" > v3.16<412nva27n1vion value=2nva47a v4.4. 2nva271.6option val2nva271 .14.3 v4.4. 2nva271.pion value=2nva271="v3.18" > v3.18<412nva271=3ion value=2nva271.4.17" > v4.4. 2pttion> 2nva271.2ion value=2nva271="v3.16" > v3.16<412nva271=1ion value=2nva27o.4.15" > v4.4. 2pttion> 2nva27o.0ion value=2nva27n8.14" > v3.18.14 2nva2719ion value=2nva47.18.13" > v3.18.13 2nva47.8ion value=2nva47..16.6" n value="v4.1.3uv3.14t2nva27 7option val2nva27 8.33 2nva25n19ion value=2nva25n19v3.16" > v3.16<412nva25n1vion value=2nva45a v4.4. 2nva251.6option val2nva251 .14.3 v4.4. 2nva25p0v3.14lue="p2nva25p0vue="v3.16.5" > v3.16.5 p0in41" 0o2nva25 v0ion value=2nva25 vvlue="v3.14.54" > p0in41" 0o2nva25.9ion value=2nva25 v3.14.39<0op2nva25 vion value=2nva25 p0in41" 0o2nva25 7option val2nva2n value="v3.16" > v3.16 v3.15.10 v3.15.9 v3.16.5 v3.15.9 v4.4. v3.15.10<4.t2nva2luoption valu2nva2 v3.18<412nva2ue3ion value=2nva2v44.17" > v4.4. opttion> 2nva2v42ion value=2nva2ue"v3.16" > v3.16<412nva2ue=ion value=2nva2.18v3.16" > v3.16<412nva4pion value=2nva2"v3.18" > v3.18<412nva23> 7option val2nva2316 v3.18<412nva23e=3ion value=2nva234.4.17" > v4.4. opttion> 2nva234.2ion value=2nva23e="v3.16" > v3.16<412nva23e= ion value=2nva234.4.15" > v4.4. opttion> 2nva234.0ion value=2nva2on vlue="v3.14.54" > p0in41" 0o2nva2on9ion value=2nva23 14.3 v3.18<412nva23e3ion value=2nva2344.17" > v4.4. opttion> 2nva2342ion value=2nva23e"v3.16" > v3.16<412nva23e=ion value=2nva2on v3.16" > v3.16<412nva43ion value=2nva24.17" > v4.4. opttion> 2nva22 19ion value=2nva2v4.4.23" > v4.4. 2nva2v4.vion value=2nva221 v4.4. 2nva2v4.vion value=2nva221 .14.3 v4.4. 2nva2v4.v3.14lue="p2nva221="v3.18" > v3.18<412nva22e=3ion value=2nva2v4.4.17" > v4.4. 2pttion> 2nva2v4.2ion value=2nva221="v3.16" > v3.16<412nva22e= ion value=2nva2v4.4.15" > v4.4. 2pttion> 2nva2v4.0ion value=2nva2on vlue="v3.14.54" > p0in41" 0o2nva22n9ion value=2nva2e="v4.3.2" > v4.3 2nva2e=vion value=2nva221 v3.14.71<0option> 2nva2v4vion value=2nva221.14.3 v4.4. 2nva2v4v3.14lue="p2nva221"v3.18" > v3.18<412nva22e3ion value=2nva2v44.17" > v4.4. 2pttion> 2nva2v42ion value=2nva221"v3.16" > v3.16<412nva22e=ion value=2nva2on v3.16" > v3.16<412nva22ion value=2nva2ov3.16" > v3.16<412nva2"37option val2nva2318.33 2nva21e3ion value=2nva2144.17" > v4.4. 2pttion> 2nva2142ion value=2nva211"v3.16" > v3.16<412nva21e=ion value=2nva2oalv3.16" > v3.16<412nva41ion value=2nva2lv3.16" > v3.16<412nva40a41ion value=2nva2tion> 3ion value=2nva2A16 .14.3 v4.4. 2pttion> 2nva204.0ion value=2nva2value="v3.14.39" .3.3 v3.14.39<0op2nva23 vion value=2nva2v3.16.6" n value="v4.1.3uv3.14t2nva2v37option val2nva2.18.33 2nva171=3ion value=2nva171.4.17" > v4.4. 2pttion> 2nva171.2ion value=2nva171="v3.16" > v3.16<412nva171=1ion value=2nva17o.4.15" > v4.4. 2pttion> 2nva17o.0ion value=2nva17n8.14" > v3.18.14 2nva1719ion value=2nva17.18.13" > v3.18.13 2nva17.8ion value=2nva17..16.6" n value="v4.1.3uv3.14t2nva17 7option val2nva17 8.33 2nva161l3ion value=2nva1614.37" > v3.14.37<2option> 2nva1valvion value=2nva1valo.15" > v4.4. 2pttion> 2nva1val1ion value=2nva1valov3.16" > v3.16<412nva1valvion value=2nva1valvlue="v3.14.54" > p0in41" 0o2nva1va29ion value=2nva1va29lue="v3.14.54" > p0in41" 0o2nva1va28ion value=2nva1614.32" > v3.14.32<0option> 2nva16147option val2nva66127ue="v3.17.5" > v3.17.5 v3.18.12nva16125option val2nva1612lue="v3.15.9" > v3.15.9 v3.18<412nva1va43ion value=2nva1va24.17" > v4.4. opttion> 2nva1va22ion value=2nva1va2ov3.16" > v3.16<412nva1va41ion value=2nva1va2lv3.16" > v3.16<412nva1vao0ion value=2nva1va2 lue="v3.14.54" > p0in41" 0o2nva16a19ion value=2nva.6a.14.3 v3.18<412nva161=3ion value=2nva161.4.17" > v4.4. 2pttion> 2nva161.2ion value=2nva161="v3.16" > v3.16<412nva161=1ion value=2nva16o.4.15" > v4.4. 2pttion> 2nva16o.0ion value=2nva16n8.14" > v3.18.14 2nva1619ion value=2nva16.18.13" > v3.18.13 2nva16.8ion value=2nva16..16.6" n value="v4.1.3uv3.14t2nva16 7option val2nva16 8.33 2nva1ue3ion value=2nva1v44.17" > v4.4. opttion> 2nva1v42ion value=2nva1ue"v3.16" > v3.16<412nva1ue=ion value=2nva1.18v3.16" > v3.16<412nva3pion value=2nva1"v3.18" > v3.18<412nva13 option valu2nva13oo v3.18<412nva13e3ion value=2nva1344.17" > v4.4. opttion> 2nva1342ion value=2nva13e"v3.16" > v3.16<412nva13e=ion value=2nva1on v3.16" > v3.16<412nva=3ion value=2nva14.17" > v4.4. opttion> 2nva12uvion value=2nva12ue="v3.15.10" > v3.15.10<4.t2nva12 option valu2nva1v44.19" > v4.4. 2nva1v4v3.14lue="p2nva121"v3.18" > v3.18<412nva12e3ion value=2nva1v44.17" > v4.4. 2pttion> 2nva1v42ion value=2nva121"v3.16" > v3.16<412nva12e=ion value=2nva1on v3.16" > v3.16<412nva.2ion value=2nva1"v3.16" > v3.16<412nva1=ion value=2nva1 v3.16" > on v v3/spa v3/form v3a on v v href="../linux+v3.9.5/drivers/bptitooth/hci_ll.c">on v v3img src="../.static/gfx/right.png" alt=">>">on3/spa on3spa class="lxr_search">on von v v3input typionhidden" namionnavtarget" /option">on v v3input typiontext" namionsearch" idonsearch">on v v3butt41Searchon v vPrefs v3/a>on3/spa v v v3/div v v v3form ac6" ="ajax+*" method="post" onsubmit="return false;">on3input typionhidden" namionajax_lookup" idonajax_lookup" /option">o v v v3/form o v v v3div class="headingbott4m">
3div idonfile_contents"
v v13/a>3spa	 class="comment">/*3/spa	  v v23/a>3spa	 class="comment"> *  Texas Instruments' Bptitooth HCILL UART protocol3/spa	  v v33/a>3spa	 class="comment"> *3/spa	  v v43/a>3spa	 class="comment"> *  HCILL (HCI Low Level) is a Texas Instruments' power management3/spa	  v v53/a>3spa	 class="comment"> *  protocol extens<41v v63/a>3spa	 class="comment"> *3/spa	  v v73/a>3spa	 class="comment"> *  Copyright (C) 2007 Texas Instruments, Inc.3/spa	  v v83/a>3spa	 class="comment"> *3/spa	  v v93/a>3spa	 class="comment"> *  Written by Ohad Ben-Cohen <ohad@bencohen.org>3/spa	  v 8.14a>3spa	 class="comment"> *3/spa	  v 113/a>3spa	 class="comment"> *  Acknowledgements:3/spa	  v 123/a>3spa	 class="comment"> *  This file is based on hci_h4.c, which was written3/spa	  v 133/a>3spa	 class="comment"> *  by Maxim Krasnyansky and Marcel Holtmann.3/spa	  v 143/a>3spa	 class="comment"> *3/spa	  v 153/a>3spa	 class="comment"> *  This program is free software; you ca	 redistribute it and/or modify3/spa	  v 163/a>3spa	 class="comment"> *  it under the terms of the GNU General Public License vers<41<23/spa	  v 173/a>3spa	 class="comment"> *  as published by the Free Software Founda6"
	3/spa	  v 183/a>3spa	 class="comment"> *3/spa	  v 193/a>3spa	 class="comment"> *  This program is distributed in the hope that it will be useful,3/spa	  v 2.14a>3spa	 class="comment"> *  but WITHOUT ANY WARRANTY; without even the implied warranty of3/spa	  v 213/a>3spa	 class="comment"> *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the3/spa	  v 223/a>3spa	 class="comment"> *  GNU General Public License for more details.3/spa	  v 233/a>3spa	 class="comment"> *3/spa	  v 243/a>3spa	 class="comment"> *  You should have received a copy of the GNU General Public License3/spa	  v 253/a>3spa	 class="comment"> *  along with this program; if not, writev 263/a>3spa	 class="comment"> *  Founda6"
	, Inc., 59 Temple Place, Suite<330, Bost
	, MA  02111-1307  USA3/spa	  v 273/a>3spa	 class="comment"> *3/spa	  v 283/a>3spa	 class="comment"> */3/spa	  v 293/a> v 3.14a>#include <linux/module.h14a>> v 3114a>#include <linux/kernel.h14a>> v 323/a> v 3314a>#include <linux/init.h14a>> v 3414a>#include <linux/sched.h14a>> v 3514a>#include <linux/typis.h14a>> v 3614a>#include <linux/fcntl.h14a>> v 3714a>#include <linux/interrupt.h14a>> v 3814a>#include <linux/ptrace.h14a>> v 3914a>#include <linux/poll.h14a>> v 403/a> v 4114a>#include <linux/slab.h14a>> v 4214a>#include <linux/tty.h14a>> v 4314a>#include <linux/errno.h14a>> v 4414a>#include <linux/string.h14a>> v 4514a>#include <linux/signal.h14a>> v 4614a>#include <linux/ioctl.h14a>> v 4714a>#include <linux/skbuff.h14a>> v 483/a> v 4914a>#include <net/bptitooth/bptitooth.h14a>> v 5.14a>#include <net/bptitooth/hci_core.h14a>> v 513/a> v 5214a>#include "hci_uart.h14a>" v 533/a> v 543/a>3spa	 class="comment">/* HCILL commands */3/spa	  v 5514a>#definev3a href="+code=HCILL_GO_TO_SLEEP_IND" class="sref">HCILL_GO_TO_SLEEP_IND14a>   0x30 v 5614a>#definev3a href="+code=HCILL_GO_TO_SLEEP_ACK" class="sref">HCILL_GO_TO_SLEEP_ACK14a>   0x31 v 5714a>#definev3a href="+code=HCILL_WAKE_UP_IND" class="sref">HCILL_WAKE_UP_IND14a>       0x32 v 5814a>#definev3a href="+code=HCILL_WAKE_UP_ACK" class="sref">HCILL_WAKE_UP_ACK14a>       0x33 v 593/a> v 6.14a>3spa	 class="comment">/* HCILL receiver States */3/spa	  v 6114a>#definev3a href="+code=HCILL_W4_PACKET_TYPE" class="sref">HCILL_W4_PACKET_TYPE14a>    0 v 6214a>#definev3a href="+code=HCILL_W4_EVENT_HDR" class="sref">HCILL_W4_EVENT_HDR14a>      1 v 6314a>#definev3a href="+code=HCILL_W4_ACL_HDR" class="sref">HCILL_W4_ACL_HDR14a>        2 v 6414a>#definev3a href="+code=HCILL_W4_SCO_HDR" class="sref">HCILL_W4_SCO_HDR14a>        3 v 6514a>#definev3a href="+code=HCILL_W4_DATA" class="sref">HCILL_W4_DATA14a>        v v4 v 663/a> v 673/a>3spa	 class="comment">/* HCILL states */3/spa	  v 6814a>enumv3a href="+code=hcill_states_e" class="sref">hcill_states_e14a> { v 6914a>        3a href="+code=HCILL_ASLEEP" class="sref">HCILL_ASLEEP14a>, v 7014a>        3a href="+code=HCILL_ASLEEP_TO_AWAKE" class="sref">HCILL_ASLEEP_TO_AWAKE14a>, v 7114a>        3a href="+code=HCILL_AWAKE" class="sref">HCILL_AWAKE14a>, v 7214a>        3a href="+code=HCILL_AWAKE_TO_ASLEEP" class="sref">HCILL_AWAKE_TO_ASLEEP3/a> v 7314a>}; v 743/a> v 7514a>structv3a href="+code=hcill_cmd" class="sref">hcill_cmd14a> { v 7614a>        3a href="+code=u8" class="sref">u814a> 3a href="+code=cmd" class="sref">cmd14a>; v 773/a>} 3a href="+code=__packed" class="sref">__packed14a>; v 783/a> v 7914a>structv3a href="+code=ll_struct" class="sref">ll_struct14a> { v 8014a>        unsigned long 3a href="+code=rx_state" class="sref">rx_state14a>; v 8114a>        unsigned long 3a href="+code=rx_count" class="sref">rx_count14a>; v 8214a>        structv3a href="+code=sk_buff" class="sref">sk_buff14a> *3a href="+code=rx_skb" class="sref">rx_skb14a>; v 8314a>        structv3a href="+code=sk_buff_head" class="sref">sk_buff_head14a> 3a href="+code=txq" class="sref">txq14a>; v 8414a>        3a href="+code=spinlock_t" class="sref">spinlock_t14a> 3a href="+code=hcill_lock" class="sref">hcill_lock14a>;       v v3spa	 class="comment">/* HCILL state lock  v v*/3/spa	  v 8514a>        unsigned long 3a href="+code=hcill_state" class="sref">hcill_state14a>;      3spa	 class="comment">/* HCILL power state v v*/3/spa	  v 8614a>        structv3a href="+code=sk_buff_head" class="sref">sk_buff_head14a> 3a href="+code=tx_wait_q" class="sref">tx_wait_q14a>;  3spa	 class="comment">/* HCILL wait queue  v v*/3/spa	  v 8714a>}; v 883/a> v 893/a>3spa	 class="comment">/*3/spa	  v 9.14a>3spa	 class="comment"> * Builds and sends an HCILL command packet.3/spa	  v 913/a>3spa	 class="comment"> * These are very simple packets with only 1 cmd byte3/spa	  v 923/a>3spa	 class="comment"> */3/spa	  v 9314a>static intv3a href="+code=send_hcill_cmd" class="sref">send_hcill_cmd14a>(3a href="+code=u8" class="sref">u814a> 3a href="+code=cmd" class="sref">cmd14a>, structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v 9414a>{ v 9514a>        intv3a href="+code=err" class="sref">err14a> = 0; v 9614a>        structv3a href="+code=sk_buff" class="sref">sk_buff14a> *3a href="+code=skb" class="sref">skb14a> = 3a href="+code=NULL" class="sref">NULL14a>; v 9714a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v 9814a>        structv3a href="+code=hcill_cmd" class="sref">hcill_cmd14a> *3a href="+code=hcill_packet" class="sref">hcill_packet14a>; v 993/a> v10014a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p cmd 0x%x"hu14a>, 3a href="+code=cmd" class="sref">cmd14a>); v1013/a> v10214a>        3spa	 class="comment">/* allocate packet */3/spa	  v10314a>        3a href="+code=skb" class="sref">skb14a> = 3a href="+code=bt_skb_alloc" class="sref">bt_skb_alloc14a>(1, 3a href="+code=GFP_ATOMIC" class="sref">GFP_ATOMIC14a>); v10414a>        if (!3a href="+code=skb" class="sref">skb14a>) { v10514a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"cannot allocate memory for HCILL packet"v10614a>                3a href="+code=err" class="sref">err14a> = -3a href="+code=ENOMEM" class="sref">ENOMEM14a>; v10714a>                goto 3a href="+code=out" class="sref">out14a>; v10814a>        } v1093/a> v11014a>        3spa	 class="comment">/* prepare packet */3/spa	  v11114a>        3a href="+code=hcill_packet" class="sref">hcill_packet14a> = (structv3a href="+code=hcill_cmd" class="sref">hcill_cmd14a> *) 3a href="+code=skb_put" class="sref">skb_put14a>(3a href="+code=skb" class="sref">skb14a>, 1); v11214a>        3a href="+code=hcill_packet" class="sref">hcill_packet14a>->3a href="+code=cmd" class="sref">cmd14a> = 3a href="+code=cmd" class="sref">cmd14a>; v11314a>        3a href="+code=skb" class="sref">skb14a>->3a href="+code=dev" class="sref">dev14a> = (void *) 3a href="+code=hu" class="sref">hu14a>->3a href="+code=hdev" class="sref">hdev14a>; v1143/a> v11514a>        3spa	 class="comment">/* send packet */3/spa	  v11614a>        3a href="+code=skb_queue_tail" class="sref">skb_queue_tail14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=txq" class="sref">txq14a>, 3a href="+code=skb" class="sref">skb14a>); v1173/a>3a href="+code=out" class="sref">out14a>: v11814a>        return 3a href="+code=err" class="sref">err14a>; v1193/a>} v1203/a> v1213/a>3spa	 class="comment">/* Initialize protocol */3/spa	  v1223/a>static intv3a href="+code=ll_open" class="sref">ll_open14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v1233/a>{ v12414a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a>; v1253/a> v12614a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p"hu14a>); v1273/a> v12814a>        3a href="+code=ll" class="sref">ll14a> = 3a href="+code=kzalloc" class="sref">kzalloc14a>(sizeof(*3a href="+code=ll" class="sref">ll14a>), 3a href="+code=GFP_KERNEL" class="sref">GFP_KERNEL14a>); v12914a>        if (!3a href="+code=ll" class="sref">ll14a>) v13014a>                return -3a href="+code=ENOMEM" class="sref">ENOMEM14a>; v1313/a> v13214a>        3a href="+code=skb_queue_head_init" class="sref">skb_queue_head_init14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=txq" class="sref">txq14a>); v13314a>        3a href="+code=skb_queue_head_init" class="sref">skb_queue_head_init14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=tx_wait_q" class="sref">tx_wait_q14a>); v13414a>        3a href="+code=spin_lock_init" class="sref">spin_lock_init14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>); v1353/a> v13614a>        3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a> = 3a href="+code=HCILL_AWAKE" class="sref">HCILL_AWAKE14a>; v1373/a> v13814a>        3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a> = 3a href="+code=ll" class="sref">ll14a>; v1393/a> v14014a>        return 0; v14114a>} v1423/a> v1433/a>3spa	 class="comment">/* Flush protocol data */3/spa	  v14414a>static intv3a href="+code=ll_flush" class="sref">ll_flush14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v14514a>{ v14614a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v1473/a> v14814a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p"hu14a>); v1493/a> v15014a>        3a href="+code=skb_queue_purge" class="sref">skb_queue_purge14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=tx_wait_q" class="sref">tx_wait_q14a>); v15114a>        3a href="+code=skb_queue_purge" class="sref">skb_queue_purge14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=txq" class="sref">txq14a>); v1523/a> v15314a>        return 0; v1543/a>} v1553/a> v1563/a>3spa	 class="comment">/* Close protocol */3/spa	  v15714a>static intv3a href="+code=ll_close" class="sref">ll_close14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v15814a>{ v15914a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v1603/a> v16114a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p"hu14a>); v1623/a> v16314a>        3a href="+code=skb_queue_purge" class="sref">skb_queue_purge14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=tx_wait_q" class="sref">tx_wait_q14a>); v16414a>        3a href="+code=skb_queue_purge" class="sref">skb_queue_purge14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=txq" class="sref">txq14a>); v1653/a> v16614a>        3a href="+code=kfree_skb" class="sref">kfree_skb14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v1673/a> v16814a>        3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a> = 3a href="+code=NULL" class="sref">NULL14a>; v1693/a> v17014a>        3a href="+code=kfree" class="sref">kfree14a>(3a href="+code=ll" class="sref">ll14a>); v1713/a> v17214a>        return 0; v17314a>} v1743/a> v1753/a>3spa	 class="comment">/*3/spa	  v1763/a>3spa	 class="comment"> * internal func6"
	, which does common work of the device wake up process:3/spa	  v1773/a>3spa	 class="comment"> * 1. places all pending packets (waiting in tx_wait_q list) in txq list.3/spa	  v1783/a>3spa	 class="comment"> * 2. changes internal state to HCILL_AWAKE.3/spa	  v1793/a>3spa	 class="comment"> * Note: assumes that hcill_lock spinlock is taken,3/spa	  v18.14a>3spa	 class="comment"> * shouldn't be called otherwise!3/spa	  v1813/a>3spa	 class="comment"> */3/spa	  v1823/a>static void 3a href="+code=__ll_do_awake" class="sref">__ll_do_awake14a>(structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a>) v1833/a>{ v18414a>        structv3a href="+code=sk_buff" class="sref">sk_buff14a> *3a href="+code=skb" class="sref">skb14a> = 3a href="+code=NULL" class="sref">NULL14a>; v1853/a> v18614a>        while ((3a href="+code=skb" class="sref">skb14a> = 3a href="+code=skb_dequeue" class="sref">skb_dequeue14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=tx_wait_q" class="sref">tx_wait_q14a>))) v18714a>                3a href="+code=skb_queue_tail" class="sref">skb_queue_tail14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=txq" class="sref">txq14a>, 3a href="+code=skb" class="sref">skb14a>); v1883/a> v18914a>        3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a> = 3a href="+code=HCILL_AWAKE" class="sref">HCILL_AWAKE14a>; v19.14a>} v1913/a> v1923/a>3spa	 class="comment">/*3/spa	  v1933/a>3spa	 class="comment"> * Called upon a wake-up-indica6"
	 from the device3/spa	  v1943/a>3spa	 class="comment"> */3/spa	  v1953/a>static void 3a href="+code=ll_device_want_to_wakeup" class="sref">ll_device_want_to_wakeup14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v19614a>{ v19714a>        unsigned long 3a href="+code=flags" class="sref">flags14a>; v19814a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v1993/a> v20014a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p"hu14a>); v2013/a> v20214a>        3spa	 class="comment">/* lock hcill state */3/spa	  v20314a>        3a href="+code=spin_lock_irqsave" class="sref">spin_lock_irqsave14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v2043/a> v20514a>        switch (3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a>) { v20614a>        casev3a href="+code=HCILL_ASLEEP_TO_AWAKE" class="sref">HCILL_ASLEEP_TO_AWAKE14a>: v20714a>                3spa	 class="comment">/*3/spa	  v2083/a>3spa	 class="comment">                 * This state means that both the host and the BRF chip3/spa	  v2093/a>3spa	 class="comment">                 * have simultaneously sent a wake-up-indica6"
	 packet.3/spa	  v28.14a>3spa	 class="comment">                 * Tradi6"
	ally, in this case, receiving a wake-up-indica6"
	3/spa	  v2113/a>3spa	 class="comment">                 * was enough and a	 addi6"
	al wake-up-ack wasn't needed.3/spa	  v2123/a>3spa	 class="comment">                 * This has changed with the BRF6350, which does require a	3/spa	  v2133/a>3spa	 class="comment">                 * explicit wake-up-ack. Other BRF vers"
	s, which do not3/spa	  v2143/a>3spa	 class="comment">                 * require a	 explicit ack here, do accept it, thus it is3/spa	  v2153/a>3spa	 class="comment">                 * perfectly safe to always send one.3/spa	  v2163/a>3spa	 class="comment">                 */3/spa	  v21714a>                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"dual wake-up-indica6"
	"v21814a>                3spa	 class="comment">/* deliberate fall-through - do not add break */3/spa	  v21914a>        casev3a href="+code=HCILL_ASLEEP" class="sref">HCILL_ASLEEP14a>: v22014a>                3spa	 class="comment">/* acknowledge device wake up */3/spa	  v22114a>                if (3a href="+code=send_hcill_cmd" class="sref">send_hcill_cmd14a>(3a href="+code=HCILL_WAKE_UP_ACK" class="sref">HCILL_WAKE_UP_ACK14a>, 3a href="+code=hu" class="sref">hu14a>) < 0) { v22214a>                        3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"cannot acknowledge device wake up"v22314a>                        goto 3a href="+code=out" class="sref">out14a>; v22414a>                } v22514a>                break; v22614a>        default: v22714a>                3spa	 class="comment">/* a	y other state is illegal */3/spa	  v22814a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"received HCILL_WAKE_UP_IND in state %ld"ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a>); v22914a>                break; v23014a>        } v2313/a> v23214a>        3spa	 class="comment">/* send pending packets and change state to HCILL_AWAKE */3/spa	  v23314a>        3a href="+code=__ll_do_awake" class="sref">__ll_do_awake14a>(3a href="+code=ll" class="sref">ll14a>); v2343/a> v2353/a>3a href="+code=out" class="sref">out14a>: v23614a>        3a href="+code=spin_unlock_irqrestore" class="sref">spin_unlock_irqrestore14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v2373/a> v23814a>        3spa	 class="comment">/* actually send the packets */3/spa	  v23914a>        3a href="+code=hci_uart_tx_wakeup" class="sref">hci_uart_tx_wakeup14a>(3a href="+code=hu" class="sref">hu14a>); v24.14a>} v2413/a> v2423/a>3spa	 class="comment">/*3/spa	  v2433/a>3spa	 class="comment"> * Called upon a sleep-indica6"
	 from the device3/spa	  v2443/a>3spa	 class="comment"> */3/spa	  v2453/a>static void 3a href="+code=ll_device_want_to_sleep" class="sref">ll_device_want_to_sleep14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v24614a>{ v24714a>        unsigned long 3a href="+code=flags" class="sref">flags14a>; v24814a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v2493/a> v25014a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p"hu14a>); v2513/a> v25214a>        3spa	 class="comment">/* lock hcill state */3/spa	  v25314a>        3a href="+code=spin_lock_irqsave" class="sref">spin_lock_irqsave14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v2543/a> v25514a>        3spa	 class="comment">/* sanity check */3/spa	  v25614a>        if (3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a> != 3a href="+code=HCILL_AWAKE" class="sref">HCILL_AWAKE14a>) v25714a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"ERR: HCILL_GO_TO_SLEEP_IND in state %ld"ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a>); v2583/a> v25914a>        3spa	 class="comment">/* acknowledge device sleep */3/spa	  v26014a>        if (3a href="+code=send_hcill_cmd" class="sref">send_hcill_cmd14a>(3a href="+code=HCILL_GO_TO_SLEEP_ACK" class="sref">HCILL_GO_TO_SLEEP_ACK14a>, 3a href="+code=hu" class="sref">hu14a>) < 0) { v26114a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"cannot acknowledge device sleep"v26214a>                goto 3a href="+code=out" class="sref">out14a>; v26314a>        } v2643/a> v26514a>        3spa	 class="comment">/* update state */3/spa	  v26614a>        3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a> = 3a href="+code=HCILL_ASLEEP" class="sref">HCILL_ASLEEP14a>; v2673/a> v26814a>3a href="+code=out" class="sref">out14a>: v26914a>        3a href="+code=spin_unlock_irqrestore" class="sref">spin_unlock_irqrestore14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v2703/a> v27114a>        3spa	 class="comment">/* actually send the sleep ack packet */3/spa	  v27214a>        3a href="+code=hci_uart_tx_wakeup" class="sref">hci_uart_tx_wakeup14a>(3a href="+code=hu" class="sref">hu14a>); v27314a>} v2743/a> v2753/a>3spa	 class="comment">/*3/spa	  v2763/a>3spa	 class="comment"> * Called upon wake-up-acknowledgement from the device3/spa	  v2773/a>3spa	 class="comment"> */3/spa	  v2783/a>static void 3a href="+code=ll_device_woke_up" class="sref">ll_device_woke_up14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v2793/a>{ v28014a>        unsigned long 3a href="+code=flags" class="sref">flags14a>; v28114a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v2823/a> v28314a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p"hu14a>); v2843/a> v28514a>        3spa	 class="comment">/* lock hcill state */3/spa	  v28614a>        3a href="+code=spin_lock_irqsave" class="sref">spin_lock_irqsave14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v2873/a> v28814a>        3spa	 class="comment">/* sanity check */3/spa	  v28914a>        if (3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a> != 3a href="+code=HCILL_ASLEEP_TO_AWAKE" class="sref">HCILL_ASLEEP_TO_AWAKE14a>) v29014a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"received HCILL_WAKE_UP_ACK in state %ld"ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a>); v2913/a> v29214a>        3spa	 class="comment">/* send pending packets and change state to HCILL_AWAKE */3/spa	  v29314a>        3a href="+code=__ll_do_awake" class="sref">__ll_do_awake14a>(3a href="+code=ll" class="sref">ll14a>); v2943/a> v29514a>        3a href="+code=spin_unlock_irqrestore" class="sref">spin_unlock_irqrestore14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v29614a> v29714a>        3spa	 class="comment">/* actually send the packets */3/spa	  v29814a>        3a href="+code=hci_uart_tx_wakeup" class="sref">hci_uart_tx_wakeup14a>(3a href="+code=hu" class="sref">hu14a>); v2993/a>} v3003/a> v3013/a>3spa	 class="comment">/* Enqueue frami for transmit6"
	 (padding, crc, etc) */3/spa	  v3023/a>3spa	 class="comment">/* may be called from two simultaneous tasklets */3/spa	  v30314a>static intv3a href="+code=ll_enqueue" class="sref">ll_enqueue14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>, structv3a href="+code=sk_buff" class="sref">sk_buff14a> *3a href="+code=skb" class="sref">skb14a>) v3043/a>{ v30514a>        unsigned long 3a href="+code=flags" class="sref">flags14a> = 0; v30614a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v3073/a> v30814a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p skb %p"hu14a>, 3a href="+code=skb" class="sref">skb14a>); v3093/a> v31014a>        3spa	 class="comment">/* Prepend skb with frami type */3/spa	  v31114a>        3a href="+code=memcpy" class="sref">memcpy14a>(3a href="+code=skb_push" class="sref">skb_push14a>(3a href="+code=skb" class="sref">skb14a>, 1), &3a href="+code=bt_cb" class="sref">bt_cb14a>(3a href="+code=skb" class="sref">skb14a>)->3a href="+code=pkt_type" class="sref">pkt_type14a>, 1); v3123/a> v31314a>        3spa	 class="comment">/* lock hcill state */3/spa	  v31414a>        3a href="+code=spin_lock_irqsave" class="sref">spin_lock_irqsave14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v3153/a> v31614a>        3spa	 class="comment">/* act according to current state */3/spa	  v31714a>        switch (3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a>) { v31814a>        casev3a href="+code=HCILL_AWAKE" class="sref">HCILL_AWAKE14a>: v31914a>                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"device awake, sending normally"v32014a>                3a href="+code=skb_queue_tail" class="sref">skb_queue_tail14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=txq" class="sref">txq14a>, 3a href="+code=skb" class="sref">skb14a>); v32114a>                break; v32214a>        casev3a href="+code=HCILL_ASLEEP" class="sref">HCILL_ASLEEP14a>: v32314a>                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"device asleep, waking up and queueing packet"v32414a>                3spa	 class="comment">/* save packet for later */3/spa	  v32514a>                3a href="+code=skb_queue_tail" class="sref">skb_queue_tail14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=tx_wait_q" class="sref">tx_wait_q14a>, 3a href="+code=skb" class="sref">skb14a>); v32614a>                3spa	 class="comment">/* awake device */3/spa	  v32714a>                if (3a href="+code=send_hcill_cmd" class="sref">send_hcill_cmd14a>(3a href="+code=HCILL_WAKE_UP_IND" class="sref">HCILL_WAKE_UP_IND14a>, 3a href="+code=hu" class="sref">hu14a>) < 0) { v32814a>                        3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"cannot wake up device"v32914a>                        break; v33014a>                } v33114a>                3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a> = 3a href="+code=HCILL_ASLEEP_TO_AWAKE" class="sref">HCILL_ASLEEP_TO_AWAKE14a>; v33214a>                break; v33314a>        casev3a href="+code=HCILL_ASLEEP_TO_AWAKE" class="sref">HCILL_ASLEEP_TO_AWAKE14a>: v33414a>                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"device waking up, queueing packet"v33514a>                3spa	 class="comment">/* transient state; just keep packet for later */3/spa	  v33614a>                3a href="+code=skb_queue_tail" class="sref">skb_queue_tail14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=tx_wait_q" class="sref">tx_wait_q14a>, 3a href="+code=skb" class="sref">skb14a>); v33714a>                break; v33814a>        default: v33914a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"illegal hcill state: %ld (losing packet)"ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a>); v34014a>                3a href="+code=kfree_skb" class="sref">kfree_skb14a>(3a href="+code=skb" class="sref">skb14a>); v34114a>                break; v34214a>        } v3433/a> v34414a>        3a href="+code=spin_unlock_irqrestore" class="sref">spin_unlock_irqrestore14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=hcill_lock" class="sref">hcill_lock14a>, 3a href="+code=flags" class="sref">flags14a>); v3453/a> v34614a>        return 0; v34714a>} v3483/a> v3493/a>static 3a href="+code=inline" class="sref">inline14a> intv3a href="+code=ll_check_data_len" class="sref">ll_check_data_len14a>(structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a>, intv3a href="+code=len" class="sref">len14a>) v35014a>{ v35114a>        intv3a href="+code=room" class="sref">room14a> = 3a href="+code=skb_tailroom" class="sref">skb_tailroom14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v3523/a> v35314a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"len %d room %d"len14a>, 3a href="+code=room" class="sref">room14a>); v3543/a> v35514a>        if (!3a href="+code=len" class="sref">len14a>) { v35614a>                3a href="+code=hci_recv_frami" class="sref">hci_recv_frami14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v35714a>        } else if (3a href="+code=len" class="sref">len14a> > 3a href="+code=room" class="sref">room14a>) { v35814a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"Data length is too large"v35914a>                3a href="+code=kfree_skb" class="sref">kfree_skb14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v36014a>        } else { v36114a>                3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a> = 3a href="+code=HCILL_W4_DATA" class="sref">HCILL_W4_DATA14a>; v36214a>                3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a> = 3a href="+code=len" class="sref">len14a>; v36314a>                return 3a href="+code=len" class="sref">len14a>; v36414a>        } v3653/a> v36614a>        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a> = 3a href="+code=HCILL_W4_PACKET_TYPE" class="sref">HCILL_W4_PACKET_TYPE14a>; v36714a>        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>   = 3a href="+code=NULL" class="sref">NULL14a>; v36814a>        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a> = 0; v3693/a> v37014a>        return 0; v37114a>} v3723/a> v3733/a>3spa	 class="comment">/* Recv data */3/spa	  v3743/a>static intv3a href="+code=ll_recv" class="sref">ll_recv14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>, void *3a href="+code=data" class="sref">data14a>, intv3a href="+code=count" class="sref">count14a>) v3753/a>{ v37614a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v37714a>        char *3a href="+code=ptr" class="sref">ptr14a>; v37814a>        structv3a href="+code=hci_event_hdr" class="sref">hci_event_hdr14a> *3a href="+code=eh" class="sref">eh14a>; v37914a>        structv3a href="+code=hci_acl_hdr" class="sref">hci_acl_hdr14a>   *3a href="+code=ah" class="sref">ah14a>; v38014a>        structv3a href="+code=hci_sco_hdr" class="sref">hci_sco_hdr14a>   *3a href="+code=sh" class="sref">sh14a>; v38114a>        intv3a href="+code=len" class="sref">len14a>, 3a href="+code=type" class="sref">type14a>, 3a href="+code=dlen" class="sref">dlen14a>; v3823/a> v38314a>        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"hu %p count %d rx_state %ld rx_count %ld"hu14a>, 3a href="+code=count" class="sref">count14a>, 3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a>, 3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a>); v3843/a> v38514a>        3a href="+code=ptr" class="sref">ptr14a> = 3a href="+code=data" class="sref">data14a>; v38614a>        while (3a href="+code=count" class="sref">count14a>) { v38714a>                if (3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a>) { v38814a>                        3a href="+code=len" class="sref">len14a> = 3a href="+code=min_t" class="sref">min_t14a>(unsigned int, 3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a>, 3a href="+code=count" class="sref">count14a>); v38914a>                        3a href="+code=memcpy" class="sref">memcpy14a>(3a href="+code=skb_put" class="sref">skb_put14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>, 3a href="+code=len" class="sref">len14a>), 3a href="+code=ptr" class="sref">ptr14a>, 3a href="+code=len" class="sref">len14a>); v39014a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a> -= 3a href="+code=len" class="sref">len14a>; 3a href="+code=count" class="sref">count14a> -= 3a href="+code=len" class="sref">len14a>; 3a href="+code=ptr" class="sref">ptr14a> += 3a href="+code=len" class="sref">len14a>; v3913/a> v39214a>                        if (3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a>) v39314a>                                continue; v3943/a> v39514a>                        switch (3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a>) { v39614a>                        casev3a href="+code=HCILL_W4_DATA" class="sref">HCILL_W4_DATA14a>: v39714a>                                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"Complete data"v39814a>                                3a href="+code=hci_recv_frami" class="sref">hci_recv_frami14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v3993/a> v40014a>                                3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a> = 3a href="+code=HCILL_W4_PACKET_TYPE" class="sref">HCILL_W4_PACKET_TYPE14a>; v40114a>                                3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a> = 3a href="+code=NULL" class="sref">NULL14a>; v40214a>                                continue; v4033/a> v40414a>                        casev3a href="+code=HCILL_W4_EVENT_HDR" class="sref">HCILL_W4_EVENT_HDR14a>: v40514a>                                3a href="+code=eh" class="sref">eh14a> = 3a href="+code=hci_event_hdr" class="sref">hci_event_hdr14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v40614a> v40714a>                                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"Event header: evt 0x%2.2x plen %d"eh14a>->3a href="+code=evt" class="sref">evt14a>, 3a href="+code=eh" class="sref">eh14a>->3a href="+code=plen" class="sref">plen14a>); v4083/a> v40914a>                                3a href="+code=ll_check_data_len" class="sref">ll_check_data_len14a>(3a href="+code=ll" class="sref">ll14a>, 3a href="+code=eh" class="sref">eh14a>->3a href="+code=plen" class="sref">plen14a>); v41014a>                                continue; v4113/a> v41214a>                        casev3a href="+code=HCILL_W4_ACL_HDR" class="sref">HCILL_W4_ACL_HDR14a>: v41314a>                                3a href="+code=ah" class="sref">ah14a> = 3a href="+code=hci_acl_hdr" class="sref">hci_acl_hdr14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v41414a>                                3a href="+code=dlen" class="sref">dlen14a> = 3a href="+code=__le16_to_cpu" class="sref">__le16_to_cpu14a>(3a href="+code=ah" class="sref">ah14a>->3a href="+code=dlen" class="sref">dlen14a>); v4153/a> v41614a>                                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"ACL header: dlen %d"dlen14a>); v4173/a> v41814a>                                3a href="+code=ll_check_data_len" class="sref">ll_check_data_len14a>(3a href="+code=ll" class="sref">ll14a>, 3a href="+code=dlen" class="sref">dlen14a>); v41914a>                                continue; v4203/a> v42114a>                        casev3a href="+code=HCILL_W4_SCO_HDR" class="sref">HCILL_W4_SCO_HDR14a>: v42214a>                                3a href="+code=sh" class="sref">sh14a> = 3a href="+code=hci_sco_hdr" class="sref">hci_sco_hdr14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>); v4233/a> v42414a>                                3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"SCO header: dlen %d"sh14a>->3a href="+code=dlen" class="sref">dlen14a>); v4253/a> v42614a>                                3a href="+code=ll_check_data_len" class="sref">ll_check_data_len14a>(3a href="+code=ll" class="sref">ll14a>, 3a href="+code=sh" class="sref">sh14a>->3a href="+code=dlen" class="sref">dlen14a>); v42714a>                                continue; v42814a>                        } v42914a>                } v4303/a> v43114a>                3spa	 class="comment">/* HCILL_W4_PACKET_TYPE */3/spa	  v43214a>                switch (*3a href="+code=ptr" class="sref">ptr14a>) { v43314a>                casev3a href="+code=HCI_EVENT_PKT" class="sref">HCI_EVENT_PKT14a>: v43414a>                        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"Event packet"v43514a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a> = 3a href="+code=HCILL_W4_EVENT_HDR" class="sref">HCILL_W4_EVENT_HDR14a>; v43614a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a> = 3a href="+code=HCI_EVENT_HDR_SIZE" class="sref">HCI_EVENT_HDR_SIZE14a>; v43714a>                        3a href="+code=type" class="sref">type14a> = 3a href="+code=HCI_EVENT_PKT" class="sref">HCI_EVENT_PKT14a>; v43814a>                        break; v4393/a> v44014a>                casev3a href="+code=HCI_ACLDATA_PKT" class="sref">HCI_ACLDATA_PKT14a>: v44114a>                        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"ACL packet"v44214a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a> = 3a href="+code=HCILL_W4_ACL_HDR" class="sref">HCILL_W4_ACL_HDR14a>; v44314a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a> = 3a href="+code=HCI_ACL_HDR_SIZE" class="sref">HCI_ACL_HDR_SIZE14a>; v44414a>                        3a href="+code=type" class="sref">type14a> = 3a href="+code=HCI_ACLDATA_PKT" class="sref">HCI_ACLDATA_PKT14a>; v44514a>                        break; v44614a> v44714a>                casev3a href="+code=HCI_SCODATA_PKT" class="sref">HCI_SCODATA_PKT14a>: v44814a>                        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"SCO packet"v44914a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a> = 3a href="+code=HCILL_W4_SCO_HDR" class="sref">HCILL_W4_SCO_HDR14a>; v45014a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a> = 3a href="+code=HCI_SCO_HDR_SIZE" class="sref">HCI_SCO_HDR_SIZE14a>; v45114a>                        3a href="+code=type" class="sref">type14a> = 3a href="+code=HCI_SCODATA_PKT" class="sref">HCI_SCODATA_PKT14a>; v45214a>                        break; v4533/a> v45414a>                3spa	 class="comment">/* HCILL signals */3/spa	  v45514a>                casev3a href="+code=HCILL_GO_TO_SLEEP_IND" class="sref">HCILL_GO_TO_SLEEP_IND14a>: v45614a>                        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"HCILL_GO_TO_SLEEP_IND packet"v45714a>                        3a href="+code=ll_device_want_to_sleep" class="sref">ll_device_want_to_sleep14a>(3a href="+code=hu" class="sref">hu14a>); v45814a>                        3a href="+code=ptr" class="sref">ptr14a>++; 3a href="+code=count" class="sref">count14a>--; v45914a>                        continue; v4603/a> v46114a>                casev3a href="+code=HCILL_GO_TO_SLEEP_ACK" class="sref">HCILL_GO_TO_SLEEP_ACK14a>: v46214a>                        3spa	 class="comment">/* shouldn't happen */3/spa	  v46314a>                        3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"received HCILL_GO_TO_SLEEP_ACK (in state %ld)"ll14a>->3a href="+code=hcill_state" class="sref">hcill_state14a>); v46414a>                        3a href="+code=ptr" class="sref">ptr14a>++; 3a href="+code=count" class="sref">count14a>--; v46514a>                        continue; v46614a> v46714a>                casev3a href="+code=HCILL_WAKE_UP_IND" class="sref">HCILL_WAKE_UP_IND14a>: v46814a>                        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"HCILL_WAKE_UP_IND packet"v46914a>                        3a href="+code=ll_device_want_to_wakeup" class="sref">ll_device_want_to_wakeup14a>(3a href="+code=hu" class="sref">hu14a>); v47014a>                        3a href="+code=ptr" class="sref">ptr14a>++; 3a href="+code=count" class="sref">count14a>--; v47114a>                        continue; v4723/a> v47314a>                casev3a href="+code=HCILL_WAKE_UP_ACK" class="sref">HCILL_WAKE_UP_ACK14a>: v47414a>                        3a href="+code=BT_DBG" class="sref">BT_DBG14a>(3spa	 class="string">"HCILL_WAKE_UP_ACK packet"v47514a>                        3a href="+code=ll_device_woke_up" class="sref">ll_device_woke_up14a>(3a href="+code=hu" class="sref">hu14a>); v47614a>                        3a href="+code=ptr" class="sref">ptr14a>++; 3a href="+code=count" class="sref">count14a>--; v47714a>                        continue; v4783/a> v47914a>                default: v48014a>                        3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"Unknown HCI packet type %2.2x"__u814a>)*3a href="+code=ptr" class="sref">ptr14a>); v48114a>                        3a href="+code=hu" class="sref">hu14a>->3a href="+code=hdev" class="sref">hdev14a>->3a href="+code=stat" class="sref">stat14a>.3a href="+code=err_rx" class="sref">err_rx14a>++; v48214a>                        3a href="+code=ptr" class="sref">ptr14a>++; 3a href="+code=count" class="sref">count14a>--; v48314a>                        continue; v48414a>                } v4853/a> v48614a>                3a href="+code=ptr" class="sref">ptr14a>++; 3a href="+code=count" class="sref">count14a>--; v4873/a> v48814a>                3spa	 class="comment">/* Allocate packet */3/spa	  v48914a>                3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a> = 3a href="+code=bt_skb_alloc" class="sref">bt_skb_alloc14a>(3a href="+code=HCI_MAX_FRAME_SIZE" class="sref">HCI_MAX_FRAME_SIZE14a>, 3a href="+code=GFP_ATOMIC" class="sref">GFP_ATOMIC14a>); v49014a>                if (!3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>) { v49114a>                        3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"Can't allocate mem for new packet"v49214a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_state" class="sref">rx_state14a> = 3a href="+code=HCILL_W4_PACKET_TYPE" class="sref">HCILL_W4_PACKET_TYPE14a>; v49314a>                        3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_count" class="sref">rx_count14a> = 0; v49414a>                        return -3a href="+code=ENOMEM" class="sref">ENOMEM14a>; v49514a>                } v49614a> v49714a>                3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>->3a href="+code=dev" class="sref">dev14a> = (void *) 3a href="+code=hu" class="sref">hu14a>->3a href="+code=hdev" class="sref">hdev14a>; v49814a>                3a href="+code=bt_cb" class="sref">bt_cb14a>(3a href="+code=ll" class="sref">ll14a>->3a href="+code=rx_skb" class="sref">rx_skb14a>)->3a href="+code=pkt_type" class="sref">pkt_type14a> = 3a href="+code=type" class="sref">type14a>; v49914a>        } v5003/a> v50114a>        return 3a href="+code=count" class="sref">count14a>; v50214a>} v5033/a> v5043/a>static structv3a href="+code=sk_buff" class="sref">sk_buff14a> *3a href="+code=ll_dequeue" class="sref">ll_dequeue14a>(structv3a href="+code=hci_uart" class="sref">hci_uart14a> *3a href="+code=hu" class="sref">hu14a>) v5053/a>{ v50614a>        structv3a href="+code=ll_struct" class="sref">ll_struct14a> *3a href="+code=ll" class="sref">ll14a> = 3a href="+code=hu" class="sref">hu14a>->3a href="+code=priv" class="sref">priv14a>; v50714a>        return 3a href="+code=skb_dequeue" class="sref">skb_dequeue14a>(&3a href="+code=ll" class="sref">ll14a>->3a href="+code=txq" class="sref">txq14a>); v5083/a>} v5093/a> v51014a>static structv3a href="+code=hci_uart_proto" class="sref">hci_uart_proto14a> 3a href="+code=llp" class="sref">llp14a> = { v51114a>        .3a href="+code=id" class="sref">id14a>             = 3a href="+code=HCI_UART_LL" class="sref">HCI_UART_LL14a>, v51214a>        .3a href="+code=open" class="sref">open14a>           = 3a href="+code=ll_open" class="sref">ll_open14a>, v51314a>        .3a href="+code=close" class="sref">close14a>          = 3a href="+code=ll_close" class="sref">ll_close14a>, v51414a>        .3a href="+code=recv" class="sref">recv14a>           = 3a href="+code=ll_recv" class="sref">ll_recv14a>, v51514a>        .3a href="+code=enqueue" class="sref">enqueue14a>        = 3a href="+code=ll_enqueue" class="sref">ll_enqueue14a>, v51614a>        .3a href="+code=dequeue" class="sref">dequeue14a>        = 3a href="+code=ll_dequeue" class="sref">ll_dequeue14a>, v51714a>        .3a href="+code=flush" class="sref">flush14a>          = 3a href="+code=ll_flush" class="sref">ll_flush14a>, v51814a>}; v5193/a> v5203/a>intv3a href="+code=__init" class="sref">__init14a> 3a href="+code=ll_init" class="sref">ll_init14a>(void) v52114a>{ v52214a>        intv3a href="+code=err" class="sref">err14a> = 3a href="+code=hci_uart_register_proto" class="sref">hci_uart_register_proto14a>(&3a href="+code=llp" class="sref">llp14a>); v5233/a> v52414a>        if (!3a href="+code=err" class="sref">err14a>) v52514a>                3a href="+code=BT_INFO" class="sref">BT_INFO14a>(3spa	 class="string">"HCILL protocol initialized"v52614a>        else v52714a>                3a href="+code=BT_ERR" class="sref">BT_ERR14a>(3spa	 class="string">"HCILL protocol registration failed"v5283/a> v52914a>        return 3a href="+code=err" class="sref">err14a>; v5303/a>} v5313/a> v53214a>intv3a href="+code=__exit" class="sref">__exit14a> 3a href="+code=ll_deinit" class="sref">ll_deinit14a>(void) v53314a>{ v53414a>        return 3a href="+code=hci_uart_unregister_proto" class="sref">hci_uart_unregister_proto14a>(&3a href="+code=llp" class="sref">llp14a>); v53514a>} v53614a>
lxr.linux.no kindly hosted by 3a href="http://www.redpill-linpro.no">Redpill Linpro AS14a>, provider of Linux consulting and operations services since 1995.