123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- #ifndef BFLSC_H
- #define BFLSC_H
- #define BLANK ""
- #define LFSTR "<LF>"
- enum driver_version {
- BFLSC_DRVUNDEF = 0,
- BFLSC_DRV1,
- BFLSC_DRV2
- };
- #define BFLSC_BUFSIZ (0x1000)
- #define BFLSC_APPLOGSIZ 8192
- #define BFLSC_INFO_TIMEOUT 999
- #define BFLSC_DI_FIRMWARE "FIRMWARE"
- #define BFLSC_DI_ENGINES "ENGINES"
- #define BFLSC_DI_JOBSINQUE "JOBS IN QUEUE"
- #define BFLSC_DI_XLINKMODE "XLINK MODE"
- #define BFLSC_DI_XLINKPRESENT "XLINK PRESENT"
- #define BFLSC_DI_DEVICESINCHAIN "DEVICES IN CHAIN"
- #define BFLSC_DI_CHAINPRESENCE "CHAIN PRESENCE MASK"
- #define BFLSC_DI_CHIPS "CHIP PARALLELIZATION"
- #define BFLSC_DI_CHIPS_PARALLEL "YES"
- #define BFLSC28_DI_ASICS "ASIC Installed"
- #define FULLNONCE 0x100000000ULL
- struct bflsc_dev {
-
- unsigned int ms_work;
- int work_queued;
- int work_complete;
- int nonces_hw;
-
- uint64_t hashes_unsent;
- uint64_t hashes_sent;
- uint64_t nonces_found;
- struct timeval last_check_result;
- struct timeval last_dev_result;
- struct timeval last_nonce_result;
-
- char getinfo[(BFLSC_BUFSIZ+4)*4];
- char *firmware;
- int engines;
- char *xlink_mode;
- char *xlink_present;
- char *chips;
-
- bool dead;
- bool overheat;
-
- float temp1;
- float temp2;
- float vcc1;
- float vcc2;
- float vmain;
- float temp1_max;
- float temp2_max;
- time_t temp1_max_time;
- time_t temp2_max_time;
- float temp1_5min_av;
- float temp2_5min_av;
-
-
-
-
-
-
- uint64_t flush_id;
- uint64_t result_id;
- bool flushed;
- };
- #define QUE_MAX_RESULTS 8
- struct bflsc_work {
- UT_hash_handle hh;
- int id;
- struct work *work;
- };
- struct bflsc_info {
- enum sub_ident ident;
- enum driver_version driver_version;
- pthread_rwlock_t stat_lock;
- struct thr_info results_thr;
- uint64_t hashes_sent;
- uint32_t update_count;
- struct timeval last_update;
- int sc_count;
- struct bflsc_dev *sc_devs;
- unsigned int scan_sleep_time;
- unsigned int results_sleep_time;
- unsigned int default_ms_work;
- bool shutdown;
- bool flash_led;
- bool not_first_work;
- bool fanauto;
- int que_size;
- int que_full_enough;
- int que_watermark;
- int que_low;
- int que_noncecount;
- int que_fld_min;
- int que_fld_max;
- uint64_t core_nonces[17];
- uint64_t core_hw[17];
- int flush_size;
-
- uint64_t result_size[QUE_MAX_RESULTS+2];
- struct bflsc_work *bworks;
- uint64_t cortex_nonces[0x80];
- uint64_t cortex_hw[0x80];
- int volt_next;
- bool volt_next_stat;
- int clock_next;
- bool clock_next_stat;
- };
- #define BFLSC_XLINKHDR '@'
- #define BFLSC_MAXPAYLOAD 255
- struct DataForwardToChain {
- uint8_t header;
- uint8_t payloadSize;
- uint8_t deviceAddress;
- uint8_t payloadData[BFLSC_MAXPAYLOAD];
- };
- #define DATAFORWARDSIZE(data) (1 + 1 + 1 + data.payloadSize)
- #define MIDSTATE_BYTES 32
- #define MERKLE_OFFSET 64
- #define MERKLE_BYTES 12
- #define BFLSC_QJOBSIZ (MIDSTATE_BYTES+MERKLE_BYTES+1)
- #define BFLSC_EOB 0xaa
- struct QueueJobStructure {
- uint8_t payloadSize;
- uint8_t midState[MIDSTATE_BYTES];
- uint8_t blockData[MERKLE_BYTES];
- uint8_t endOfBlock;
- };
- #define QUE_RES_LINES_MIN 3
- #define QUE_MIDSTATE 0
- #define QUE_BLOCKDATA 1
- #define QUE_UID 0
- #define QUE_CC 1
- #define QUE_NONCECOUNT_V1 2
- #define QUE_FLD_MIN_V1 3
- #define QUE_FLD_MAX_V1 (QUE_MAX_RESULTS+QUE_FLD_MIN_V1)
- #define QUE_CHIP_V2 2
- #define QUE_NONCECOUNT_V2 3
- #define QUE_FLD_MIN_V2 4
- #define QUE_FLD_MAX_V2 (QUE_MAX_RESULTS+QUE_FLD_MIN_V2)
- #define BFLSC_SIGNATURE 0xc1
- #define BFLSC_EOW 0xfe
- struct QueueJobPackStructure {
- uint8_t payloadSize;
- uint8_t signature;
- uint8_t jobsInArray;
- struct QueueJobStructure jobs[5];
- uint8_t endOfWrapper;
- };
- struct SaveString {
- uint8_t payloadSize;
- uint8_t payloadData[BFLSC_MAXPAYLOAD];
- };
- #define BFLSC_IDENTIFY "ZGX"
- #define BFLSC_IDENTIFY_LEN (sizeof(BFLSC_IDENTIFY)-1)
- #define BFLSC_DETAILS "ZCX"
- #define BFLSC_DETAILS_LEN (sizeof(BFLSC_DETAILS)-1)
- #define BFLSC_FIRMWARE "ZJX"
- #define BFLSC_FIRMWARE_LEN (sizeof(BFLSC_FIRMWARE)-1)
- #define BFLSC_FLASH "ZMX"
- #define BFLSC_FLASH_LEN (sizeof(BFLSC_FLASH)-1)
- #define BFLSC_VOLTAGE "ZTX"
- #define BFLSC_VOLTAGE_LEN (sizeof(BFLSC_VOLTAGE)-1)
- #define BFLSC_TEMPERATURE "ZLX"
- #define BFLSC_TEMPERATURE_LEN (sizeof(BFLSC_TEMPERATURE)-1)
- #define BFLSC_QRES "ZOX"
- #define BFLSC_QRES_LEN (sizeof(BFLSC_QRES)-1)
- #define BFLSC_QFLUSH "ZQX"
- #define BFLSC_QFLUSH_LEN (sizeof(BFLSC_QFLUSH)-1)
- #define BFLSC_FANAUTO "Z9X"
- #define BFLSC_FANOUT_LEN (sizeof(BFLSC_FANAUTO)-1)
- #define BFLSC_FAN0 "Z0X"
- #define BFLSC_FAN0_LEN (sizeof(BFLSC_FAN0)-1)
- #define BFLSC_FAN1 "Z1X"
- #define BFLSC_FAN1_LEN (sizeof(BFLSC_FAN1)-1)
- #define BFLSC_FAN2 "Z2X"
- #define BFLSC_FAN2_LEN (sizeof(BFLSC_FAN2)-1)
- #define BFLSC_FAN3 "Z3X"
- #define BFLSC_FAN3_LEN (sizeof(BFLSC_FAN3)-1)
- #define BFLSC_FAN4 "Z4X"
- #define BFLSC_FAN4_LEN (sizeof(BFLSC_FAN4)-1)
- #define BFLSC_LOADSTR "ZUX"
- #define BFLSC_LOADSTR_LEN (sizeof(BFLSC_LOADSTR)-1)
- #define BFLSC_QJOB "ZNX"
- #define BFLSC_QJOB_LEN (sizeof(BFLSC_QJOB)-1)
- #define BFLSC_QJOBS "ZWX"
- #define BFLSC_QJOBS_LEN (sizeof(BFLSC_QJOBS)-1)
- #define BFLSC_SAVESTR "ZSX"
- #define BFLSC_SAVESTR_LEN (sizeof(BFLSC_SAVESTR)-1)
- #define BFLSC_IDENTITY "BitFORCE SC"
- #define BFLSC_BFLSC "SHA256 SC"
- #define BFLSC_BFLSC28 "SC-28nm"
- #define BFLSC_OK "OK\n"
- #define BFLSC_OK_LEN (sizeof(BFLSC_OK)-1)
- #define BFLSC_SUCCESS "SUCCESS\n"
- #define BFLSC_SUCCESS_LEN (sizeof(BFLSC_SUCCESS)-1)
- #define BFLSC_RESULT "COUNT:"
- #define BFLSC_RESULT_LEN (sizeof(BFLSC_RESULT)-1)
- #define BFLSC_ANERR "ERR:"
- #define BFLSC_ANERR_LEN (sizeof(BFLSC_ANERR)-1)
- #define BFLSC_TIMEOUT BFLSC_ANERR "TIMEOUT"
- #define BFLSC_TIMEOUT_LEN (sizeof(BFLSC_TIMEOUT)-1)
- #define BFLSC_XTIMEOUT BFLSC_ANERR "TIMEOUT "
- #define BFLSC_XTIMEOUT_LEN (sizeof(BFLSC_XTIMEOUT)-1)
- #define BFLSC_INVALID BFLSC_ANERR "INVALID DATA"
- #define BFLSC_INVALID_LEN (sizeof(BFLSC_INVALID)-1)
- #define BFLSC_ERRSIG BFLSC_ANERR "SIGNATURE"
- #define BFLSC_ERRSIG_LEN (sizeof(BFLSC_ERRSIG)-1)
- #define BFLSC_OKQ "OK:QUEUED"
- #define BFLSC_OKQ_LEN (sizeof(BFLSC_OKQ)-1)
- #define BFLSC_INPROCESS "INPROCESS"
- #define BFLSC_INPROCESS_LEN (sizeof(BFLSC_INPROCESS)-1)
- #define BFLSC_OKQN "OK:QUEUED "
- #define BFLSC_OKQN_LEN (sizeof(BFLSC_OKQN)-1)
- #define BFLSC_QFULL "QUEUE FULL"
- #define BFLSC_QFULL_LEN (sizeof(BFLSC_QFULL)-1)
- #define BFLSC_HITEMP "HIGH TEMPERATURE RECOVERY"
- #define BFLSC_HITEMP_LEN (sizeof(BFLSC_HITEMP)-1)
- #define BFLSC_EMPTYSTR "MEMORY EMPTY"
- #define BFLSC_EMPTYSTR_LEN (sizeof(BFLSC_EMPTYSTR)-1)
- #define FullNonceRangeJob QueueJobStructure
- #define BFLSC_JOBSIZ BFLSC_QJOBSIZ
- #define BFLSC_SENDWORK "ZDX"
- #define BFLSC_SENDWORK_LEN (sizeof(BFLSC_SENDWORK)-1)
- #define BFLSC_WORKSTATUS "ZFX"
- #define BFLSC_WORKSTATUS_LEN (sizeof(BFLSC_WORKSTATUS)-1)
- #define BFLSC_SENDRANGE "ZPX"
- #define BFLSC_SENDRANGE_LEN (sizeof(BFLSC_SENDRANGE)-1)
- #define BFLSC_NONCE "NONCE-FOUND:"
- #define BFLSC_NONCE_LEN (sizeof(BFLSC_NONCE)-1)
- #define BFLSC_NO_NONCE "NO-NONCE"
- #define BFLSC_NO_NONCE_LEN (sizeof(BFLSC_NO_NONCE)-1)
- #define BFLSC_IDLE "IDLE"
- #define BFLSC_IDLE_LEN (sizeof(BFLSC_IDLE)-1)
- #define BFLSC_BUSY "BUSY"
- #define BFLSC_BUSY_LEN (sizeof(BFLSC_BUSY)-1)
- #define BFLSC_MINIRIG "BAM"
- #define BFLSC_SINGLE "BAS"
- #define BFLSC_LITTLESINGLE "BAL"
- #define BFLSC_JALAPENO "BAJ"
- #define BFLSC_MONARCH "BMA"
- #define BAM_WORK_TIME 71.58
- #define BAS_WORK_TIME 71.58
- #define BAL_WORK_TIME 143.17
- #define BAJ_WORK_TIME 954.44
- #define BMA_WORK_TIME 35
- #define BAM_SCAN_TIME 20
- #define BMA_SCAN_TIME 50
- #define BAS_SCAN_TIME 360
- #define BAL_SCAN_TIME 720
- #define BAJ_SCAN_TIME 1000
- #define BFLSC_RES_TIME 100
- #define BMA_RES_TIME 50
- #define BFLSC_MAX_SLEEP 2000
- #define BAJ_LATENCY LATENCY_STD
- #define BAL_LATENCY 12
- #define BAS_LATENCY 12
- #define BAM_LATENCY 2
- #define BFLSC_TEMP_SLEEPMS 5
- #define BFLSC_QUE_SIZE_V1 20
- #define BFLSC_QUE_FULL_ENOUGH_V1 13
- #define BFLSC_QUE_WATERMARK_V1 6
- #define BFLSC_QUE_LOW_V1 3
- #define BFLSC_QUE_SIZE_V2 40
- #define BFLSC_QUE_FULL_ENOUGH_V2 36
- #define BFLSC_QUE_WATERMARK_V2 32
- #define BFLSC_QUE_LOW_V2 16
- #define BFLSC_TEMP_OVERHEAT 85
- #define BFLSC_TEMP_THROTTLE 3
- #define BFLSC_TEMP_RECOVER 5
- #define REINIT_TIME_FIRST_MS 100
- #define REINIT_TIME_MAX_MS 800
- #define REINIT_TIME_MAX 3000000
- extern int opt_bflsc_overheat;
- #endif
|