|
|
|
@ -1318,18 +1318,6 @@ static bool avalon_prepare(struct thr_info *thr)
@@ -1318,18 +1318,6 @@ static bool avalon_prepare(struct thr_info *thr)
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void do_avalon_close(struct thr_info *thr) |
|
|
|
|
{ |
|
|
|
|
struct cgpu_info *avalon = thr->cgpu; |
|
|
|
|
struct avalon_info *info = avalon->device_data; |
|
|
|
|
|
|
|
|
|
pthread_join(info->read_thr, NULL); |
|
|
|
|
pthread_join(info->write_thr, NULL); |
|
|
|
|
avalon_running_reset(avalon, info); |
|
|
|
|
|
|
|
|
|
info->no_matching_work = 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static inline void record_temp_fan(struct avalon_info *info, struct avalon_result *ar, float *temp_avg) |
|
|
|
|
{ |
|
|
|
|
info->fan0 = ar->fan0 * AVALON_FAN_FACTOR; |
|
|
|
@ -1612,7 +1600,20 @@ static struct api_data *avalon_api_stats(struct cgpu_info *cgpu)
@@ -1612,7 +1600,20 @@ static struct api_data *avalon_api_stats(struct cgpu_info *cgpu)
|
|
|
|
|
|
|
|
|
|
static void avalon_shutdown(struct thr_info *thr) |
|
|
|
|
{ |
|
|
|
|
do_avalon_close(thr); |
|
|
|
|
struct cgpu_info *avalon = thr->cgpu; |
|
|
|
|
struct avalon_info *info = avalon->device_data; |
|
|
|
|
|
|
|
|
|
pthread_join(info->read_thr, NULL); |
|
|
|
|
pthread_join(info->write_thr, NULL); |
|
|
|
|
avalon_running_reset(avalon, info); |
|
|
|
|
cgsem_destroy(&info->qsem); |
|
|
|
|
mutex_destroy(&info->qlock); |
|
|
|
|
mutex_destroy(&info->lock); |
|
|
|
|
free(avalon->works); |
|
|
|
|
avalon->works = NULL; |
|
|
|
|
free(avalon->device_data); |
|
|
|
|
avalon->device_data = NULL; |
|
|
|
|
thr->cgpu = usb_free_cgpu(avalon); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static char *avalon_set_device(struct cgpu_info *avalon, char *option, char *setting, char *replybuf) |
|
|
|
|