PCI Bios 2.1 Question - 如何设置设备中断

问题描述 投票:0回答:1

希望有PCI编程经验的人能给我一些建议

我拥有一台测试设备(逻辑分析仪),它使用运行 Win98 的旧奔腾级(大约 97 年)主板。该主板似乎是“硬配置”的,因此通过 bios 进行的配置是有限的。主板上只有几个 PCI 设备。但是,我正在尝试启动并运行一个未填充的 PCI 插槽。我设法焊接了一个 PCI 连接器并焊接了几个跳线,以便从硬件的角度来看插槽可以正常工作。我已经安装了一个 PCI LAN 板,系统可以识别并分配资源。问题是 BIOS 没有分配中断。 BIOS 配置的限制之一是无法分配中断,并且 BIOS 不会自动执行此操作。 BIOS 更新没有发生。

关于解决方案,我的想法是编写一个小型应用程序,该应用程序将写入控制 IRQ 路由的 82371 南桥部分。这似乎有效,但 OS/Bios 正在恢复到原来的状态。具体来说,当从 82371 路由器配置寄存器读取时:

` A# - IRQ 11   
  B# - IRQ-NONE  
  C# - IRQ-NONE  
  D# - IRQ 9`

我已经确认不存在路由表并且 IRQ 11/9 是唯一的 PCI 中断。我应该注意到 LAN 卡是单一功能设备,A# int 输出物理路由到路由器 B# 输入(如您所料)。写入 82371 路由器寄存器后,B

# - IRQ 10
(10 在我的系统中未使用但可用),我读回寄存器,表明写入正确。在短暂的一段时间后someone将其更改回
B# - IRQ-NONE
。我成功地设置了中断控制器并将中断设置为电平触发。这些更改在下次启动之前是永久性的。

那么,对于强制将 PCI 插槽分配给路由器 B# 输入的 IRQ-10,有没有人有任何建议?

我在 PCI Bios Rev 2.1 规范中看到一个用于设置 PCI 硬件中断的函数(第 4.2.3 节),我打算尝试这个,但我对如何调用这个函数感到困惑。以下是有关使用此功能的相关部分的复制/粘贴。不流利的汇编语言可能是问题的一部分。我理解 segment:offset 的概念,但下面的描述谈到设置 DS 段,以便物理地址应解析为 0x0F0000,但没有提及哪个寄存器用于偏移量。我猜 BX 被使用了,因此段是根据 BX 寄存器中的设置计算的。

如有任何意见,我将不胜感激。 谢谢 吉姆

`  ENTRY:
   [AH] PCI_FUNCTION_ID
   [AL] SET_PCI_HW_INT
   [CL] IntPin parameter. Valid values 0Ah..0Dh
   [CH] IRQNum parameter. Valid values 0..0Fh
   [BX] BusDev parameter. [BH] holds bus number, 
   [BL] holds Device (upper five bits) and Function (lower 3 bits) numbers.
   [DS] Segment or Selector for BIOS data.
        For 16-bit code the real-mode segment or PM selector
        must resolve to physical address 0F0000h and have a limit of 64K.
   EXIT:
   [AH] Return Code:
   SUCCESSFUL
   SET_FAILED
   FUNC_NOT_SUPPORTED
   [CF] Completion Status, set = error, cleared = success`
interrupt x86-16 bios pci
1个回答
0
投票

免责声明:我对PCI了解不多。我只是对你的问题感兴趣,因为它与汇编编程有关。

下面的描述谈到设置 DS 段,以便物理地址应该解析为 0x0F0000,但没有提到哪个寄存器用于偏移量。我猜 BX 被使用了,因此段是根据 BX 寄存器中的设置计算的。

我觉得文件甚至应该提到 BX 是不幸的,因为 BH 和 BL 分别包含某些标识号。
PCI Bios Rev 2.1 规范提到 F000h:FE6Eh 处的代码无论您是从实模式通过

int 1Ah
还是从 16 位保护模式通过
call
到达它都会被执行。如果对于 16 位保护模式,规范坚持选择器解析为 000F0000h 的物理地址,那么从逻辑上讲,您必须使用实模式设置 DS=F000h
mov ax, 0xF000
mov ds, ax
.
我认为不需要指定偏移量。仅从 DS 的这个特定设置,PCI BIOS 就可以寻址 64KB 内存。

© www.soinside.com 2019 - 2024. All rights reserved.