Skip to content
This repository has been archived by the owner on May 27, 2020. It is now read-only.

FPGA - allow device detect override without an open failure #227

Merged
merged 1 commit into from
Jun 19, 2012
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions README
Original file line number Diff line number Diff line change
Expand Up @@ -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

This option is only for BitForce, Icarus, and/or ModMiner FPGAs

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
to scan, you must also use "-S auto". If you want to prevent cgminer from
Expand All @@ -210,6 +212,11 @@ FPGA mining boards(BitForce, Icarus, ModMiner, Ztex) only options:
On windows <arg> is usually of the format \\.\COMn
(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


Expand Down
6 changes: 4 additions & 2 deletions driver-bitforce.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,11 @@ static bool bitforce_detect_one(const char *devpath)
char *s;
char pdevbuf[0x100];

applog(LOG_DEBUG, "BitForce Detect: Attempting to open %s", devpath);

int fdDev = BFopen(devpath);
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;
}
BFwrite(fdDev, "ZGX", 3);
Expand Down Expand Up @@ -96,7 +98,7 @@ static char bitforce_detect_auto()

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)
Expand Down
4 changes: 3 additions & 1 deletion driver-icarus.c
Original file line number Diff line number Diff line change
Expand Up @@ -379,6 +379,8 @@ static bool icarus_detect_one(const char *devpath)
unsigned char ob_bin[64], nonce_bin[ICARUS_READ_SIZE];
char *nonce_hex;

applog(LOG_DEBUG, "Icarus Detect: Attempting to open %s", devpath);

fd = icarus_open2(devpath, true);
if (unlikely(fd == -1)) {
applog(LOG_ERR, "Icarus Detect: Failed to open %s", devpath);
Expand Down Expand Up @@ -444,7 +446,7 @@ static bool icarus_detect_one(const char *devpath)

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)
Expand Down
2 changes: 1 addition & 1 deletion driver-modminer.c
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@ modminer_detect_auto()
static void
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__);
Expand Down
13 changes: 9 additions & 4 deletions fpgautils.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,20 +119,25 @@ serial_autodetect_devserial(detectone_func_t detectone, const char*prodname)
}

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)
return 0;

struct string_elist *iter, *tmp;
const char*s;
const char*s, *p;
bool inhibitauto = false;
char found = 0;
size_t dnamel = strlen(dname);

list_for_each_entry_safe(iter, tmp, &scan_devices, list) {
s = iter->string;
if (!strncmp(dnamec, iter->string, dnamel))
s += dnamel;
if ((p = strchr(s, ':')) && p[1] != '\0') {
size_t plen = p - s;
if (plen != dnamel || strncasecmp(s, dname, plen))
continue;
s = p + 1;
}
if (!strcmp(s, "auto"))
forceauto = true;
else
Expand Down
8 changes: 4 additions & 4 deletions fpgautils.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,13 @@
typedef bool(*detectone_func_t)(const char*);
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) \
_serial_detect(dname ":", sizeof(dname), detectone, autoscan, true)
_serial_detect(dname, detectone, autoscan, true)
#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) \
_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_udev (detectone_func_t, const char*prodname);

Expand Down