/*
 * irq_chain_remove — снять ОДИН обработчик кадрового прерывания из
 * цепочки (по указателю).  Освобождение последнего слота отпускает
 * IM2-таблицу (_irq_table_unref → возврат IM 1, если больше никто не
 * держит).  Идемпотентно: неизвестный/NULL handler игнорируется.
 */

#include "_irq.h"

void irq_chain_remove(isr_t handler)
{
    if (!handler) return;

    for (uint8_t i = 0; i < IRQ_CHAIN_MAX; i++) {
        if (_irq_chain[i] == handler) {
            IRQ_DISABLE();
            _irq_chain[i] = 0;
            _irq_chain_n--;
            IRQ_ENABLE();
            if (_irq_chain_n == 0)
                _irq_table_unref();
            return;
        }
    }
}
