|
|
|
@ -201,13 +201,12 @@ static int avalon_send_task(int fd, const struct avalon_task *at,
@@ -201,13 +201,12 @@ static int avalon_send_task(int fd, const struct avalon_task *at,
|
|
|
|
|
return AVA_SEND_BUFFER_EMPTY; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int avalon_gets(int fd, uint8_t *buf, int read_count, |
|
|
|
|
struct thr_info *thr, struct timeval *tv_finish) |
|
|
|
|
static int avalon_gets(int fd, uint8_t *buf, struct thr_info *thr, |
|
|
|
|
struct timeval *tv_finish) |
|
|
|
|
{ |
|
|
|
|
ssize_t ret = 0; |
|
|
|
|
int rc = 0; |
|
|
|
|
int read_amount = AVALON_READ_SIZE; |
|
|
|
|
bool first = true; |
|
|
|
|
ssize_t ret = 0; |
|
|
|
|
|
|
|
|
|
while (true) { |
|
|
|
|
struct timeval timeout = {0, 100000}; |
|
|
|
@ -223,8 +222,7 @@ static int avalon_gets(int fd, uint8_t *buf, int read_count,
@@ -223,8 +222,7 @@ static int avalon_gets(int fd, uint8_t *buf, int read_count,
|
|
|
|
|
if (unlikely(ret < 0)) |
|
|
|
|
return AVA_GETS_ERROR; |
|
|
|
|
if (likely(first)) { |
|
|
|
|
if (likely(tv_finish)) |
|
|
|
|
gettimeofday(tv_finish, NULL); |
|
|
|
|
gettimeofday(tv_finish, NULL); |
|
|
|
|
first = false; |
|
|
|
|
} |
|
|
|
|
if (likely(ret >= read_amount)) |
|
|
|
@ -234,41 +232,23 @@ static int avalon_gets(int fd, uint8_t *buf, int read_count,
@@ -234,41 +232,23 @@ static int avalon_gets(int fd, uint8_t *buf, int read_count,
|
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (thr && thr->work_restart) { |
|
|
|
|
if (opt_debug) { |
|
|
|
|
applog(LOG_WARNING, |
|
|
|
|
"Avalon: Work restart at %.2f seconds", |
|
|
|
|
(float)(rc)/(float)AVALON_TIME_FACTOR); |
|
|
|
|
} |
|
|
|
|
if (thr->work_restart) { |
|
|
|
|
applog(LOG_DEBUG, "Avalon: Work restart"); |
|
|
|
|
return AVA_GETS_RESTART; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
rc++; |
|
|
|
|
if (rc >= read_count) { |
|
|
|
|
if (opt_debug) { |
|
|
|
|
applog(LOG_WARNING, |
|
|
|
|
"Avalon: No data in %.2f seconds", |
|
|
|
|
(float)rc/(float)AVALON_TIME_FACTOR); |
|
|
|
|
} |
|
|
|
|
return AVA_GETS_TIMEOUT; |
|
|
|
|
} |
|
|
|
|
return AVA_GETS_TIMEOUT; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int avalon_get_result(int fd, struct avalon_result *ar, |
|
|
|
|
struct thr_info *thr, struct timeval *tv_finish) |
|
|
|
|
{ |
|
|
|
|
struct cgpu_info *avalon; |
|
|
|
|
struct avalon_info *info; |
|
|
|
|
uint8_t result[AVALON_READ_SIZE]; |
|
|
|
|
int ret, read_count; |
|
|
|
|
|
|
|
|
|
avalon = thr->cgpu; |
|
|
|
|
info = avalon_infos[avalon->device_id]; |
|
|
|
|
read_count = info->read_count; |
|
|
|
|
int ret; |
|
|
|
|
|
|
|
|
|
memset(result, 0, AVALON_READ_SIZE); |
|
|
|
|
ret = avalon_gets(fd, result, read_count, thr, tv_finish); |
|
|
|
|
ret = avalon_gets(fd, result, thr, tv_finish); |
|
|
|
|
|
|
|
|
|
if (ret == AVA_GETS_OK) { |
|
|
|
|
if (opt_debug) { |
|
|
|
@ -609,8 +589,6 @@ static bool avalon_detect_one(const char *devpath)
@@ -609,8 +589,6 @@ static bool avalon_detect_one(const char *devpath)
|
|
|
|
|
info->miner_count = miner_count; |
|
|
|
|
info->asic_count = asic_count; |
|
|
|
|
info->timeout = timeout; |
|
|
|
|
info->read_count = ((float)info->timeout * AVALON_HASH_TIME_FACTOR * |
|
|
|
|
AVALON_TIME_FACTOR) / (float)info->miner_count; |
|
|
|
|
|
|
|
|
|
info->fan_pwm = AVALON_DEFAULT_FAN_MIN_PWM; |
|
|
|
|
info->temp_max = 0; |
|
|
|
@ -994,7 +972,6 @@ static struct api_data *avalon_api_stats(struct cgpu_info *cgpu)
@@ -994,7 +972,6 @@ static struct api_data *avalon_api_stats(struct cgpu_info *cgpu)
|
|
|
|
|
root = api_add_int(root, "baud", &(info->baud), false); |
|
|
|
|
root = api_add_int(root, "miner_count", &(info->miner_count),false); |
|
|
|
|
root = api_add_int(root, "asic_count", &(info->asic_count), false); |
|
|
|
|
root = api_add_int(root, "read_count", &(info->read_count), false); |
|
|
|
|
root = api_add_int(root, "timeout", &(info->timeout), false); |
|
|
|
|
root = api_add_int(root, "frequency", &(info->frequency), false); |
|
|
|
|
|
|
|
|
|