Добрый день. Вожусь с отладочной платой от Altera Stratix IV GX Dev Kit. Ваяем потихоньку драйвер для PCI Express.
Ни как не получается задействовать режим Multiple Message Enable для MSI.
В драйвере использую функцию pci_enable_msi_block:
static int __devinit probe( struct pci_dev *pdev, const struct pci_device_id *id )
{
...
pci_enable_device( pdev );
pci_set_master( pdev );
...
int msi_count = 1;
int msiblock = pci_enable_msi_block( pdev , msi_count);
...
request_irq( pdev->irq, interruptHandler, IRQF_SHARED, MODULE_NAME, pdev );
...
}
В этом виде MSI разрешено, прерывание в обработчик поступает.
Если ставлю msi_count больше 1 (по идее вплоть до 32) функция pci_enable_msi_block возвращает 1,
то есть подключить можно только одну линию.
Правильно ли я использую функцию pci_enable_msi_block и
почему она разрешает подключить только одну линию прерываний?
lspci на плату такой:
#lspci -s 01:00.0 -vvv
01:00.0 Class ff00: Altera Corporation Device e001 (rev 01)
Subsystem: Device 5bde:1100
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin A routed to IRQ 34
Region 0: Memory at 80000000 (64-bit, prefetchable) [size=64K]
Capabilities: [50] MSI: Enable+ Count=1/32 Maskable- 64bit+
Address: 00000000fee0300c Data: 416b
Capabilities: [78] Power Management version 3
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [80] Express (v2) Legacy Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr- TransPend-
LnkCap: Port #1, Speed 5GT/s, Width x8, ASPM L0s, Latency L0 unlimited, L1 unlimited
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk+
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 5GT/s, Width x8, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Range ABCD, TimeoutDis+
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-
LnkCtl2: Target Link Speed: 5GT/s, EnterCompliance- SpeedDis-, Selectable De-emphasis: -6dB
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -6dB
Capabilities: [100 v1] Virtual Channel
Caps: LPEVC=0 RefClk=100ns PATEntrySize=0
Arb: Fixed- WRR32- WRR64- WRR128- 100ns- onfig- - - TableOffset=0
Ctrl: ArbSelect=Fixed
Status: InProgress-
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256- Fixed- RR32-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
Kernel driver in use: driver_altera
Вообщем подскажите как в регистрах MSI:
-------------------------------------------------------------
Capabilities: [50] MSI: Enable+ Count=1/32 Maskable- 64bit+
Address: 00000000fee0300c Data: 416b
-------------------------------------------------------------
сделать Maskable+ и сделать Count=32/32?