/*! Remove device from list of devices */
int k_device_remove ( kdevice_t *kdev )
{
	ASSERT ( kdev );

	if ( kdev->dev.irq_num != -1 )
		arch_irq_disable ( kdev->dev.irq_num );

	if ( kdev->dev.irq_handler )
		arch_unregister_interrupt_handler ( kdev->dev.irq_num,
						    kdev->dev.irq_handler,
						    &kdev->dev );
	if ( kdev->dev.destroy )
		kdev->dev.destroy ( kdev->dev.flags, kdev->dev.params,
				    &kdev->dev );

	list_remove ( &devices, FIRST, &kdev->list );

	kfree ( kdev );

	return 0;
}
Esempio n. 2
0
File: irq.c Progetto: bietje/etaos
/**
 * @brief Save IRQ flags and disable them.
 * @param flags Pointer to store the IRQ flags in.
 */
void irq_save_and_disable(unsigned long *flags)
{
	*flags = arch_irq_get_flags();
	arch_irq_disable();
}