11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/********************************************************************* 21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Filename: timer.h 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Version: 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Description: 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Status: Experimental. 71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Author: Dag Brattli <dagb@cs.uit.no> 81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Created at: Sat Aug 16 00:59:29 1997 91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Modified at: Thu Oct 7 12:25:24 1999 101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Modified by: Dag Brattli <dagb@cs.uit.no> 111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 1997, 1998-1999 Dag Brattli <dagb@cs.uit.no>, 131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * All Rights Reserved. 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (c) 2000-2002 Jean Tourrilhes <jt@hpl.hp.com> 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU General Public License as 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * published by the Free Software Foundation; either version 2 of 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * the License, or (at your option) any later version. 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 21121e70b69aef898a3c02fa90d0a2108381bcf975John Anthony Kazos Jr * Neither Dag Brattli nor University of Tromsø admit liability nor 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * provide warranty for any of this software. This material is 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * provided "AS-IS" and at no charge. 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ********************************************************************/ 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef TIMER_H 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define TIMER_H 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/timer.h> 31d7fe0f241dceade9c8d4af75498765c5ff7f27e6Al Viro#include <linux/jiffies.h> 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/param.h> /* for HZ */ 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <net/irda/irda.h> 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* A few forward declarations (to make compiler happy) */ 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct irlmp_cb; 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct irlap_cb; 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct lsap_cb; 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct lap_cb; 421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Timeout definitions, some defined in IrLAP 6.13.5 - p. 92 451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define POLL_TIMEOUT (450*HZ/1000) /* Must never exceed 500 ms */ 471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define FINAL_TIMEOUT (500*HZ/1000) /* Must never exceed 500 ms */ 481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Normally twice of p-timer. Note 3, IrLAP 6.3.11.2 - p. 60 suggests 511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * at least twice duration of the P-timer. 521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WD_TIMEOUT (POLL_TIMEOUT*2) 541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define MEDIABUSY_TIMEOUT (500*HZ/1000) /* 500 msec */ 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SMALLBUSY_TIMEOUT (100*HZ/1000) /* 100 msec - IrLAP 6.13.4 */ 571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Slot timer must never exceed 85 ms, and must always be at least 25 ms, 601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * suggested to 75-85 msec by IrDA lite. This doesn't work with a lot of 611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * devices, and other stackes uses a lot more, so it's best we do it as well 621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * (Note : this is the default value and sysctl overides it - Jean II) 631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define SLOT_TIMEOUT (90*HZ/1000) 651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * The latest discovery frame (XID) is longer due to the extra discovery 681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * information (hints, device name...). This is its extra length. 691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We use that when setting the query timeout. Jean II 701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define XIDEXTRA_TIMEOUT (34*HZ/1000) /* 34 msec */ 721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define WATCHDOG_TIMEOUT (20*HZ) /* 20 sec */ 741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef void (*TIMER_CALLBACK)(void *); 761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void irda_start_timer(struct timer_list *ptimer, int timeout, 781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void* data, TIMER_CALLBACK callback) 791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{ 801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ptimer->function = (void (*)(unsigned long)) callback; 811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds ptimer->data = (unsigned long) data; 821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Set new value for timer (update or add timer). 841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * We use mod_timer() because it's more efficient and also 851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * safer with respect to race conditions - Jean II */ 861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds mod_timer(ptimer, jiffies + timeout); 871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds} 881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlap_start_slot_timer(struct irlap_cb *self, int timeout); 911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlap_start_query_timer(struct irlap_cb *self, int S, int s); 921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlap_start_final_timer(struct irlap_cb *self, int timeout); 931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlap_start_wd_timer(struct irlap_cb *self, int timeout); 941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlap_start_backoff_timer(struct irlap_cb *self, int timeout); 951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlap_start_mbusy_timer(struct irlap_cb *self, int timeout); 971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlap_stop_mbusy_timer(struct irlap_cb *); 981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlmp_start_watchdog_timer(struct lsap_cb *, int timeout); 1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlmp_start_discovery_timer(struct irlmp_cb *, int timeout); 1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlmp_start_idle_timer(struct lap_cb *, int timeout); 1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsvoid irlmp_stop_idle_timer(struct lap_cb *self); 1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 106