--- a/master/module.c Wed Mar 23 08:06:58 2011 +0100
+++ b/master/module.c Wed Apr 13 22:06:28 2011 +0200
@@ -61,7 +61,7 @@
static unsigned int debug_level; /**< Debug level parameter. */
static ec_master_t *masters; /**< Array of masters. */
-static struct semaphore master_sem; /**< Master semaphore. */
+static struct ec_mutex_t master_mutex; /**< Master mutex. */
dev_t device_number; /**< Device number for master cdevs. */
struct class *class; /**< Device class. */
@@ -101,7 +101,7 @@
EC_INFO("Master driver %s\n", EC_MASTER_VERSION);
- sema_init(&master_sem, 1);
+ ec_mutex_init(&master_mutex);
if (master_count) {
if (alloc_chrdev_region(&device_number,
@@ -468,9 +468,9 @@
for (i = 0; i < master_count; i++) {
master = &masters[i];
- down(&master->device_sem);
+ ec_mutex_lock(&master->device_mutex);
if (master->main_device.dev) { // master already has a device
- up(&master->device_sem);
+ ec_mutex_unlock(&master->device_mutex);
continue;
}
@@ -481,14 +481,14 @@
str, master->index);
ec_device_attach(&master->main_device, net_dev, poll, module);
- up(&master->device_sem);
+ ec_mutex_unlock(&master->device_mutex);
snprintf(net_dev->name, IFNAMSIZ, "ec%u", master->index);
return &master->main_device; // offer accepted
}
else {
- up(&master->device_sem);
+ ec_mutex_unlock(&master->device_mutex);
if (master->debug_level) {
ec_mac_print(net_dev->dev_addr, str);
@@ -524,40 +524,40 @@
}
master = &masters[master_index];
- if (down_interruptible(&master_sem)) {
+ if (ec_mutex_lock_interruptible(&master_mutex)) {
errptr = ERR_PTR(-EINTR);
goto out_return;
}
if (master->reserved) {
- up(&master_sem);
+ ec_mutex_unlock(&master_mutex);
EC_MASTER_ERR(master, "Master already in use!\n");
errptr = ERR_PTR(-EBUSY);
goto out_return;
}
master->reserved = 1;
- up(&master_sem);
-
- if (down_interruptible(&master->device_sem)) {
+ ec_mutex_unlock(&master_mutex);
+
+ if (ec_mutex_lock_interruptible(&master->device_mutex)) {
errptr = ERR_PTR(-EINTR);
goto out_release;
}
if (master->phase != EC_IDLE) {
- up(&master->device_sem);
+ ec_mutex_unlock(&master->device_mutex);
EC_MASTER_ERR(master, "Master still waiting for devices!\n");
errptr = ERR_PTR(-ENODEV);
goto out_release;
}
if (!try_module_get(master->main_device.module)) {
- up(&master->device_sem);
+ ec_mutex_unlock(&master->device_mutex);
EC_ERR("Device module is unloading!\n");
errptr = ERR_PTR(-ENODEV);
goto out_release;
}
- up(&master->device_sem);
+ ec_mutex_unlock(&master->device_mutex);
if (ec_master_enter_operation_phase(master)) {
EC_MASTER_ERR(master, "Failed to enter OPERATION phase!\n");