LINUX.ORG.RU

История изменений

Исправление tailgunner, (текущая версия) :

Теперь встал вопрос непосредственно с SG-DMA

Но возникает вопрос - а что это за sglist? В документации выше он абсолютно не описан, он берется из космоса?

Documentation/DMA-mapping.txt

Documentation/DMA-API-HOWTO.txt

irqreturn_t mypci_isr(int irq, void *data)
{
printk(KERN_INFO «mypci: interrupt!\n»);
return IRQ_HANDLED;
}

В настоящих драйверах ISR обычно сбрасывает причину прерывания на устройстве.

devm_request_irq(&dev->dev, dev->irq, mypci_isr, 0, «mypci», NULL);

Для учебного примера, наверное, подойдет.

Тут я правильно сделал?

Сначала устанавливается обработчик прерывания, потом разрешается их генерация.

struct page как заполнять?

virt_to_page на адресе, возвращенном k{m,z}alloc, или get_user_pages, если у тебя DMA в юзерспейный буфер (обычно это не нужно). Это есть в LDD3.

Исходная версия tailgunner, :

Теперь встал вопрос непосредственно с SG-DMA

Но возникает вопрос - а что это за sglist? В документации выше он абсолютно не описан, он берется из космоса?

Documentation/DMA-mapping.txt

Documentation/DMA-API-HOWTO.txt

irqreturn_t mypci_isr(int irq, void *data)
{
printk(KERN_INFO «mypci: interrupt!\n»);
return IRQ_HANDLED;
}

В настоящих драйверах ISR обычно сбрасывает причину прерывания на устройстве.

devm_request_irq(&dev->dev, dev->irq, mypci_isr, 0, «mypci», NULL);

Для учебного примера, наверное, подойдет.

Тут я правильно сделал?

Сначала устанавливается обработчик прерывания, потом разрешается их генерация.

struct page как заполнять?

virt_to_page на адресе, возвращенном k{m,z}alloc, get_user_pages, если у тебя DMA в юзерспейный буфер (обычно это не нужно). Это есть в LDD3.