Exemplo n.º 1
0
int rthal_irq_end(unsigned irq)
{
    if (irq >= IPIPE_NR_XIRQS)
        return -EINVAL;

    if (rthal_irq_descp(irq)->handler == NULL ||
            rthal_irq_descp(irq)->handler->enable == NULL)
        return -ENODEV;

    rthal_irq_descp(irq)->handler->enable(irq);

    return 0;
}
Exemplo n.º 2
0
int rthal_irq_disable(unsigned irq)
{

    if (irq >= IPIPE_NR_XIRQS)
        return -EINVAL;

    if (rthal_irq_descp(irq)->handler == NULL ||
            rthal_irq_descp(irq)->handler->disable == NULL)
        return -ENODEV;

    rthal_irq_descp(irq)->handler->disable(irq);
    rthal_irq_descp(irq)->status |= IRQ_DISABLED;

    return 0;
}
Exemplo n.º 3
0
int rthal_irq_end(unsigned irq)
{
	if (irq >= NR_IRQS || rthal_irq_descp(irq) == NULL)
		return -EINVAL;

	return rthal_irq_chip_end(irq);
}
Exemplo n.º 4
0
int rthal_irq_enable(unsigned irq)
{
	if (irq >= IPIPE_NR_XIRQS || rthal_irq_descp(irq) == NULL)
		return -EINVAL;

	return rthal_irq_chip_enable(irq);
}
Exemplo n.º 5
0
int rthal_irq_disable(unsigned int irq)
{
	if (irq >= IPIPE_NR_XIRQS || rthal_irq_descp(irq) == NULL)
		return -EINVAL;

	rthal_mark_irq_disabled(irq);

	return rthal_irq_chip_disable(irq);
}
Exemplo n.º 6
0
int rthal_irq_host_release(unsigned irq, void *dev_id)
{
    unsigned long flags;

    if (irq >= IPIPE_NR_XIRQS || rthal_linux_irq[irq].count == 0)
        return -EINVAL;

    free_irq(irq, dev_id);

    spin_lock_irqsave(&rthal_irq_descp(irq)->lock, flags);

    if (--rthal_linux_irq[irq].count == 0 && rthal_irq_descp(irq)->action)
        rthal_irq_descp(irq)->action->flags = rthal_linux_irq[irq].flags;

    spin_unlock_irqrestore(&rthal_irq_descp(irq)->lock, flags);

    return 0;
}
Exemplo n.º 7
0
int rthal_irq_host_release(unsigned irq, void *dev_id)
{
	unsigned long flags;

	if (irq >= IPIPE_NR_XIRQS ||
	    rthal_linux_irq[irq].count == 0 ||
	    rthal_irq_descp(irq) == NULL)
		return -EINVAL;

	free_irq(irq, dev_id);

	rthal_irqdesc_lock(irq, flags);

	if (--rthal_linux_irq[irq].count == 0 && rthal_irq_descp(irq)->action)
		rthal_irq_descp(irq)->action->flags = rthal_linux_irq[irq].flags;

	rthal_irqdesc_unlock(irq, flags);

	return 0;
}
Exemplo n.º 8
0
int rthal_irq_host_request(unsigned irq,
                           rthal_irq_host_handler_t handler,
                           char *name, void *dev_id)
{
    unsigned long flags;

    if (irq >= IPIPE_NR_XIRQS || !handler)
        return -EINVAL;

    spin_lock_irqsave(&rthal_irq_descp(irq)->lock, flags);

    if (rthal_linux_irq[irq].count++ == 0 && rthal_irq_descp(irq)->action) {
        rthal_linux_irq[irq].flags = rthal_irq_descp(irq)->action->flags;
        rthal_irq_descp(irq)->action->flags |= IRQF_SHARED;
    }

    spin_unlock_irqrestore(&rthal_irq_descp(irq)->lock, flags);

    return request_irq(irq, handler, IRQF_SHARED, name, dev_id);
}
Exemplo n.º 9
0
int rthal_irq_host_request(unsigned irq,
			   rthal_irq_host_handler_t handler,
			   char *name, void *dev_id)
{
	unsigned long flags;

	if (irq >= IPIPE_NR_XIRQS ||
	    handler == NULL ||
	    rthal_irq_descp(irq) == NULL)
		return -EINVAL;

	rthal_irqdesc_lock(irq, flags);

	if (rthal_linux_irq[irq].count++ == 0 && rthal_irq_descp(irq)->action) {
		rthal_linux_irq[irq].flags = rthal_irq_descp(irq)->action->flags;
		rthal_irq_descp(irq)->action->flags |= IRQF_SHARED;
	}

	rthal_irqdesc_unlock(irq, flags);

	return request_irq(irq, handler, IRQF_SHARED, name, dev_id);
}
Exemplo n.º 10
0
int rthal_irq_enable(unsigned int irq)
{
	if (irq >= IPIPE_NR_XIRQS || rthal_irq_descp(irq) == NULL)
		return -EINVAL;

	/*
	 * We don't care of disable nesting level: real-time IRQ
	 * channels are not meant to be shared with the regular
	 * kernel.
	 */
	rthal_mark_irq_enabled(irq);

	return rthal_irq_chip_enable(irq);
}