// SPDX-License-Identifier: GPL-2.0-or-later /****************************************************************************** * * (C)Copyright 1998,1999 SysKonnect, * a business unit of Schneider & Koch & Co. Datensysteme GmbH. * * See the file "skfddi.c" for further information. * * The information in this file is provided "AS IS" without warranty. *
******************************************************************************/
/* * Modifications: * * 28-Jun-1994 sw Edit v1.6. * MCA: Added support for the SK-NET FDDI-FM2 adapter. The * following functions have been added(+) or modified(*): * hwt_start(*), hwt_stop(*), hwt_restart(*), hwt_read(*)
*/
/* * Prototypes of local functions.
*/ /* 28-Jun-1994 sw - Note: hwt_restart() is also used in module 'drvfbi.c'. */ /*static void hwt_restart() ; */
/************************ * * hwt_start * * Start hardware timer (clock ticks are 16us). * * void hwt_start( * struct s_smc *smc, * u_long time) ; * In * smc - A pointer to the SMT Context structure. * * time - The time in units of 16us to load the timer with. * Out * Nothing. *
************************/ #define HWT_MAX (65000)
/************************ * * hwt_restart * * Clear timer interrupt. * * void hwt_restart( * struct s_smc *smc) ; * In * smc - A pointer to the SMT Context structure. * Out * Nothing. *
************************/ void hwt_restart(struct s_smc *smc)
{
hwt_stop(smc) ;
}
/************************ * * hwt_read * * Stop hardware timer and read time elapsed since last start. * * u_long hwt_read(smc) ; * In * smc - A pointer to the SMT Context structure. * Out * The elapsed time since last start in units of 16us. *
************************/
u_long hwt_read(struct s_smc *smc)
{
u_short tr ;
u_long is ;
#ifdef PCI /************************ * * hwt_quick_read * * Stop hardware timer and read timer value and start the timer again. * * u_long hwt_read(smc) ; * In * smc - A pointer to the SMT Context structure. * Out * current timer value in units of 80ns. *
************************/
u_long hwt_quick_read(struct s_smc *smc)
{
u_long interval ;
u_long time ;
/************************ * * hwt_wait_time(smc,start,duration) * * This function returnes after the amount of time is elapsed * since the start time. * * para start start time * duration time to wait * * NOTE: The function will return immediately, if the timer is not * started
************************/ void hwt_wait_time(struct s_smc *smc, u_long start, longint duration)
{ long diff ; long interval ; int wrapped ;
/* * check if timer is running
*/ if (smc->hw.timer_activ == FALSE ||
hwt_quick_read(smc) == hwt_quick_read(smc)) { return ;
}
interval = inpd(ADDR(B2_TI_INI)) ; if (interval > duration) { do {
diff = (long)(start - hwt_quick_read(smc)) ; if (diff < 0) {
diff += interval ;
}
} while (diff <= duration) ;
} else {
diff = interval ;
wrapped = 0 ; do { if (!wrapped) { if (hwt_quick_read(smc) >= start) {
diff += interval ;
wrapped = 1 ;
}
} else { if (hwt_quick_read(smc) < start) {
wrapped = 0 ;
}
}
} while (diff <= duration) ;
}
} #endif
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.