init_waitqueue_head(&delay_wait);
add_wait_queue(&delay_wait, &wait);
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(delay);
+ msleep_interruptible(jiffies_to_msecs(delay));
remove_wait_queue(&delay_wait, &wait);
- set_current_state(TASK_RUNNING);
up(&delay_sem);
}
u8 hp_slot;
u8 temp_byte;
u8 adapter_speed;
- u32 index;
u32 rc = 0;
- u32 src = 8;
hp_slot = func->device - ctrl->slot_device_offset;
**********************************/
rc = CARD_FUNCTIONING;
} else {
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
/* turn on board without attaching to the bus */
enable_slot_power (ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
if (rc)
return rc;
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
slot_enable (ctrl, hp_slot);
green_LED_blink (ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
/* Wait for ~1 second because of hot plug spec */
long_delay(1*HZ);
rc = cpqhp_configure_board(ctrl, func);
- if (rc || src) {
- /* If configuration fails, turn it off
- * Get slot won't work for devices behind
- * bridges, but in this case it will always be
- * called for the "base" bus/dev/func of an
- * adapter. */
+ /* If configuration fails, turn it off
+ * Get slot won't work for devices behind
+ * bridges, but in this case it will always be
+ * called for the "base" bus/dev/func of an
+ * adapter. */
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
- amber_LED_on (ctrl, hp_slot);
- green_LED_off (ctrl, hp_slot);
- slot_disable (ctrl, hp_slot);
-
- set_SOGO(ctrl);
-
- /* Wait for SOBS to be unset */
- wait_for_ctrl_irq (ctrl);
-
- up(&ctrl->crit_sect);
-
- if (rc)
- return rc;
- else
- return 1;
- }
-
- func->status = 0;
- func->switch_save = 0x10;
-
- index = 1;
- while (((func = cpqhp_slot_find(func->bus, func->device, index)) != NULL) && !rc) {
- rc |= cpqhp_configure_board(ctrl, func);
- index++;
- }
-
- if (rc) {
- /* If configuration fails, turn it off
- * Get slot won't work for devices behind
- * bridges, but in this case it will always be
- * called for the "base" bus/dev/func of an
- * adapter. */
-
- down(&ctrl->crit_sect);
-
- amber_LED_on (ctrl, hp_slot);
- green_LED_off (ctrl, hp_slot);
- slot_disable (ctrl, hp_slot);
-
- set_SOGO(ctrl);
-
- /* Wait for SOBS to be unset */
- wait_for_ctrl_irq (ctrl);
-
- up(&ctrl->crit_sect);
-
- return rc;
- }
- /* Done configuring so turn LED on full time */
-
- down(&ctrl->crit_sect);
-
- green_LED_on (ctrl, hp_slot);
+ amber_LED_on (ctrl, hp_slot);
+ green_LED_off (ctrl, hp_slot);
+ slot_disable (ctrl, hp_slot);
set_SOGO(ctrl);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
- rc = 0;
+ mutex_unlock(&ctrl->crit_sect);
+
+ if (rc)
+ return rc;
+ else
+ return 1;
+
} else {
/* Something is wrong
* in this case it will always be called for the "base"
* bus/dev/func of an adapter. */
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
}
}
dbg("%s: func->device, slot_offset, hp_slot = %d, %d ,%d\n",
__FUNCTION__, func->device, ctrl->slot_device_offset, hp_slot);
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
/* turn on board without attaching to the bus */
enable_slot_power(ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq(ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
if (rc)
return rc;
/* turn on board and blink green LED */
dbg("%s: before down\n", __FUNCTION__);
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
dbg("%s: after down\n", __FUNCTION__);
dbg("%s: before slot_enable\n", __FUNCTION__);
dbg("%s: after wait_for_ctrl_irq\n", __FUNCTION__);
dbg("%s: before up\n", __FUNCTION__);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
dbg("%s: after up\n", __FUNCTION__);
/* Wait for ~1 second because of hot plug spec */
cpqhp_resource_sort_and_combine(&(ctrl->bus_head));
if (rc) {
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
return rc;
} else {
cpqhp_save_slot_config(ctrl, func);
}
} while (new_slot);
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
green_LED_on (ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
} else {
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
return rc;
}
func->status = 0x01;
func->configured = 0;
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
green_LED_off (ctrl, hp_slot);
slot_disable (ctrl, hp_slot);
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
if (!replace_flag && ctrl->add_support) {
while (func) {
init_MUTEX_LOCKED(&event_exit);
event_finished=0;
- pid = kernel_thread(event_thread, 0, 0);
+ pid = kernel_thread(event_thread, NULL, 0);
if (pid < 0) {
err ("Can't start up our event thread\n");
return -1;
dbg("button cancel\n");
del_timer(&p_slot->task_event);
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
if (p_slot->state == BLINKINGOFF_STATE) {
/* slot is on */
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
}
/*** button Released (No action on press...) */
else if (ctrl->event_queue[loop].event_type == INT_BUTTON_RELEASE) {
p_slot->state = BLINKINGON_STATE;
info(msg_button_on, p_slot->number);
}
- down(&ctrl->crit_sect);
+ mutex_lock(&ctrl->crit_sect);
dbg("blink green LED and turn off amber\n");
/* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl);
- up(&ctrl->crit_sect);
+ mutex_unlock(&ctrl->crit_sect);
init_timer(&p_slot->task_event);
p_slot->hp_slot = hp_slot;
p_slot->ctrl = ctrl;
hold_mem_node = NULL;
}
- /* If we have prefetchable memory resources copy them and
- * fill in the bridge's memory range registers. Otherwise,
- * fill in the range registers with values that disable them. */
- if (p_mem_node) {
- memcpy(hold_p_mem_node, p_mem_node, sizeof(struct pci_resource));
- p_mem_node->next = NULL;
+ memcpy(hold_p_mem_node, p_mem_node, sizeof(struct pci_resource));
+ p_mem_node->next = NULL;
- /* set Pre Mem base and Limit registers */
- temp_word = p_mem_node->base >> 16;
- rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word);
+ /* set Pre Mem base and Limit registers */
+ temp_word = p_mem_node->base >> 16;
+ rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word);
- temp_word = (p_mem_node->base + p_mem_node->length - 1) >> 16;
- rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word);
- } else {
- temp_word = 0xFFFF;
- rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_BASE, temp_word);
-
- temp_word = 0x0000;
- rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word);
-
- kfree(hold_p_mem_node);
- hold_p_mem_node = NULL;
- }
+ temp_word = (p_mem_node->base + p_mem_node->length - 1) >> 16;
+ rc = pci_bus_write_config_word (pci_bus, devfn, PCI_PREF_MEMORY_LIMIT, temp_word);
/* Adjust this to compensate for extra adjustment in first loop */
irqs.barber_pole--;