往中断地址中写msg。msix使用读写方式,msi使用pci操作寄存器方式。 都是获取message addr和message data __pci_write_msi_msg:if(entry->pci.msi_attrib.is_msix){void__iomem*base=pci_msix_desc_addr(entry);//目标msix entrywritel(msg->address_lo,base+PCI_MSIX_ENTRY_LOWER_ADDR);writel(msg->addres...
[20] Unsupported Request Error Status 收到的报文不属于任何一种协议规定的DLLP或TLP类型,或者报文的域段非法或越界(如MEM WRITE访问越界)等。注意,只要是会返回Comleter报文的请求,就不会上报Unsupported Request Error,而是通过Comleter报文来指示,比如,cfg报文访问设备未实现的function。 [21] ACS Violation Statu...
2566structmsi_msg msg; 2567intirq, ret; 2568irq=create_irq(); 2569if(irq<0) 2570returnirq; 2571 2572ret=msi_compose_msg(dev, irq,&msg); 2573if(ret<0) { 2574destroy_irq(irq); 2575returnret; 2576} 2577 2578set_irq_msi(irq, desc); 2579write_msi_msg(irq,&msg); 2580 2581set_ir...
MSI-X Capability中断机制与MSI Capability的中断机制类似。PCIe总线引出MSI-X机制的主要目的是为了扩展PCIe设备使用中断向量的个数,同时解决MSI中断机制要求使用中断向量号连续所带来的问题。 MSI中断机制最多只能使用32个中断向量,而MSI-X可以使用更多的中断向量。目前Intel的许多PCIe设备支持MSI-X中断机制。与MSI中断机...
所有的内存映射写(Memory-Mapped Write)都是 Posted 的,以此来提升性能。 使用32bit 或者 64bit 地址方式。 数据荷载大小在 0-1024DW 之间(0-4KB)。 QoS(Quality of Service)特性可以被使用,最多可以有 8 个流量类型。 No Snoop 属性可以在事务访问主存时,用来减轻系统对窥探处理器 Cache 的需求。
这个函数的作用是,给定的pci设备,以及一些msix表的entry,申请向量号位于一个范围的中断向量。配置设备的MSI-X Capability结构体。 struct msix_entry 代码语言:javascript 代码运行次数:0 运行 AI代码解释 struct msix_entry{u32 vector;/* Kernel uses to write allocated vector */u16 entry;/* Driver uses to...
Message Requests follow the same ordering rules as Memory Write Requests。 寻址方式:隐含寻址,由Type域中的r[2:0]决定,即Type域的最后三位。具体寻址映射如下: r[2:0]是010时,寻址方式就是ID寻址。 5. Completion Rules(应答机制) completion包用ID寻址方式,寻址使用的ID就是request提供的requester ID。除...
7. pci_enable_msi():它允许PCI设备使用MSI中断机制,当函数被调用时,它将被指定的PCI设备启用MSI中断,并返回中断号。 8. request_irq():注册中断服务函数,当中断发生时,系统调用这个函数。 9. pcie_capability_write_dword(..., ..., PCI_EXP_DEVCTL_EXT_TAG):PCI_EXP_DEVCTL_EXT_TAG,标识设备的DevCtl...
msi-map = <0x0 &its 0x0 0x1000>; interrupts = <GIC_SPI 49 IRQ_TYPE_LEVEL_HIGH 0>, <GIC_SPI 50 IRQ_TYPE_LEVEL_HIGH 0>, <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH 0>; interrupt-names = "sys", "legacy", "client"; #interrupt-cells = <1>; ...
36 + #define CTRL_MSG_DTR BIT(0) 37 + #define CTRL_MSG_ID (0x10) 38 + 39 + static int mhi_dtr_tiocmset(struct mhi_controller *mhi_cntrl, 40 + struct mhi_chan *mhi_chan, 41 + u32 tiocm) 42 + { 43 + struct dtr_ctrl_msg *dtr_msg = NULL; ...