linux/drivers/watchdog/w83627hf_wdt.c
<<
v4.2/spa="v 4.2/form"v 4.2a v4. href="../linux+v3 9/drivers/watchdog/w83627hf_wdt.c"> v4.2img src="../.static/gfx/right.png" alt=">>"> 2/spa="v 2spa= class="lxr_search"> v v4.2input typ3.1hidden" nam3.1navtarget" v3.1"> v4.2input typ3.1text" nam3.1search" id.1search"> v4.2butt >typ3.1submit">Search v4.Prefsv 4.2/a> 2/spa="v v4. .2/div"v v4. .2form aclue=="ajax+*" method="post" onsubmit="return false;"> 2input typ3.1hidden" nam3.1ajax_lookup" id.1ajax_lookup" v3.1"> v4. .2/form"v v4. .2div class="headingbott m">v 2div id.1file_contents""
. .12/a>2spa= class="comment">/*2/spa="v. .22/a>2spa= class="comment"> * v4. .w83627hf/thf WDT driver2/spa="v. .32/a>2spa= class="comment"> *2/spa="v. .42/a>2spa= class="comment"> * v4. .(c) Copyright 2007 Vlad Drukker <vlad@storewiz.com>2/spa="v. .52/a>2spa= class="comment"> * v4. .........added support for W83627THF.2/spa="v. .62/a>2spa= class="comment"> *2/spa="v. .72/a>2spa= class="comment"> * v4. .(c) Copyright 2003,2007 Pádraig Brady <P@draigBrady.com>2/spa="v. .82/a>2spa= class="comment"> *2/spa="v. .92/a>2spa= class="comment"> * v4. .Based   >advantechwdt.c which is based   >wdt.c.2/spa="v. ion a>2spa= class="comment"> * v4. .Original copyright messages:2/spa="v. 112/a>2spa= class="comment"> *2/spa="v. 122/a>2spa= class="comment"> * v4. .(c) Copyright 2000-2001 Marek Michalkiewicz <marekm@linux.org.pl>2/spa="v. 132/a>2spa= class="comment"> *2/spa="v. 142/a>2spa= class="comment"> * v4. .(c) Copyright 1996 Ala= Cox <ala=@lxorguk.ukuu.org.uk>,2/spa="v. 152/a>2spa= class="comment"> * v4. .........................................All Rights Reserved.2/spa="v. 162/a>2spa= class="comment"> *2/spa="v. 172/a>2spa= class="comment"> * v4. .This program is free software; you ca= redistribute it and/or2/spa="v. 182/a>2spa= class="comment"> * v4. .modify it under the terms of the GNU General Public License2/spa="v. 192/a>2spa= class="comment"> * v4. .as published by the Free Software Foundalue=; either versue=2/spa="v. 2on a>2spa= class="comment"> * v4. .2 of the License, or (at your value=) any later versue=.2/spa="v. 212/a>2spa= class="comment"> *2/spa="v. 222/a>2spa= class="comment"> * v4. .Neither Ala= Cox nor CymruNet Ltd.>admit liability nor provide2/spa="v. 232/a>2spa= class="comment"> * v4. .warranty for any of this software..This material is provided2/spa="v. 242/a>2spa= class="comment"> * v4. ."AS-IS" and at no charge.2/spa="v. 252/a>2spa= class="comment"> *2/spa="v. 262/a>2spa= class="comment"> * v4. .(c) Copyright 1995....Ala= Cox <ala=@lxorguk.ukuu.org.uk>2/spa="v. 272/a>2spa= class="comment"> */2/spa="v. 282/a>v. 292/a>#define.2a href="+code=pr_fmt" class="sref">pr_fmt2/a>(2a href="+code=fmt" class="sref">fmt2/a>).2a href="+code=KBUILD_MODNAME" class="sref">KBUILD_MODNAME2/a> 2spa= class="string">":."2/spa=".2a href="+code=fmt" class="sref">fmt2/a>v. 302/a>v. 312/a>#include <linux/module.h2/a>>v. 322/a>#include <linux/moduleparam.h2/a>>v. 332/a>#include <linux/typ3s.h2/a>>v. 342/a>#include <linux/miscdevice.h2/a>>v. 352/a>#include <linux/watchdog.h2/a>>v. 362/a>#include <linux/fs.h2/a>>v. 372/a>#include <linux/ioport.h2/a>>v. 382/a>#include <linux/notifier.h2/a>>v. 392/a>#include <linux/reboot.h2/a>>v. 402/a>#include <linux/init.h2/a>>v. 412/a>#include <linux/spinlock.h2/a>>v. 422/a>#include <linux/io.h2/a>>v. 432/a>#include <linux/uaccess.h2/a>>v. 442/a>v. 452/a>v. 462/a>#define.2a href="+code=WATCHDOG_NAME" class="sref">WATCHDOG_NAME2/a> 2spa= class="string">"w83627hf/thf/hg/dhg WDT"2/spa="v. 472/a>#define.2a href="+code=WATCHDOG_TIMEOUT" class="sref">WATCHDOG_TIMEOUT2/a> 60.............2spa= class="comment">/* 60.sec default timeout */2/spa="v. 482/a>v. 492/a>static unsigned long.2a href="+code=wdt_is_open" class="sref">wdt_is_open2/a>;v. 502/a>static char.2a href="+code=expect_close" class="sref">expect_close2/a>;v. 512/a>static 2a href="+code=DEFINE_SPINLOCK" class="sref">DEFINE_SPINLOCK2/a>(2a href="+code=io_lock" class="sref">io_lock2/a>);v. 522/a>v. 532/a>2spa= class="comment">/* You must.set this - there is no sane.way to probe for this board. */2/spa="v. 542/a>static int.2a href="+code=wdt_io" class="sref">wdt_io2/a> = 0x2E;v. 552/a>2a href="+code=module_param" class="sref">module_param2/a>(2a href="+code=wdt_io" class="sref">wdt_io2/a>, int, 0);v. 562/a>2a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESC2/a>(2a href="+code=wdt_io" class="sref">wdt_io2/a>, 2spa= class="string">"w83627hf/thf WDT io port (default 0x2E)"2/spa=");v. 572/a>v. 582/a>static int.2a href="+code=timeout" class="sref">timeout2/a> = 2a href="+code=WATCHDOG_TIMEOUT" class="sref">WATCHDOG_TIMEOUT2/a>;..2spa= class="comment">/* in.seconds */2/spa="v. 592/a>2a href="+code=module_param" class="sref">module_param2/a>(2a href="+code=timeout" class="sref">timeout2/a>, int, 0);v. 602/a>2a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESC2/a>(2a href="+code=timeout" class="sref">timeout2/a>,v. 612/a>................2spa= class="string">"Watchdog timeout in.seconds. 1 <= timeout <= 255, default="2/spa="v. 622/a>................................2a href="+code=__MODULE_STRING" class="sref">__MODULE_STRING2/a>(2a href="+code=WATCHDOG_TIMEOUT" class="sref">WATCHDOG_TIMEOUT2/a>).2spa= class="string">"."2/spa=");v. 632/a>v. 642/a>static 2a href="+code=bool" class="sref">bool2/a> 2a href="+code=nowayout" class="sref">nowayout2/a> = 2a href="+code=WATCHDOG_NOWAYOUT" class="sref">WATCHDOG_NOWAYOUT2/a>;v. 652/a>2a href="+code=module_param" class="sref">module_param2/a>(2a href="+code=nowayout" class="sref">nowayout2/a>, 2a href="+code=bool" class="sref">bool2/a>, 0);v. 662/a>2a href="+code=MODULE_PARM_DESC" class="sref">MODULE_PARM_DESC2/a>(2a href="+code=nowayout" class="sref">nowayout2/a>,v. 672/a>................2spa= class="string">"Watchdog cannot be stopped   ce started (default="2/spa="v. 682/a>................................2a href="+code=__MODULE_STRING" class="sref">__MODULE_STRING2/a>(2a href="+code=WATCHDOG_NOWAYOUT" class="sref">WATCHDOG_NOWAYOUT2/a>).2spa= class="string">")"2/spa=");v. 692/a>v. 7on a>2spa= class="comment">/*2/spa="v. 712/a>2spa= class="comment"> *......Kernel methods.2/spa="v. 722/a>2spa= class="comment"> */2/spa="v. 732/a>v. 742/a>#define.2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>.(2a href="+code=wdt_io" class="sref">wdt_io2/a>+0)...2spa= class="comment">/* Extended Funclue= Enable Registers */2/spa="v. 752/a>#define.2a href="+code=WDT_EFIR" class="sref">WDT_EFIR2/a>.(2a href="+code=wdt_io" class="sref">wdt_io2/a>+0)...2spa= class="comment">/* Extended Funclue= Index Register2/spa="v. 762/a>2spa= class="comment">                                                        (sam3.as EFER) */2/spa="v. 772/a>#define.2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>.(2a href="+code=WDT_EFIR" class="sref">WDT_EFIR2/a>+1).2spa= class="comment">/* Extended Funclue= Data Register */2/spa="v. 782/a>v. 792/a>static void.2a href="+code=w83627hf_select_wd_register" class="sref">w83627hf_select_wd_register2/a>(void)v. 8on a>{v. 812/a>........unsigned char.2a href="+code=c" class="sref">c2/a>;v. 822/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0x87, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* Enter extended funclue= mode */2/spa="v. 832/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0x87, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* Again according to manual */2/spa="v. 842/a>v. 852/a>........2a href="+code=outb" class="sref">outb2/a>(0x20, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);...2spa= class="comment">/* check chip versue=...*/2/spa="v. 862/a>........2a href="+code=c" class="sref">c2/a> = 2a href="+code=inb" class="sref">inb2/a>(2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);v. 872/a>........if.(2a href="+code=c" class="sref">c2/a> == 0x82) {........2spa= class="comment">/* W83627THF            */2/spa="v. 882/a>................2a href="+code=outb_p" class="sref">outb_p2/a>(0x2b, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* select GPIO3 */2/spa="v. 892/a>................2a href="+code=c" class="sref">c2/a> = ((2a href="+code=inb_p" class="sref">inb_p2/a>(2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>) & 0xf7) | 0x04);.2spa= class="comment">/* select WDT0 */2/spa="v. 902/a>................2a href="+code=outb_p" class="sref">outb_p2/a>(0x2b, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);v. 912/a>................2a href="+code=outb_p" class="sref">outb_p2/a>(2a href="+code=c" class="sref">c2/a>, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);....2spa= class="comment">/* set GPIO3 to WDT0 */2/spa="v. 922/a>........} else.if.(2a href="+code=c" class="sref">c2/a> == 0x88 ||.2a href="+code=c" class="sref">c2/a> == 0xa0) {....2spa= class="comment">/* W83627EHF / W83627DHG */2/spa="v. 932/a>................2a href="+code=outb_p" class="sref">outb_p2/a>(0x2d, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* select GPIO5 */2/spa="v. 942/a>................2a href="+code=c" class="sref">c2/a> = 2a href="+code=inb_p" class="sref">inb_p2/a>(2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>) & ~0x01;.2spa= class="comment">/* PIN77 -> WDT0# */2/spa="v. 952/a>................2a href="+code=outb_p" class="sref">outb_p2/a>(0x2d, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);v. 962/a>................2a href="+code=outb_p" class="sref">outb_p2/a>(2a href="+code=c" class="sref">c2/a>, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);.2spa= class="comment">/* set GPIO5 to WDT0 */2/spa="v. 972/a>........}v. 982/a>v. 992/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0x07, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* point.to logical device number reg */2/spa="v.1002/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0x08, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);.2spa= class="comment">/* select logical device 8 (GPIO2) */2/spa="v.1012/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0x30, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* select CR30 */2/spa="v.1022/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0x01, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);.2spa= class="comment">/* set bit 0.to acluvate GPIO2 */2/spa="v.1032/a>}v.1042/a>v.1052/a>static void.2a href="+code=w83627hf_unselect_wd_register" class="sref">w83627hf_unselect_wd_register2/a>(void)v.106n a>{v.1072/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0xAA, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* Leave extended funclue= mode */2/spa="v.1082/a>}v.1092/a>v.1ion a>2spa= class="comment">/* tya= motherboards seem.to set F5 to 0x4C ?2/spa="v.1112/a>2spa= class="comment"> * So explicitly init.to appropriate 
  v3. */2/spa="v.1122/a>v.1132/a>static void.2a href="+code=w83627hf_init" class="sref">w83627hf_init2/a>(void)v.1142/a>{v.1152/a>........unsigned char.2a href="+code=t" class="sref">t2/a>;v.1162/a>v.1172/a>........2a href="+code=w83627hf_select_wd_register" class="sref">w83627hf_select_wd_register2/a>();v.1182/a>v.1192/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0xF6, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* Select CRF6 */2/spa="v.1202/a>........2a href="+code=t" class="sref">t2/a> = 2a href="+code=inb_p" class="sref">inb_p2/a>(2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);......2spa= class="comment">/* read CRF6 */2/spa="v.1212/a>........if.(2a href="+code=t" class="sref">t2/a> != 0) {v.1222/a>................2a href="+code=pr_info" class="sref">pr_info2/a>(2spa= class="string">"Watchdog already running. Resetting timeout to %d.sec\n"2/spa=",v.1232/a>........................2a href="+code=timeout" class="sref">timeout2/a>);v.1242/a>................2a href="+code=outb_p" class="sref">outb_p2/a>(2a href="+code=timeout" class="sref">timeout2/a>, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);....2spa= class="comment">/* Write back to CRF6 */2/spa="v.1252/a>........}v.1262/a>v.1272/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0xF5, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* Select CRF5 */2/spa="v.1282/a>........2a href="+code=t" class="sref">t2/a> = 2a href="+code=inb_p" class="sref">inb_p2/a>(2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);......2spa= class="comment">/* read CRF5 */2/spa="v.1292/a>........2a href="+code=t" class="sref">t2/a> &= ~0x0C;...............2spa= class="comment">/* set second mode & disable keyboard2/spa="v.13on a>2spa= class="comment">                                    turning off watchdog */2/spa="v.1312/a>........2a href="+code=t" class="sref">t2/a> |= 0x02;................2spa= class="comment">/* enable the WDTO# output low pulse2/spa="v.1322/a>2spa= class="comment">                                    to the KBRST# pin (PIN60) */2/spa="v.1332/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(2a href="+code=t" class="sref">t2/a>, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);....2spa= class="comment">/* Write back to CRF5 */2/spa="v.1342/a>v.1352/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0xF7, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);.2spa= class="comment">/* Select CRF7 */2/spa="v.1362/a>........2a href="+code=t" class="sref">t2/a> = 2a href="+code=inb_p" class="sref">inb_p2/a>(2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);......2spa= class="comment">/* read CRF7 */2/spa="v.1372/a>........2a href="+code=t" class="sref">t2/a> &= ~0xC0;...............2spa= class="comment">/* disable keyboard & mouse turning off2/spa="v.1382/a>2spa= class="comment">                                    watchdog */2/spa="v.1392/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(2a href="+code=t" class="sref">t2/a>, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);....2spa= class="comment">/* Write back to CRF7 */2/spa="v.1402/a>v.1412/a>........2a href="+code=w83627hf_unselect_wd_register" class="sref">w83627hf_unselect_wd_register2/a>();v.1422/a>}v.1432/a>v.1442/a>static void.2a href="+code=wdt_set_time" class="sref">wdt_set_time2/a>(int.2a href="+code=timeout" class="sref">timeout2/a>)v.1452/a>{v.1462/a>........2a href="+code=spin_lock" class="sref">spin_lock2/a>(&2a href="+code=io_lock" class="sref">io_lock2/a>);v.1472/a>v.1482/a>........2a href="+code=w83627hf_select_wd_register" class="sref">w83627hf_select_wd_register2/a>();v.1492/a>v.1502/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0xF6, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);....2spa= class="comment">/* Select CRF6 */2/spa="v.1512/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(2a href="+code=timeout" class="sref">timeout2/a>, 2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);.2spa= class="comment">/* Write Timeout counter to CRF6 */2/spa="v.1522/a>v.1532/a>........2a href="+code=w83627hf_unselect_wd_register" class="sref">w83627hf_unselect_wd_register2/a>();v.1542/a>v.1552/a>........2a href="+code=spin_unlock" class="sref">spin_unlock2/a>(&2a href="+code=io_lock" class="sref">io_lock2/a>);v.1562/a>}v.1572/a>v.1582/a>static int.2a href="+code=wdt_ping" class="sref">wdt_ping2/a>(void)v.1592/a>{v.1602/a>........2a href="+code=wdt_set_time" class="sref">wdt_set_time2/a>(2a href="+code=timeout" class="sref">timeout2/a>);v.1612/a>........return 0;v.1622/a>}v.1632/a>v.1642/a>static int.2a href="+code=wdt_disable" class="sref">wdt_disable2/a>(void)v.1652/a>{v.1662/a>........2a href="+code=wdt_set_time" class="sref">wdt_set_time2/a>(0);v.1672/a>........return 0;v.1682/a>}v.1692/a>v.1702/a>static int.2a href="+code=wdt_set_heartbeat" class="sref">wdt_set_heartbeat2/a>(int.2a href="+code=t" class="sref">t2/a>)v.1712/a>{v.1722/a>........if.(2a href="+code=t" class="sref">t2/a> < 1 ||.2a href="+code=t" class="sref">t2/a> > 255)v.1732/a>................return -2a href="+code=EINVAL" class="sref">EINVAL2/a>;v.1742/a>........2a href="+code=timeout" class="sref">timeout2/a> = 2a href="+code=t" class="sref">t2/a>;v.1752/a>........return 0;v.1762/a>}v.1772/a>v.1782/a>static int.2a href="+code=wdt_get_time" class="sref">wdt_get_time2/a>(void)v.1792/a>{v.1802/a>........int.2a href="+code=timeleft" class="sref">timeleft2/a>;v.1812/a>v.1822/a>........2a href="+code=spin_lock" class="sref">spin_lock2/a>(&2a href="+code=io_lock" class="sref">io_lock2/a>);v.1832/a>v.1842/a>........2a href="+code=w83627hf_select_wd_register" class="sref">w83627hf_select_wd_register2/a>();v.1852/a>v.1862/a>........2a href="+code=outb_p" class="sref">outb_p2/a>(0xF6, 2a href="+code=WDT_EFER" class="sref">WDT_EFER2/a>);....2spa= class="comment">/* Select CRF6 */2/spa="v.1872/a>........2a href="+code=timeleft" class="sref">timeleft2/a> = 2a href="+code=inb_p" class="sref">inb_p2/a>(2a href="+code=WDT_EFDR" class="sref">WDT_EFDR2/a>);.2spa= class="comment">/* Read Timeout counter to CRF6 */2/spa="v.1882/a>v.1892/a>........2a href="+code=w83627hf_unselect_wd_register" class="sref">w83627hf_unselect_wd_register2/a>();v.1902/a>v.1912/a>........2a href="+code=spin_unlock" class="sref">spin_unlock2/a>(&2a href="+code=io_lock" class="sref">io_lock2/a>);v.1922/a>v.1932/a>........return 2a href="+code=timeleft" class="sref">timeleft2/a>;v.1942/a>}v.1952/a>v.1962/a>static 2a href="+code=ssize_t" class="sref">ssize_t2/a>.2a href="+code=wdt_write" class="sref">wdt_write2/a>(struct.2a href="+code=file" class="sref">file2/a>.*2a href="+code=file" class="sref">file2/a>, const char.2a href="+code=__user" class="sref">__user2/a>.*2a href="+code=buf" class="sref">buf2/a>,v.1972/a>................................................2a href="+code=size_t" class="sref">size_t2/a>.2a href="+code=count" class="sref">count2/a>, 2a href="+code=loff_t" class="sref">loff_t2/a>.*2a href="+code=ppos" class="sref">ppos2/a>)v.1982/a>{v.1992/a>........if.(2a href="+code=count" class="sref">count2/a>) {v.2002/a>................if.(!2a href="+code=nowayout" class="sref">nowayout2/a>) {v.2012/a>........................2a href="+code=size_t" class="sref">size_t2/a>.2a href="+code=i" class="sref">i2/a>;v.2022/a>v.2032/a>........................2a href="+code=expect_close" class="sref">expect_close2/a> = 0;v.2042/a>v.2052/a>........................for (2a href="+code=i" class="sref">i2/a> = 0;.2a href="+code=i" class="sref">i2/a> != 2a href="+code=count" class="sref">count2/a>;.2a href="+code=i" class="sref">i2/a>++) {v.2062/a>................................char.2a href="+code=c" class="sref">c2/a>;v.2072/a>................................if.(2a href="+code=get_user" class="sref">get_user2/a>(2a href="+code=c" class="sref">c2/a>, 2a href="+code=buf" class="sref">buf2/a> +.2a href="+code=i" class="sref">i2/a>))v.2082/a>........................................return -2a href="+code=EFAULT" class="sref">EFAULT2/a>;v.2092/a>................................if.(2a href="+code=c" class="sref">c2/a> == 2spa= class="string">'V'2/spa=")v.2102/a>........................................2a href="+code=expect_close" class="sref">expect_close2/a> = 42;v.2112/a>........................}v.2122/a>................}v.2132/a>................2a href="+code=wdt_ping" class="sref">wdt_ping2/a>();v.2142/a>........}v.2152/a>........return 2a href="+code=count" class="sref">count2/a>;v.2162/a>}v.2172/a>v.2182/a>static long.2a href="+code=wdt_ioctl" class="sref">wdt_ioctl2/a>(struct.2a href="+code=file" class="sref">file2/a>.*2a href="+code=file" class="sref">file2/a>, unsigned int.2a href="+code=cmd" class="sref">cmd2/a>, unsigned long.2a href="+code=arg" class="sref">arg2/a>)v.2192/a>{v.2202/a>........void.2a href="+code=__user" class="sref">__user2/a>.*2a href="+code=argp" class="sref">argp2/a> = (void.2a href="+code=__user" class="sref">__user2/a>.*)2a href="+code=arg" class="sref">arg2/a>;v.2212/a>........int.2a href="+code=__user" class="sref">__user2/a>.*2a href="+code=p" class="sref">p2/a> = 2a href="+code=argp" class="sref">argp2/a>;v.2222/a>........int.2a href="+code=timeval" class="sref">timeval2/a>;v.2232/a>........static const struct.2a href="+code=watchdog_info" class="sref">watchdog_info2/a>.2a href="+code=ident" class="sref">ident2/a> = {v.2242/a>.................2a href="+code=oplue=s" class="sref">oplue=s2/a> = 2a href="+code=WDIOF_KEEPALIVEPING" class="sref">WDIOF_KEEPALIVEPING2/a> |.2a href="+code=WDIOF_SETTIMEOUT" class="sref">WDIOF_SETTIMEOUT2/a> |v.2252/a>........................................................2a href="+code=WDIOF_MAGICCLOSE" class="sref">WDIOF_MAGICCLOSE2/a>,v.2262/a>.................2a href="+code=firmware_versue=" class="sref">firmware_versue=2/a> = 1,v.2272/a>.................2a href="+code=identity" class="sref">identity2/a> = 2spa= class="string">"W83627HF WDT"2/spa=",v.2282/a>........};v.2292/a>v.2302/a>........switch.(2a href="+code=cmd" class="sref">cmd2/a>) {v.2312/a>........case.2a href="+code=WDIOC_GETSUPPORT" class="sref">WDIOC_GETSUPPORT2/a>:v.2322/a>................if.(2a href="+code=copy_to_user" class="sref">copy_to_user2/a>(2a href="+code=argp" class="sref">argp2/a>, &2a href="+code=ident" class="sref">ident2/a>, sizeof(2a href="+code=ident" class="sref">ident2/a>)))v.2332/a>........................return -2a href="+code=EFAULT" class="sref">EFAULT2/a>;v.2342/a>................break;v.2352/a>........case.2a href="+code=WDIOC_GETSTATUS" class="sref">WDIOC_GETSTATUS2/a>:v.2362/a>........case.2a href="+code=WDIOC_GETBOOTSTATUS" class="sref">WDIOC_GETBOOTSTATUS2/a>:v.2372/a>................return 2a href="+code=put_user" class="sref">put_user2/a>(0, 2a href="+code=p" class="sref">p2/a>);v.2382/a>........case.2a href="+code=WDIOC_SETOPTIONS" class="sref">WDIOC_SETOPTIONS2/a>:v.2392/a>........{v.2402/a>................int.2a href="+code=oplue=s" class="sref">oplue=s2/a>, 2a href="+code=retval" class="sref">retval2/a> = -2a href="+code=EINVAL" class="sref">EINVAL2/a>;v.2412/a>v.2422/a>................if.(2a href="+code=get_user" class="sref">get_user2/a>(2a href="+code=oplue=s" class="sref">oplue=s2/a>, 2a href="+code=p" class="sref">p2/a>))v.2432/a>........................return -2a href="+code=EFAULT" class="sref">EFAULT2/a>;v.2442/a>................if.(2a href="+code=oplue=s" class="sref">oplue=s2/a> & 2a href="+code=WDIOS_DISABLECARD" class="sref">WDIOS_DISABLECARD2/a>) {v.2452/a>........................2a href="+code=wdt_disable" class="sref">wdt_disable2/a>();v.2462/a>........................2a href="+code=retval" class="sref">retval2/a> = 0;v.2472/a>................}v.2482/a>................if.(2a href="+code=oplue=s" class="sref">oplue=s2/a> & 2a href="+code=WDIOS_ENABLECARD" class="sref">WDIOS_ENABLECARD2/a>) {v.2492/a>........................2a href="+code=wdt_ping" class="sref">wdt_ping2/a>();v.2502/a>........................2a href="+code=retval" class="sref">retval2/a> = 0;v.2512/a>................}v.2522/a>................return 2a href="+code=retval" class="sref">retval2/a>;v.2532/a>........}v.2542/a>........case.2a href="+code=WDIOC_KEEPALIVE" class="sref">WDIOC_KEEPALIVE2/a>:v.2552/a>................2a href="+code=wdt_ping" class="sref">wdt_ping2/a>();v.2562/a>................break;v.2572/a>........case.2a href="+code=WDIOC_SETTIMEOUT" class="sref">WDIOC_SETTIMEOUT2/a>:v.2582/a>................if.(2a href="+code=get_user" class="sref">get_user2/a>(2a href="+code=timeval" class="sref">timeval2/a>, 2a href="+code=p" class="sref">p2/a>))v.2592/a>........................return -2a href="+code=EFAULT" class="sref">EFAULT2/a>;v.2602/a>................if.(2a href="+code=wdt_set_heartbeat" class="sref">wdt_set_heartbeat2/a>(2a href="+code=timeval" class="sref">timeval2/a>))v.2612/a>........................return -2a href="+code=EINVAL" class="sref">EINVAL2/a>;v.2622/a>................2a href="+code=wdt_ping" class="sref">wdt_ping2/a>();v.2632/a>................2spa= class="comment">/* Fall */2/spa="v.2642/a>........case.2a href="+code=WDIOC_GETTIMEOUT" class="sref">WDIOC_GETTIMEOUT2/a>:v.2652/a>................return 2a href="+code=put_user" class="sref">put_user2/a>(2a href="+code=timeout" class="sref">timeout2/a>, 2a href="+code=p" class="sref">p2/a>);v.2662/a>........case.2a href="+code=WDIOC_GETTIMELEFT" class="sref">WDIOC_GETTIMELEFT2/a>:v.2672/a>................2a href="+code=timeval" class="sref">timeval2/a> = 2a href="+code=wdt_get_time" class="sref">wdt_get_time2/a>();v.2682/a>................return 2a href="+code=put_user" class="sref">put_user2/a>(2a href="+code=timeval" class="sref">timeval2/a>, 2a href="+code=p" class="sref">p2/a>);v.2692/a>........default:v.2702/a>................return -2a href="+code=ENOTTY" class="sref">ENOTTY2/a>;v.2712/a>........}v.2722/a>........return 0;v.2732/a>}v.2742/a>v.2752/a>static int.2a href="+code=wdt_ope=" class="sref">wdt_ope=2/a>(struct.2a href="+code=inode" class="sref">inode2/a>.*2a href="+code=inode" class="sref">inode2/a>, struct.2a href="+code=file" class="sref">file2/a>.*2a href="+code=file" class="sref">file2/a>)v.276n a>{v.2772/a>........if.(2a href="+code=test_and_set_bit" class="sref">test_and_set_bit2/a>(0, &2a href="+code=wdt_is_ope=" class="sref">wdt_is_ope=2/a>))v.2782/a>................return -2a href="+code=EBUSY" class="sref">EBUSY2/a>;v.2792/a>........2spa= class="comment">/*2/spa="v.28on a>2spa= class="comment">         *      Acluvate2/spa="v.2812/a>2spa= class="comment">         */2/spa="v.2822/a>v.2832/a>........2a href="+code=wdt_ping" class="sref">wdt_ping2/a>();v.2742/a>v.2812/a>2spa= class="comment">    u3a>(2anonseekw836timeval2/a>, 2a 2a href="+code=file" class="sre2/a>)v.1862/a>2.......2a href="+code=ou2b_p" 28hf_wdt.c#L127" id.1L127" class="line" nam3.1L1272>.1872/a>2.......2a href="+code=ti2eleft2 classass="sref">wdt_ope=2/a>(struct 42;vinode2/a>.*2a href="+code=inode" class="sref">inode2/a>, struct.2a href="+code=file" class="sref">file2/a>.*2a href="+code=file" class="sref">file2/a>)v.1882/a>2.1892/a>2.......2a href="+code=w82627hf28 class="sref">count2/a>) {v = 42;v.1902/a>2wdt_disable2/a>();v.1912/a>2.......2a href="+code=sp2n_unl2ck" class="sreellasdt.c#L199" id.1L199" class="line" nam3.1L1992>.1922/a>2pr_info2/a>(2spa= ccr0, &2a href="= ccr0,ef">ti"2/spa=",v.2832/a>........return 2a href="+2ode=t29t_ping" class="sref">wdt_ping2/a>();v.1942/a>2v.1952/a>2spin_unlock2e2/a> = 0;v.1962/a>2tatic 2a href="+code=ssi2e_t" 29ass="sref">outb_p2/a>(0xF6, clear>(0, &2a href="clear>(0,=" class="sref">wdt_is_ope=2/a>))v.1872/a>2........................2.....29s/watchdog/w83627hf_wdt.c#L168" id.1L168" class="line" nam3.1L1682>.1982/a>2v.1992/a>2.......if.(2a href="+cod2=coun29hf_wdt.c#L230" id.1L230" class="line" nam3.1L2303>.2002/a>3...............if.(!2a h3ef="+30herboards seem.to set F5 to 027hf_wdt.c#L282" id.1L282" class="line" nam3.1L2823>.2012/a>3.......................23 href30citly init.to appropriate 
  vvvvvvNotifier2/a> system down27hf_wdt.c#L282" id.1L282" class="line" nam3.1L2823>22012/a>3.a href="drivers/watchdo3/w83630                         to 3627hf_wdt.c#L282" id.1L282" class="line" nam3.1L2823>.2032/a>3.......................23 href30hf_wdt.c#L184" id.1L184" class="line" nam3.1L1843>.2042/a>3wdt_disable2/a>(cotify_system down27hfvfileca>.*2a h" class="line" nam3.1L1843>.2042/a>3i2/a hrefivers/watchdog/wunuse627hf_wdt.c#L231unuse61L276" class="line" nam3.1L276">.1882/a>2.2772/a>........3.........3.............if.(2a href3"+cod30"sref">test_and_set_bit2/a>(0, &c class="sref">fileca>.*2a iverst_bit2/a>(0, &SYS_DOWNass="sref">fileSYS_DOWN*2a if="drivers/watchdoc class="sref">fileca>.*2a iverst_bit2/a>(0, &SYS_HA83627hf_wdt.c#L26SYS_HA831L276" class="line" nam3.1L276">.1882/a>2.2032/a>3.........9.......3."+cod2=coun29hf_wdt.c#L3"+cod301L230" class="line" nam3.1L2303>.2002/a>3.................3.....................2a 3ref="3code=expect_cl>(2anonseekw836.2792/a>........3.........3.....}v.1992/a>2.......3.......}v3a href="drivers/watchdog3w8362311L283" class="line" nam3.1L283">.2832/a>........3.......2a3href="+code=wdt_ping" cl3ss="s3ef">wd5 to 027hf_wdt.c#L282" id.1L282" class="line" nam3.1L2823>.2012/a>3........v systeKernel If_wdfacesd.1L282" class="line" nam3.1L2823>.2012/a>3........v5rivers/wref="+code=count" class=3sref"3count2  to 3627hf_wdt.c#L282" id.1L282" class="line" nam3.1L2823>.2032/a>3........="drivers3watchdog/w83627hf_wdt.c#3217" 311L127" class="line" nam3.1L1272>.1872/a>2.......3"drivers/3atchdog/w83627hf_wdt.c#L318" i31t_ope=2/a>(swatchdog_info2/a>.2a href="+ id.4" iraOS_ENABLECARD" class id.4" iraOS_ENde=ex();v.2772/a>........3ng.2a hre3="+code=wdt_ioctl" class3"sref31href="+code=Eref="+code=WDIOF_wnass="sref">timeva_wnasref="+code=EFAerst_bit2/a>(0, &THIS_MODUL/a>........3....THIS_MODUL/chdog/w83c class="sref">fileca>.*2a h" class="linef">__use3watchdog/w83627hf_wdt.c#3220" 319ref="+code=Eref="+code=WDIOFllimeva>........3....llimevref="+code=EFerst_bit2/a>(0, &no_llimeva>........3....no_llimevchdog/w83c class="sref">fileca>.*2a h" class="linoid.2a hr3f="+code=__user" class="3ref">3_user2/a>.*2a ref="+code=WDIOFfile" class="sref">fia>.*2a h"+code=EFAerst_bit2/a>(0, &wde=file" class="sref">file2/a>.*2a hg/w83c class="sref">fileca>.*2a h" class="lino........3="+code=__user" class="s3ef">_3user2/a>.*2a href="+code=WDIOFlock2/ed=file" class="sref">flock2/ed=file"_time2/a>();vfile2/a>.*2a hg/w83c class="sref">fileca>.*2a h" class="lino......}v3="+code=timeval" class="3ref">3imeval2/a>;v(0, &wde=ode" class="sref">inode2/a>.*2ag/w83c class="sref">fileca>.*2a h" class="lino......2a3t struct.2a href="+code=3atchd3g_info" class=ref="+code=WDIOFreleawatchdog/w83627hfreleawainfo" class=erst_bit2/a>(0, &wde=erruct 42;vs="sref">inode2/a>.*2ag/w83c class="sref">fileca>.*2a h" class="linoop29" class="line" nam3.1L229">.2292/a>v.1962/a>static 23........23 href="+code=firmware_ve3sue="322/a>.2a hrefog_info2/a>.2a href="+miscdevicct 42;vs="sref">miscdeviccde=ex();vinodmiscdev id.1L27" class="line" nam3.1L277">.2772/a>........3........23 href="+code=identity" c3ass="3ref">identity2ref="+code=WDIOFminoss="sref">timevaminos_time2/a>();vfileca>.*2a h" class="linog.2a hre3"drivers/watchdog/w836273f_wdt32href="+code=Eref="+code=WDIOF/w83a>........3....nam" id.1L2 href="drUns/watc>t2/og/w, >fileca>L228" id.1L228" class="line" nam3.1L228">.2282/a>........3"drivers/3atchdog/w83627hf_wdt.c#L330" i329ref="+code=Eref="+code=WDIOFfopref="drivers/watfopr id.1L2=2/a>))v.2282/a>........3witch.(2a3href="+code=cmd" class="3ref">3md2/a>29" class="line" nam3.1L229">.2292/a>v.2422/a>........3.......if3(2a href="+code=copy_to_3ser" 33       to 3627hf_wdt.c#L282 id.1L282" class="line" nam3.1L2823>.2012/a>3.................3.....return -2a href="+c3de=EF33f">wd5 to 027hf_wdt.c#L282"a> systeTog/w83hneedst.c#srefn abw836sof36shut2" is in ordwdt.cd.1L282" class="line" nam3.1L2823>.2012/a>3......... systet.1L1dog/ref=bomb #L190" ishf_w.d.1L282" class="line" nam3.1L2823>.2012/a>3.................3f="+code=WDIOC_GETSTATUS3 clas33ount2  to 3627hf_wdt.c#L282" id.1L282" class="line" nam3.1L2823>.2032/a>3........ase.2a hr3f="+code=WDIOC_GETBOOTST3TUS" 331L127" class="line" nam3.1L1272>.1872/a>2.......3.......re3urn 2a href="+code=put_u3er" c337/a>.2a hrefog_info2/a>.2a href="+ass=...jcbog/w83627hf_wdt.c#Lass=...jcbog/wf="dr(cotify_system down27hfvi href="drivers/watown27hfvi h id.1L27" class="line" nam3.1L277">.2772/a>........3ase.2a hr3f="+code=WDIOC_SETOPTION3" cla33href="+code=Eref="+code=WDIOF/ss=...jccal" class="sref">f/ss=...jccal"_time2/a>();v.2282/a>........3wdrivers/3drivers/watchdog/w83627h3_wdt.3#L240"29" class="line" nam3.1L229">.2292/a>v.1412/a>........3"drivers/3atchdog/w83627hf_wdt.c#L342" i3.1L242disable2/a>(cotify_system __inlear>(0,=" class=__inlef="dr(cotify_system downinlear>(0,=" class=downinled.1L21L179" class="line" nam3.1L179">.1792/a>{v.2772/a>........3.........3.....return -2a href="+c3de=EF3ULT" class="sr2/a>(cotify_system reear>(0,=" class=ree1L279" class="line" nam3.1L279">.2792/a>........3.......if3(2a href="+code=oplue=s"3class341L275" class="line" nam3.1L275">.2752/a>static i3.........3.....2a href="+code=wdt_3isabl34in_unlock2e2/a> = 0;videprnt" c",vt.c#L246" id.1L246" class="line" nam3.1L246">.2832/a>........3.........3.....2a href="+code=retv3l" cl341L127" class="line" nam3.1L1272>.1872/a>2.......3.......}v3a href="drivers/watchdog3w836234"sref">test_and_set_bit2/a>(0, &whref="+code=timeval" class="sref">timeval2/a>))v.2492/a>........3.......if3(2a href="+code=oplue=s"3class3"sref">oplue=s2/a> &amet_bit2/a>(0, &whref="+code=timeval" class="sref">timeval2/a>))v.1872/a>2.......3.........3.....2a href="+code=wdt_3ing" 3lass="sref">wdt_ping2/a> = 0;videprnt" c",vt %d.c#L246" id.1L28" class="line" nam3.1L228">.2282/a>........3.........3.....2a href="+code=retv3l" cl3ss="sref">retval2/a> = 0;v.1872/a>2.......3.......}v3a href="drivers/watchdog3w836235L272" id.1L272" class="line" nam3.1L272">.2722/a>........3.......re3urn 2a href="+code=retva3" cla3.1L153" class="line" nam3.1L153">.1532/a>........3vfile2/a*2a hr1..2spa= class="comATCHDOG_NAM/a>........3....mATCHDOG_NAM/.1L16249" class="line" nam3.1L249">.2492/a>........3ase.2a hr3f="+code=WDIOC_KEEPALIVE3 clas35sref">oplue=s2/a> &ama> = 0;vtimevalrners",v();vfile2/a*2a 04" class="line" nam3.1L204">.1872/a>2.......3.........3href="+code=wdt_ping" cl3ss="s3ef">wdt_ping2/a>();v(0,=" class=ogO1L279" class="line" nam3.1L279">.2792/a>........3.......br3ak;v.2792/a>........3.......}v3f="+code=WDIOC_SETTIMEOU3" cla3s="sref">WDIOC2" class="line" nam3.1L272">.2722/a>........3.......if3(2a href="+code=get_user3 clas351L189" class="line" nam3.1L189">.1892/a>........3.........3.....return -2a href="+c3de=EF35r" class="sref">w83627hf_unselect_wd_inlear>(0,=" class=dlect_wd_inled.1L214" class="line" nam3.1L214">.1942/a>2v.1412/a>........3.........3.....return -2a href="+c3de=EI36in_unlock2/a>(&2a href="reear>(0,=" class=ree1L27ref(&2a href="re190" is#Lboown27hfvi href="drivers/ware190" is#Lboown27hfvi hd.1L2=2/a>))v.1942/a>2vwdt_ping2/nd_set_bit2/a>(0, &reear>(0,=" class=ree1L27r!= 0249" class="line" nam3.1L249">.2492/a>........3.......2s3a= class="comment">/* Fa3l */23spa="vtimevalrners",v();v.1942/a>2voplue=s2/a> &amgo.c#ef="+code=WDIOFunre1s#L19erref="drivers/watunre1s#L19err.1L19" class="line" nam3.1L279">.2792/a>........3.......re3urn 2a href="+code=put_u3er" c3ass="sref">put2" class="line" nam3.1L272">.2722/a>........3ase.2a hr3f="+code=WDIOC_GETTIMELE3T" cl361L127" class="line" nam3.1L1272>.1872/a>2.......3.......2a3href="+code=timeval" cla3s="sr36eft2/a> = 2a href="+code=inbreear>(0,=" class=ree1L27ref(&2a href="misc>();vinodmiscdev id.14" class="line" nam3.1L214">.1942/a>2vputnd_set_bit2/a>(0, &reear>(0,=" class=ree1L27r!= 0249" class="line" nam3.1L249">.2492/a>........3.........3 href="drivers/watchdog/38362736ass="sref">wdt_ping2/a> = 0;vtimevalrners",v.2492/a>........3.......re3urn -2a href="+code=ENOT3Y" cl3ss="sref">ENOTTY2/a>;v_ping2/a> = 0;v();v.1942/a>2vEINVgo.c#ef="+code=WDIOFunre1s#Lboowef="drivers/watunre1s#Lboow.1L19" class="line" nam3.1L279">.2792/a>........3eturn 0;v3a href="drivers/watchdog3w83623hf_wdt.c#L273"2" class="line" nam3.1L272">.2722/a>........3="drivers3watchdog/w83627hf_wdt.c#3274" 371L184" class="line" nam3.1L1843>.2042/a>3w83627hf_selecprnt" class="sref">ideprnt" c",v.2492/a>........3.......re3"+code=wdt_ope=" class="3ref">37f">wdt_ping2/a>();vp2/a>);v.2792/a>........3ese.2a hr3watchdog/w83627hf_wdt.c#3277" 371L127" class="line" nam3.1L1272>.1872/a>2.......3f.(2a hre3="+code=test_and_set_bit3 clas3="srefef="+code=WDIOF_/w83627hf_wdt.c#L id.1L10" class="line" nam3.1L270">.2702/a>........3.......re3urn -2a href="+code=EBUS3" cla3s="sref">EBUSYa href="drivers/watchdog/ar>(0,=" class=ree1L279" class="line" nam3.1L279">.2792/a>........3spa= clas3="comment">/*2/spa="v.2702/a>........3ss="comme3t">         *      Acluv3te2/s380class="sref">w83627hf_selecunre190" is#Lboown27hfvi href="drivers/waunre190" is#Lboown27hfvi hd.1L2=2/a>))v.1942/a>2v         */2/spa="v.2702/a>........3sturn 0;v3atchdog/w83627hf_wdt.c#L383" i382ft2/a> = 2a href="+code=inbreleawas#L19ers/watchdog/w836releawas#L19erfile2/a*2a hr114" class="line" nam3.1L214">.1942/a>2vwdt3ping2/a>();v.2792/a>........3>.2742/a>3.2812/a>2spa= cl3ss="c38.1L195" class="line" nam3.1L195">.1952/a>v.1962/a>static 23vers/watc3r0, &2a href="= ccr03ass="382/a>.2a href href="+code=arg" clasexlear>(0,=" class=__exlef="dr(cotify_system downexlear>(0,=" class=downexled.1L21L179" class="line" nam3.1L179">.1792/a>{v3dt_ope9" class="line" nam3.1L249">.2492/a>........3"drivers/3atchdo2/w836287hf_wdt.c#3199" 388ft2/a> = 2a href="+code=inbmisc>de();vinodmiscdev id.14" class="line" nam3.1L214">.1942/a>2vco38r" class="sref">w83627hf_unsunre190" is#Lboown27hfvi href="drivers/waunre190" is#Lboown27hfvi hd.1L2=2/a>))v.1942/a>2vw83627hf_selecreleawas#L19ers/watchdog/w836releawas#L19erfile2/a*2a hr114" class="line" nam3.1L214">.1942/a>2v.1992/a>2.......3"drivers/3atchdo2/w83629_info" cla3s="sr391L153" class="line" nam3.1L153">.1532/a>........3eturn 2a 3ref="+2ode=t29t_ping" cl3ss="s3ef">wdhref="+code=inbmodule_inlear>(0,=" class=module_inle.1942/a>2v3watchd2g/w8329og/w83627h3_wdt.3#L215"href="+code=inbmodule_exlear>(0,=" class=module_exle.1942/a>2v391L196" class="line" nam3.1L196">.1962/a>static 23 href="+c3de=ssi2e_t" 29ass="sref"3outb_32/a>(0ef="drivers/watMODUL/_LICENwatchdog/w83627hfMODUL/_LICENwa",v.2832/a>........3.........3......2.....29s/watchdog3w836239"srefef="+code=WDIOFMODUL/_AUTHORead Timeout couMODUL/_AUTHOR",v.2832/a>........3.drivers/3watchd2g/w83297hf_wdt.c#3169" 3d.1L16ef="+code=WDIOFMODUL/_DESCRI9" idead Timeout couMODUL/_DESCRI9" id",v.2832/a>........3. href="+3="+cod2=coun29hf_wdt.c#L330" i39iversef="+code=WDIOFMODUL/_ALIAS_MISCDEVead Timeout couMODUL/_ALIAS_MISCDEV.2832/a>........4.......if4(!2a h3ef="+30herboards 4eem.t4 set F5/preF5/div>


5/div>

LXR6dt.cun/spa=",, thir _wdtric#L2al " na9er byd class="lmailto:lxh@+30ux.no">lxh@+30ux.noa=",.
5/div>
Redpill L30pro ASa=",, providwdtof L30uxswatcultc>t and " iraOS_EN serviccN since 1995.
5/div>