Commit 4724ba575ea73431aba8a48be6f5a382c470418d

Authored by Randy Dunlap
Committed by Wim Van Sebroeck
1 parent 8b18085a92

watchdog: update/improve/consolidate watchdog driver

Move the limited watchdog driver help from kernel-parameters.txt
to Documentation/watchdog/watchdog-parameters.txt and add info to it
for all watchdog drivers except the ones that have driver-specific
files already.

Correct minor comments and MODULE_PARM_DESC() text in 2 places.

Signed-off-by: Randy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: Wim Van Sebroeck <wim@iguana.be>

Showing 6 changed files with 411 additions and 17 deletions Side-by-side Diff

Documentation/kernel-parameters.txt
... ... @@ -290,9 +290,6 @@
290 290 advansys= [HW,SCSI]
291 291 See header of drivers/scsi/advansys.c.
292 292  
293   - advwdt= [HW,WDT] Advantech WDT
294   - Format: <iostart>,<iostop>
295   -
296 293 aedsp16= [HW,OSS] Audio Excel DSP 16
297 294 Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
298 295 See also header of sound/oss/aedsp16.c.
... ... @@ -765,9 +762,6 @@
765 762 This option is obsoleted by the "netdev=" option, which
766 763 has equivalent usage. See its documentation for details.
767 764  
768   - eurwdt= [HW,WDT] Eurotech CPU-1220/1410 onboard watchdog.
769   - Format: <io>[,<irq>]
770   -
771 765 failslab=
772 766 fail_page_alloc=
773 767 fail_make_request=[KNL]
... ... @@ -2267,9 +2261,6 @@
2267 2261  
2268 2262 sched_debug [KNL] Enables verbose scheduler debug messages.
2269 2263  
2270   - sc1200wdt= [HW,WDT] SC1200 WDT (watchdog) driver
2271   - Format: <io>[,<timeout>[,<isapnp>]]
2272   -
2273 2264 scsi_debug_*= [SCSI]
2274 2265 See drivers/scsi/scsi_debug.c.
2275 2266  
... ... @@ -2858,8 +2849,10 @@
2858 2849 wd7000= [HW,SCSI]
2859 2850 See header of drivers/scsi/wd7000.c.
2860 2851  
2861   - wdt= [WDT] Watchdog
2862   - See Documentation/watchdog/wdt.txt.
  2852 + watchdog timers [HW,WDT] For information on watchdog timers,
  2853 + see Documentation/watchdog/watchdog-parameters.txt
  2854 + or other driver-specific files in the
  2855 + Documentation/watchdog/ directory.
2863 2856  
2864 2857 x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
2865 2858 default x2apic cluster mode on platforms
Documentation/watchdog/00-INDEX
1 1 00-INDEX
2 2 - this file.
  3 +hpwdt.txt
  4 + - information on the HP iLO2 NMI watchdog
3 5 pcwd-watchdog.txt
4 6 - documentation for Berkshire Products PC Watchdog ISA cards.
5 7 src/
6 8 - directory holding watchdog related example programs.
7 9 watchdog-api.txt
8 10 - description of the Linux Watchdog driver API.
  11 +watchdog-parameters.txt
  12 + - information on driver parameters (for drivers other than
  13 + the ones that have driver-specific files here)
9 14 wdt.txt
10 15 - description of the Watchdog Timer Interfaces for Linux.
Documentation/watchdog/watchdog-parameters.txt
  1 +This file provides information on the module parameters of many of
  2 +the Linux watchdog drivers. Watchdog driver parameter specs should
  3 +be listed here unless the driver has its own driver-specific information
  4 +file.
  5 +
  6 +
  7 +See Documentation/kernel-parameters.txt for information on
  8 +providing kernel parameters for builtin drivers versus loadable
  9 +modules.
  10 +
  11 +
  12 +-------------------------------------------------
  13 +acquirewdt:
  14 +wdt_stop: Acquire WDT 'stop' io port (default 0x43)
  15 +wdt_start: Acquire WDT 'start' io port (default 0x443)
  16 +nowayout: Watchdog cannot be stopped once started
  17 + (default=kernel config parameter)
  18 +-------------------------------------------------
  19 +advantechwdt:
  20 +wdt_stop: Advantech WDT 'stop' io port (default 0x443)
  21 +wdt_start: Advantech WDT 'start' io port (default 0x443)
  22 +timeout: Watchdog timeout in seconds. 1<= timeout <=63, default=60.
  23 +nowayout: Watchdog cannot be stopped once started
  24 + (default=kernel config parameter)
  25 +-------------------------------------------------
  26 +alim1535_wdt:
  27 +timeout: Watchdog timeout in seconds. (0 < timeout < 18000, default=60
  28 +nowayout: Watchdog cannot be stopped once started
  29 + (default=kernel config parameter)
  30 +-------------------------------------------------
  31 +alim7101_wdt:
  32 +timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30
  33 +use_gpio: Use the gpio watchdog (required by old cobalt boards).
  34 + default=0/off/no
  35 +nowayout: Watchdog cannot be stopped once started
  36 + (default=kernel config parameter)
  37 +-------------------------------------------------
  38 +ar7_wdt:
  39 +margin: Watchdog margin in seconds (default=60)
  40 +nowayout: Disable watchdog shutdown on close
  41 + (default=kernel config parameter)
  42 +-------------------------------------------------
  43 +at32ap700x_wdt:
  44 +timeout: Timeout value. Limited to be 1 or 2 seconds. (default=2)
  45 +nowayout: Watchdog cannot be stopped once started
  46 + (default=kernel config parameter)
  47 +-------------------------------------------------
  48 +at91rm9200_wdt:
  49 +wdt_time: Watchdog time in seconds. (default=5)
  50 +nowayout: Watchdog cannot be stopped once started
  51 + (default=kernel config parameter)
  52 +-------------------------------------------------
  53 +at91sam9_wdt:
  54 +heartbeat: Watchdog heartbeats in seconds. (default = 15)
  55 +nowayout: Watchdog cannot be stopped once started
  56 + (default=kernel config parameter)
  57 +-------------------------------------------------
  58 +bcm47xx_wdt:
  59 +wdt_time: Watchdog time in seconds. (default=30)
  60 +nowayout: Watchdog cannot be stopped once started
  61 + (default=kernel config parameter)
  62 +-------------------------------------------------
  63 +bfin_wdt:
  64 +timeout: Watchdog timeout in seconds. (1<=timeout<=((2^32)/SCLK), default=20)
  65 +nowayout: Watchdog cannot be stopped once started
  66 + (default=kernel config parameter)
  67 +-------------------------------------------------
  68 +coh901327_wdt:
  69 +margin: Watchdog margin in seconds (default 60s)
  70 +-------------------------------------------------
  71 +cpu5wdt:
  72 +port: base address of watchdog card, default is 0x91
  73 +verbose: be verbose, default is 0 (no)
  74 +ticks: count down ticks, default is 10000
  75 +-------------------------------------------------
  76 +cpwd:
  77 +wd0_timeout: Default watchdog0 timeout in 1/10secs
  78 +wd1_timeout: Default watchdog1 timeout in 1/10secs
  79 +wd2_timeout: Default watchdog2 timeout in 1/10secs
  80 +-------------------------------------------------
  81 +davinci_wdt:
  82 +heartbeat: Watchdog heartbeat period in seconds from 1 to 600, default 60
  83 +-------------------------------------------------
  84 +ep93xx_wdt:
  85 +nowayout: Watchdog cannot be stopped once started
  86 +timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=TBD)
  87 +-------------------------------------------------
  88 +eurotechwdt:
  89 +nowayout: Watchdog cannot be stopped once started
  90 + (default=kernel config parameter)
  91 +io: Eurotech WDT io port (default=0x3f0)
  92 +irq: Eurotech WDT irq (default=10)
  93 +ev: Eurotech WDT event type (default is `int')
  94 +-------------------------------------------------
  95 +gef_wdt:
  96 +nowayout: Watchdog cannot be stopped once started
  97 + (default=kernel config parameter)
  98 +-------------------------------------------------
  99 +geodewdt:
  100 +timeout: Watchdog timeout in seconds. 1<= timeout <=131, default=60.
  101 +nowayout: Watchdog cannot be stopped once started
  102 + (default=kernel config parameter)
  103 +-------------------------------------------------
  104 +i6300esb:
  105 +heartbeat: Watchdog heartbeat in seconds. (1<heartbeat<2046, default=30)
  106 +nowayout: Watchdog cannot be stopped once started
  107 + (default=kernel config parameter)
  108 +-------------------------------------------------
  109 +iTCO_wdt:
  110 +heartbeat: Watchdog heartbeat in seconds.
  111 + (2<heartbeat<39 (TCO v1) or 613 (TCO v2), default=30)
  112 +nowayout: Watchdog cannot be stopped once started
  113 + (default=kernel config parameter)
  114 +-------------------------------------------------
  115 +iTCO_vendor_support:
  116 +vendorsupport: iTCO vendor specific support mode, default=0 (none),
  117 + 1=SuperMicro Pent3, 2=SuperMicro Pent4+, 911=Broken SMI BIOS
  118 +-------------------------------------------------
  119 +ib700wdt:
  120 +timeout: Watchdog timeout in seconds. 0<= timeout <=30, default=30.
  121 +nowayout: Watchdog cannot be stopped once started
  122 + (default=kernel config parameter)
  123 +-------------------------------------------------
  124 +ibmasr:
  125 +nowayout: Watchdog cannot be stopped once started
  126 + (default=kernel config parameter)
  127 +-------------------------------------------------
  128 +indydog:
  129 +nowayout: Watchdog cannot be stopped once started
  130 + (default=kernel config parameter)
  131 +-------------------------------------------------
  132 +iop_wdt:
  133 +nowayout: Watchdog cannot be stopped once started
  134 + (default=kernel config parameter)
  135 +-------------------------------------------------
  136 +it8712f_wdt:
  137 +margin: Watchdog margin in seconds (default 60)
  138 +nowayout: Disable watchdog shutdown on close
  139 + (default=kernel config parameter)
  140 +-------------------------------------------------
  141 +it87_wdt:
  142 +nogameport: Forbid the activation of game port, default=0
  143 +exclusive: Watchdog exclusive device open, default=1
  144 +timeout: Watchdog timeout in seconds, default=60
  145 +testmode: Watchdog test mode (1 = no reboot), default=0
  146 +nowayout: Watchdog cannot be stopped once started
  147 + (default=kernel config parameter)
  148 +-------------------------------------------------
  149 +ixp2000_wdt:
  150 +heartbeat: Watchdog heartbeat in seconds (default 60s)
  151 +nowayout: Watchdog cannot be stopped once started
  152 + (default=kernel config parameter)
  153 +-------------------------------------------------
  154 +ixp4xx_wdt:
  155 +heartbeat: Watchdog heartbeat in seconds (default 60s)
  156 +nowayout: Watchdog cannot be stopped once started
  157 + (default=kernel config parameter)
  158 +-------------------------------------------------
  159 +ks8695_wdt:
  160 +wdt_time: Watchdog time in seconds. (default=5)
  161 +nowayout: Watchdog cannot be stopped once started
  162 + (default=kernel config parameter)
  163 +-------------------------------------------------
  164 +machzwd:
  165 +nowayout: Watchdog cannot be stopped once started
  166 + (default=kernel config parameter)
  167 +action: after watchdog resets, generate:
  168 + 0 = RESET(*) 1 = SMI 2 = NMI 3 = SCI
  169 +-------------------------------------------------
  170 +max63xx_wdt:
  171 +heartbeat: Watchdog heartbeat period in seconds from 1 to 60, default 60
  172 +nowayout: Watchdog cannot be stopped once started
  173 + (default=kernel config parameter)
  174 +nodelay: Force selection of a timeout setting without initial delay
  175 + (max6373/74 only, default=0)
  176 +-------------------------------------------------
  177 +mixcomwd:
  178 +nowayout: Watchdog cannot be stopped once started
  179 + (default=kernel config parameter)
  180 +-------------------------------------------------
  181 +mpc8xxx_wdt:
  182 +timeout: Watchdog timeout in ticks. (0<timeout<65536, default=65535)
  183 +reset: Watchdog Interrupt/Reset Mode. 0 = interrupt, 1 = reset
  184 +nowayout: Watchdog cannot be stopped once started
  185 + (default=kernel config parameter)
  186 +-------------------------------------------------
  187 +mpcore_wdt:
  188 +mpcore_margin: MPcore timer margin in seconds.
  189 + (0 < mpcore_margin < 65536, default=60)
  190 +nowayout: Watchdog cannot be stopped once started
  191 + (default=kernel config parameter)
  192 +mpcore_noboot: MPcore watchdog action, set to 1 to ignore reboots,
  193 + 0 to reboot (default=0
  194 +-------------------------------------------------
  195 +mv64x60_wdt:
  196 +nowayout: Watchdog cannot be stopped once started
  197 + (default=kernel config parameter)
  198 +-------------------------------------------------
  199 +nuc900_wdt:
  200 +heartbeat: Watchdog heartbeats in seconds.
  201 + (default = 15)
  202 +nowayout: Watchdog cannot be stopped once started
  203 + (default=kernel config parameter)
  204 +-------------------------------------------------
  205 +omap_wdt:
  206 +timer_margin: initial watchdog timeout (in seconds)
  207 +-------------------------------------------------
  208 +orion_wdt:
  209 +heartbeat: Initial watchdog heartbeat in seconds
  210 +nowayout: Watchdog cannot be stopped once started
  211 + (default=kernel config parameter)
  212 +-------------------------------------------------
  213 +pc87413_wdt:
  214 +io: pc87413 WDT I/O port (default: io).
  215 +timeout: Watchdog timeout in minutes (default=timeout).
  216 +nowayout: Watchdog cannot be stopped once started
  217 + (default=kernel config parameter)
  218 +-------------------------------------------------
  219 +pika_wdt:
  220 +heartbeat: Watchdog heartbeats in seconds. (default = 15)
  221 +nowayout: Watchdog cannot be stopped once started
  222 + (default=kernel config parameter)
  223 +-------------------------------------------------
  224 +pnx4008_wdt:
  225 +heartbeat: Watchdog heartbeat period in seconds from 1 to 60, default 19
  226 +nowayout: Set to 1 to keep watchdog running after device release
  227 +-------------------------------------------------
  228 +pnx833x_wdt:
  229 +timeout: Watchdog timeout in Mhz. (68Mhz clock), default=2040000000 (30 seconds)
  230 +nowayout: Watchdog cannot be stopped once started
  231 + (default=kernel config parameter)
  232 +start_enabled: Watchdog is started on module insertion (default=1)
  233 +-------------------------------------------------
  234 +rc32434_wdt:
  235 +timeout: Watchdog timeout value, in seconds (default=20)
  236 +nowayout: Watchdog cannot be stopped once started
  237 + (default=kernel config parameter)
  238 +-------------------------------------------------
  239 +riowd:
  240 +riowd_timeout: Watchdog timeout in minutes (default=1)
  241 +-------------------------------------------------
  242 +s3c2410_wdt:
  243 +tmr_margin: Watchdog tmr_margin in seconds. (default=15)
  244 +tmr_atboot: Watchdog is started at boot time if set to 1, default=0
  245 +nowayout: Watchdog cannot be stopped once started
  246 + (default=kernel config parameter)
  247 +soft_noboot: Watchdog action, set to 1 to ignore reboots, 0 to reboot
  248 +debug: Watchdog debug, set to >1 for debug, (default 0)
  249 +-------------------------------------------------
  250 +sa1100_wdt:
  251 +margin: Watchdog margin in seconds (default 60s)
  252 +-------------------------------------------------
  253 +sb_wdog:
  254 +timeout: Watchdog timeout in microseconds (max/default 8388607 or 8.3ish secs)
  255 +-------------------------------------------------
  256 +sbc60xxwdt:
  257 +wdt_stop: SBC60xx WDT 'stop' io port (default 0x45)
  258 +wdt_start: SBC60xx WDT 'start' io port (default 0x443)
  259 +timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30)
  260 +nowayout: Watchdog cannot be stopped once started
  261 + (default=kernel config parameter)
  262 +-------------------------------------------------
  263 +sbc7240_wdt:
  264 +timeout: Watchdog timeout in seconds. (1<=timeout<=255, default=30)
  265 +nowayout: Disable watchdog when closing device file
  266 +-------------------------------------------------
  267 +sbc8360:
  268 +timeout: Index into timeout table (0-63) (default=27 (60s))
  269 +nowayout: Watchdog cannot be stopped once started
  270 + (default=kernel config parameter)
  271 +-------------------------------------------------
  272 +sbc_epx_c3:
  273 +nowayout: Watchdog cannot be stopped once started
  274 + (default=kernel config parameter)
  275 +-------------------------------------------------
  276 +sbc_fitpc2_wdt:
  277 +margin: Watchdog margin in seconds (default 60s)
  278 +nowayout: Watchdog cannot be stopped once started
  279 +-------------------------------------------------
  280 +sc1200wdt:
  281 +isapnp: When set to 0 driver ISA PnP support will be disabled (default=1)
  282 +io: io port
  283 +timeout: range is 0-255 minutes, default is 1
  284 +nowayout: Watchdog cannot be stopped once started
  285 + (default=kernel config parameter)
  286 +-------------------------------------------------
  287 +sc520_wdt:
  288 +timeout: Watchdog timeout in seconds. (1 <= timeout <= 3600, default=30)
  289 +nowayout: Watchdog cannot be stopped once started
  290 + (default=kernel config parameter)
  291 +-------------------------------------------------
  292 +sch311x_wdt:
  293 +force_id: Override the detected device ID
  294 +therm_trip: Should a ThermTrip trigger the reset generator
  295 +timeout: Watchdog timeout in seconds. 1<= timeout <=15300, default=60
  296 +nowayout: Watchdog cannot be stopped once started
  297 + (default=kernel config parameter)
  298 +-------------------------------------------------
  299 +scx200_wdt:
  300 +margin: Watchdog margin in seconds
  301 +nowayout: Disable watchdog shutdown on close
  302 +-------------------------------------------------
  303 +shwdt:
  304 +clock_division_ratio: Clock division ratio. Valid ranges are from 0x5 (1.31ms)
  305 + to 0x7 (5.25ms). (default=7)
  306 +heartbeat: Watchdog heartbeat in seconds. (1 <= heartbeat <= 3600, default=30
  307 +nowayout: Watchdog cannot be stopped once started
  308 + (default=kernel config parameter)
  309 +-------------------------------------------------
  310 +smsc37b787_wdt:
  311 +timeout: range is 1-255 units, default is 60
  312 +nowayout: Watchdog cannot be stopped once started
  313 + (default=kernel config parameter)
  314 +-------------------------------------------------
  315 +softdog:
  316 +soft_margin: Watchdog soft_margin in seconds.
  317 + (0 < soft_margin < 65536, default=60)
  318 +nowayout: Watchdog cannot be stopped once started
  319 + (default=kernel config parameter)
  320 +soft_noboot: Softdog action, set to 1 to ignore reboots, 0 to reboot
  321 + (default=0)
  322 +-------------------------------------------------
  323 +stmp3xxx_wdt:
  324 +heartbeat: Watchdog heartbeat period in seconds from 1 to 4194304, default 19
  325 +-------------------------------------------------
  326 +ts72xx_wdt:
  327 +timeout: Watchdog timeout in seconds. (1 <= timeout <= 8, default=8)
  328 +nowayout: Disable watchdog shutdown on close
  329 +-------------------------------------------------
  330 +twl4030_wdt:
  331 +nowayout: Watchdog cannot be stopped once started
  332 + (default=kernel config parameter)
  333 +-------------------------------------------------
  334 +txx9wdt:
  335 +timeout: Watchdog timeout in seconds. (0<timeout<N, default=60)
  336 +nowayout: Watchdog cannot be stopped once started
  337 + (default=kernel config parameter)
  338 +-------------------------------------------------
  339 +w83627hf_wdt:
  340 +wdt_io: w83627hf/thf WDT io port (default 0x2E)
  341 +timeout: Watchdog timeout in seconds. 1 <= timeout <= 255, default=60.
  342 +nowayout: Watchdog cannot be stopped once started
  343 + (default=kernel config parameter)
  344 +-------------------------------------------------
  345 +w83697hf_wdt:
  346 +wdt_io: w83697hf/hg WDT io port (default 0x2e, 0 = autodetect)
  347 +timeout: Watchdog timeout in seconds. 1<= timeout <=255 (default=60)
  348 +nowayout: Watchdog cannot be stopped once started
  349 + (default=kernel config parameter)
  350 +early_disable: Watchdog gets disabled at boot time (default=1)
  351 +-------------------------------------------------
  352 +w83697ug_wdt:
  353 +wdt_io: w83697ug/uf WDT io port (default 0x2e)
  354 +timeout: Watchdog timeout in seconds. 1<= timeout <=255 (default=60)
  355 +nowayout: Watchdog cannot be stopped once started
  356 + (default=kernel config parameter)
  357 +-------------------------------------------------
  358 +w83877f_wdt:
  359 +timeout: Watchdog timeout in seconds. (1<=timeout<=3600, default=30)
  360 +nowayout: Watchdog cannot be stopped once started
  361 + (default=kernel config parameter)
  362 +-------------------------------------------------
  363 +w83977f_wdt:
  364 +timeout: Watchdog timeout in seconds (15..7635), default=45)
  365 +testmode: Watchdog testmode (1 = no reboot), default=0
  366 +nowayout: Watchdog cannot be stopped once started
  367 + (default=kernel config parameter)
  368 +-------------------------------------------------
  369 +wafer5823wdt:
  370 +timeout: Watchdog timeout in seconds. 1 <= timeout <= 255, default=60.
  371 +nowayout: Watchdog cannot be stopped once started
  372 + (default=kernel config parameter)
  373 +-------------------------------------------------
  374 +wdt285:
  375 +soft_margin: Watchdog timeout in seconds (default=60)
  376 +-------------------------------------------------
  377 +wdt977:
  378 +timeout: Watchdog timeout in seconds (60..15300, default=60)
  379 +testmode: Watchdog testmode (1 = no reboot), default=0
  380 +nowayout: Watchdog cannot be stopped once started
  381 + (default=kernel config parameter)
  382 +-------------------------------------------------
  383 +wm831x_wdt:
  384 +nowayout: Watchdog cannot be stopped once started
  385 + (default=kernel config parameter)
  386 +-------------------------------------------------
  387 +wm8350_wdt:
  388 +nowayout: Watchdog cannot be stopped once started
  389 + (default=kernel config parameter)
  390 +-------------------------------------------------
Documentation/watchdog/wdt.txt
... ... @@ -14,14 +14,22 @@
14 14 boards physically pull the machine down off their own onboard timers and
15 15 will reboot from almost anything.
16 16  
17   -A second temperature monitoring interface is available on the WDT501P cards
  17 +A second temperature monitoring interface is available on the WDT501P cards.
18 18 This provides /dev/temperature. This is the machine internal temperature in
19 19 degrees Fahrenheit. Each read returns a single byte giving the temperature.
20 20  
21 21 The third interface logs kernel messages on additional alert events.
22 22  
23   -The wdt card cannot be safely probed for. Instead you need to pass
24   -wdt=ioaddr,irq as a boot parameter - eg "wdt=0x240,11".
  23 +The ICS ISA-bus wdt card cannot be safely probed for. Instead you need to
  24 +pass IO address and IRQ boot parameters. E.g.:
  25 + wdt.io=0x240 wdt.irq=11
  26 +
  27 +Other "wdt" driver parameters are:
  28 + heartbeat Watchdog heartbeat in seconds (default 60)
  29 + nowayout Watchdog cannot be stopped once started (kernel
  30 + build parameter)
  31 + tachometer WDT501-P Fan Tachometer support (0=disable, default=0)
  32 + type WDT501-P Card type (500 or 501, default=500)
25 33  
26 34 Features
27 35 --------
drivers/watchdog/eurotechwdt.c
... ... @@ -68,7 +68,6 @@
68 68  
69 69 /*
70 70 * You must set these - there is no sane way to probe for this board.
71   - * You can use eurwdt=x,y to set these now.
72 71 */
73 72  
74 73 static int io = 0x3f0;
drivers/watchdog/wdt.c
... ... @@ -91,7 +91,7 @@
91 91 static int type = 500;
92 92 module_param(type, int, 0);
93 93 MODULE_PARM_DESC(type,
94   - "WDT501-P Card type (500 or 501 , default=500)");
  94 + "WDT501-P Card type (500 or 501, default=500)");
95 95  
96 96 /*
97 97 * Programming support