mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-23 04:54:26 +00:00
add shutdown function
This commit is contained in:
parent
340b923e42
commit
706c4de111
42
icarus.c
42
icarus.c
@ -52,7 +52,9 @@
|
|||||||
|
|
||||||
#define ICARUS_READ_FAULT_COUNT (8)
|
#define ICARUS_READ_FAULT_COUNT (8)
|
||||||
|
|
||||||
int icarus_read_count;
|
static int icarus_read_count;
|
||||||
|
static int icarus_write_fault;
|
||||||
|
|
||||||
struct device_api icarus_api;
|
struct device_api icarus_api;
|
||||||
|
|
||||||
static void rev(unsigned char *s, size_t l)
|
static void rev(unsigned char *s, size_t l)
|
||||||
@ -136,7 +138,7 @@ static void icarus_write(int fd, const void *buf, size_t bufLen)
|
|||||||
|
|
||||||
ret = write(fd, buf, bufLen);
|
ret = write(fd, buf, bufLen);
|
||||||
if (unlikely(ret != bufLen))
|
if (unlikely(ret != bufLen))
|
||||||
quit(1, "Icarus: Send data failed!");
|
icarus_write_fault = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define icarus_close(fd) close(fd)
|
#define icarus_close(fd) close(fd)
|
||||||
@ -144,7 +146,6 @@ static void icarus_write(int fd, const void *buf, size_t bufLen)
|
|||||||
static bool icarus_detect_one(const char *devpath)
|
static bool icarus_detect_one(const char *devpath)
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
static int i = 0;
|
|
||||||
|
|
||||||
const unsigned char golden_ob[] =
|
const unsigned char golden_ob[] =
|
||||||
"2db907f9cb4eb938ded904f4832c4331"
|
"2db907f9cb4eb938ded904f4832c4331"
|
||||||
@ -189,12 +190,14 @@ static bool icarus_detect_one(const char *devpath)
|
|||||||
|
|
||||||
/* We have a real Icarus! */
|
/* We have a real Icarus! */
|
||||||
struct cgpu_info *icarus;
|
struct cgpu_info *icarus;
|
||||||
icarus = calloc(1, sizeof(*icarus));
|
icarus = calloc(1, sizeof(struct cgpu_info));
|
||||||
devices[total_devices++] = icarus;
|
|
||||||
icarus->api = &icarus_api;
|
icarus->api = &icarus_api;
|
||||||
icarus->device_id = i++;
|
icarus->device_id = total_devices;
|
||||||
icarus->device_path = strdup(devpath);
|
icarus->device_path = strdup(devpath);
|
||||||
icarus->threads = 1;
|
icarus->threads = 1;
|
||||||
|
devices[total_devices++] = icarus;
|
||||||
|
|
||||||
|
icarus_write_fault = 0;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -209,7 +212,7 @@ static void icarus_detect()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool icarus_thread_prepare(struct thr_info *thr)
|
static bool icarus_prepare(struct thr_info *thr)
|
||||||
{
|
{
|
||||||
struct cgpu_info *icarus = thr->cgpu;
|
struct cgpu_info *icarus = thr->cgpu;
|
||||||
|
|
||||||
@ -255,6 +258,8 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
|
|||||||
tcflush(fd, TCOFLUSH);
|
tcflush(fd, TCOFLUSH);
|
||||||
#endif
|
#endif
|
||||||
icarus_write(fd, ob_bin, sizeof(ob_bin));
|
icarus_write(fd, ob_bin, sizeof(ob_bin));
|
||||||
|
if (icarus_write_fault)
|
||||||
|
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) {
|
||||||
@ -299,9 +304,30 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
|
|||||||
return hash_count;
|
return hash_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void icarus_shutdown(struct thr_info *thr)
|
||||||
|
{
|
||||||
|
struct cgpu_info *icarus;
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
if (thr->cgpu) {
|
||||||
|
icarus = thr->cgpu;
|
||||||
|
|
||||||
|
if (icarus->device_path)
|
||||||
|
free(icarus->device_path);
|
||||||
|
|
||||||
|
close(icarus->device_fd);
|
||||||
|
|
||||||
|
devices[icarus->device_id] = NULL;
|
||||||
|
free(icarus);
|
||||||
|
|
||||||
|
thr->cgpu = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
struct device_api icarus_api = {
|
struct device_api icarus_api = {
|
||||||
.name = "Icarus",
|
.name = "Icarus",
|
||||||
.api_detect = icarus_detect,
|
.api_detect = icarus_detect,
|
||||||
.thread_prepare = icarus_thread_prepare,
|
.thread_prepare = icarus_prepare,
|
||||||
.scanhash = icarus_scanhash,
|
.scanhash = icarus_scanhash,
|
||||||
|
.thread_shutdown = icarus_shutdown,
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user