Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6e28024e authored by Malcolm Priestley's avatar Malcolm Priestley Committed by Greg Kroah-Hartman
Browse files

staging: vt6656: CARDqGetNextTBTT replace code using do_div.



uBeaconInterval becomes u32

get next TBTT value using vendor's equation as shown.

This patch was checked against the original code
and yields exactly the same value.

Signed-off-by: default avatarMalcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9acec059
Loading
Loading
Loading
Loading
+11 −19
Original line number Diff line number Diff line
@@ -720,28 +720,20 @@ bool CARDbClearCurrentTSF(struct vnt_private *pDevice)
 */
u64 CARDqGetNextTBTT(u64 qwTSF, u16 wBeaconInterval)
{

    unsigned int    uLowNextTBTT;
    unsigned int    uHighRemain, uLowRemain;
    unsigned int    uBeaconInterval;
	u32 uBeaconInterval;

	uBeaconInterval = wBeaconInterval * 1024;
    // Next TBTT = ((local_current_TSF / beacon_interval) + 1 ) * beacon_interval
	uLowNextTBTT = ((qwTSF & 0xffffffffULL) >> 10) << 10;
	uLowRemain = (uLowNextTBTT) % uBeaconInterval;
	uHighRemain = ((0x80000000 % uBeaconInterval) * 2 * (u32)(qwTSF >> 32))
		% uBeaconInterval;
	uLowRemain = (uHighRemain + uLowRemain) % uBeaconInterval;
	uLowRemain = uBeaconInterval - uLowRemain;

    // check if carry when add one beacon interval
	if ((~uLowNextTBTT) < uLowRemain)
		qwTSF = ((qwTSF >> 32) + 1) << 32;

	qwTSF = (qwTSF & 0xffffffff00000000ULL) |
		(u64)(uLowNextTBTT + uLowRemain);

    return (qwTSF);

	/* Next TBTT =
	*	((local_current_TSF / beacon_interval) + 1) * beacon_interval
	*/
	if (uBeaconInterval) {
		do_div(qwTSF, uBeaconInterval);
		qwTSF += 1;
		qwTSF *= uBeaconInterval;
	}

	return qwTSF;
}

/*