Перейти к содержанию
    

Нужна услуга по созданию патча для драйвера устройства под Win2k, XP x86

Оплачу создание патча драйвера PCI устройства. Драйвер программирует GPIO устройства PCI6152, но корректно работает только в слоте с IDSEL=AD16. Нужен патч чтобы оно начало работать в другом слоте, хотя бы вручную править бинарник под каждый слот.

 

В личку.

p.s.

есть исходинк драйвера для win9x (который корректно работает). там функция выглядит так:

      if (FindGPIODevice(0x00213388, dwNapalmBus, &dwBus, &dwDevFunc))
         {      
         isGPIOInit = 1;
         pGPIOMask->Data.dwBus = pGPIOMask->Clk.dwBus = pGPIOMask->Strobe.dwBus = dwBus;
         pGPIOMask->Data.dwDevFunc = pGPIOMask->Clk.dwDevFunc = pGPIOMask->Strobe.dwDevFunc = dwDevFunc;
         pGPIOMask->Data.RN = 0xC4;
         pGPIOMask->Data.dInMask = (DWORD)0x0100;
         pGPIOMask->Data.dInShift = (DWORD)0x08;
         pGPIOMask->Data.dOutMask = (DWORD)0x0400;
         pGPIOMask->Data.dOutShift = (DWORD)0x0A;

         pGPIOMask->Clk.RN = (DWORD)0xC4;
         pGPIOMask->Clk.dInMask = (DWORD)0x010000;
         pGPIOMask->Clk.dInShift = (DWORD)0x10;
         pGPIOMask->Clk.dOutMask = (DWORD)0x040000;
         pGPIOMask->Clk.dOutShift = (DWORD)0x12;

         pGPIOMask->Strobe.RN = (DWORD)0xC4;
         pGPIOMask->Strobe.dInMask = (DWORD)0x1000;
         pGPIOMask->Strobe.dInShift = (DWORD)0x0C;
         pGPIOMask->Strobe.dOutMask = (DWORD)0x4000;
         pGPIOMask->Strobe.dOutShift = (DWORD)0x0E;

         pGPIOMask->HiVoltage.RN = (DWORD)0xC4;
         pGPIOMask->HiVoltage.dInMask = (DWORD)0x100000;
         pGPIOMask->HiVoltage.dInShift = (DWORD)0x14;
         pGPIOMask->HiVoltage.dOutMask = (DWORD)0x400000;
         pGPIOMask->HiVoltage.dOutShift = (DWORD)0x16;

         // Enable all GPIO as Output
         dwData = PCI_Read_Config(dwBus, dwDevFunc, 0xC4);
         dwData &= 0xFF0000FF;
         //          C7C6C5C4 
         dwData |= 0x00222200;
         PCI_Write_Config(dwBus, dwDevFunc, 0xC4, dwData);
         }

p.p.s.

другими словами, не работает устройство как должно, если его номер на шине не 00. т.е. это нули жестко прописаны. если предположить что функция в драйвере для win2k/xp такая же как для win9x, то это последний параметр. ну или что-то очень похожее.

Изменено пользователем anthony__

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

бинарник где сидит нужная функция известен, судя по сигнатуре устройства 68.88.33.21.00, только одно место нужно править.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При установке в другой слот устройство в ОС обнаруживается корректно? Ресурсы (адреса и прерывание) ему назначаются? Я наблюдал подобные проблемы в случае некорректной схемотехники самой платы и драйвером это не вылечить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да, все работает корректно кроме программирования гпио. это был костыль и его криво напрограммировали в свое время.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в общем, сам нашел и исправил не имея никакого опыта в асме. легкие деньги ($500) никому не достались.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...