From: Xiangfu Liu <xiangf...@gmail.com> --- Hi
In OpenWrt this package only enable BitFore and Icarus. which we can connect the FPGA mining device by USB. then mining under OpenWrt router. Xiangfu cgminer/Makefile | 49 +++ .../0001-add-icarus.c-base-on-bitforce.c.patch | 326 ++++++++++++++++++++ cgminer/patches/0002-add-shutdown-function.patch | 112 +++++++ cgminer/patches/0003-add-icarus-to-cgminer.c.patch | 79 +++++ ...4-add-Icarus-support-to-autoreconf-system.patch | 75 +++++ .../patches/0005-update-README-for-Icarus.patch | 36 +++ ...dd-shortcuts-to-description-for-easy-grep.patch | 39 +++ ...add-MIPSED-to-icarus-for-BIG_ENDIAN.patch.patch | 25 ++ 8 files changed, 741 insertions(+), 0 deletions(-) create mode 100644 cgminer/Makefile create mode 100644 cgminer/patches/0001-add-icarus.c-base-on-bitforce.c.patch create mode 100644 cgminer/patches/0002-add-shutdown-function.patch create mode 100644 cgminer/patches/0003-add-icarus-to-cgminer.c.patch create mode 100644 cgminer/patches/0004-add-Icarus-support-to-autoreconf-system.patch create mode 100644 cgminer/patches/0005-update-README-for-Icarus.patch create mode 100644 cgminer/patches/0006-add-shortcuts-to-description-for-easy-grep.patch create mode 100644 cgminer/patches/0007-add-MIPSED-to-icarus-for-BIG_ENDIAN.patch.patch diff --git a/cgminer/Makefile b/cgminer/Makefile new file mode 100644 index 0000000..0d64304 --- /dev/null +++ b/cgminer/Makefile @@ -0,0 +1,49 @@ +# +# Copyright (C) 2012 Xiangfu Liu <xian...@sharism.cc> +# bitcoin: 1BQvUsuQBYUyVuX4jjFk4dVBpWJVQEUHTZ +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +include $(TOPDIR)/rules.mk + +PKG_NAME:=cgminer +PKG_VERSION:=20120219 +PKG_REV:=3cdac04f4f4c638f4a721042208073e371726cf4 +PKG_RELEASE:=1 +PKG_INSTALL:=1 + +PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_REV).tar.gz +PKG_SOURCE_URL:=git://github.com/ckolivas/cgminer.git +PKG_SOURCE_PROTO:=git +PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) +PKG_SOURCE_VERSION:=$(PKG_REV) + +PKG_FIXUP:=autoreconf + +include $(INCLUDE_DIR)/package.mk + +define Package/cgminer + MAINTAINER:="Xiangfu Liu" \ + <xian...@sharism.cc> <1BQvUsuQBYUyVuX4jjFk4dVBpWJVQEUHTZ> + SECTION:=utils + CATEGORY:=Utilities + TITLE:=cgminer + URL:=https://github.com/ckolivas/cgminer + DEPENDS:=+libcurl +libpthread +libncurses +jansson +endef + +define Package/cgminer/description +endef + +CONFIGURE_ARGS += --disable-opencl --disable-adl --enable-icarus --enable-bitforce +TARGET_CFLAGS += +TARGET_LDFLAGS += -Wl,-rpath-link=$(STAGING_DIR)/usr/lib + +define Package/cgminer/install + $(INSTALL_DIR) $(1)/usr/bin/ + $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/cgminer $(1)/usr/bin/ +endef + +$(eval $(call BuildPackage,cgminer)) diff --git a/cgminer/patches/0001-add-icarus.c-base-on-bitforce.c.patch b/cgminer/patches/0001-add-icarus.c-base-on-bitforce.c.patch new file mode 100644 index 0000000..4be91be --- /dev/null +++ b/cgminer/patches/0001-add-icarus.c-base-on-bitforce.c.patch @@ -0,0 +1,326 @@ +From 340b923e42d32bd5173fe6b285923635a6fcc67f Mon Sep 17 00:00:00 2001 +From: Xiangfu <xian...@openmobilefree.net> +Date: Mon, 13 Feb 2012 16:04:34 +0800 +Subject: [PATCH 1/7] add icarus.c, base on bitforce.c + +--- + icarus.c | 307 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 files changed, 307 insertions(+), 0 deletions(-) + create mode 100644 icarus.c + +diff --git a/icarus.c b/icarus.c +new file mode 100644 +index 0000000..56b8d8a +--- /dev/null ++++ b/icarus.c +@@ -0,0 +1,307 @@ ++/* ++ * Copyright 2012 Luke Dashjr ++ * Copyright 2012 Xiangfu <xian...@openmobilefree.com> ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the Free ++ * Software Foundation; either version 2 of the License, or (at your option) ++ * any later version. See COPYING for more details. ++ */ ++ ++/* ++ * Those code should be works fine with V2 and V3 bitstream of Icarus. ++ * Operation: ++ * No detection implement. ++ * Input: 64B = 32B midstate + 20B fill bytes + last 12 bytes of block head. ++ * Return: send back 32bits immediately when Icarus found a valid nonce. ++ * no query protocol implemented here, if no data send back in ~11.3 ++ * seconds (full cover time on 32bit nonce range by 380MH/s speed) ++ * just send another work. ++ * Notice: ++ * 1. Icarus will start calculate when you push a work to them, even they ++ * are busy. ++ * 2. The 2 FPGAs on Icarus will distribute the job, one will calculate the ++ * 0 ~ 7FFFFFFF, another one will cover the 80000000 ~ FFFFFFFF. ++ * 3. It's possible for 2 FPGAs both find valid nonce in the meantime, the 2 ++ * valid nonce will all be send back. ++ * 4. Icarus will stop work when: a valid nonce has been found or 32 bits ++ * nonce range is completely calculated. ++ */ ++ ++#include <limits.h> ++#include <pthread.h> ++#include <stdio.h> ++#include <sys/time.h> ++#include <sys/types.h> ++#include <dirent.h> ++#include <unistd.h> ++#ifndef WIN32 ++ #include <termios.h> ++ #include <sys/stat.h> ++ #include <fcntl.h> ++ #ifndef O_CLOEXEC ++ #define O_CLOEXEC 0 ++ #endif ++#else ++ #include <windows.h> ++ #include <io.h> ++#endif ++ ++#include "elist.h" ++#include "miner.h" ++ ++#define ICARUS_READ_FAULT_COUNT (8) ++ ++int icarus_read_count; ++struct device_api icarus_api; ++ ++static void rev(unsigned char *s, size_t l) ++{ ++ size_t i, j; ++ unsigned char t; ++ ++ for (i = 0, j = l - 1; i < j; i++, j--) { ++ t = s[i]; ++ s[i] = s[j]; ++ s[j] = t; ++ } ++} ++ ++static int icarus_open(const char *devpath) ++{ ++#ifndef WIN32 ++ struct termios my_termios; ++ ++ int serialfd = open(devpath, O_RDWR | O_CLOEXEC | O_NOCTTY); ++ ++ if (serialfd == -1) ++ return -1; ++ ++ tcgetattr(serialfd, &my_termios); ++ my_termios.c_cflag = B115200; ++ my_termios.c_cflag |= CS8; ++ my_termios.c_cflag |= CREAD; ++ my_termios.c_cflag |= CLOCAL; ++ my_termios.c_cflag &= ~(CSIZE | PARENB); ++ ++ my_termios.c_iflag &= ~(IGNBRK | BRKINT | PARMRK | ++ ISTRIP | INLCR | IGNCR | ICRNL | IXON); ++ my_termios.c_oflag &= ~OPOST; ++ my_termios.c_lflag &= ~(ECHO | ECHONL | ICANON | ISIG | IEXTEN); ++ my_termios.c_cc[VTIME] = 10; /* block 1 second */ ++ my_termios.c_cc[VMIN] = 0; ++ tcsetattr(serialfd, TCSANOW, &my_termios); ++ ++ tcflush(serialfd, TCOFLUSH); ++ tcflush(serialfd, TCIFLUSH); ++ ++ return serialfd; ++#else ++ HANDLE hSerial = CreateFile(devpath, GENERIC_READ | GENERIC_WRITE, 0, ++ NULL, OPEN_EXISTING, 0, NULL); ++ if (unlikely(hSerial == INVALID_HANDLE_VALUE)) ++ return -1; ++ /* TODO: Needs setup read block time. just like VTIME = 10 */ ++ return _open_osfhandle((LONG)hSerial, 0); ++#endif ++} ++ ++static void icarus_gets(char *buf, size_t bufLen, int fd) ++{ ++ ssize_t ret = 0; ++ ++ icarus_read_count = 0; ++ ++ while (bufLen) { ++ ret = read(fd, buf, 1); ++ if (ret == 1) { ++ bufLen--; ++ buf++; ++ continue; ++ } ++ ++ icarus_read_count++; ++ if (icarus_read_count == ICARUS_READ_FAULT_COUNT) { ++ applog(LOG_WARNING, ++ "Icarus Read: No data in %d seconds", ++ ICARUS_READ_FAULT_COUNT); ++ break; ++ } ++ } ++} ++ ++static void icarus_write(int fd, const void *buf, size_t bufLen) ++{ ++ ssize_t ret; ++ ++ ret = write(fd, buf, bufLen); ++ if (unlikely(ret != bufLen)) ++ quit(1, "Icarus: Send data failed!"); ++} ++ ++#define icarus_close(fd) close(fd) ++ ++static bool icarus_detect_one(const char *devpath) ++{ ++ int fd; ++ static int i = 0; ++ ++ const unsigned char golden_ob[] = ++ "2db907f9cb4eb938ded904f4832c4331" ++ "0380e3aeb54364057e7fec5157bfc533" ++ "00000000000000000000000080000000" ++ "00000000a58e091ac342724e7c3dc346"; ++ const unsigned char golden_nonce[] = "063c5e01"; ++ ++ char ob_bin[64], nonce_bin[4]; ++ char *nonce_hex; ++ ++ if (total_devices == MAX_DEVICES) ++ return false; ++ ++ fd = icarus_open(devpath); ++ if (unlikely(fd == -1)) { ++ applog(LOG_ERR, "Icarus Detect: Failed to open %s", devpath); ++ return false; ++ } ++ ++ hex2bin(ob_bin, golden_ob, sizeof(ob_bin)); ++ icarus_write(fd, ob_bin, sizeof(ob_bin)); ++ ++ memset(nonce_bin, 0, sizeof(nonce_bin)); ++ icarus_gets(nonce_bin, sizeof(nonce_bin), fd); ++ ++ icarus_close(fd); ++ ++ nonce_hex = bin2hex(nonce_bin, sizeof(nonce_bin)); ++ if (nonce_hex) { ++ if (strncmp(nonce_hex, golden_nonce, 8)) { ++ applog(LOG_ERR, ++ "Icarus Detect: " ++ "Test failed at %s : get %s, should: %s", ++ devpath, nonce_hex, golden_nonce); ++ free(nonce_hex); ++ return false; ++ } ++ free(nonce_hex); ++ } else ++ return false; ++ ++ /* We have a real Icarus! */ ++ struct cgpu_info *icarus; ++ icarus = calloc(1, sizeof(*icarus)); ++ devices[total_devices++] = icarus; ++ icarus->api = &icarus_api; ++ icarus->device_id = i++; ++ icarus->device_path = strdup(devpath); ++ icarus->threads = 1; ++ ++ return true; ++} ++ ++static void icarus_detect() ++{ ++ struct string_elist *iter, *tmp; ++ ++ list_for_each_entry_safe(iter, tmp, &scan_devices, list) { ++ if (icarus_detect_one(iter->string)) ++ string_elist_del(iter); ++ } ++} ++ ++static bool icarus_thread_prepare(struct thr_info *thr) ++{ ++ struct cgpu_info *icarus = thr->cgpu; ++ ++ struct timeval now; ++ ++ int fd = icarus_open(icarus->device_path); ++ if (unlikely(-1 == fd)) { ++ applog(LOG_ERR, "Failed to open Icarus on %s", ++ icarus->device_path); ++ return false; ++ } ++ ++ icarus->device_fd = fd; ++ ++ applog(LOG_INFO, "Opened Icarus on %s", icarus->device_path); ++ gettimeofday(&now, NULL); ++ get_datestamp(icarus->init, &now); ++ ++ return true; ++} ++ ++static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work, ++ uint64_t max_nonce) ++{ ++ struct cgpu_info *icarus; ++ int fd; ++ ++ unsigned char ob_bin[64], nonce_bin[4]; ++ unsigned char *ob_hex, *nonce_hex; ++ uint32_t nonce; ++ uint32_t hash_count; ++ time_t t; ++ ++ icarus = thr->cgpu; ++ fd = icarus->device_fd; ++ ++ memset(ob_bin, 0, sizeof(ob_bin)); ++ memcpy(ob_bin, work->midstate, 32); ++ memcpy(ob_bin + 52, work->data + 64, 12); ++ rev(ob_bin, 32); ++ rev(ob_bin + 52, 12); ++#ifndef WIN32 ++ tcflush(fd, TCOFLUSH); ++#endif ++ icarus_write(fd, ob_bin, sizeof(ob_bin)); ++ ++ ob_hex = bin2hex(ob_bin, sizeof(ob_bin)); ++ if (ob_hex) { ++ t = time(NULL); ++ applog(LOG_DEBUG, "Icarus send : %s", ob_hex); ++ free(ob_hex); ++ } ++ ++ /* Icarus will return 8 bytes nonces or nothing */ ++ memset(nonce_bin, 0, sizeof(nonce_bin)); ++ icarus_gets(nonce_bin, sizeof(nonce_bin), fd); ++ ++ nonce_hex = bin2hex(nonce_bin, sizeof(nonce_bin)); ++ if (nonce_hex) { ++ t = time(NULL) - t; ++ applog(LOG_DEBUG, "Icarus return (elapse %d seconds): %s", ++ t, nonce_hex); ++ free(nonce_hex); ++ } ++ ++ memcpy((char *)&nonce, nonce_bin, sizeof(nonce_bin)); ++ ++ if (nonce == 0 && icarus_read_count == ICARUS_READ_FAULT_COUNT) ++ return 0xffffffff; ++ ++#ifndef __BIG_ENDIAN__ ++ nonce = swab32(nonce); ++#endif ++ work->blk.nonce = 0xffffffff; ++ submit_nonce(thr, work, nonce); ++ ++ hash_count = (nonce & 0x7fffffff); ++ if (hash_count == 0) ++ hash_count = 2; ++ else { ++ if (hash_count++ == 0x7fffffff) ++ hash_count = 0xffffffff; ++ else ++ hash_count <<= 1; ++ } ++ ++ return hash_count; ++} ++ ++struct device_api icarus_api = { ++ .name = "Icarus", ++ .api_detect = icarus_detect, ++ .thread_prepare = icarus_thread_prepare, ++ .scanhash = icarus_scanhash, ++}; +-- +1.7.5.4 + diff --git a/cgminer/patches/0002-add-shutdown-function.patch b/cgminer/patches/0002-add-shutdown-function.patch new file mode 100644 index 0000000..462efa3 --- /dev/null +++ b/cgminer/patches/0002-add-shutdown-function.patch @@ -0,0 +1,112 @@ +From 706c4de11159e06284b70cc1d12ba9c2cbcbb684 Mon Sep 17 00:00:00 2001 +From: Xiangfu <xian...@openmobilefree.net> +Date: Sun, 19 Feb 2012 21:31:58 +0800 +Subject: [PATCH 2/7] add shutdown function + +--- + icarus.c | 42 ++++++++++++++++++++++++++++++++++-------- + 1 files changed, 34 insertions(+), 8 deletions(-) + +diff --git a/icarus.c b/icarus.c +index 56b8d8a..5562e5e 100644 +--- a/icarus.c ++++ b/icarus.c +@@ -52,7 +52,9 @@ + + #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; + + 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); + if (unlikely(ret != bufLen)) +- quit(1, "Icarus: Send data failed!"); ++ icarus_write_fault = 1; + } + + #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) + { + int fd; +- static int i = 0; + + const unsigned char golden_ob[] = + "2db907f9cb4eb938ded904f4832c4331" +@@ -189,12 +190,14 @@ static bool icarus_detect_one(const char *devpath) + + /* We have a real Icarus! */ + struct cgpu_info *icarus; +- icarus = calloc(1, sizeof(*icarus)); +- devices[total_devices++] = icarus; ++ icarus = calloc(1, sizeof(struct cgpu_info)); + icarus->api = &icarus_api; +- icarus->device_id = i++; ++ icarus->device_id = total_devices; + icarus->device_path = strdup(devpath); + icarus->threads = 1; ++ devices[total_devices++] = icarus; ++ ++ icarus_write_fault = 0; + + 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; + +@@ -255,6 +258,8 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work, + tcflush(fd, TCOFLUSH); + #endif + 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)); + if (ob_hex) { +@@ -299,9 +304,30 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work, + 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 = { + .name = "Icarus", + .api_detect = icarus_detect, +- .thread_prepare = icarus_thread_prepare, ++ .thread_prepare = icarus_prepare, + .scanhash = icarus_scanhash, ++ .thread_shutdown = icarus_shutdown, + }; +-- +1.7.5.4 + diff --git a/cgminer/patches/0003-add-icarus-to-cgminer.c.patch b/cgminer/patches/0003-add-icarus-to-cgminer.c.patch new file mode 100644 index 0000000..97db33a --- /dev/null +++ b/cgminer/patches/0003-add-icarus-to-cgminer.c.patch @@ -0,0 +1,79 @@ +From f46c2b28a0d50a026354013ead0963ce4248ef4e Mon Sep 17 00:00:00 2001 +From: Xiangfu <xian...@openmobilefree.net> +Date: Mon, 13 Feb 2012 16:09:45 +0800 +Subject: [PATCH 3/7] add icarus to cgminer.c + +--- + cgminer.c | 19 +++++++++++++++---- + 1 files changed, 15 insertions(+), 4 deletions(-) + +diff --git a/cgminer.c b/cgminer.c +index 8264db5..3bd4eb0 100644 +--- a/cgminer.c ++++ b/cgminer.c +@@ -399,7 +399,7 @@ static char *set_int_1_to_10(const char *arg, int *i) + return set_int_range(arg, i, 1, 10); + } + +-#ifdef USE_BITFORCE ++#if defined(USE_BITFORCE) || defined(USE_ICARUS) + static char *add_serial(char *arg) + { + string_elist_add(arg, &scan_devices); +@@ -661,7 +661,7 @@ static struct opt_table opt_config_table[] = { + OPT_WITHOUT_ARG("--disable-gpu|-G", + opt_set_bool, &opt_nogpu, + "Disable GPU mining even if suitable devices exist"), +-#if defined(WANT_CPUMINE) && (defined(HAVE_OPENCL) || defined(USE_BITFORCE)) ++#if defined(WANT_CPUMINE) && (defined(HAVE_OPENCL) || defined(USE_BITFORCE) || defined(USE_ICARUS)) + OPT_WITHOUT_ARG("--enable-cpu|-C", + opt_set_bool, &opt_usecpu, + "Enable CPU mining with other mining (default: no CPU mining if other devices exist)"), +@@ -776,10 +776,10 @@ static struct opt_table opt_config_table[] = { + OPT_WITHOUT_ARG("--round-robin", + set_rr, &pool_strategy, + "Change multipool strategy from failover to round robin on failure"), +-#ifdef USE_BITFORCE ++#if defined(USE_BITFORCE) || defined(USE_ICARUS) + OPT_WITH_ARG("--scan-serial|-S", + add_serial, NULL, NULL, +- "Serial port to probe for BitForce device"), ++ "Serial port to probe for FPGA Mining device"), + #endif + OPT_WITH_ARG("--scan-time|-s", + set_int_0_to_9999, opt_show_intval, &opt_scantime, +@@ -961,6 +961,9 @@ static char *opt_verusage_and_exit(const char *extra) + #ifdef USE_BITFORCE + "bitforce " + #endif ++#ifdef USE_ICARUS ++ "icarus " ++#endif + "mining support.\n" + , packagename); + printf("%s", opt_usage(opt_argv0, extra)); +@@ -4153,6 +4156,10 @@ struct device_api cpu_api = { + extern struct device_api bitforce_api; + #endif + ++#ifdef USE_ICARUS ++extern struct device_api icarus_api; ++#endif ++ + + static int cgminer_id_count = 0; + +@@ -4307,6 +4314,10 @@ int main (int argc, char *argv[]) + bitforce_api.api_detect(); + #endif + ++#ifdef USE_ICARUS ++ icarus_api.api_detect(); ++#endif ++ + #ifdef WANT_CPUMINE + cpu_api.api_detect(); + #endif +-- +1.7.5.4 + diff --git a/cgminer/patches/0004-add-Icarus-support-to-autoreconf-system.patch b/cgminer/patches/0004-add-Icarus-support-to-autoreconf-system.patch new file mode 100644 index 0000000..6e51774 --- /dev/null +++ b/cgminer/patches/0004-add-Icarus-support-to-autoreconf-system.patch @@ -0,0 +1,75 @@ +From 2bb92ebcdc4612d218e965b8f6f6f22b6b3ff21d Mon Sep 17 00:00:00 2001 +From: Xiangfu <xian...@openmobilefree.net> +Date: Mon, 13 Feb 2012 16:04:13 +0800 +Subject: [PATCH 4/7] add Icarus support to autoreconf system + +--- + Makefile.am | 3 +++ + configure.ac | 21 +++++++++++++++++++-- + 2 files changed, 22 insertions(+), 2 deletions(-) + +diff --git a/Makefile.am b/Makefile.am +index 4249d51..5262d52 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -70,3 +70,6 @@ if HAS_BITFORCE + cgminer_SOURCES += bitforce.c + endif + ++if HAS_ICARUS ++cgminer_SOURCES += icarus.c ++endif +diff --git a/configure.ac b/configure.ac +index d2fdbb4..ce89c6f 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -196,6 +196,17 @@ if test "x$bitforce" = xyes; then + fi + AM_CONDITIONAL([HAS_BITFORCE], [test x$bitforce = xyes]) + ++icarus="no" ++ ++AC_ARG_ENABLE([icarus], ++ [AC_HELP_STRING([--enable-icarus],[Compile support for Icarus (default disabled)])], ++ [icarus=$enableval] ++ ) ++if test "x$icarus" = xyes; then ++ AC_DEFINE([USE_ICARUS], [1], [Defined to 1 if Icarus support is wanted]) ++fi ++AM_CONDITIONAL([HAS_ICARUS], [test x$icarus = xyes]) ++ + AC_SEARCH_LIBS(addstr, ncurses pdcurses, , + AC_MSG_ERROR([Could not find curses library - please install libncurses-dev or pdcurses-dev])) + +@@ -338,13 +349,13 @@ if test "x$opencl" != xno; then + echo " OpenCL...............: FOUND. GPU mining support enabled" + else + echo " OpenCL...............: NOT FOUND. GPU mining support DISABLED" +- if test "x$cpumining$bitforce" = xnono; then ++ if test "x$cpumining$bitforce$icarus" = xnonono; then + AC_MSG_ERROR([No mining configured in]) + fi + fi + else + echo " OpenCL...............: Detection overrided. GPU mining support DISABLED" +- if test "x$cpumining$bitforce" = xnono; then ++ if test "x$cpumining$bitforce$icarus" = xnonono; then + AC_MSG_ERROR([No mining configured in]) + fi + fi +@@ -366,6 +377,12 @@ else + echo " BitForce.FPGAs.......: Disabled" + fi + ++if test "x$icarus" = xyes; then ++ echo " Icarus.FPGAs.........: Enabled" ++else ++ echo " Icarus.FPGAs.........: Disabled" ++fi ++ + echo + if test "x$cpumining" = xyes; then + echo " CPU Mining...........: Enabled" +-- +1.7.5.4 + diff --git a/cgminer/patches/0005-update-README-for-Icarus.patch b/cgminer/patches/0005-update-README-for-Icarus.patch new file mode 100644 index 0000000..eca4aab --- /dev/null +++ b/cgminer/patches/0005-update-README-for-Icarus.patch @@ -0,0 +1,36 @@ +From beaf158a409920ab436cef749b997f487e0225b9 Mon Sep 17 00:00:00 2001 +From: Xiangfu <xian...@openmobilefree.net> +Date: Tue, 14 Feb 2012 00:01:20 +0800 +Subject: [PATCH 5/7] update README for Icarus + +--- + README | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/README b/README +index f3c0a26..30cf037 100644 +--- a/README ++++ b/README +@@ -50,6 +50,7 @@ CGMiner specific configuration options: + --disable-opencl Override detection and disable building with opencl + --disable-adl Override detection and disable building with adl + --enable-bitforce Compile support for BitForce FPGAs(default disabled) ++ --enable-icarus Compile support for Icarus Board(default disabled) + + Basic *nix build instructions: + To build with GPU mining support: +@@ -193,9 +194,9 @@ GPU only options: + --ndevs|-n Enumerate number of detected GPUs and exit + + +-BitForce only options: ++FPGA mining boards(BitForce, Icarus) only options: + +---scan-serial|-S <arg> Serial port to probe for BitForce device ++--scan-serial|-S <arg> Serial port to probe for FPGA mining device + + + CPU only options: +-- +1.7.5.4 + diff --git a/cgminer/patches/0006-add-shortcuts-to-description-for-easy-grep.patch b/cgminer/patches/0006-add-shortcuts-to-description-for-easy-grep.patch new file mode 100644 index 0000000..fa692c5 --- /dev/null +++ b/cgminer/patches/0006-add-shortcuts-to-description-for-easy-grep.patch @@ -0,0 +1,39 @@ +From dfead150f78fcaa5b052c791b6ee0ee8f2939b1c Mon Sep 17 00:00:00 2001 +From: Xiangfu <xian...@openmobilefree.net> +Date: Wed, 15 Feb 2012 12:43:25 +0800 +Subject: [PATCH 6/7] add shortcuts to description for easy grep + +--- + README | 16 ++++++++-------- + 1 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/README b/README +index 30cf037..d801a9a 100644 +--- a/README ++++ b/README +@@ -315,14 +315,14 @@ The output line shows the following: + (5s):1713.6 (avg):1707.8 Mh/s | Q:301 A:729 R:8 HW:0 E:242% U:22.53/m + + Each column is as follows: +-A 5 second exponentially decaying average hash rate +-An all time average hash rate +-The number of requested (Queued) work items from the pools +-The number of Accepted shares +-The number of Rejected shares +-The number of HardWare errors +-The Efficiency defined as number of shares returned / work item +-The Utility defined as the number of shares / minute ++5s: A 5 second exponentially decaying average hash rate ++avg: An all time average hash rate ++Q: The number of requested (Queued) work items from the pools ++A: The number of Accepted shares ++R: The number of Rejected shares ++HW: The number of HardWare errors ++E: The Efficiency defined as number of shares returned / work item ++U: The Utility defined as the number of shares / minute + + GPU 1: 73.5C 2551RPM | 427.3/443.0Mh/s | A:8 R:0 HW:0 U:4.39/m + +-- +1.7.5.4 + diff --git a/cgminer/patches/0007-add-MIPSED-to-icarus-for-BIG_ENDIAN.patch.patch b/cgminer/patches/0007-add-MIPSED-to-icarus-for-BIG_ENDIAN.patch.patch new file mode 100644 index 0000000..2060247 --- /dev/null +++ b/cgminer/patches/0007-add-MIPSED-to-icarus-for-BIG_ENDIAN.patch.patch @@ -0,0 +1,25 @@ +From 83df54b91b99aad744e0f62431d6f3ceecd0ac51 Mon Sep 17 00:00:00 2001 +From: Xiangfu <xian...@openmobilefree.net> +Date: Sun, 19 Feb 2012 22:20:22 +0800 +Subject: [PATCH 7/7] add-MIPSED-to-icarus-for-BIG_ENDIAN.patch + +--- + icarus.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/icarus.c b/icarus.c +index 5562e5e..73cd4de 100644 +--- a/icarus.c ++++ b/icarus.c +@@ -285,7 +285,7 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work, + if (nonce == 0 && icarus_read_count == ICARUS_READ_FAULT_COUNT) + return 0xffffffff; + +-#ifndef __BIG_ENDIAN__ ++#if !defined (__BIG_ENDIAN__) && !defined(MIPSEB) + nonce = swab32(nonce); + #endif + work->blk.nonce = 0xffffffff; +-- +1.7.5.4 + -- 1.7.5.4 _______________________________________________ openwrt-devel mailing list openwrt-devel@lists.openwrt.org https://lists.openwrt.org/mailman/listinfo/openwrt-devel