|
@@ -23,6 +23,7 @@
|
|
|
#include <stdio.h>
|
|
#include <stdio.h>
|
|
|
#include <unistd.h>
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
|
|
+#include "dynclock.h"
|
|
|
#include "fpgautils.h"
|
|
#include "fpgautils.h"
|
|
|
#include "miner.h"
|
|
#include "miner.h"
|
|
|
#include "libztex.h"
|
|
#include "libztex.h"
|
|
@@ -371,23 +372,27 @@ int libztex_selectFpga(struct libztex_device *ztex) {
|
|
|
|
|
|
|
|
int libztex_setFreq(struct libztex_device *ztex, uint16_t freq) {
|
|
int libztex_setFreq(struct libztex_device *ztex, uint16_t freq) {
|
|
|
int cnt;
|
|
int cnt;
|
|
|
- uint16_t oldfreq = ztex->freqM;
|
|
|
|
|
|
|
+ uint16_t oldfreq = ztex->dclk.freqM;
|
|
|
|
|
|
|
|
- if (freq > ztex->freqMaxM)
|
|
|
|
|
- freq = ztex->freqMaxM;
|
|
|
|
|
|
|
+ if (freq > ztex->dclk.freqMaxM)
|
|
|
|
|
+ freq = ztex->dclk.freqMaxM;
|
|
|
|
|
|
|
|
cnt = libusb_control_transfer(ztex->hndl, 0x40, 0x83, freq, 0, NULL, 0, 500);
|
|
cnt = libusb_control_transfer(ztex->hndl, 0x40, 0x83, freq, 0, NULL, 0, 500);
|
|
|
if (unlikely(cnt < 0)) {
|
|
if (unlikely(cnt < 0)) {
|
|
|
applog(LOG_ERR, "Ztex check device: Failed to set frequency with err %d", cnt);
|
|
applog(LOG_ERR, "Ztex check device: Failed to set frequency with err %d", cnt);
|
|
|
return cnt;
|
|
return cnt;
|
|
|
}
|
|
}
|
|
|
- ztex->freqM = freq;
|
|
|
|
|
- if (oldfreq > ztex->freqMaxM)
|
|
|
|
|
|
|
+ ztex->dclk.freqM = freq;
|
|
|
|
|
+ if (oldfreq > ztex->dclk.freqMaxM)
|
|
|
applog(LOG_WARNING, "%s: Frequency set to %0.2f Mhz",
|
|
applog(LOG_WARNING, "%s: Frequency set to %0.2f Mhz",
|
|
|
- ztex->repr, ztex->freqM1 * (ztex->freqM + 1));
|
|
|
|
|
|
|
+ ztex->repr,
|
|
|
|
|
+ ztex->freqM1 * (ztex->dclk.freqM + 1)
|
|
|
|
|
+ );
|
|
|
else
|
|
else
|
|
|
applog(LOG_WARNING, "%s: Frequency change from %0.2f to %0.2f Mhz",
|
|
applog(LOG_WARNING, "%s: Frequency change from %0.2f to %0.2f Mhz",
|
|
|
- ztex->repr, ztex->freqM1 * (oldfreq + 1), ztex->freqM1 * (ztex->freqM + 1));
|
|
|
|
|
|
|
+ ztex->repr,
|
|
|
|
|
+ ztex->freqM1 * (oldfreq + 1), ztex->freqM1 * (ztex->dclk.freqM + 1)
|
|
|
|
|
+ );
|
|
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
|
}
|
|
}
|
|
@@ -411,6 +416,7 @@ int libztex_prepare_device(struct libusb_device *dev, struct libztex_device** zt
|
|
|
unsigned char buf[64];
|
|
unsigned char buf[64];
|
|
|
|
|
|
|
|
newdev = malloc(sizeof(struct libztex_device));
|
|
newdev = malloc(sizeof(struct libztex_device));
|
|
|
|
|
+ dclk_prepare(&newdev->dclk);
|
|
|
newdev->bitFileName = NULL;
|
|
newdev->bitFileName = NULL;
|
|
|
newdev->numberOfFpgas = -1;
|
|
newdev->numberOfFpgas = -1;
|
|
|
newdev->valid = false;
|
|
newdev->valid = false;
|
|
@@ -510,15 +516,15 @@ int libztex_prepare_device(struct libusb_device *dev, struct libztex_device** zt
|
|
|
newdev->numNonces = buf[1] + 1;
|
|
newdev->numNonces = buf[1] + 1;
|
|
|
newdev->offsNonces = ((buf[2] & 255) | ((buf[3] & 255) << 8)) - 10000;
|
|
newdev->offsNonces = ((buf[2] & 255) | ((buf[3] & 255) << 8)) - 10000;
|
|
|
newdev->freqM1 = ((buf[4] & 255) | ((buf[5] & 255) << 8) ) * 0.01;
|
|
newdev->freqM1 = ((buf[4] & 255) | ((buf[5] & 255) << 8) ) * 0.01;
|
|
|
- newdev->freqMaxM = (buf[7] & 255);
|
|
|
|
|
- newdev->freqM = (buf[6] & 255);
|
|
|
|
|
- newdev->freqMDefault = newdev->freqM;
|
|
|
|
|
|
|
+ newdev->dclk.freqMaxM = (buf[7] & 255);
|
|
|
|
|
+ newdev->dclk.freqM = (buf[6] & 255);
|
|
|
|
|
+ newdev->dclk.freqMDefault = newdev->dclk.freqM;
|
|
|
newdev->suspendSupported = (buf[0] == 5);
|
|
newdev->suspendSupported = (buf[0] == 5);
|
|
|
newdev->hashesPerClock = buf[0] > 2? (((buf[8] & 255) | ((buf[9] & 255) << 8)) + 1) / 128.0: 1.0;
|
|
newdev->hashesPerClock = buf[0] > 2? (((buf[8] & 255) | ((buf[9] & 255) << 8)) + 1) / 128.0: 1.0;
|
|
|
newdev->extraSolutions = buf[0] > 4? buf[10]: 0;
|
|
newdev->extraSolutions = buf[0] > 4? buf[10]: 0;
|
|
|
|
|
|
|
|
applog(LOG_DEBUG, "PID: %d numNonces: %d offsNonces: %d freqM1: %f freqMaxM: %d freqM: %d suspendSupported: %s hashesPerClock: %f extraSolutions: %d",
|
|
applog(LOG_DEBUG, "PID: %d numNonces: %d offsNonces: %d freqM1: %f freqMaxM: %d freqM: %d suspendSupported: %s hashesPerClock: %f extraSolutions: %d",
|
|
|
- buf[0], newdev->numNonces, newdev->offsNonces, newdev->freqM1, newdev->freqMaxM, newdev->freqM, newdev->suspendSupported ? "T": "F",
|
|
|
|
|
|
|
+ buf[0], newdev->numNonces, newdev->offsNonces, newdev->freqM1, newdev->dclk.freqMaxM, newdev->dclk.freqM, newdev->suspendSupported ? "T": "F",
|
|
|
newdev->hashesPerClock, newdev->extraSolutions);
|
|
newdev->hashesPerClock, newdev->extraSolutions);
|
|
|
|
|
|
|
|
if (buf[0] < 4) {
|
|
if (buf[0] < 4) {
|
|
@@ -527,13 +533,6 @@ int libztex_prepare_device(struct libusb_device *dev, struct libztex_device** zt
|
|
|
applog(LOG_WARNING, "HASHES_PER_CLOCK not defined, assuming %0.2f", newdev->hashesPerClock);
|
|
applog(LOG_WARNING, "HASHES_PER_CLOCK not defined, assuming %0.2f", newdev->hashesPerClock);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- for (cnt=0; cnt < 255; cnt++) {
|
|
|
|
|
- newdev->errorCount[cnt] = 0;
|
|
|
|
|
- newdev->errorWeight[cnt] = 0;
|
|
|
|
|
- newdev->errorRate[cnt] = 0;
|
|
|
|
|
- newdev->maxErrorRate[cnt] = 0;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
newdev->usbbus = libusb_get_bus_number(dev);
|
|
newdev->usbbus = libusb_get_bus_number(dev);
|
|
|
newdev->usbaddress = libusb_get_device_address(dev);
|
|
newdev->usbaddress = libusb_get_device_address(dev);
|
|
|
sprintf(newdev->repr, "ZTEX %s-1", newdev->snString);
|
|
sprintf(newdev->repr, "ZTEX %s-1", newdev->snString);
|