Browse Source

Create basic read and write threads that will be used by hashfast driver.

Con Kolivas 12 years ago
parent
commit
598b58c8ce
2 changed files with 43 additions and 3 deletions
  1. 37 3
      driver-hashfast.c
  2. 6 0
      driver-hashfast.h

+ 37 - 3
driver-hashfast.c

@@ -324,7 +324,7 @@ static bool hashfast_detect_common(struct cgpu_info *hashfast)
 	return true;
 }
 
-static void hashfast_usb_initialise(struct cgpu_info *hashfast)
+static void hashfast_initialise(struct cgpu_info *hashfast)
 {
 	if (hashfast->usbinfo.nodev)
 		return;
@@ -346,7 +346,7 @@ static bool hashfast_detect_one_usb(libusb_device *dev, struct usb_find_devices
 
 	hashfast->usbdev->usb_type = USB_TYPE_STD;
 
-	hashfast_usb_initialise(hashfast);
+	hashfast_initialise(hashfast);
 
 	add_cgpu(hashfast);
 
@@ -361,8 +361,42 @@ static void hashfast_detect(bool hotplug)
 	usb_detect(&hashfast_drv, hashfast_detect_one_usb);
 }
 
-static bool hashfast_prepare(struct thr_info __maybe_unused *thr)
+static void *hf_read(void *arg)
 {
+	struct cgpu_info *hashfast = (struct cgpu_info *)arg;
+	struct hashfast_info *info = hashfast->device_data;
+
+	while (likely(!hashfast->shutdown)) {
+
+	}
+	return NULL;
+}
+
+static void *hf_write(void *arg)
+{
+	struct cgpu_info *hashfast = (struct cgpu_info *)arg;
+	struct hashfast_info *info = hashfast->device_data;
+
+	while (likely(!hashfast->shutdown)) {
+
+	}
+	return NULL;
+}
+
+static bool hashfast_prepare(struct thr_info*thr)
+{
+	struct cgpu_info *hashfast = thr->cgpu;
+	struct hashfast_info *info = hashfast->device_data;
+	struct timeval now;
+
+	mutex_init(&info->lock);
+	mutex_init(&info->write_mutex);
+	if (pthread_cond_init(&info->write_cond, NULL))
+		quit(1, "Failed to pthread_cond_init in hashfast_prepare");
+	if (pthread_create(&info->read_thr, NULL, hf_read, (void *)hashfast))
+		quit(1, "Failed to pthread_create read thr in hashfast_prepare");
+	if (pthread_create(&info->write_thr, NULL, hf_write, (void *)hashfast))
+		quit(1, "Failed to pthread_create write thr in hashfast_prepare");
 	return true;
 }
 

+ 6 - 0
driver-hashfast.h

@@ -44,10 +44,16 @@ struct hashfast_info {
 	int core_bitmap_size;                       // in bytes
 	uint32_t *core_bitmap;                      // Core OK bitmap test results, run with PLL Bypassed
 
+	pthread_mutex_t lock;
 	struct work **works;
 	uint16_t device_sequence_head;              // The most recent sequence number the device dispatched
 	uint16_t device_sequence_tail;              // The most recently completed job in the device
 	uint16_t hash_sequence_tail;                // Follows device_sequence_tail around to free work
+
+	pthread_t read_thr;
+	pthread_t write_thr;
+	pthread_mutex_t write_mutex;
+	pthread_cond_t write_cond;
 };
 
 #endif /* USE_HASHFAST */