Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/dev/ath/if_ath_tsf.h
39534 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer,
12
* without modification.
13
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
14
* similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
15
* redistribution must be conditioned upon including a substantially
16
* similar Disclaimer requirement for further binary redistribution.
17
*
18
* NO WARRANTY
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21
* LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
22
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
23
* THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
24
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
27
* IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
29
* THE POSSIBILITY OF SUCH DAMAGES.
30
*/
31
#ifndef __IF_ATH_TSF_H__
32
#define __IF_ATH_TSF_H__
33
34
/*
35
* Extend 15-bit time stamp from rx descriptor to
36
* a full 64-bit TSF using the specified TSF.
37
*/
38
static __inline u_int64_t
39
ath_extend_tsf15(u_int32_t rstamp, u_int64_t tsf)
40
{
41
if ((tsf & 0x7fff) < rstamp)
42
tsf -= 0x8000;
43
44
return ((tsf &~ 0x7fff) | rstamp);
45
}
46
47
/*
48
* Extend 32-bit time stamp from rx descriptor to
49
* a full 64-bit TSF using the specified TSF.
50
*/
51
static __inline u_int64_t
52
ath_extend_tsf32(u_int32_t rstamp, u_int64_t tsf)
53
{
54
u_int32_t tsf_low = tsf & 0xffffffff;
55
u_int64_t tsf64 = (tsf & ~0xffffffffULL) | rstamp;
56
57
if (rstamp > tsf_low && (rstamp - tsf_low > 0x10000000))
58
tsf64 -= 0x100000000ULL;
59
60
if (rstamp < tsf_low && (tsf_low - rstamp > 0x10000000))
61
tsf64 += 0x100000000ULL;
62
63
return tsf64;
64
}
65
66
/*
67
* Extend the TSF from the RX descriptor to a full 64 bit TSF.
68
* Earlier hardware versions only wrote the low 15 bits of the
69
* TSF into the RX descriptor; later versions (AR5416 and up)
70
* include the 32 bit TSF value.
71
*/
72
static __inline u_int64_t
73
ath_extend_tsf(struct ath_softc *sc, u_int32_t rstamp, u_int64_t tsf)
74
{
75
if (sc->sc_rxtsf32)
76
return ath_extend_tsf32(rstamp, tsf);
77
else
78
return ath_extend_tsf15(rstamp, tsf);
79
}
80
81
#endif
82
83