@ -225,15 +225,6 @@ static bool icarus_prepare(struct thr_info *thr)
struct timeval now ;
struct timeval now ;
int fd = icarus_open ( icarus - > device_path ) ;
if ( unlikely ( - 1 = = fd ) ) {
applog ( LOG_ERR , " Failed to open Icarus on %s " ,
icarus - > device_path ) ;
return false ;
}
icarus - > device_fd = fd ;
applog ( LOG_INFO , " Opened Icarus on %s " , icarus - > device_path ) ;
applog ( LOG_INFO , " Opened Icarus on %s " , icarus - > device_path ) ;
gettimeofday ( & now , NULL ) ;
gettimeofday ( & now , NULL ) ;
get_datestamp ( icarus - > init , & now ) ;
get_datestamp ( icarus - > init , & now ) ;
@ -255,7 +246,13 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
time_t t = 0 ;
time_t t = 0 ;
icarus = thr - > cgpu ;
icarus = thr - > cgpu ;
fd = icarus - > device_fd ;
fd = icarus_open ( icarus - > device_path ) ;
if ( unlikely ( - 1 = = fd ) ) {
applog ( LOG_ERR , " Failed to open Icarus on %s " ,
icarus - > device_path ) ;
return 0 ;
}
memset ( ob_bin , 0 , sizeof ( ob_bin ) ) ;
memset ( ob_bin , 0 , sizeof ( ob_bin ) ) ;
memcpy ( ob_bin , work - > midstate , 32 ) ;
memcpy ( ob_bin , work - > midstate , 32 ) ;
@ -266,8 +263,10 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
tcflush ( fd , TCOFLUSH ) ;
tcflush ( fd , TCOFLUSH ) ;
# endif
# endif
ret = icarus_write ( fd , ob_bin , sizeof ( ob_bin ) ) ;
ret = icarus_write ( fd , ob_bin , sizeof ( ob_bin ) ) ;
if ( ret )
if ( ret ) {
icarus_close ( fd ) ;
return 0 ; /* This should never happen */
return 0 ; /* This should never happen */
}
ob_hex = bin2hex ( ob_bin , sizeof ( ob_bin ) ) ;
ob_hex = bin2hex ( ob_bin , sizeof ( ob_bin ) ) ;
if ( ob_hex ) {
if ( ob_hex ) {
@ -291,8 +290,10 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
memcpy ( ( char * ) & nonce , nonce_bin , sizeof ( nonce_bin ) ) ;
memcpy ( ( char * ) & nonce , nonce_bin , sizeof ( nonce_bin ) ) ;
if ( nonce = = 0 & & ret )
if ( nonce = = 0 & & ret ) {
icarus_close ( fd ) ;
return 0xffffffff ;
return 0xffffffff ;
}
# ifndef __BIG_ENDIAN__
# ifndef __BIG_ENDIAN__
nonce = swab32 ( nonce ) ;
nonce = swab32 ( nonce ) ;
@ -310,6 +311,7 @@ static uint64_t icarus_scanhash(struct thr_info *thr, struct work *work,
hash_count < < = 1 ;
hash_count < < = 1 ;
}
}
icarus_close ( fd ) ;
return hash_count ;
return hash_count ;
}
}
@ -323,8 +325,6 @@ static void icarus_shutdown(struct thr_info *thr)
if ( icarus - > device_path )
if ( icarus - > device_path )
free ( icarus - > device_path ) ;
free ( icarus - > device_path ) ;
close ( icarus - > device_fd ) ;
devices [ icarus - > device_id ] = NULL ;
devices [ icarus - > device_id ] = NULL ;
free ( icarus ) ;
free ( icarus ) ;