forked from ckolivas/cgminer
-
Notifications
You must be signed in to change notification settings - Fork 30
/
driver-gekko.h
135 lines (114 loc) · 5.03 KB
/
driver-gekko.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#include "math.h"
#include "miner.h"
#include "usbutils.h"
#if defined(WIN32) || defined(__APPLE__)
#define thread_yield() sched_yield()
#else
#define thread_yield() pthread_yield(NULL)
#endif
#define JOB_MAX 0x7F
#define BUFFER_MAX 0xFF
enum miner_state {
MINER_INIT = 1,
MINER_CHIP_COUNT,
MINER_CHIP_COUNT_XX,
MINER_CHIP_COUNT_OK,
MINER_OPEN_CORE,
MINER_OPEN_CORE_OK,
MINER_MINING,
MINER_MINING_DUPS,
MINER_SHUTDOWN,
MINER_SHUTDOWN_OK,
MINER_RESET
};
enum miner_asic {
BM1384 = 1,
BM1387
};
enum micro_command {
M1_GET_FAN = (0x00 << 3),
M1_GET_RPM = (0x01 << 3),
M1_GET_VIN = (0x02 << 3),
M1_GET_IIN = (0x03 << 3),
M1_GET_TEMP = (0x04 << 3),
M1_GET_VNODE0 = (0x05 << 3),
M1_CLR_BEN = (0x08 << 3),
M1_SET_BEN = (0x09 << 3),
M1_CLR_LED = (0x0A << 3),
M1_SET_LED = (0x0B << 3),
M1_CLR_RST = (0x0C << 3),
M1_SET_RST = (0x0D << 3),
M2_SET_FAN = (0x18 << 3),
M2_SET_VCORE = (0x1C << 3)
};
struct COMPAC_INFO {
enum sub_ident ident; // Miner identity
enum miner_state mining_state; // Miner state
enum miner_asic asic_type; // ASIC Type
struct thr_info *thr; // Running Thread
struct thr_info rthr; // Listening Thread
struct thr_info wthr; // Miner Work Thread
pthread_mutex_t lock; // Mutex
pthread_mutex_t wlock; // Mutex Serialize Writes
float frequency; // Chip Frequency
float frequency_requested; // Requested Frequency
float frequency_start; // Starting Frequency
float healthy; // Lower percentile before tagging asic unhealthy
float micro_temp; // Micro Reported Temp
uint32_t scanhash_ms; // Sleep time inside scanhash loop
uint32_t task_ms; // Avg time(ms) between task sent to device
uint32_t fullscan_ms; // Estimated time(ms) for full nonce range
uint64_t hashrate; // Estimated hashrate = cores x chips x frequency
uint64_t task_hcn; // Hash Count Number - max nonce iter.
uint32_t prev_nonce; // Last nonce found
int failing; // Flag failing sticks
int fail_count; // Track failures.
int accepted; // Nonces accepted
int dups; // Duplicates found
int interface; // USB interface
int log_startup; // LOG_WARNING first 15 seconds, then LOG_INFO
int nonceless; // Tasks sent. Resets when nonce is found.
int nonces; // Nonces found
int zero_check; // Received nonces from zero work
int vcore; // Core voltage
int micro_found; // Found a micro to communicate with
bool vmask; // Current pool's vmask
uint32_t bauddiv; // Baudrate divider
uint32_t chips; // Stores number of chips found
uint32_t cores; // Stores number of core per chp
uint32_t difficulty; // For computing hashrate
uint64_t hashes; // Hashes completed
uint32_t job_id; // JobId incrementer
uint32_t low_hash; // Tracks of low hashrate
uint32_t max_job_id; // JobId cap
uint32_t ramping; // Ramping incrementer
uint32_t rx_len; // rx length
uint32_t task_len; // task length
uint32_t ticket_mask; // Used to reduce flashes per second
uint32_t tx_len; // tx length
uint32_t update_work; // Notification of work update
struct timeval start_time; // Device startup time
struct timeval monitor_time; // Health check reference point
struct timeval last_scanhash; // Last time inside scanhash loop
struct timeval last_reset; // Last time reset was triggered
struct timeval last_task; // Last time work was sent
struct timeval last_nonce; // Last time nonce was found
struct timeval last_hwerror; // Last time hw error was detected
struct timeval last_frequency_adjust; // Last time of frequency adjust
struct timeval last_frequency_ping; // Last time of frequency poll
struct timeval last_frequency_report; // Last change of frequency report
struct timeval last_chain_inactive; // Last sent chain inactive
struct timeval last_micro_ping; // Last time of micro controller poll
struct timeval last_write_error; // Last usb write error message
bool active_work[JOB_MAX]; // Tag good and stale work
struct work *work[JOB_MAX]; // Work ring buffer
unsigned char task[BUFFER_MAX]; // Task transmit buffer
unsigned char cmd[BUFFER_MAX]; // Command transmit buffer
unsigned char rx[BUFFER_MAX]; // Receive buffer
unsigned char tx[BUFFER_MAX]; // Transmit buffer
unsigned char end[1024]; // buffer overrun test
};
void stuff_lsb(unsigned char *dst, uint32_t x);
void stuff_msb(unsigned char *dst, uint32_t x);
void stuff_reverse(unsigned char *dst, unsigned char *src, uint32_t len);
uint64_t bound(uint64_t value, uint64_t lower_bound, uint64_t upper_bound);