anthony__ 1 27 ноября, 2021 Опубликовано 27 ноября, 2021 (изменено) · Жалоба Оплачу создание патча драйвера 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, то это последний параметр. ну или что-то очень похожее. Изменено 27 ноября, 2021 пользователем anthony__ Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anthony__ 1 27 ноября, 2021 Опубликовано 27 ноября, 2021 · Жалоба бинарник где сидит нужная функция известен, судя по сигнатуре устройства 68.88.33.21.00, только одно место нужно править. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 214 27 ноября, 2021 Опубликовано 27 ноября, 2021 · Жалоба При установке в другой слот устройство в ОС обнаруживается корректно? Ресурсы (адреса и прерывание) ему назначаются? Я наблюдал подобные проблемы в случае некорректной схемотехники самой платы и драйвером это не вылечить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anthony__ 1 27 ноября, 2021 Опубликовано 27 ноября, 2021 · Жалоба да, все работает корректно кроме программирования гпио. это был костыль и его криво напрограммировали в свое время. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anthony__ 1 28 ноября, 2021 Опубликовано 28 ноября, 2021 · Жалоба в общем, сам нашел и исправил не имея никакого опыта в асме. легкие деньги ($500) никому не достались. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться