pci简单接口函数

  1. /* dev and priv zeroed in alloc_etherdev */  
  2.     dev = alloc_etherdev (sizeof (*tp));  
  3.     if (dev == NULL) {  
  4.         dev_err(&pdev->dev, "Unable to alloc new net device/n");  
  5.         return ERR_PTR(-ENOMEM);  
  6.     }  
  7.     SET_NETDEV_DEV(dev, &pdev->dev);  
  8.   
  9.     tp = netdev_priv(dev);  
  10.     tp->pci_dev = pdev;  
  11.   
  12.     /* enable device (incl. PCI PM wakeup and hotplug setup) */  
  13.     rc = pci_enable_device (pdev);  
  14.     if (rc)  
  15.         goto err_out;  
  16.   
  17.     pio_start = pci_resource_start (pdev, 0);  
  18.     pio_end = pci_resource_end (pdev, 0);  
  19.     pio_flags = pci_resource_flags (pdev, 0);  
  20.     pio_len = pci_resource_len (pdev, 0);  
  21.   
  22.     mmio_start = pci_resource_start (pdev, 1);  
  23.     mmio_end = pci_resource_end (pdev, 1);  
  24.     mmio_flags = pci_resource_flags (pdev, 1);  
  25.     mmio_len = pci_resource_len (pdev, 1);  
  26. ... ...  
  27. rc = pci_request_regions (pdev, DRV_NAME);  

 

a). dev = alloc_etherdev (sizeof (*tp)); --> 分配struct rtl8139_private数据结构,并进行预初始化,之所以称之为预初始化是因为只进行了某些固定数据成员的初始化。

b). 调用pci核心驱动的接口函数:pci_enable_device (),pci_enable_device 也是一个内核开发出来的接口,代码在drivers/pci/pci.c中,笔者跟踪发现这个函数主要就是把PCI配置空间的Command域的0位和1 位置成了1,从而达到了开启设备的目的,因为rtl8139的官方datasheet中,说明了这两位的作用就是开启内存映射和I/O映射,如果不开的话,那我们以上讨论的把控制寄存器空间映射到内存空间的这一功能就被屏蔽了。

pci_resource_[start|end|flags|len]:在硬件加电初始化时,BIOS固件统一检查了所有的PCI设备,并统一为他们分配了一个和其他互不冲突的地址,让他们的驱动程序可以向这些地址映射他们的寄存器,这些地址被BIOS写进了各个设备的配置空间,因为这个活动是一个PCI的标准的活动,所以自然写到各个设备的配置空间里而不是他们风格各异的控制寄存器空间里。当然只有BIOS可以访问配置空间。当操作系统初始化时,他为每个PCI设备分配了pci_dev结构,并且把BIOS获得的并写到了配置空间中的地址读出来写到了pci_dev中的resource字段中。这样以后我们在读这些地址就不需要在访问配置空间了,直接跟pci_dev要就可以了,我们这里的四个函数就是直接从pci_dev读出了相关数据,代码在include/linux/pci.h中。具体参见PCI配置空间相关的介绍。

c). rc = pci_request_regions (pdev, DRV_NAME);通知内核该设备对应的IO端口和内存资源已经使用,其他的PCI设备不要再使用这个区域

d). 获得当前pci设备对应的IO端口和IO内存的基址。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LabVIEW是一种高级的图形化编程语言和开发环境,可用于编写和执行各种应用程序。PXI(PCI eXtensions for Instrumentation)则是一种在计算机上进行高性能测试和测量的开放标准。 PXI接口编程是指使用LabVIEW编写程序来控制和与PXI设备进行交互。通过PXI接口编程,我们可以利用LabVIEW的各种功能和工具来实现各种测试和测量任务。 首先,我们可以使用LabVIEW的图形化编程界面,直观地创建、配置和连接PXI硬件和模块。LabVIEW提供了丰富的PXI工具包和驱动程序,使用户能够轻松地访问PXI设备的各种功能和特性。 其次,LabVIEW提供了丰富的函数库和工具箱,可以方便地实现各种测量、控制和数据处理任务。通过简单拖拽和连接函数,我们可以快速构建自定义的测试和测量应用程序。而且,LabVIEW的虚拟仪器(VI)界面可以方便地显示和控制PXI设备的实时状态和参数。 此外,LabVIEW还支持多线程和并行编程,可以实现高速数据采集和实时控制。通过合理的程序设计和优化,我们可以最大程度地发挥PXI设备的性能,并实现高效的数据处理和分析。 总而言之,LabVIEW PXI接口编程为我们提供了一个强大而灵活的工具,用于控制和与PXI设备进行交互。通过其图形化编程环境和丰富的函数库,我们可以实现各种测试和测量任务,并快速构建高性能的应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值