Some cleanups
[hashcat.git] / include / shared.h
index 66cf101..c10c7d2 100644 (file)
@@ -1,5 +1,7 @@
 /**
- * Author......: Jens Steube <jens.steube@gmail.com>
+ * Authors.....: Jens Steube <jens.steube@gmail.com>
+ *               Gabriele Gristina <matrix@hashcat.net>
+ *
  * License.....: MIT
  */
 
 
 #endif
 
+/**
+ * libraries stuff
+ */
+
+#ifdef _WIN
+#define hc_dlopen LoadLibrary
+#define hc_dlclose FreeLibrary
+#define hc_dlsym GetProcAddress
+#else
+#define hc_dlopen dlopen
+#define hc_dlclose dlclose
+#define hc_dlsym dlsym
+#endif
+
+#define HC_LOAD_FUNC(ptr,name,type,libname,noerr) \
+  ptr->name = (type) hc_dlsym (ptr->lib, #name); \
+  if (!ptr->name) { \
+    if (noerr == 1) { \
+      log_error ("ERROR: %s is missing from %s shared library.", #name, #libname); \
+      exit (-1); \
+    } else { \
+      log_info ("WARNING: %s is missing from %s shared library.", #name, #libname); \
+      return (-1); \
+    } \
+  }
+
+#define HC_LOAD_ADDR(ptr,name,type,func,addr,libname,noerr) \
+  ptr->name = (type) (*ptr->func) (addr); \
+  if (!ptr->name) { \
+    if (noerr == 1) { \
+      log_error ("ERROR: %s at address %08x is missing from %s shared library.", #name, addr, #libname); \
+      exit (-1); \
+    } else { \
+      log_error ("WARNING: %s at address %08x is missing from %s shared library.", #name, addr, #libname); \
+      return (-1); \
+    } \
+  }
+
 /**
  * system stuff
  */
  * temperature management
  */
 
-#ifdef LINUX
-#include <ext_nvml.h>
+#if _WIN
 #include <ext_ADL.h>
-#endif
-
-#ifdef WIN
 #include <ext_nvapi.h>
+#else
 #include <ext_ADL.h>
-#endif
-
-#ifdef OSX
-#include <ext_smi.h>
-#include <ext_dummy.h>
+#include <ext_nvml.h>
 #endif
 
 /**
 
 #define CL_VENDOR_NV          "NVIDIA Corporation"
 #define CL_VENDOR_AMD         "Advanced Micro Devices, Inc."
+#define CL_VENDOR_APPLE       "Apple"
 #define CL_VENDOR_POCL        "The pocl project"
 
 #define VENDOR_ID_AMD         4098
 #define VENDOR_ID_NV          4318
+#define VENDOR_ID_APPLE       16925952
 #define VENDOR_ID_GENERIC     9999
 
 #define BLOCK_SIZE            64
@@ -131,9 +166,6 @@ typedef pthread_mutex_t       hc_thread_mutex_t;
  * valid project specific global stuff
  */
 
-extern const char *PROGNAME;
-extern const char *VERSION_TXT;
-
 extern const uint  VERSION_BIN;
 extern const uint  RESTORE_MIN;
 
@@ -144,36 +176,95 @@ extern const char *PROMPT;
 
 extern int SUPPRESS_OUTPUT;
 
-extern hc_thread_mutex_t mux_adl;
-extern hc_thread_mutex_t mux_counter;
-extern hc_thread_mutex_t mux_dispatcher;
 extern hc_thread_mutex_t mux_display;
 
 /**
  * password lengths supported
  */
 
-#define PW_LENGTH_MIN_0       0
-#define PW_LENGTH_MAX_0       55
-#define PW_LENGTH_MIN_400     0
-#define PW_LENGTH_MAX_400     40
-#define PW_LENGTH_MIN_500     0
-#define PW_LENGTH_MAX_500     15
-#define PW_LENGTH_MIN_1600    0
-#define PW_LENGTH_MAX_1600    15
-#define PW_LENGTH_MIN_1800    0
-#define PW_LENGTH_MAX_1800    15
-#define PW_LENGTH_MIN_2500    0
-#define PW_LENGTH_MAX_2500    64
-#define PW_LENGTH_MIN_6300    0
-#define PW_LENGTH_MAX_6300    15
-#define PW_LENGTH_MIN_7400    0
-#define PW_LENGTH_MAX_7400    15
+#define PW_LENGTH_MIN_0      0
+#define PW_LENGTH_MAX_0      55
+#define PW_LENGTH_MIN_400    0
+#define PW_LENGTH_MAX_400    40
+#define PW_LENGTH_MIN_500    0
+#define PW_LENGTH_MAX_500    15
+#define PW_LENGTH_MIN_1600   0
+#define PW_LENGTH_MAX_1600   15
+#define PW_LENGTH_MIN_1800   0
+#define PW_LENGTH_MAX_1800   15
+#define PW_LENGTH_MIN_2500   0
+#define PW_LENGTH_MAX_2500   64
+#define PW_LENGTH_MIN_6300   0
+#define PW_LENGTH_MAX_6300   15
+#define PW_LENGTH_MIN_7400   0
+#define PW_LENGTH_MAX_7400   15
 
 /**
- * device accel / loops macro
+ * device accel macro
  */
 
+#ifdef OSX
+#define KERNEL_ACCEL_1800    1
+#define KERNEL_ACCEL_2500    2
+#define KERNEL_ACCEL_5000    16
+#define KERNEL_ACCEL_6100    1
+#define KERNEL_ACCEL_6211    2
+#define KERNEL_ACCEL_6231    1
+#define KERNEL_ACCEL_6241    4
+#define KERNEL_ACCEL_6800    2
+#define KERNEL_ACCEL_7100    1
+#define KERNEL_ACCEL_7200    1
+#define KERNEL_ACCEL_7900    1
+#define KERNEL_ACCEL_8200    1
+#define KERNEL_ACCEL_8700    2
+#define KERNEL_ACCEL_9100    4
+#define KERNEL_ACCEL_9200    1
+#define KERNEL_ACCEL_9300    1
+#define KERNEL_ACCEL_9400    1
+#define KERNEL_ACCEL_9500    1
+#define KERNEL_ACCEL_9600    1
+#define KERNEL_ACCEL_10000   1
+#define KERNEL_ACCEL_10500   4
+#define KERNEL_ACCEL_11300   1
+#define KERNEL_ACCEL_11600   1
+#define KERNEL_ACCEL_11700   1
+#define KERNEL_ACCEL_11800   1
+#define KERNEL_ACCEL_12200   1
+#define KERNEL_ACCEL_12400   1
+#define KERNEL_ACCEL_12500   1
+#define KERNEL_ACCEL_13000   1
+#else
+#define KERNEL_ACCEL_1800    2
+#define KERNEL_ACCEL_2500    8
+#define KERNEL_ACCEL_5000    64
+#define KERNEL_ACCEL_6100    8
+#define KERNEL_ACCEL_6211    16
+#define KERNEL_ACCEL_6231    4
+#define KERNEL_ACCEL_6241    32
+#define KERNEL_ACCEL_6800    8
+#define KERNEL_ACCEL_7100    2
+#define KERNEL_ACCEL_7200    2
+#define KERNEL_ACCEL_7900    2
+#define KERNEL_ACCEL_8200    2
+#define KERNEL_ACCEL_8700    8
+#define KERNEL_ACCEL_9100    8
+#define KERNEL_ACCEL_9200    2
+#define KERNEL_ACCEL_9300    2
+#define KERNEL_ACCEL_9400    8
+#define KERNEL_ACCEL_9500    8
+#define KERNEL_ACCEL_9600    2
+#define KERNEL_ACCEL_10000   2
+#define KERNEL_ACCEL_10500   64
+#define KERNEL_ACCEL_11300   2
+#define KERNEL_ACCEL_11600   2
+#define KERNEL_ACCEL_11700   4
+#define KERNEL_ACCEL_11800   4
+#define KERNEL_ACCEL_12200   2
+#define KERNEL_ACCEL_12400   64
+#define KERNEL_ACCEL_12500   8
+#define KERNEL_ACCEL_13000   8
+#endif // OSX
+
 #define KERNEL_ACCEL_0       128
 #define KERNEL_ACCEL_10      128
 #define KERNEL_ACCEL_11      128
@@ -234,11 +325,9 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_ACCEL_1740    64
 #define KERNEL_ACCEL_1750    32
 #define KERNEL_ACCEL_1760    32
-#define KERNEL_ACCEL_1800    2
 #define KERNEL_ACCEL_2100    8
 #define KERNEL_ACCEL_2400    64
 #define KERNEL_ACCEL_2410    64
-#define KERNEL_ACCEL_2500    8
 #define KERNEL_ACCEL_2600    64
 #define KERNEL_ACCEL_2611    64
 #define KERNEL_ACCEL_2612    64
@@ -256,7 +345,6 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_ACCEL_4700    64
 #define KERNEL_ACCEL_4800    128
 #define KERNEL_ACCEL_4900    64
-#define KERNEL_ACCEL_5000    64
 #define KERNEL_ACCEL_5100    64
 #define KERNEL_ACCEL_5200    8
 #define KERNEL_ACCEL_5300    32
@@ -266,17 +354,13 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_ACCEL_5700    64
 #define KERNEL_ACCEL_5800    8
 #define KERNEL_ACCEL_6000    64
-#define KERNEL_ACCEL_6100    8
-#define KERNEL_ACCEL_6211    16
 #define KERNEL_ACCEL_6212    8
 #define KERNEL_ACCEL_6213    8
 #define KERNEL_ACCEL_6221    4
 #define KERNEL_ACCEL_6222    4
 #define KERNEL_ACCEL_6223    4
-#define KERNEL_ACCEL_6231    4
 #define KERNEL_ACCEL_6232    4
 #define KERNEL_ACCEL_6233    4
-#define KERNEL_ACCEL_6241    32
 #define KERNEL_ACCEL_6242    16
 #define KERNEL_ACCEL_6243    16
 #define KERNEL_ACCEL_6300    8
@@ -284,34 +368,22 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_ACCEL_6500    8
 #define KERNEL_ACCEL_6600    8
 #define KERNEL_ACCEL_6700    8
-#define KERNEL_ACCEL_6800    8
 #define KERNEL_ACCEL_6900    16
-#define KERNEL_ACCEL_7100    2
-#define KERNEL_ACCEL_7200    2
 #define KERNEL_ACCEL_7300    64
 #define KERNEL_ACCEL_7400    2
 #define KERNEL_ACCEL_7500    8
 #define KERNEL_ACCEL_7600    64
 #define KERNEL_ACCEL_7700    16
 #define KERNEL_ACCEL_7800    8
-#define KERNEL_ACCEL_7900    2
 #define KERNEL_ACCEL_8000    8
 #define KERNEL_ACCEL_8100    64
-#define KERNEL_ACCEL_8200    2
 #define KERNEL_ACCEL_8300    64
 #define KERNEL_ACCEL_8400    64
 #define KERNEL_ACCEL_8500    64
 #define KERNEL_ACCEL_8600    8
-#define KERNEL_ACCEL_8700    8
 #define KERNEL_ACCEL_8800    8
 #define KERNEL_ACCEL_8900    16
 #define KERNEL_ACCEL_9000    2
-#define KERNEL_ACCEL_9100    8
-#define KERNEL_ACCEL_9200    2
-#define KERNEL_ACCEL_9300    2
-#define KERNEL_ACCEL_9400    8
-#define KERNEL_ACCEL_9500    8
-#define KERNEL_ACCEL_9600    2
 #define KERNEL_ACCEL_9700    8
 #define KERNEL_ACCEL_9710    8
 #define KERNEL_ACCEL_9720    8
@@ -319,14 +391,12 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_ACCEL_9810    8
 #define KERNEL_ACCEL_9820    8
 #define KERNEL_ACCEL_9900    64
-#define KERNEL_ACCEL_10000   2
 #define KERNEL_ACCEL_10100   128
 #define KERNEL_ACCEL_10200   64
 #define KERNEL_ACCEL_10300   8
 #define KERNEL_ACCEL_10400   8
 #define KERNEL_ACCEL_10410   8
 #define KERNEL_ACCEL_10420   8
-#define KERNEL_ACCEL_10500   64
 #define KERNEL_ACCEL_10600   64
 #define KERNEL_ACCEL_10700   1
 #define KERNEL_ACCEL_10800   64
@@ -334,25 +404,145 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_ACCEL_11000   64
 #define KERNEL_ACCEL_11100   64
 #define KERNEL_ACCEL_11200   64
-#define KERNEL_ACCEL_11300   2
 #define KERNEL_ACCEL_11400   8
 #define KERNEL_ACCEL_11500   128
-#define KERNEL_ACCEL_11600   2
-#define KERNEL_ACCEL_11700   4
-#define KERNEL_ACCEL_11800   4
 #define KERNEL_ACCEL_11900   2
 #define KERNEL_ACCEL_12000   2
 #define KERNEL_ACCEL_12100   2
-#define KERNEL_ACCEL_12200   2
 #define KERNEL_ACCEL_12300   2
-#define KERNEL_ACCEL_12400   64
-#define KERNEL_ACCEL_12500   8
 #define KERNEL_ACCEL_12600   32
 #define KERNEL_ACCEL_12700   64
 #define KERNEL_ACCEL_12800   64
 #define KERNEL_ACCEL_12900   8
-#define KERNEL_ACCEL_13000   8
 
+/**
+ * device loops macro
+ */
+
+#ifdef OSX
+#define KERNEL_LOOPS_0       2
+#define KERNEL_LOOPS_10      2
+#define KERNEL_LOOPS_11      2
+#define KERNEL_LOOPS_12      2
+#define KERNEL_LOOPS_20      2
+#define KERNEL_LOOPS_21      2
+#define KERNEL_LOOPS_22      2
+#define KERNEL_LOOPS_23      2
+#define KERNEL_LOOPS_30      2
+#define KERNEL_LOOPS_40      2
+#define KERNEL_LOOPS_50      2
+#define KERNEL_LOOPS_60      2
+#define KERNEL_LOOPS_100     2
+#define KERNEL_LOOPS_101     2
+#define KERNEL_LOOPS_110     2
+#define KERNEL_LOOPS_111     2
+#define KERNEL_LOOPS_112     2
+#define KERNEL_LOOPS_120     2
+#define KERNEL_LOOPS_121     2
+#define KERNEL_LOOPS_122     2
+#define KERNEL_LOOPS_124     2
+#define KERNEL_LOOPS_130     2
+#define KERNEL_LOOPS_131     2
+#define KERNEL_LOOPS_132     2
+#define KERNEL_LOOPS_133     2
+#define KERNEL_LOOPS_140     2
+#define KERNEL_LOOPS_141     2
+#define KERNEL_LOOPS_150     2
+#define KERNEL_LOOPS_160     2
+#define KERNEL_LOOPS_190     2
+#define KERNEL_LOOPS_200     2
+#define KERNEL_LOOPS_300     2
+#define KERNEL_LOOPS_900     2
+#define KERNEL_LOOPS_1000    2
+#define KERNEL_LOOPS_1100    2
+#define KERNEL_LOOPS_1400    2
+#define KERNEL_LOOPS_1410    2
+#define KERNEL_LOOPS_1420    2
+#define KERNEL_LOOPS_1421    2
+#define KERNEL_LOOPS_1430    2
+#define KERNEL_LOOPS_1440    2
+#define KERNEL_LOOPS_1441    2
+#define KERNEL_LOOPS_1450    2
+#define KERNEL_LOOPS_1460    2
+#define KERNEL_LOOPS_1700    2
+#define KERNEL_LOOPS_1710    2
+#define KERNEL_LOOPS_1711    2
+#define KERNEL_LOOPS_1720    2
+#define KERNEL_LOOPS_1722    2
+#define KERNEL_LOOPS_1730    2
+#define KERNEL_LOOPS_1731    2
+#define KERNEL_LOOPS_1740    2
+#define KERNEL_LOOPS_1750    2
+#define KERNEL_LOOPS_1760    2
+#define KERNEL_LOOPS_2400    2
+#define KERNEL_LOOPS_2410    2
+#define KERNEL_LOOPS_2600    2
+#define KERNEL_LOOPS_2611    2
+#define KERNEL_LOOPS_2612    2
+#define KERNEL_LOOPS_2711    2
+#define KERNEL_LOOPS_2811    2
+#define KERNEL_LOOPS_3100    2
+#define KERNEL_LOOPS_3200    2
+#define KERNEL_LOOPS_3710    2
+#define KERNEL_LOOPS_3711    2
+#define KERNEL_LOOPS_3800    2
+#define KERNEL_LOOPS_4300    2
+#define KERNEL_LOOPS_4400    2
+#define KERNEL_LOOPS_4500    2
+#define KERNEL_LOOPS_4700    2
+#define KERNEL_LOOPS_4800    2
+#define KERNEL_LOOPS_4900    2
+#define KERNEL_LOOPS_5000    2
+#define KERNEL_LOOPS_5100    2
+#define KERNEL_LOOPS_5300    2
+#define KERNEL_LOOPS_5400    2
+#define KERNEL_LOOPS_5500    2
+#define KERNEL_LOOPS_5600    2
+#define KERNEL_LOOPS_5700    2
+#define KERNEL_LOOPS_6000    2
+#define KERNEL_LOOPS_6100    2
+#define KERNEL_LOOPS_6231    2
+#define KERNEL_LOOPS_6232    2
+#define KERNEL_LOOPS_6233    2
+#define KERNEL_LOOPS_6900    2
+#define KERNEL_LOOPS_7300    2
+#define KERNEL_LOOPS_7500    2
+#define KERNEL_LOOPS_7600    2
+#define KERNEL_LOOPS_7700    2
+#define KERNEL_LOOPS_7800    2
+#define KERNEL_LOOPS_8000    2
+#define KERNEL_LOOPS_8100    2
+#define KERNEL_LOOPS_8200    1
+#define KERNEL_LOOPS_8300    2
+#define KERNEL_LOOPS_8400    2
+#define KERNEL_LOOPS_8500    2
+#define KERNEL_LOOPS_8600    2
+#define KERNEL_LOOPS_8700    2
+#define KERNEL_LOOPS_9700    2
+#define KERNEL_LOOPS_9710    2
+#define KERNEL_LOOPS_9720    8
+#define KERNEL_LOOPS_9800    2
+#define KERNEL_LOOPS_9810    2
+#define KERNEL_LOOPS_9820    2
+#define KERNEL_LOOPS_9900    2
+#define KERNEL_LOOPS_10100   2
+#define KERNEL_LOOPS_10200   2
+#define KERNEL_LOOPS_10400   2
+#define KERNEL_LOOPS_10410   2
+#define KERNEL_LOOPS_10420   2
+#define KERNEL_LOOPS_10600   2
+#define KERNEL_LOOPS_10700   2
+#define KERNEL_LOOPS_10800   2
+#define KERNEL_LOOPS_11000   2
+#define KERNEL_LOOPS_11100   2
+#define KERNEL_LOOPS_11200   2
+#define KERNEL_LOOPS_11300   1
+#define KERNEL_LOOPS_11400   2
+#define KERNEL_LOOPS_11500   2
+#define KERNEL_LOOPS_11700   2
+#define KERNEL_LOOPS_11800   2
+#define KERNEL_LOOPS_12600   2
+#else
 #define KERNEL_LOOPS_0       256
 #define KERNEL_LOOPS_10      256
 #define KERNEL_LOOPS_11      256
@@ -385,11 +575,7 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_LOOPS_190     128
 #define KERNEL_LOOPS_200     128
 #define KERNEL_LOOPS_300     64
-#define KERNEL_LOOPS_400     256
-#define KERNEL_LOOPS_500     256
-#define KERNEL_LOOPS_501     256
 #define KERNEL_LOOPS_900     256
-#define KERNEL_LOOPS_910     256
 #define KERNEL_LOOPS_1000    256
 #define KERNEL_LOOPS_1100    128
 #define KERNEL_LOOPS_1400    64
@@ -401,8 +587,6 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_LOOPS_1441    64
 #define KERNEL_LOOPS_1450    32
 #define KERNEL_LOOPS_1460    32
-#define KERNEL_LOOPS_1500    256
-#define KERNEL_LOOPS_1600    256
 #define KERNEL_LOOPS_1700    32
 #define KERNEL_LOOPS_1710    32
 #define KERNEL_LOOPS_1711    32
@@ -413,17 +597,13 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_LOOPS_1740    32
 #define KERNEL_LOOPS_1750    16
 #define KERNEL_LOOPS_1760    16
-#define KERNEL_LOOPS_1800    16
-#define KERNEL_LOOPS_2100    256
 #define KERNEL_LOOPS_2400    256
 #define KERNEL_LOOPS_2410    256
-#define KERNEL_LOOPS_2500    256
 #define KERNEL_LOOPS_2600    128
 #define KERNEL_LOOPS_2611    128
 #define KERNEL_LOOPS_2612    128
 #define KERNEL_LOOPS_2711    64
 #define KERNEL_LOOPS_2811    64
-#define KERNEL_LOOPS_3000    256
 #define KERNEL_LOOPS_3100    16
 #define KERNEL_LOOPS_3200    16
 #define KERNEL_LOOPS_3710    128
@@ -437,43 +617,22 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_LOOPS_4900    128
 #define KERNEL_LOOPS_5000    64
 #define KERNEL_LOOPS_5100    256
-#define KERNEL_LOOPS_5200    256
 #define KERNEL_LOOPS_5300    32
 #define KERNEL_LOOPS_5400    32
 #define KERNEL_LOOPS_5500    128
 #define KERNEL_LOOPS_5600    64
 #define KERNEL_LOOPS_5700    64
-#define KERNEL_LOOPS_5800    256
 #define KERNEL_LOOPS_6000    64
 #define KERNEL_LOOPS_6100    64
-#define KERNEL_LOOPS_6211    200
-#define KERNEL_LOOPS_6212    200
-#define KERNEL_LOOPS_6213    200
-#define KERNEL_LOOPS_6221    200
-#define KERNEL_LOOPS_6222    200
-#define KERNEL_LOOPS_6223    200
 #define KERNEL_LOOPS_6231    200
 #define KERNEL_LOOPS_6232    200
 #define KERNEL_LOOPS_6233    200
-#define KERNEL_LOOPS_6241    200
-#define KERNEL_LOOPS_6242    200
-#define KERNEL_LOOPS_6243    200
-#define KERNEL_LOOPS_6300    256
-#define KERNEL_LOOPS_6400    256
-#define KERNEL_LOOPS_6500    256
-#define KERNEL_LOOPS_6600    200
-#define KERNEL_LOOPS_6700    256
-#define KERNEL_LOOPS_6800    200
 #define KERNEL_LOOPS_6900    64
-#define KERNEL_LOOPS_7100    256
-#define KERNEL_LOOPS_7200    200
 #define KERNEL_LOOPS_7300    64
-#define KERNEL_LOOPS_7400    200
 #define KERNEL_LOOPS_7500    16
 #define KERNEL_LOOPS_7600    128
 #define KERNEL_LOOPS_7700    128
 #define KERNEL_LOOPS_7800    64
-#define KERNEL_LOOPS_7900    256
 #define KERNEL_LOOPS_8000    64
 #define KERNEL_LOOPS_8100    128
 #define KERNEL_LOOPS_8200    200
@@ -482,43 +641,77 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_LOOPS_8500    16
 #define KERNEL_LOOPS_8600    16
 #define KERNEL_LOOPS_8700    16
-#define KERNEL_LOOPS_8800    256
-#define KERNEL_LOOPS_8900    1
-#define KERNEL_LOOPS_9000    16
-#define KERNEL_LOOPS_9100    256
-#define KERNEL_LOOPS_9200    200
-#define KERNEL_LOOPS_9300    1
-#define KERNEL_LOOPS_9400    200
-#define KERNEL_LOOPS_9500    200
-#define KERNEL_LOOPS_9600    200
 #define KERNEL_LOOPS_9700    200
 #define KERNEL_LOOPS_9710    200
 #define KERNEL_LOOPS_9720    200
 #define KERNEL_LOOPS_9800    200
-#define KERNEL_LOOPS_9810    200
 #define KERNEL_LOOPS_9820    200
+#define KERNEL_LOOPS_9810    200
 #define KERNEL_LOOPS_9900    256
-#define KERNEL_LOOPS_10000   200
 #define KERNEL_LOOPS_10100   512
 #define KERNEL_LOOPS_10200   64
-#define KERNEL_LOOPS_10300   128
 #define KERNEL_LOOPS_10400   256
 #define KERNEL_LOOPS_10410   256
 #define KERNEL_LOOPS_10420   256
-#define KERNEL_LOOPS_10500   64
 #define KERNEL_LOOPS_10600   64
 #define KERNEL_LOOPS_10700   64
 #define KERNEL_LOOPS_10800   32
-#define KERNEL_LOOPS_10900   200
 #define KERNEL_LOOPS_11000   256
 #define KERNEL_LOOPS_11100   128
 #define KERNEL_LOOPS_11200   128
 #define KERNEL_LOOPS_11300   256
 #define KERNEL_LOOPS_11400   128
 #define KERNEL_LOOPS_11500   256
-#define KERNEL_LOOPS_11600   512
 #define KERNEL_LOOPS_11700   64
 #define KERNEL_LOOPS_11800   64
+#define KERNEL_LOOPS_12600   32
+#endif // OSX
+
+#define KERNEL_LOOPS_400     256
+#define KERNEL_LOOPS_500     256
+#define KERNEL_LOOPS_501     256
+#define KERNEL_LOOPS_910     256
+#define KERNEL_LOOPS_1500    256
+#define KERNEL_LOOPS_1600    256
+#define KERNEL_LOOPS_1800    16
+#define KERNEL_LOOPS_2100    256
+#define KERNEL_LOOPS_2500    256
+#define KERNEL_LOOPS_3000    256
+#define KERNEL_LOOPS_5200    256
+#define KERNEL_LOOPS_5800    256
+#define KERNEL_LOOPS_6211    200
+#define KERNEL_LOOPS_6212    200
+#define KERNEL_LOOPS_6213    200
+#define KERNEL_LOOPS_6221    200
+#define KERNEL_LOOPS_6222    200
+#define KERNEL_LOOPS_6223    200
+#define KERNEL_LOOPS_6241    200
+#define KERNEL_LOOPS_6242    200
+#define KERNEL_LOOPS_6243    200
+#define KERNEL_LOOPS_6300    256
+#define KERNEL_LOOPS_6400    256
+#define KERNEL_LOOPS_6500    256
+#define KERNEL_LOOPS_6600    200
+#define KERNEL_LOOPS_6700    256
+#define KERNEL_LOOPS_6800    200
+#define KERNEL_LOOPS_7100    256
+#define KERNEL_LOOPS_7200    200
+#define KERNEL_LOOPS_7400    200
+#define KERNEL_LOOPS_7900    256
+#define KERNEL_LOOPS_8800    256
+#define KERNEL_LOOPS_8900    1
+#define KERNEL_LOOPS_9000    16
+#define KERNEL_LOOPS_9100    256
+#define KERNEL_LOOPS_9200    200
+#define KERNEL_LOOPS_9300    1
+#define KERNEL_LOOPS_9400    200
+#define KERNEL_LOOPS_9500    200
+#define KERNEL_LOOPS_9600    200
+#define KERNEL_LOOPS_10000   200
+#define KERNEL_LOOPS_10300   128
+#define KERNEL_LOOPS_10500   64
+#define KERNEL_LOOPS_10900   200
+#define KERNEL_LOOPS_11600   512
 #define KERNEL_LOOPS_11900   200
 #define KERNEL_LOOPS_12000   200
 #define KERNEL_LOOPS_12100   200
@@ -526,7 +719,6 @@ extern hc_thread_mutex_t mux_display;
 #define KERNEL_LOOPS_12300   256
 #define KERNEL_LOOPS_12400   256
 #define KERNEL_LOOPS_12500   256
-#define KERNEL_LOOPS_12600   32
 #define KERNEL_LOOPS_12700   10
 #define KERNEL_LOOPS_12800   100
 #define KERNEL_LOOPS_12900   64
@@ -1417,7 +1609,11 @@ extern hc_thread_mutex_t mux_display;
 #define OPTI_TYPE_SINGLE_HASH       (1 << 11)
 #define OPTI_TYPE_SINGLE_SALT       (1 << 12)
 #define OPTI_TYPE_BRUTE_FORCE       (1 << 13)
-#define OPTI_TYPE_RAW_HASH          (1 << 15)
+#define OPTI_TYPE_RAW_HASH          (1 << 14)
+#define OPTI_TYPE_USES_BITS_8       (1 << 15)
+#define OPTI_TYPE_USES_BITS_16      (1 << 16)
+#define OPTI_TYPE_USES_BITS_32      (1 << 17)
+#define OPTI_TYPE_USES_BITS_64      (1 << 18)
 
 #define OPTI_STR_ZERO_BYTE          "Zero-Byte"
 #define OPTI_STR_PRECOMPUTE_INIT    "Precompute-Init"
@@ -1471,14 +1667,14 @@ extern hc_thread_mutex_t mux_display;
  */
 
 #define DGST_SIZE_0                 0
-#define DGST_SIZE_4_2               (2  * sizeof (uint))        // 8
-#define DGST_SIZE_4_4               (4  * sizeof (uint))        // 16
-#define DGST_SIZE_4_5               (5  * sizeof (uint))        // 20
-#define DGST_SIZE_4_6               (6  * sizeof (uint))        // 24
-#define DGST_SIZE_4_8               (8  * sizeof (uint))        // 32
-#define DGST_SIZE_4_16              (16 * sizeof (uint))        // 64 !!!
-#define DGST_SIZE_4_32              (32 * sizeof (uint))        // 128 !!!
-#define DGST_SIZE_4_64              (64 * sizeof (uint))        // 256
+#define DGST_SIZE_4_2               (2  * sizeof (uint))   // 8
+#define DGST_SIZE_4_4               (4  * sizeof (uint))   // 16
+#define DGST_SIZE_4_5               (5  * sizeof (uint))   // 20
+#define DGST_SIZE_4_6               (6  * sizeof (uint))   // 24
+#define DGST_SIZE_4_8               (8  * sizeof (uint))   // 32
+#define DGST_SIZE_4_16              (16 * sizeof (uint))   // 64 !!!
+#define DGST_SIZE_4_32              (32 * sizeof (uint))   // 128 !!!
+#define DGST_SIZE_4_64              (64 * sizeof (uint))   // 256
 #define DGST_SIZE_8_8               (8  * sizeof (u64))    // 64 !!!
 #define DGST_SIZE_8_16              (16 * sizeof (u64))    // 128 !!!
 #define DGST_SIZE_8_25              (25 * sizeof (u64))    // 200
@@ -1666,6 +1862,14 @@ char *logfile_generate_topid ();
 char *logfile_generate_subid ();
 void logfile_append (const char *fmt, ...);
 
+#if F_SETLKW
+void lock_file (FILE *fp);
+void unlock_file (FILE *fp);
+#else
+#define lock_file(dummy) {}
+#define unlock_file(dummy) {}
+#endif
+
 #ifdef _WIN
 void fsync (int fd);
 #endif
@@ -1676,28 +1880,21 @@ void fsync (int fd);
 int hm_get_adapter_index_nv (HM_ADAPTER_NV nvGPUHandle[DEVICES_MAX]);
 #endif
 
-// int hm_get_device_num (HM_LIB hm_dll_amd, HM_ADAPTER_AMD hm_adapter_index, int *hm_device_num);
-
-// void hm_get_opencl_busid_devid (hm_attrs_t *hm_device, uint opencl_num_devices, cl_device_id *devices);
-
 #ifdef HAVE_ADL
-int get_adapters_num_amd (HM_LIB hm_dll_amd, int *iNumberAdapters);
+int get_adapters_num_amd (void *adl, int *iNumberAdapters);
 
 int hm_get_adapter_index_amd (hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
 
-LPAdapterInfo hm_get_adapter_info_amd (HM_LIB hm_dll_amd, int iNumberAdapters);
+LPAdapterInfo hm_get_adapter_info_amd (void *adl, int iNumberAdapters);
 
 u32 *hm_get_list_valid_adl_adapters (int iNumberAdapters, int *num_adl_adapters, LPAdapterInfo lpAdapterInfo);
 
-int hm_get_overdrive_version  (HM_LIB hm_dll_amd, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
-int hm_check_fanspeed_control (HM_LIB hm_dll_amd, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
-#endif // HAVE_ADL
-
-#if defined(HAVE_ADL) || defined(HAVE_NVML)
-void hm_close (HM_LIB hm_dll);
+int hm_get_overdrive_version  (void *adl, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
+int hm_check_fanspeed_control (void *adl, hm_attrs_t *hm_device, u32 *valid_adl_device_list, int num_adl_adapters, LPAdapterInfo lpAdapterInfo);
 
-HM_LIB hm_init (const cl_uint vendor_id);
-#endif
+// int hm_get_device_num (void *adl, HM_ADAPTER_AMD hm_adapter_index, int *hm_device_num);
+// void hm_get_opencl_busid_devid (hm_attrs_t *hm_device, uint opencl_num_devices, cl_device_id *devices);
+#endif // HAVE_ADL
 
 int hm_get_temperature_with_device_id (const uint device_id);
 int hm_get_fanspeed_with_device_id    (const uint device_id);