Функция HalTranslateBusAddress

Тема в разделе "WASM.WIN32", создана пользователем ubil, 30 окт 2005.

  1. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    В общем, она имеет такой прототип:

    BOOLEAN

    HalTranslateBusAddress(

    IN INTERFACE_TYPE InterfaceType,

    IN ULONG BusNumber,

    IN PHYSICAL_ADDRESS BusAddress,

    IN OUT PULONG AddressSpace,

    OUT PPHYSICAL_ADDRESS TranslatedAddress

    );

    Объясните кто-нибудь, пожалуйста, откуда нужно брать параметры InterfaceType и BusNumber.
     
  2. Sten

    Sten New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2003
    Сообщения:
    39
    Я в IceExt юзал функцию HalGetInterruptVector(). Там устанавливал эти параметры, соответственно, таким образом:



    InterfaceType = PCIBus

    BusNumber = 0



    Но я четко знал чего я хочу - мне нужно было выполнить маппинг номера хардверного IRQ в номер софтверного прерывания для кодека AC97, который встроен прямо в материнскую плату. В твоем случае, предполагается что ты тем или иным образом знаешь правильные параметры.



    P.S. Ну и разумеется, HalTranslateBusAddress() функция устаревшая, и MS ее юзать не рекомендует.
     
  3. Shama

    Shama New Member

    Публикаций:
    0
    Регистрация:
    4 окт 2005
    Сообщения:
    17
    Адрес:
    Ukraine
    INTERFACE_TYPE enum type:

    Elements

    InterfaceTypeUndefined

    Undefined interface type.

    Internal

    System or microprocessor bus.

    Isa

    Industry Standard Architecture (ISA) bus.

    Eisa

    Extended ISA bus.

    MicroChannel

    Micro channel bus interface.

    TurboChannel

    Turbo channel bus interface.

    PCIBus

    PCI bus interface.

    VMEBus

    VME bus interface.

    NuBus

    NuBus bus interface.

    PCMCIABus

    PCMCIA bus interface.

    CBus

    C bus interface.

    MPIBus

    MPI bus interface.

    MPSABus

    MPSA bus interface.

    ProcessorInternal

    Internal processor interface.

    InternalPowerBus

    Internal power bus interface.

    PNPISABus

    Plug and Play ISA bus interface.

    PNPBus

    Plug and Play bus interface.

    MaximumInterfaceType

    Maximum interface value.
     
  4. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    2 Sten:

    /*******HalTranslateBusAddress() функция устаревшая, и MS ее юзать не рекомендует.********/

    А чем же тогда пользоваться? Если тебе ПнП манагер выдает портбасе по отношению к шине, а не в абсолютных единицах?

    2 Shama: А номер шины откуда взять?:) А вообще-то я думаю, что это где-то в ResourceList должно находится...



    Не, я чиста ваще в шоке... В примерах к моей любимой книге ВЕЗДЕ пишется

    pDevExt->portBase = (PUCHAR) pPartialDescriptor->u.Port.Start.LowPart;



    И далее используются эти значения... А я уже двое суток сношаюсь, не могу заставить LPT порт хоть как-то заработать... Почитав другую книжку, узнал, что оказывается эти адреса всегда в абсолютные переводить надо... Только написал pDevExt->portBase = 0x378 - все прекрасно заработало.
     
  5. ubil

    ubil New Member

    Публикаций:
    0
    Регистрация:
    7 ноя 2004
    Сообщения:
    203
    Адрес:
    ODESSA:)
    Я опять в шоке:) Там так и надо брать QuadPart, так даже в ddk написано...

    Там в проге, короче, цикл есть:

    for (i=0; i<(int)pPartialList->Count; i++)

    {

    pPartialDescriptor =

    &pPartialList->PartialDescriptors;

    switch (pPartialDescriptor->Type)

    {

    case CmResourceTypeInterrupt:

    pDevExt->IRQL = (KIRQL)

    pPartialDescriptor->u.Interrupt.Level;

    pDevExt->Vector =

    pPartialDescriptor->u.Interrupt.Vector;

    pDevExt->Affinity =

    pPartialDescriptor->u.Interrupt.Affinity;

    break;

    case CmResourceTypePort:

    pDevExt->portBase = (PUCHAR) pPartialDescriptor->u.Port.Start.QuadPart;

    pDevExt->portLength = pPartialDescriptor->u.Port.Length;

    break;

    case CmResourceTypeMemory:

    // We don't do memory usage

    break;

    }

    }

    Так оказывается, что там в ресурсах есть 2 области портов, причем та, которая нужна - первая:) => В Device Extension попадает вторая => нихера не работает:)) Зачем вообше нужна эта область(778-77c)?
     
  6. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    ubil

    Блин, ты в аську почаще выходи ))))



    778-77c - покапай доки, а что если порт работает в режимах отличных от SPP ? вот для этого эти порты и нужны ))