|
|
@ -257,15 +257,6 @@ static bool icarus_prepare(struct thr_info *thr) |
|
|
|
|
|
|
|
|
|
|
|
struct timeval now; |
|
|
|
struct timeval now; |
|
|
|
|
|
|
|
|
|
|
|
int fd = icarus_open(icarus->device_path); |
|
|
|
|
|
|
|
if (unlikely(-1 == fd)) { |
|
|
|
|
|
|
|
applog(LOG_ERR, "Failed to open Icarus on %s", |
|
|
|
|
|
|
|
icarus->device_path); |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
icarus->device_fd = fd; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
applog(LOG_INFO, "Opened Icarus on %s", icarus->device_path); |
|
|
|
applog(LOG_INFO, "Opened Icarus on %s", icarus->device_path); |
|
|
|
gettimeofday(&now, NULL); |
|
|
|
gettimeofday(&now, NULL); |
|
|
|
get_datestamp(icarus->init, &now); |
|
|
|
get_datestamp(icarus->init, &now); |
|
|
@ -289,7 +280,13 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work, |
|
|
|
struct timeval tv_start, tv_end, diff; |
|
|
|
struct timeval tv_start, tv_end, diff; |
|
|
|
|
|
|
|
|
|
|
|
icarus = thr->cgpu; |
|
|
|
icarus = thr->cgpu; |
|
|
|
fd = icarus->device_fd; |
|
|
|
|
|
|
|
|
|
|
|
fd = icarus_open(icarus->device_path); |
|
|
|
|
|
|
|
if (unlikely(-1 == fd)) { |
|
|
|
|
|
|
|
applog(LOG_ERR, "Failed to open Icarus on %s", |
|
|
|
|
|
|
|
icarus->device_path); |
|
|
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
memset(ob_bin, 0, sizeof(ob_bin)); |
|
|
|
memset(ob_bin, 0, sizeof(ob_bin)); |
|
|
|
memcpy(ob_bin, work->midstate, 32); |
|
|
|
memcpy(ob_bin, work->midstate, 32); |
|
|
@ -303,8 +300,10 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work, |
|
|
|
gettimeofday(&tv_start, NULL); |
|
|
|
gettimeofday(&tv_start, NULL); |
|
|
|
|
|
|
|
|
|
|
|
ret = icarus_write(fd, ob_bin, sizeof(ob_bin)); |
|
|
|
ret = icarus_write(fd, ob_bin, sizeof(ob_bin)); |
|
|
|
if (ret) |
|
|
|
if (ret) { |
|
|
|
|
|
|
|
icarus_close(fd); |
|
|
|
return 0; /* This should never happen */ |
|
|
|
return 0; /* This should never happen */ |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
ob_hex = bin2hex(ob_bin, sizeof(ob_bin)); |
|
|
|
ob_hex = bin2hex(ob_bin, sizeof(ob_bin)); |
|
|
|
if (ob_hex) { |
|
|
|
if (ob_hex) { |
|
|
@ -330,6 +329,7 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work, |
|
|
|
memcpy((char *)&nonce, nonce_bin, sizeof(nonce_bin)); |
|
|
|
memcpy((char *)&nonce, nonce_bin, sizeof(nonce_bin)); |
|
|
|
|
|
|
|
|
|
|
|
work->blk.nonce = 0xffffffff; |
|
|
|
work->blk.nonce = 0xffffffff; |
|
|
|
|
|
|
|
icarus_close(fd); |
|
|
|
|
|
|
|
|
|
|
|
if (nonce == 0 && ret) { |
|
|
|
if (nonce == 0 && ret) { |
|
|
|
if (unlikely(diff.tv_sec > 12 || (diff.tv_sec == 11 && diff.tv_usec > 300067))) |
|
|
|
if (unlikely(diff.tv_sec > 12 || (diff.tv_sec == 11 && diff.tv_usec > 300067))) |
|
|
@ -370,8 +370,6 @@ static void icarus_shutdown(struct thr_info *thr) |
|
|
|
if (icarus->device_path) |
|
|
|
if (icarus->device_path) |
|
|
|
free(icarus->device_path); |
|
|
|
free(icarus->device_path); |
|
|
|
|
|
|
|
|
|
|
|
close(icarus->device_fd); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
devices[icarus->device_id] = NULL; |
|
|
|
devices[icarus->device_id] = NULL; |
|
|
|
free(icarus); |
|
|
|
free(icarus); |
|
|
|
|
|
|
|
|
|
|
|