kvm创建虚拟pci设备的几个函数(老版本)
来源:互联网 发布:神通数据库下载 编辑:程序博客网 时间:2024/05/21 19:21
1:
1003 int pci_enable_capability_support(PCIDevice *pci_dev,
1004 uint32_t config_start,
1005 PCICapConfigReadFunc *config_read,
1006 PCICapConfigWriteFunc *config_write,
1007 PCICapConfigInitFunc *config_init)
1008 {
1009 if (!pci_dev)
1010 return -ENODEV;
1011
1012 pci_dev->config[0x06] |= 0x10; // status = capabilities
1013
1014 if (config_start == 0)
1015 pci_dev->cap.start = PCI_CAPABILITY_CONFIG_DEFAULT_START_ADDR;
1016 else if (config_start >= 0x40 && config_start < 0xff)
1017 pci_dev->cap.start = config_start;
1018 else
1019 return -EINVAL;
1020
1021 if (config_read)
1022 pci_dev->cap.config_read = config_read;
1023 else
1024 pci_dev->cap.config_read = pci_default_cap_read_config;
1025 if (config_write)
1026 pci_dev->cap.config_write = config_write;
1027 else
1028 pci_dev->cap.config_write = pci_default_cap_write_config;
1029 pci_dev->cap.supported = 1;
1030 pci_dev->config[PCI_CAPABILITY_LIST] = pci_dev->cap.start;
1031 return config_init(pci_dev);
1032 }
关于irqfd
+#ifdef KVM_CAP_IRQFD+static int _kvm_irqfd(kvm_context_t kvm, int fd, int gsi, int flags)+{+int r;+struct kvm_irqfd data = {+.fd = fd,+.gsi = gsi,+.flags = flags,+};++r = ioctl(kvm->vm_fd, KVM_IRQFD, &data);+if (r == -1)+r = -errno;+return r;+}++int kvm_create_irqfd(kvm_context_t kvm, int gsi, int flags)+{+int r;+int fd;++if (!kvm_check_extension(kvm, KVM_CAP_IRQFD))+return -ENOENT;++fd = eventfd(0, 0);+if (fd < 0)+return -errno;++r = _kvm_irqfd(kvm, fd, gsi, 0);+if (r < 0) {+close(fd);+return -errno;+}++return fd;+}++int kvm_destroy_irqfd(kvm_context_t kvm, int fd, int gsi, int flags)+{+return _kvm_irqfd(kvm, fd, gsi, KVM_IRQFD_FLAG_DEASSIGN);+}++#else /* KVM_CAP_IRQFD */++int kvm_create_irqfd(kvm_context_t kvm, int gsi, int flags)+{+return -ENOENT;+}++int kvm_destroy_irqfd(kvm_context_t kvm, int fd, int gsi, int flags)+{+return -ENOENT;+}++#endif /* KVM_CAP_IRQFD */
+int kvm_assign_iofd(kvm_context_t kvm, unsigned long addr, size_t len,+ int fd, int type, int flags)+{+int r;+struct kvm_iofd data = {+.addr = addr,+.len = len,+.fd = fd,+.flags = type ? KVM_IOFD_FLAG_PIO : 0,+};++if (!kvm_check_extension(kvm, KVM_CAP_EVENTFD))+return -ENOENT;++r = ioctl(kvm->vm_fd, KVM_IOFD, &data);+if (r == -1)+r = -errno;+return r;+}++int kvm_deassign_iofd(kvm_context_t kvm, unsigned long addr, size_t len,+ int type, int flags)+{+int r;+struct kvm_iofd data = {+.addr = addr,+.len = len,+.flags = KVM_IOFD_FLAG_DEASSIGN | (type ? KVM_IOFD_FLAG_PIO : 0),+};++if (!kvm_check_extension(kvm, KVM_CAP_EVENTFD))+return -ENOENT;++r = ioctl(kvm->vm_fd, KVM_IOFD, &data);+if (r == -1)+r = -errno;+return r;+}+ #else /* KVM_CAP_EVENTFD */
- kvm创建虚拟pci设备的几个函数(老版本)
- KVM虚拟机代码揭秘——QEMU的PCI总线与设备(上)
- KVM虚拟机代码揭秘——QEMU的PCI总线与设备(下)
- KVM虚拟机代码揭秘——QEMU的PCI总线与设备(上)
- KVM虚拟机代码揭秘——QEMU的PCI总线与设备(下)
- pci设备probe函数的调用时机
- KVM 设备虚拟文件接口
- linux kvm 虚拟系统中蓝牙设备的添加
- Linux KVM IO设备虚拟化的三种方式
- KVM虚拟化原理-创建KVM
- PCI设备介绍(一):PCI的一些数字
- PCI设备的初始化
- pci设备的初始化
- pci设备的初始化
- pci设备的初始化
- android 虚拟设备(AVD)的创建和使用
- android 虚拟设备(AVD)的创建和使用
- android 虚拟设备(AVD)的创建和使用
- 比较两个结构体的内容是否相等
- Outlook2003 ---- 无法打开Outlook窗口,无法打开文件夹的集合
- 技术钻研点
- Porject Euler problem 55
- 电力用户用电信息采集系统
- kvm创建虚拟pci设备的几个函数(老版本)
- 链表创建排序
- proxool连接池
- VS2005+CUDA4.0+wizard v2.9下CUDA动态库、静态库的开发过程
- Measurement Studio 2012 使用中碰到的问题
- 链表 插入
- niaho
- C++中的模板
- [转]四大开源商业智能平台大比拼[http://database.ctocio.com.cn/analysis/289/7610289.shtml]