-
Notifications
You must be signed in to change notification settings - Fork 2
/
driver-cointerra.h
251 lines (220 loc) · 6.03 KB
/
driver-cointerra.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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
/*
* Copyright 2013-2014 Con Kolivas <kernel@kolivas.org>
*
* 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 3 of the License, or (at your option)
* any later version. See COPYING for more details.
*/
#ifndef COINTERRA_H
#define COINTERRA_H
#define CTA_READBUF_SIZE 8192
#define CTA_MSG_SIZE 64
#define CTA_READ_TIMEOUT 1
#define CTA_READ_INTERVAL 100
#define CTA_SCAN_INTERVAL 500
#define CTA_RESET_TIMEOUT 1000
#define CTA_INIT_DIFF 32*0.9999847412109375
#if 0
/* FIXME: how big should this be? */
#define CTA_MAX_QUEUE 2300
#else
#define CTA_MAX_QUEUE (32 / CTA_NROLL_TIME)
#endif
#define CTA_NROLL_TIME 2
/* Offsets into buffer */
#define CTA_MSG_TYPE 2
#define CTA_RESET_TYPE 3
#define CTA_RESET_DIFF 4
#define CTA_RESET_LOAD 5
#define CTA_RESET_PSLOAD 6
#define CTA_DRIVER_TAG 3
#define CTA_MCU_TAG 5
#define CTA_MCU_CORE 5
#define CTA_MCU_ASIC 6
#define CTA_MCU_PIPE 8
#define CTA_MATCH_NOFFSET 45
#define CTA_MATCH_NONCE 60
#define CTA_WDONE_NONCES 11
#define CTA_MSG_RECVD 3
#define CTA_WORK_MIDSTATE 9
#define CTA_WORK_DATA 41
#define CTA_WORK_NROLL 53
#define CTA_WORK_DIFFBITS 55
#define CTA_REQWORK_REQUESTS 3
#define CTA_CORE_HASHRATES 3
/* Received message types */
#define CTA_RECV_UNUSED 0
#define CTA_RECV_REQWORK 1
#define CTA_RECV_MATCH 2
#define CTA_RECV_WDONE 3
#define CTA_RECV_STATREAD 4
#define CTA_RECV_STATSET 5
#define CTA_RECV_INFO 6
#define CTA_RECV_MSG 7
#define CTA_RECV_RDONE 8
#define CTA_RECV_STATDEBUG 10
#define CTA_RECV_IRSTAT 11
/* Sent message types */
#define CTA_SEND_UNUSED 0
#define CTA_SEND_RESET 1
#define CTA_SEND_WORK 2
#define CTA_SEND_SETPERF 3
#define CTA_SEND_REQUEST 4
#define CTA_SEND_FMATCH 5
#define CTA_SEND_IDENTIFY 6
#define CTA_SEND_COREHASHRATE 7
/* Types of reset in CTA_RESET_TYPE */
#define CTA_RESET_NONE 0
#define CTA_RESET_UPDATE 1
#define CTA_RESET_NEW 2
#define CTA_RESET_INIT 3
#define CTA_INFO_HWREV 3
#define CTA_INFO_SERNO 5
#define CTA_INFO_NUMASICS 9
#define CTA_INFO_NUMDIES 10
#define CTA_INFO_NUMCORES 11
#define CTA_INFO_BOARDNUMBER 13
#define CTA_INFO_FWREV_MAJ 19
#define CTA_INFO_FWREV_MIN 20
#define CTA_INFO_FWREV_MIC 21
#define CTA_INFO_FWDATE_YEAR 23
#define CTA_INFO_FWDATE_MONTH 25
#define CTA_INFO_FWDATE_DAY 26
#define CTA_INFO_INITDIFFBITS 27
#define CTA_INFO_MINDIFFBITS 28
#define CTA_INFO_MAXDIFFBITS 29
#define CTA_STAT_CORETEMPS 3
#define CTA_STAT_AMBTEMP_LOW 19
#define CTA_STAT_AMBTEMP_AVG 21
#define CTA_STAT_AMBTEMP_HIGH 23
#define CTA_STAT_PUMP_TACHS 25
#define CTA_STAT_FAN_TACHS 29
#define CTA_STAT_CORE_VOLTS 37
#define CTA_STAT_VOLTS33 53
#define CTA_STAT_VOLTS12 55
#define CTA_STAT_INACTIVE 57
#define CTA_STAT_ACTIVE 59
#define CTA_STAT_PERFMODE 3
#define CTA_STAT_FANSPEEDS 11
#define CTA_STAT_DIES_ACTIVE 15
#define CTA_STAT_PIPES_ENABLED 16
#define CTA_STAT_MIN_FAN_SPEED 24
#define CTA_STAT_UPTIME 25
#define CTA_STAT_HEARTBEATS 29
#define CTA_STAT_CORE_FREQS 45
#define CTA_STAT_UNDERRUNS 3
#define CTA_STAT_HW_ERRORS 5
#define CTA_STAT_UPTIME_MS 21
#define CTA_STAT_HASHES 25
#define CTA_STAT_FLUSHED_HASHES 33
#define CTA_STAT_AUTOVOLTAGE 41
#define CTA_STAT_POWER_PERCENT 42
#define CTA_STAT_POWER_USED 43
#define CTA_STAT_VOLTAGE 45
#define CTA_STAT_IPOWER_USED 47
#define CTA_STAT_IVOLTAGE 49
#define CTA_STAT_PS_TEMP1 51
#define CTA_STAT_PS_TEMP2 53
#define CTA_IRSTAT_CHANNEL 3
#define CTA_IRSTAT_VIN 4
#define CTA_IRSTAT_IIN 6
#define CTA_IRSTAT_VOUT 8
#define CTA_IRSTAT_IOUT 10
#define CTA_IRSTAT_TEMP1 12
#define CTA_IRSTAT_TEMP2 14
#define CTA_IRSTAT_POUT 16
#define CTA_IRSTAT_PIN 18
#define CTA_IRSTAT_EFF 20
#define CTA_IRSTAT_STATUS 22
#define CTA_CORES 8
#define CTA_PUMPS 2
#define CTA_FANS 4
#define CTA_REQ_MSGTYPE 3
#define CTA_REQ_INTERVAL 5
int opt_cta_load;
int opt_ps_load;
struct cointerra_info {
/* Info data */
uint16_t hwrev;
uint32_t serial;
uint8_t asics;
uint8_t dies;
uint16_t cores;
uint8_t board_number;
uint8_t fwrev[3];
uint16_t fw_year;
uint8_t fw_month;
uint8_t fw_day;
uint8_t init_diffbits;
uint8_t min_diffbits;
uint8_t max_diffbits;
/* Status readings data */
uint16_t coretemp[CTA_CORES];
uint16_t ambtemp_low;
uint16_t ambtemp_avg;
uint16_t ambtemp_high;
uint16_t pump_tachs[CTA_PUMPS];
uint16_t fan_tachs[CTA_FANS];
uint16_t corevolts[CTA_CORES];
uint16_t volts33;
uint16_t volts12;
uint16_t inactive;
uint16_t active;
uint16_t corefreqs[CTA_CORES];
uint32_t uptime;
/* Status settings data */
uint8_t coreperf[CTA_CORES];
uint8_t fanspeed[CTA_FANS];
uint8_t dies_active;
uint8_t pipes_enabled[CTA_CORES];
/* Status debug data */
uint16_t underruns;
uint16_t hw_errors[CTA_CORES];
uint16_t fmatch_errors[CTA_CORES];
/* Running total from debug messages */
int tot_underruns;
uint16_t tot_hw_errors[CTA_CORES];
uint64_t tot_hashes;
uint64_t tot_reset_hashes;
uint64_t tot_flushed_hashes;
uint8_t autovoltage;
uint8_t current_ps_percent;
uint16_t power_used;
uint16_t power_voltage;
uint16_t ipower_used;
uint16_t ipower_voltage;
uint16_t power_temps[2];
bool autovoltage_complete;
/* Calculated totals based on work done and nonces found */
uint64_t hashes;
uint64_t tot_calc_hashes;
/* Calculated totals based on shares returned */
uint64_t share_hashes;
uint64_t tot_core_hashes[CTA_CORES];
uint64_t tot_share_hashes;
struct timeval core_hash_start;
int requested;
uint16_t work_id;
int no_matching_work;
time_t last_pipe_nonce[1024];
unsigned char pipe_bitmap[128];
struct thr_info *thr;
pthread_mutex_t lock;
pthread_mutex_t sendlock;
pthread_cond_t wake_cond;
pthread_t read_thr;
cgsem_t reset_sem;
uint16_t irstat_vin[CTA_CORES];
uint16_t irstat_iin[CTA_CORES];
uint16_t irstat_vout[CTA_CORES];
uint16_t irstat_iout[CTA_CORES];
uint16_t irstat_temp1[CTA_CORES];
uint16_t irstat_temp2[CTA_CORES];
uint16_t irstat_pout[CTA_CORES];
uint16_t irstat_pin[CTA_CORES];
uint16_t irstat_efficiency[CTA_CORES];
uint16_t irstat_status[CTA_CORES];
uint64_t old_hashes[16 * 2];
};
#endif /* COINTERRA_H */