123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407 |
- #ifndef BITFURY16_H
- #define BITFURY16_H
- #include "miner.h"
- #include "bf16-bitfury16.h"
- /* file contains device build revision: one of following */
- /* #define MINER_X5 */
- /* #define MINER_X6 */
- /* #include "bf16-devicerev.h" */
- #define MINER_X6
- #if defined(MINER_X5) && defined(MINER_X6)
- #error "MINER_X5 and MINER_X6 can not be defined both"
- #endif
- #if !defined(MINER_X5) && !defined(MINER_X6)
- #error "At least one of MINER_X5 and MINER_X6 should be defined"
- #endif
- #define CHIPBOARD_NUM 2 /* chipboard number */
- #define BF16_NUM 11 /* chips number per BTC250 concentrator */
- #ifdef MINER_X5
- #define BCM250_NUM 3 /* BCM250 chips per chipboard */
- #define CHANNEL_DEPTH 2 /* maximum channel length */
- #define CHIPS_NUM 26 /* BF16 chips per chipboard */
- #endif
- #ifdef MINER_X6
- #define BCM250_NUM 6 /* BCM250 chips per chipboard */
- #define CHANNEL_DEPTH 4 /* maximum channel length */
- #define CHIPS_NUM 52 /* BF16 chips per chipboard */
- #endif
- #define FILELOG
- enum bf_opt_renonce {
- RENONCE_DISABLED,
- RENONCE_ONE_CHIP,
- RENONCE_CHIP_PER_BOARD
- };
- /* chip structure */
- typedef struct {
- uint8_t clock;
- bf_chip_status_t status;
- uint8_t curr_buff;
- uint8_t task_processed;
- /* nonces list to extract dups */
- bf_list_t* nonce_list;
- /* chip statistics */
- float nonces;
- float task_switch;
- float status_cmd;
- float status_cmd_none;
- uint32_t nonces_dx;
- uint32_t nonces_good_dx;
- uint32_t nonces_diff_dx;
- uint32_t nonces_bad_dx;
- uint32_t nonces_re_dx;
- uint32_t nonces_re_good_dx;
- uint32_t nonces_re_bad_dx;
- uint32_t task_switch_dx;
- uint32_t status_cmd_dx;
- uint32_t status_cmd_none_dx;
- float hashrate;
- float hashrate_good;
- float hashrate_diff;
- float hashrate_bad;
- float hashrate_re;
- float hashrate_re_good;
- float hashrate_re_bad;
- uint32_t errors; /* error counter */
- uint32_t error_rate; /* error rate */
- time_t last_error_time;/* time since last error */
- uint16_t recovery_count;
- time_t last_nonce_time;/* time since last good nonce */
- struct timeval status_time; /* time since last status cmd */
- struct timeval switch_time; /* time since last task switch */
- /* command stuff */
- bf_works_t owork; /* old work */
- bf_works_t cwork; /* current work */
- uint32_t rx[12];
- uint32_t rx_prev[12];
- } bf_chip_t;
- /* chip concentrator init map structure */
- typedef struct {
- uint8_t channel_path[CHANNEL_DEPTH];
- uint8_t first_good_chip;
- uint8_t last_good_chip;
- uint8_t chips_num;
- } bf_bcm250_map_t;
- /* chip concentrator structure */
- typedef struct {
- uint8_t* channel_path; /* channel path to chip concentrator */
- uint8_t channel_depth;
- uint8_t first_good_chip;
- uint8_t last_good_chip;
- uint8_t chips_num;
- uint8_t chips_failed;
- bf_chip_t chips[BF16_NUM];
- /* chip statistics */
- float nonces;
- float task_switch;
- float status_cmd;
- float status_cmd_none;
- uint32_t nonces_dx;
- uint32_t nonces_good_dx;
- uint32_t nonces_diff_dx;
- uint32_t nonces_bad_dx;
- uint32_t nonces_re_dx;
- uint32_t nonces_re_good_dx;
- uint32_t nonces_re_bad_dx;
- uint32_t task_switch_dx;
- uint32_t status_cmd_dx;
- uint32_t status_cmd_none_dx;
- float hashrate;
- float hashrate_good;
- float hashrate_diff;
- float hashrate_bad;
- float hashrate_re;
- float hashrate_re_good;
- float hashrate_re_bad;
- } bf_bcm250_t;
- /* pid structure */
- typedef struct {
- int16_t i_state; /* integrator state */
- int16_t i_max; /* maximum allowable integrator state */
- int16_t i_min; /* minimum allowable integrator state */
- } bf_pid_t;
- typedef enum {
- CHIPBOARD_X5,
- CHIPBOARD_X6
- } bf_chipboard_type_t;
- typedef enum {
- CHIPBOARD_REV1,
- CHIPBOARD_REV2,
- CHIPBOARD_REV3
- } bf_chipboard_rev_t;
- /* chipboard structure */
- typedef struct {
- bool detected;
- bool active;
- bf_pid_t pid;
- bf_chipboard_type_t board_type;
- bf_chipboard_rev_t board_rev;
- /* MSP version data */
- uint32_t board_ver;
- uint32_t board_fwver;
- char board_hwid[32];
- /* MSP hw data */
- float temp;
- float u_board;
- float p_board;
- uint8_t p_chain1_enabled;
- uint8_t p_chain2_enabled;
- float u_chain1;
- float u_chain2;
- float i_chain1;
- float i_chain2;
- float p_chain1;
- float p_chain2;
- float p_fan;
- uint32_t rpm;
- uint8_t fan_speed;
- float i_alarm;
- float t_alarm;
- float t_gisteresis;
- char fan_mode;
- float target_temp;
- uint8_t a_temp;
- uint8_t a_ichain1;
- uint8_t a_ichain2;
- uint8_t bcm250_num;
- uint8_t chips_num;
- uint8_t chips_failed;
- uint8_t chips_disabled;
- bf_bcm250_t* bcm250;
- #ifdef MINER_X5
- bool power_disabled;
- uint32_t power_disable_count;
- time_t power_disable_time;
- time_t power_enable_time;
- #endif
- #ifdef MINER_X6
- bool power1_disabled;
- bool power2_disabled;
- uint32_t power1_disable_count;
- uint32_t power2_disable_count;
- time_t power1_disable_time;
- time_t power2_disable_time;
- time_t power1_enable_time;
- time_t power2_enable_time;
- #endif
- bf_cmd_buffer_t cmd_buffer;
- /* chip statistics */
- float nonces;
- float task_switch;
- float status_cmd;
- float status_cmd_none;
- uint32_t nonces_dx;
- uint32_t nonces_good_dx;
- uint32_t nonces_diff_dx;
- uint32_t nonces_bad_dx;
- uint32_t nonces_re_dx;
- uint32_t nonces_re_good_dx;
- uint32_t nonces_re_bad_dx;
- uint32_t task_switch_dx;
- uint32_t status_cmd_dx;
- uint32_t status_cmd_none_dx;
- float hashrate;
- float hashrate_good;
- float hashrate_diff;
- float hashrate_bad;
- float hashrate_re;
- float hashrate_re_good;
- float hashrate_re_bad;
- float txrx_speed;
- uint32_t bytes_transmitted_dx;
- uint64_t bytes_transmitted;
- } bf_chipboard_t;
- struct bitfury16_info {
- struct thr_info *thr;
- struct thr_info chipworker_thr;
- struct thr_info nonceworker_thr;
- struct thr_info renonceworker_thr;
- struct thr_info hwmonitor_thr;
- struct thr_info alarm_thr;
- struct thr_info statistics_thr;
- #ifdef FILELOG
- FILE* logfile;
- pthread_mutex_t logfile_mutex;
- #endif
- uint8_t chipboard_num;
- /* boards with all sensors in propriate state */
- uint8_t active_chipboard_num;
- uint8_t chips_num;
- uint8_t chips_failed;
- uint8_t chips_disabled;
- uint8_t renonce_chips;
- bf_chipboard_t* chipboard;
- /* work list */
- bf_list_t* work_list;
- /* work list */
- bf_list_t* stale_work_list;
- /* nonces for calculation */
- bf_list_t* noncework_list;
- /* renonces for calculation */
- bf_list_t* renoncework_list;
- /* nonces for recalculation */
- uint32_t renonce_id;
- bf_list_t* renonce_list;
- uint32_t stage0_match;
- uint32_t stage0_mismatch;
- uint32_t stage1_match;
- uint32_t stage1_mismatch;
- uint32_t stage2_match;
- uint32_t stage2_mismatch;
- uint32_t stage3_match;
- uint32_t stage3_mismatch;
- uint32_t unmatched;
- uint8_t channel_length;
- /* driver statistics */
- float nonces;
- float task_switch;
- float status_cmd;
- float status_cmd_none;
- uint32_t nonces_dx;
- uint32_t nonces_good_dx;
- uint32_t nonces_diff_dx;
- uint32_t nonces_bad_dx;
- uint32_t nonces_re_dx;
- uint32_t nonces_re_good_dx;
- uint32_t nonces_re_bad_dx;
- uint32_t task_switch_dx;
- uint32_t status_cmd_dx;
- uint32_t status_cmd_none_dx;
- float hashrate;
- float hashrate_good;
- float hashrate_diff;
- float hashrate_bad;
- float hashrate_re;
- float hashrate_re_good;
- float hashrate_re_bad;
- pthread_mutex_t nonces_good_lock;
- uint32_t nonces_good_cg;
- float u_avg;
- float i_total;
- float p_total;
- float u_chip;
- float p_chip;
- bool a_temp;
- bool a_ichain;
- bool a_net;
- time_t ialarm_start;
- uint16_t ialarm_count;
- bool ialarm_buzzer;
- bool led_red_enabled;
- struct timeval led_red_switch;
- bool led_green_enabled;
- struct timeval led_green_switch;
- bool buzzer_enabled;
- struct timeval buzzer_switch;
- bool initialised;
- };
- /* set clock to all chips and exit */
- extern bool opt_bf16_set_clock;
- /* enable board mining statistics output */
- extern bool opt_bf16_stats_enabled;
- /* chip clock value */
- extern char* opt_bf16_clock;
- extern uint8_t bf16_chip_clock;
- /* renonce chip clock value */
- extern char* opt_bf16_renonce_clock;
- extern uint8_t bf16_renonce_chip_clock;
- /* renonce configuration */
- extern int opt_bf16_renonce;
- /* manual PID enabled */
- #ifdef MINER_X5
- extern bool opt_bf16_manual_pid_enabled;
- #endif
- #ifdef MINER_X6
- extern bool opt_bf16_manual_pid_disabled;
- #endif
- /* disable automatic power management */
- extern bool opt_bf16_power_management_disabled;
- /* fan speed */
- extern int opt_bf16_fan_speed;
- /* target temp */
- extern int opt_bf16_target_temp;
- /* alarm temp */
- extern int opt_bf16_alarm_temp;
- /* test chip communication */
- extern char* opt_bf16_test_chip;
- #endif /* BITFURY16_H */
|