|
|
@ -432,7 +432,6 @@ static int icarus_get_nonce(struct cgpu_info *icarus, unsigned char *buf, struct |
|
|
|
if (first) |
|
|
|
if (first) |
|
|
|
copy_time(tv_finish, &read_finish); |
|
|
|
copy_time(tv_finish, &read_finish); |
|
|
|
|
|
|
|
|
|
|
|
// TODO: test if there is more data? to read a 2nd nonce?
|
|
|
|
|
|
|
|
if (amt >= read_amount) |
|
|
|
if (amt >= read_amount) |
|
|
|
return ICA_NONCE_OK; |
|
|
|
return ICA_NONCE_OK; |
|
|
|
|
|
|
|
|
|
|
@ -830,6 +829,8 @@ static bool icarus_detect_one(struct libusb_device *dev, struct usb_find_devices |
|
|
|
|
|
|
|
|
|
|
|
set_timing_mode(this_option_offset, icarus); |
|
|
|
set_timing_mode(this_option_offset, icarus); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
usb_buffer_enable(icarus); |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
unshin: |
|
|
|
unshin: |
|
|
@ -898,6 +899,9 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work, |
|
|
|
rev(ob_bin, 32); |
|
|
|
rev(ob_bin, 32); |
|
|
|
rev(ob_bin + 52, 12); |
|
|
|
rev(ob_bin + 52, 12); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// We only want results for the work we are about to send
|
|
|
|
|
|
|
|
usb_buffer_clear(icarus); |
|
|
|
|
|
|
|
|
|
|
|
err = usb_write(icarus, (char *)ob_bin, sizeof(ob_bin), &amount, C_SENDWORK); |
|
|
|
err = usb_write(icarus, (char *)ob_bin, sizeof(ob_bin), &amount, C_SENDWORK); |
|
|
|
if (err < 0 || amount != sizeof(ob_bin)) { |
|
|
|
if (err < 0 || amount != sizeof(ob_bin)) { |
|
|
|
applog(LOG_ERR, "%s%i: Comms error (werr=%d amt=%d)", |
|
|
|
applog(LOG_ERR, "%s%i: Comms error (werr=%d amt=%d)", |
|
|
@ -956,6 +960,20 @@ static int64_t icarus_scanhash(struct thr_info *thr, struct work *work, |
|
|
|
hash_count++; |
|
|
|
hash_count++; |
|
|
|
hash_count *= info->fpga_count; |
|
|
|
hash_count *= info->fpga_count; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if 0 |
|
|
|
|
|
|
|
// This appears to only return zero nonce values
|
|
|
|
|
|
|
|
if (usb_buffer_size(icarus) > 3) { |
|
|
|
|
|
|
|
memcpy((char *)&nonce, icarus->usbdev->buffer, sizeof(nonce_bin)); |
|
|
|
|
|
|
|
nonce = htobe32(nonce); |
|
|
|
|
|
|
|
applog(LOG_WARNING, "%s%d: attempting to submit 2nd nonce = 0x%08lX", |
|
|
|
|
|
|
|
icarus->drv->name, icarus->device_id, |
|
|
|
|
|
|
|
(long unsigned int)nonce); |
|
|
|
|
|
|
|
curr_hw_errors = icarus->hw_errors; |
|
|
|
|
|
|
|
submit_nonce(thr, work, nonce); |
|
|
|
|
|
|
|
was_hw_error = (curr_hw_errors > icarus->hw_errors); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
|
|
if (opt_debug || info->do_icarus_timing) |
|
|
|
if (opt_debug || info->do_icarus_timing) |
|
|
|
timersub(&tv_finish, &tv_start, &elapsed); |
|
|
|
timersub(&tv_finish, &tv_start, &elapsed); |
|
|
|
|
|
|
|
|
|
|
|