mirror of
https://github.com/GOSTSec/sgminer
synced 2025-01-22 12:34:27 +00:00
FPGA - allow device detect override without an open failure
This commit is contained in:
parent
bf3e15838f
commit
4dee0d049c
7
README
7
README
@ -199,6 +199,8 @@ FPGA mining boards(BitForce, Icarus, ModMiner, Ztex) only options:
|
|||||||
|
|
||||||
--scan-serial|-S <arg> Serial port to probe for FPGA mining device
|
--scan-serial|-S <arg> Serial port to probe for FPGA mining device
|
||||||
|
|
||||||
|
This option is only for BitForce, Icarus, and/or ModMiner FPGAs
|
||||||
|
|
||||||
By default, cgminer will scan for autodetected FPGAs unless at least one
|
By default, cgminer will scan for autodetected FPGAs unless at least one
|
||||||
-S is specified for that driver. If you specify -S and still want cgminer
|
-S is specified for that driver. If you specify -S and still want cgminer
|
||||||
to scan, you must also use "-S auto". If you want to prevent cgminer from
|
to scan, you must also use "-S auto". If you want to prevent cgminer from
|
||||||
@ -210,6 +212,11 @@ FPGA mining boards(BitForce, Icarus, ModMiner, Ztex) only options:
|
|||||||
On windows <arg> is usually of the format \\.\COMn
|
On windows <arg> is usually of the format \\.\COMn
|
||||||
(where n = the correct device number for the FPGA device)
|
(where n = the correct device number for the FPGA device)
|
||||||
|
|
||||||
|
The official supplied binaries are compiled with support for all FPGAs.
|
||||||
|
To force the code to only attempt detection with a specific driver,
|
||||||
|
prepend the argument with the driver name followed by a colon.
|
||||||
|
For example, "icarus:/dev/ttyUSB0" or "bitforce:\\.\COM5"
|
||||||
|
|
||||||
For other FPGA details see the FPGA-README
|
For other FPGA details see the FPGA-README
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,9 +53,11 @@ static bool bitforce_detect_one(const char *devpath)
|
|||||||
char *s;
|
char *s;
|
||||||
char pdevbuf[0x100];
|
char pdevbuf[0x100];
|
||||||
|
|
||||||
|
applog(LOG_DEBUG, "BitForce Detect: Attempting to open %s", devpath);
|
||||||
|
|
||||||
int fdDev = BFopen(devpath);
|
int fdDev = BFopen(devpath);
|
||||||
if (unlikely(fdDev == -1)) {
|
if (unlikely(fdDev == -1)) {
|
||||||
applog(LOG_DEBUG, "BitForce Detect: Failed to open %s", devpath);
|
applog(LOG_ERR, "BitForce Detect: Failed to open %s", devpath);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
BFwrite(fdDev, "ZGX", 3);
|
BFwrite(fdDev, "ZGX", 3);
|
||||||
@ -96,7 +98,7 @@ static char bitforce_detect_auto()
|
|||||||
|
|
||||||
static void bitforce_detect()
|
static void bitforce_detect()
|
||||||
{
|
{
|
||||||
serial_detect_auto("bitforce", bitforce_detect_one, bitforce_detect_auto);
|
serial_detect_auto(bitforce_api.dname, bitforce_detect_one, bitforce_detect_auto);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_bitforce_statline_before(char *buf, struct cgpu_info *bitforce)
|
static void get_bitforce_statline_before(char *buf, struct cgpu_info *bitforce)
|
||||||
|
@ -379,6 +379,8 @@ static bool icarus_detect_one(const char *devpath)
|
|||||||
unsigned char ob_bin[64], nonce_bin[ICARUS_READ_SIZE];
|
unsigned char ob_bin[64], nonce_bin[ICARUS_READ_SIZE];
|
||||||
char *nonce_hex;
|
char *nonce_hex;
|
||||||
|
|
||||||
|
applog(LOG_DEBUG, "Icarus Detect: Attempting to open %s", devpath);
|
||||||
|
|
||||||
fd = icarus_open2(devpath, true);
|
fd = icarus_open2(devpath, true);
|
||||||
if (unlikely(fd == -1)) {
|
if (unlikely(fd == -1)) {
|
||||||
applog(LOG_ERR, "Icarus Detect: Failed to open %s", devpath);
|
applog(LOG_ERR, "Icarus Detect: Failed to open %s", devpath);
|
||||||
@ -444,7 +446,7 @@ static bool icarus_detect_one(const char *devpath)
|
|||||||
|
|
||||||
static void icarus_detect()
|
static void icarus_detect()
|
||||||
{
|
{
|
||||||
serial_detect("icarus", icarus_detect_one);
|
serial_detect(icarus_api.dname, icarus_detect_one);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool icarus_prepare(struct thr_info *thr)
|
static bool icarus_prepare(struct thr_info *thr)
|
||||||
|
@ -103,7 +103,7 @@ modminer_detect_auto()
|
|||||||
static void
|
static void
|
||||||
modminer_detect()
|
modminer_detect()
|
||||||
{
|
{
|
||||||
serial_detect_auto("modminer", modminer_detect_one, modminer_detect_auto);
|
serial_detect_auto(modminer_api.dname, modminer_detect_one, modminer_detect_auto);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define bailout(...) return _bailout(-1, modminer, __VA_ARGS__);
|
#define bailout(...) return _bailout(-1, modminer, __VA_ARGS__);
|
||||||
|
13
fpgautils.c
13
fpgautils.c
@ -119,20 +119,25 @@ serial_autodetect_devserial(detectone_func_t detectone, const char*prodname)
|
|||||||
}
|
}
|
||||||
|
|
||||||
char
|
char
|
||||||
_serial_detect(const char*dnamec, size_t dnamel, detectone_func_t detectone, autoscan_func_t autoscan, bool forceauto)
|
_serial_detect(const char*dname, detectone_func_t detectone, autoscan_func_t autoscan, bool forceauto)
|
||||||
{
|
{
|
||||||
if (total_devices == MAX_DEVICES)
|
if (total_devices == MAX_DEVICES)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
struct string_elist *iter, *tmp;
|
struct string_elist *iter, *tmp;
|
||||||
const char*s;
|
const char*s, *p;
|
||||||
bool inhibitauto = false;
|
bool inhibitauto = false;
|
||||||
char found = 0;
|
char found = 0;
|
||||||
|
size_t dnamel = strlen(dname);
|
||||||
|
|
||||||
list_for_each_entry_safe(iter, tmp, &scan_devices, list) {
|
list_for_each_entry_safe(iter, tmp, &scan_devices, list) {
|
||||||
s = iter->string;
|
s = iter->string;
|
||||||
if (!strncmp(dnamec, iter->string, dnamel))
|
if ((p = strchr(s, ':')) && p[1] != '\0') {
|
||||||
s += dnamel;
|
size_t plen = p - s;
|
||||||
|
if (plen != dnamel || strncasecmp(s, dname, plen))
|
||||||
|
continue;
|
||||||
|
s = p + 1;
|
||||||
|
}
|
||||||
if (!strcmp(s, "auto"))
|
if (!strcmp(s, "auto"))
|
||||||
forceauto = true;
|
forceauto = true;
|
||||||
else
|
else
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
typedef bool(*detectone_func_t)(const char*);
|
typedef bool(*detectone_func_t)(const char*);
|
||||||
typedef char(*autoscan_func_t)();
|
typedef char(*autoscan_func_t)();
|
||||||
|
|
||||||
extern char _serial_detect(const char*dnamec, size_t dnamel, detectone_func_t, autoscan_func_t, bool force_autoscan);
|
extern char _serial_detect(const char*dname, detectone_func_t, autoscan_func_t, bool force_autoscan);
|
||||||
#define serial_detect_fauto(dname, detectone, autoscan) \
|
#define serial_detect_fauto(dname, detectone, autoscan) \
|
||||||
_serial_detect(dname ":", sizeof(dname), detectone, autoscan, true)
|
_serial_detect(dname, detectone, autoscan, true)
|
||||||
#define serial_detect_auto(dname, detectone, autoscan) \
|
#define serial_detect_auto(dname, detectone, autoscan) \
|
||||||
_serial_detect(dname ":", sizeof(dname), detectone, autoscan, false)
|
_serial_detect(dname, detectone, autoscan, false)
|
||||||
#define serial_detect(dname, detectone) \
|
#define serial_detect(dname, detectone) \
|
||||||
_serial_detect(dname ":", sizeof(dname), detectone, NULL, false)
|
_serial_detect(dname, detectone, NULL, false)
|
||||||
extern char serial_autodetect_devserial(detectone_func_t, const char*prodname);
|
extern char serial_autodetect_devserial(detectone_func_t, const char*prodname);
|
||||||
extern char serial_autodetect_udev (detectone_func_t, const char*prodname);
|
extern char serial_autodetect_udev (detectone_func_t, const char*prodname);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user