pci简单接口函数
来源:互联网 发布:会声会影mac 编辑:程序博客网 时间:2024/06/08 13:55
- /* dev and priv zeroed in alloc_etherdev */
- dev = alloc_etherdev (sizeof (*tp));
- if (dev == NULL) {
- dev_err(&pdev->dev, "Unable to alloc new net device/n");
- return ERR_PTR(-ENOMEM);
- }
- SET_NETDEV_DEV(dev, &pdev->dev);
- tp = netdev_priv(dev);
- tp->pci_dev = pdev;
- /* enable device (incl. PCI PM wakeup and hotplug setup) */
- rc = pci_enable_device (pdev);
- if (rc)
- goto err_out;
- pio_start = pci_resource_start (pdev, 0);
- pio_end = pci_resource_end (pdev, 0);
- pio_flags = pci_resource_flags (pdev, 0);
- pio_len = pci_resource_len (pdev, 0);
- mmio_start = pci_resource_start (pdev, 1);
- mmio_end = pci_resource_end (pdev, 1);
- mmio_flags = pci_resource_flags (pdev, 1);
- mmio_len = pci_resource_len (pdev, 1);
- ... ...
- 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内存的基址。
- pci简单接口函数
- Pci 函数
- PCI Express接口
- PCI的接口定义
- PCI Express接口
- linux pci接口介绍
- PCI接口开发笔记
- PCI驱动使用函数
- PCI总线与接口技术
- AGP与PCI-E的区别和PCI-E接口与PCI接口的区别
- PCI驱动框架简单分析
- PCI驱动框架简单分析
- PCI驱动框架简单分析
- PCI驱动程序--编译错误函数
- PCI、AGP、PCIE显卡接口技术详解
- PCI接口芯片s5935及其应用
- 基于PCI9054的PCI接口板设计
- 基于PCI9054的PCI接口板设计
- C程序设计 例题5.9 判断一个大于3的数是否为素数改进
- Android Multimedia框架总结(二十四)MediaMuxer实现手机屏幕录制成gif图
- (系列一)webkit 的各个模块
- spark streaming 2.0 RateLimiter
- linux 的压缩和打包
- pci简单接口函数
- Windows Server AppFabric简介
- document.createElement()用法
- ML_2 linear regression algorithm
- poj1995
- Linux gdb调试器用法全面解析
- 提交页面出现提示:Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effe
- Android模拟计步器,即Step Counter Sensor, Step Detector Sensor
- 米斯特白帽培训讲义 实战篇 南方 0day