<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Поддержку драйвером нескольких экземпляров устройства.</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7315.html</link>
    <description>Здраствуйте! &lt;br&gt;Суть моего вопроса в следующем: как реализовать поддержку драйвером нескольких экземпляров (идентичных) устройства.&lt;br&gt;Вот примерная структура функции инициализации.&lt;br&gt;Обе платы обнаруживаются, ресурсы доступны но что делать дальше?&lt;br&gt;&lt;br&gt;(Debian Etch, 2.6.20)&lt;br&gt;&lt;br&gt;static int __devinit probe_xdsp(struct pci_dev *pcidev, const struct pci_device_id *pci_id)&lt;br&gt;&#123;&lt;br&gt;&lt;br&gt;  if(!(pcard = kmalloc(sizeof(struct xdsp_dev), GFP_KERNEL))) &lt;br&gt;    &#123;&lt;br&gt;....&lt;br&gt;    &#125;&lt;br&gt;&lt;br&gt;  ....&lt;br&gt;  if ((ret=pci_enable_device(pcidev)))&lt;br&gt;  &#123;&lt;br&gt;....&lt;br&gt;  &#125;&lt;br&gt;  ....&lt;br&gt;  if((pci_request_regions(pcidev, &quot;xdsp&quot;)) == 0)&lt;br&gt;  &#123;&lt;br&gt;....&lt;br&gt;  &#125;&lt;br&gt;  ....&lt;br&gt;  if (request_irq(pcidev-&amp;gt;irq, &amp;xdsp_interrupt, SA_INTERRUPT, &quot;xdsp&quot;, pcard))&lt;br&gt;  &#123;&lt;br&gt;....&lt;br&gt;    &#125;&lt;br&gt;  ....&lt;br&gt;  pcard-&amp;gt;irq = pcidev-&amp;gt;irq;&lt;br&gt;  pcard-&amp;gt;io = pci_resource_start(pcidev, 0);&lt;br&gt;....&lt;br&gt;  &lt;br&gt;  // DMA block&lt;br&gt;  memBlock = ioremap(0x7d800000, 0x2800000);&lt;br&gt;  memset(memBlock, 0x0, 0x2800000);&lt;br&gt;  //end of DMA block&lt;br&gt;&lt;br&gt;  major = register_chrdev(251, &quot;/dev/xdsp1&quot;, &amp;xdsp_fops);&lt;br&gt;  if(major &amp;lt; 0) &#123;pcard-&amp;gt;devNumber = 1; ....&#125;</description>

<item>
    <title>Поддержку драйвером нескольких экземпляров устройства. (alexB)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7315.html#5</link>
    <pubDate>Thu, 24 Apr 2008 16:20:06 GMT</pubDate>
    <description>Все! Разобрался со всеми вопросами. Все работает. Спасибо!&lt;br&gt;</description>
</item>

<item>
    <title>Поддержку драйвером нескольких экземпляров устройства. (poulch)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7315.html#4</link>
    <pubDate>Thu, 17 Apr 2008 10:06:45 GMT</pubDate>
    <description>Там это тоже есть, один из драйверов работает по BusMaster... выделяет память и строит список страниц.... Но если просто DMA, то смотрите LDD 3 и его примеры. А буфер из драйвера можно замапить прямо в userspace, что у меня там и делается....&lt;br&gt;</description>
</item>

<item>
    <title>Поддержку драйвером нескольких экземпляров устройства. (int_0dh)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7315.html#3</link>
    <pubDate>Wed, 16 Apr 2008 18:37:27 GMT</pubDate>
    <description>&amp;gt;Огромное спасибо!!! Это то что нужно. Нормально структурированный и легко читаемый код! &lt;br&gt;&amp;gt;Тем более, что железки функционально похожи на мою. &lt;br&gt;&amp;gt;Возник вопрос. Плата исп. DMA. Т.е. я должен зарезервировать 16Мб для каждого &lt;br&gt;&amp;gt;устройства и записать физ. адрес в плату. Я так понял что &lt;br&gt;&amp;gt;зарезервировать такой большой объем памяти, достаточно сложно. И воспользовался простым путем &lt;br&gt;&amp;gt;- передал ядру при загрузке ограничение по используемой памяти (mem=2000) и &lt;br&gt;&amp;gt;по этому адресу &quot;в лоб&quot; зарезервировал. Вопрос в том как это &lt;br&gt;&amp;gt;сделать более корректно. &lt;br&gt;&lt;br&gt;Мне кажется что вполне корректно было бы использовать &lt;br&gt;__get_free_pages() для выделения диапазона физических адресов, ну а потом при необходимости отмапить на user space (mmap() на ваше /dev/device)&lt;br&gt;А еще лучший вариант - выделение памяти из &lt;br&gt;&amp;gt;user space, чтобы не использовать промежуточный буффер в драйвере. &lt;br&gt;&lt;br&gt;Никакого промежуточного буфера не будет&lt;br&gt;&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Поддержку драйвером нескольких экземпляров устройства. (alexB)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7315.html#2</link>
    <pubDate>Wed, 16 Apr 2008 17:30:24 GMT</pubDate>
    <description>Огромное спасибо!!! Это то что нужно. Нормально структурированный и легко читаемый код! Тем более, что железки функционально похожи на мою. &lt;br&gt;Возник вопрос. Плата исп. DMA. Т.е. я должен зарезервировать 16Мб для каждого устройства и записать физ. адрес в плату. Я так понял что зарезервировать такой большой объем памяти, достаточно сложно. И воспользовался простым путем - передал ядру при загрузке ограничение по используемой памяти (mem=2000) и по этому адресу &quot;в лоб&quot; зарезервировал. Вопрос в том как это сделать более корректно. А еще лучший вариант - выделение памяти из user space, чтобы не использовать промежуточный буффер в драйвере.&lt;br&gt;&lt;br&gt;Еще раз спасибо. Очень выручили.&lt;br&gt;</description>
</item>

<item>
    <title>Поддержку драйвером нескольких экземпляров устройства. (poulch)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/7315.html#1</link>
    <pubDate>Wed, 16 Apr 2008 09:39:06 GMT</pubDate>
    <description>отвечу так... www.lcard.ru там в библиотеке файлов есть lcomp_linux.tgz, это драйвера pci и usb устройств, там найдеться ответ на этот вопрос. Писал их я и если что непонятно то можно спросить ....&lt;br&gt;</description>
</item>

</channel>
</rss>
