/ driver-avalon2.h
driver-avalon2.h
1 /* 2 * Copyright 2013-2014 Con Kolivas <kernel@kolivas.org> 3 * Copyright 2012-2014 Xiangfu <xiangfu@openmobilefree.com> 4 * 5 * This program is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License as published by the Free 7 * Software Foundation; either version 3 of the License, or (at your option) 8 * any later version. See COPYING for more details. 9 */ 10 11 #ifndef _AVALON2_H_ 12 #define _AVALON2_H_ 13 14 #include "util.h" 15 #include "fpgautils.h" 16 17 #ifdef USE_AVALON2 18 19 #define AVA2_MINER_THREADS 1 20 21 #define AVA2_RESET_FAULT_DECISECONDS 10 22 #define AVA2_IO_SPEED 115200 23 24 #define AVA2_DEFAULT_MODULARS 4 25 26 #define AVA2_PWM_MAX 0x3FF 27 #define AVA2_DEFAULT_FAN_PWM 15 /* % */ 28 #define AVA2_DEFAULT_FAN_MIN 10 29 #define AVA2_DEFAULT_FAN_MAX 85 30 31 #define AVALON2_TEMP_OVERHEAT 98 32 #define AVALON2_DEFAULT_POLLING_DELAY 20 /* ms */ 33 34 #define AVA2_DEFAULT_VOLTAGE_MIN 6000 35 #define AVA2_DEFAULT_VOLTAGE_MAX 11000 36 37 #define AVA2_DEFAULT_FREQUENCY_MIN 300 38 #define AVA2_DEFAULT_FREQUENCY_MAX 2000 39 40 /* Avalon2 default values */ 41 #define AVA2_DEFAULT_MINERS 10 42 #define AVA2_DEFAULT_VOLTAGE 10000 /* v * 10000 */ 43 #define AVA2_DEFAULT_FREQUENCY 1500 /* In MHs */ 44 45 /* Avalon3 default values */ 46 #define AVA2_AVA3_MINERS 5 47 #define AVA2_AVA3_VOLTAGE 6660 /* 0.666v */ 48 #define AVA2_AVA3_FREQUENCY 450 /* MHz * 11.8 = MHs: 450MHz means ~5.3GHs */ 49 50 /* Avalon2 protocol package type */ 51 #define AVA2_H1 'A' 52 #define AVA2_H2 'V' 53 54 #define AVA2_P_COINBASE_SIZE (6 * 1024) 55 #define AVA2_P_MERKLES_COUNT 20 56 57 #define AVA2_P_COUNT 39 58 #define AVA2_P_DATA_LEN (AVA2_P_COUNT - 7) 59 60 #define AVA2_P_DETECT 10 61 #define AVA2_P_STATIC 11 62 #define AVA2_P_JOB_ID 12 63 #define AVA2_P_COINBASE 13 64 #define AVA2_P_MERKLES 14 65 #define AVA2_P_HEADER 15 66 #define AVA2_P_POLLING 16 67 #define AVA2_P_TARGET 17 68 #define AVA2_P_REQUIRE 18 69 #define AVA2_P_SET 19 70 #define AVA2_P_TEST 20 71 72 #define AVA2_P_ACK 21 73 #define AVA2_P_NAK 22 74 #define AVA2_P_NONCE 23 75 #define AVA2_P_STATUS 24 76 #define AVA2_P_ACKDETECT 25 77 #define AVA2_P_TEST_RET 26 78 /* Avalon2 protocol package type */ 79 80 /* Avalon2/3 firmware prefix */ 81 #define AVA2_FW2_PREFIXSTR "20" 82 #define AVA2_FW3_PREFIXSTR "33" 83 84 #define AVA2_MM_VERNULL "NONE" 85 86 #define AVA2_ID_AVA2 3255 87 #define AVA2_ID_AVA3 3233 88 #define AVA2_ID_AVAX 3200 89 90 enum avalon2_fan_fixed { 91 FAN_FIXED, 92 FAN_AUTO, 93 }; 94 95 struct avalon2_pkg { 96 uint8_t head[2]; 97 uint8_t type; 98 uint8_t idx; 99 uint8_t cnt; 100 uint8_t data[32]; 101 uint8_t crc[2]; 102 }; 103 #define avalon2_ret avalon2_pkg 104 105 struct avalon2_info { 106 struct timeval last_stratum; 107 struct pool pool; 108 int pool_no; 109 110 int modulars[AVA2_DEFAULT_MODULARS]; 111 char mm_version[AVA2_DEFAULT_MODULARS][16]; 112 int dev_type[AVA2_DEFAULT_MODULARS]; 113 bool enable[AVA2_DEFAULT_MODULARS]; 114 115 int set_frequency; 116 int set_voltage; 117 118 int get_voltage[AVA2_DEFAULT_MODULARS]; 119 int get_frequency[AVA2_DEFAULT_MODULARS]; 120 int power_good[AVA2_DEFAULT_MODULARS]; 121 122 int fan_pwm; 123 int fan_pct; 124 int temp_max; 125 126 int fan[2 * AVA2_DEFAULT_MODULARS]; 127 int temp[2 * AVA2_DEFAULT_MODULARS]; 128 129 int local_works[AVA2_DEFAULT_MODULARS]; 130 int hw_works[AVA2_DEFAULT_MODULARS]; 131 132 int local_work[AVA2_DEFAULT_MODULARS]; 133 int hw_work[AVA2_DEFAULT_MODULARS]; 134 int matching_work[AVA2_DEFAULT_MINERS * AVA2_DEFAULT_MODULARS]; 135 136 int led_red[AVA2_DEFAULT_MODULARS]; 137 138 bool failing; 139 }; 140 141 #define AVA2_WRITE_SIZE (sizeof(struct avalon2_pkg)) 142 #define AVA2_READ_SIZE AVA2_WRITE_SIZE 143 144 #define AVA2_GETS_OK 0 145 #define AVA2_GETS_TIMEOUT -1 146 #define AVA2_GETS_RESTART -2 147 #define AVA2_GETS_ERROR -3 148 149 #define AVA2_SEND_OK 0 150 #define AVA2_SEND_ERROR -1 151 152 #define avalon2_open(devpath, baud, purge) serial_open(devpath, baud, AVA2_RESET_FAULT_DECISECONDS, purge) 153 #define avalon2_close(fd) close(fd) 154 155 extern char *set_avalon2_fan(char *arg); 156 extern char *set_avalon2_freq(char *arg); 157 extern char *set_avalon2_voltage(char *arg); 158 extern char *set_avalon2_fixed_speed(enum avalon2_fan_fixed *f); 159 extern enum avalon2_fan_fixed opt_avalon2_fan_fixed; 160 extern int opt_avalon2_overheat; 161 extern int opt_avalon2_polling_delay; 162 #endif /* USE_AVALON2 */ 163 #endif /* _AVALON2_H_ */