X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=target_firmware%2Fwlan%2Far5416_hw.c;h=4d2a9f4bcc6bbc4202cdd83b65bf5acb34ec282a;hb=666302581d93fe7f7c5d56d1ff05c670c37077a0;hp=3f3c4bc74cc9e2c9b473e42040b7f5c5883c29a4;hpb=9eb079a1801b89fec0578831c95c0fb1f1383158;p=open-ath9k-htc-firmware.git diff --git a/target_firmware/wlan/ar5416_hw.c b/target_firmware/wlan/ar5416_hw.c index 3f3c4bc..4d2a9f4 100644 --- a/target_firmware/wlan/ar5416_hw.c +++ b/target_firmware/wlan/ar5416_hw.c @@ -275,14 +275,23 @@ ar5416SetInterrupts(struct ath_hal *ah, HAL_INT ints) /* TSF Handling */ /****************/ +#define ATH9K_HTC_MAX_TSF_READ 3 + u_int64_t ar5416GetTsf64(struct ath_hal *ah) { - u_int64_t tsf; - - tsf = ioread32_mac(AR_TSF_U32); - tsf = (tsf << 32) | ioread32_mac(AR_TSF_L32); + a_uint32_t tsf_lower, tsf_upper1, tsf_upper2; + a_int32_t i; + + tsf_upper1 = ioread32_mac(AR_TSF_U32); + for (i = 0; i < ATH9K_HTC_MAX_TSF_READ; i++) { + tsf_lower = ioread32_mac(AR_TSF_L32); + tsf_upper2 = ioread32_mac(AR_TSF_U32); + if (tsf_upper2 == tsf_upper1) + break; + tsf_upper1 = tsf_upper2; + } - return tsf; + return (((u_int64_t)tsf_upper2 << 32) | tsf_lower); } /******/