mirror of https://github.com/GOSTSec/sgminer
Con Kolivas
12 years ago
7 changed files with 1342 additions and 6 deletions
@ -0,0 +1,136 @@
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
* Copyright 2013 Avalon project |
||||
* |
||||
* 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 AVALON_H |
||||
#define AVALON_H |
||||
|
||||
#ifdef USE_AVALON |
||||
|
||||
#define AVALON_TIME_FACTOR 10 |
||||
#define AVALON_RESET_FAULT_DECISECONDS 1 |
||||
#define AVALON_MINER_THREADS 1 |
||||
|
||||
#define AVALON_IO_SPEED 115200 |
||||
#define AVALON_HASH_TIME_FACTOR ((float)1.67/0x32) |
||||
#define AVALON_RESET_PITCH (300*1000*1000) |
||||
|
||||
#define AVALON_FAN_FACTOR 120 |
||||
#define AVALON_DEFAULT_FAN_MAX_PWM 0xA0 /* 100% */ |
||||
#define AVALON_DEFAULT_FAN_MIN_PWM 0x20 /* 20% */ |
||||
|
||||
#define AVALON_DEFAULT_TIMEOUT 0x32 |
||||
#define AVALON_DEFAULT_FREQUENCY 256 |
||||
#define AVALON_DEFAULT_MINER_NUM 0x20 |
||||
#define AVALON_DEFAULT_ASIC_NUM 0xA |
||||
|
||||
struct avalon_task { |
||||
uint8_t reset :1; |
||||
uint8_t flush_fifo :1; |
||||
uint8_t fan_eft :1; |
||||
uint8_t timer_eft :1; |
||||
uint8_t asic_num :4; |
||||
uint8_t fan_pwm_data; |
||||
uint8_t timeout_data; |
||||
uint8_t miner_num; |
||||
|
||||
uint8_t nonce_elf :1; |
||||
uint8_t gate_miner_elf :1; |
||||
uint8_t asic_pll :1; |
||||
uint8_t gate_miner :1; |
||||
uint8_t _pad0 :4; |
||||
uint8_t _pad1[3]; |
||||
uint32_t _pad2; |
||||
|
||||
uint8_t midstate[32]; |
||||
uint8_t data[12]; |
||||
} __attribute__((packed, aligned(4))); |
||||
|
||||
struct avalon_result { |
||||
uint32_t nonce; |
||||
uint8_t data[12]; |
||||
uint8_t midstate[32]; |
||||
|
||||
uint8_t fan0; |
||||
uint8_t fan1; |
||||
uint8_t fan2; |
||||
uint8_t temp0; |
||||
uint8_t temp1; |
||||
uint8_t temp2; |
||||
uint8_t _pad0[2]; |
||||
|
||||
uint16_t fifo_wp; |
||||
uint16_t fifo_rp; |
||||
uint8_t chip_num; |
||||
uint8_t pwm_data; |
||||
uint8_t timeout; |
||||
uint8_t miner_num; |
||||
} __attribute__((packed, aligned(4))); |
||||
|
||||
struct avalon_info { |
||||
int read_count; |
||||
|
||||
int baud; |
||||
int miner_count; |
||||
int asic_count; |
||||
int timeout; |
||||
|
||||
int fan0; |
||||
int fan1; |
||||
int fan2; |
||||
|
||||
int temp0; |
||||
int temp1; |
||||
int temp2; |
||||
int temp_max; |
||||
int temp_history_count; |
||||
int temp_history_index; |
||||
int temp_sum; |
||||
int temp_old; |
||||
int fan_pwm; |
||||
|
||||
int no_matching_work; |
||||
int matching_work[AVALON_DEFAULT_MINER_NUM]; |
||||
struct work *bulk0[AVALON_DEFAULT_MINER_NUM]; |
||||
struct work *bulk1[AVALON_DEFAULT_MINER_NUM]; |
||||
struct work *bulk2[AVALON_DEFAULT_MINER_NUM]; |
||||
struct work *bulk3[AVALON_DEFAULT_MINER_NUM]; |
||||
|
||||
int frequency; |
||||
}; |
||||
|
||||
#define AVALON_WRITE_SIZE (sizeof(struct avalon_task)) |
||||
#define AVALON_READ_SIZE (sizeof(struct avalon_result)) |
||||
|
||||
#define AVA_GETS_ERROR -1 |
||||
#define AVA_GETS_OK 0 |
||||
#define AVA_GETS_RESTART 1 |
||||
#define AVA_GETS_TIMEOUT 2 |
||||
|
||||
#define AVA_SEND_ERROR -1 |
||||
#define AVA_SEND_OK 0 |
||||
#define AVA_SEND_BUFFER_EMPTY 1 |
||||
#define AVA_SEND_BUFFER_FULL 2 |
||||
|
||||
#define AVA_BUFFER_FULL 0 |
||||
#define AVA_BUFFER_EMPTY 1 |
||||
|
||||
#define avalon_open2(devpath, baud, purge) serial_open(devpath, baud, AVALON_RESET_FAULT_DECISECONDS, purge) |
||||
#define avalon_open(devpath, baud) avalon_open2(devpath, baud, true) |
||||
#define avalon_close(fd) close(fd) |
||||
|
||||
#define avalon_buffer_full(fd) get_serial_cts(fd) |
||||
|
||||
#define AVALON_READ_TIME(baud) ((double)AVALON_READ_SIZE * (double)8.0 / (double)(baud)) |
||||
#define ASSERT1(condition) __maybe_unused static char sizeof_uint32_t_must_be_4[(condition)?1:-1] |
||||
ASSERT1(sizeof(uint32_t) == 4); |
||||
|
||||
extern struct avalon_info **avalon_info; |
||||
|
||||
#endif /* USE_AVALON */ |
||||
#endif /* AVALON_H */ |
@ -0,0 +1,77 @@
@@ -0,0 +1,77 @@
|
||||
/*
|
||||
* hexdump implementation without depenecies to *printf() |
||||
* output is equal to 'hexdump -C' |
||||
* should be compatible to 64bit architectures |
||||
* |
||||
* Copyright (c) 2009 Daniel Mack <daniel@caiaq.de> |
||||
* |
||||
* 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. |
||||
* |
||||
* This program is distributed in the hope that it will be useful, |
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
* GNU General Public License for more details. |
||||
* |
||||
* You should have received a copy of the GNU General Public License |
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/ |
||||
|
||||
#define hex_print(p) applog(LOG_DEBUG, "%s", p) |
||||
|
||||
static char nibble[] = { |
||||
'0', '1', '2', '3', '4', '5', '6', '7', |
||||
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; |
||||
|
||||
#define BYTES_PER_LINE 0x10 |
||||
|
||||
void hexdump(const uint8_t *p, unsigned int len) |
||||
{ |
||||
unsigned int i, addr; |
||||
unsigned int wordlen = sizeof(void*); |
||||
unsigned char v, line[BYTES_PER_LINE * 5]; |
||||
|
||||
for (addr = 0; addr < len; addr += BYTES_PER_LINE) { |
||||
/* clear line */ |
||||
for (i = 0; i < sizeof(line); i++) { |
||||
if (i == wordlen * 2 + 52 || |
||||
i == wordlen * 2 + 69) { |
||||
line[i] = '|'; |
||||
continue; |
||||
} |
||||
|
||||
if (i == wordlen * 2 + 70) { |
||||
line[i] = '\0'; |
||||
continue; |
||||
} |
||||
|
||||
line[i] = ' '; |
||||
} |
||||
|
||||
/* print address */ |
||||
for (i = 0; i < wordlen * 2; i++) { |
||||
v = addr >> ((wordlen * 2 - i - 1) * 4); |
||||
line[i] = nibble[v & 0xf]; |
||||
} |
||||
|
||||
/* dump content */ |
||||
for (i = 0; i < BYTES_PER_LINE; i++) { |
||||
int pos = (wordlen * 2) + 3 + (i / 8); |
||||
|
||||
if (addr + i >= len) |
||||
break; |
||||
|
||||
v = p[addr + i]; |
||||
line[pos + (i * 3) + 0] = nibble[v >> 4]; |
||||
line[pos + (i * 3) + 1] = nibble[v & 0xf]; |
||||
|
||||
/* character printable? */ |
||||
line[(wordlen * 2) + 53 + i] = |
||||
(v >= ' ' && v <= '~') ? v : '.'; |
||||
} |
||||
|
||||
hex_print(line); |
||||
} |
||||
} |
Loading…
Reference in new issue