/*! 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; }
/** * @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(); }