Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
qemu
提交
38141097
Q
qemu
项目概览
openeuler
/
qemu
通知
10
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Q
qemu
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
38141097
编写于
6月 01, 2010
作者:
A
Anthony Liguori
浏览文件
操作
浏览文件
下载
差异文件
Merge remote branch 'mst/for_anthony' into HEAD
上级
1d4b638a
e075e788
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
33 addition
and
32 deletion
+33
-32
hw/msix.c
hw/msix.c
+0
-8
hw/pci-hotplug.c
hw/pci-hotplug.c
+4
-3
hw/pci.c
hw/pci.c
+26
-8
hw/pci.h
hw/pci.h
+3
-13
未找到文件。
hw/msix.c
浏览文件 @
38141097
...
...
@@ -15,14 +15,6 @@
#include "msix.h"
#include "pci.h"
/* Declaration from linux/pci_regs.h */
#define PCI_CAP_ID_MSIX 0x11
/* MSI-X */
#define PCI_MSIX_FLAGS 2
/* Table at lower 11 bits */
#define PCI_MSIX_FLAGS_QSIZE 0x7FF
#define PCI_MSIX_FLAGS_ENABLE (1 << 15)
#define PCI_MSIX_FLAGS_MASKALL (1 << 14)
#define PCI_MSIX_FLAGS_BIRMASK (7 << 0)
/* MSI-X capability structure */
#define MSIX_TABLE_OFFSET 4
#define MSIX_PBA_OFFSET 8
...
...
hw/pci-hotplug.c
浏览文件 @
38141097
...
...
@@ -124,7 +124,7 @@ void drive_hot_add(Monitor *mon, const QDict *qdict)
if
(
pci_read_devaddr
(
mon
,
pci_addr
,
&
dom
,
&
pci_bus
,
&
slot
))
{
goto
err
;
}
dev
=
pci_find_device
(
pci_find_root_bus
(
0
),
pci_bus
,
slot
,
0
);
dev
=
pci_find_device
(
pci_find_root_bus
(
dom
),
pci_bus
,
slot
,
0
);
if
(
!
dev
)
{
monitor_printf
(
mon
,
"no pci device with address %s
\n
"
,
pci_addr
);
goto
err
;
...
...
@@ -252,7 +252,8 @@ void pci_device_hot_add(Monitor *mon, const QDict *qdict)
if
(
dev
)
{
monitor_printf
(
mon
,
"OK domain %d, bus %d, slot %d, function %d
\n
"
,
0
,
pci_bus_num
(
dev
->
bus
),
PCI_SLOT
(
dev
->
devfn
),
pci_find_domain
(
dev
->
bus
),
pci_bus_num
(
dev
->
bus
),
PCI_SLOT
(
dev
->
devfn
),
PCI_FUNC
(
dev
->
devfn
));
}
else
monitor_printf
(
mon
,
"failed to add %s
\n
"
,
opts
);
...
...
@@ -269,7 +270,7 @@ int pci_device_hot_remove(Monitor *mon, const char *pci_addr)
return
-
1
;
}
d
=
pci_find_device
(
pci_find_root_bus
(
0
),
bus
,
slot
,
0
);
d
=
pci_find_device
(
pci_find_root_bus
(
dom
),
bus
,
slot
,
0
);
if
(
!
d
)
{
monitor_printf
(
mon
,
"slot %d empty
\n
"
,
slot
);
return
-
1
;
...
...
hw/pci.c
浏览文件 @
38141097
...
...
@@ -200,6 +200,26 @@ PCIBus *pci_find_root_bus(int domain)
return
NULL
;
}
int
pci_find_domain
(
const
PCIBus
*
bus
)
{
PCIDevice
*
d
;
struct
PCIHostBus
*
host
;
/* obtain root bus */
while
((
d
=
bus
->
parent_dev
)
!=
NULL
)
{
bus
=
d
->
bus
;
}
QLIST_FOREACH
(
host
,
&
host_buses
,
next
)
{
if
(
host
->
bus
==
bus
)
{
return
host
->
domain
;
}
}
abort
();
/* should not be reached */
return
-
1
;
}
void
pci_bus_new_inplace
(
PCIBus
*
bus
,
DeviceState
*
parent
,
const
char
*
name
,
int
devfn_min
)
{
...
...
@@ -419,14 +439,12 @@ int pci_device_load(PCIDevice *s, QEMUFile *f)
return
ret
;
}
static
int
pci_set_default_subsystem_id
(
PCIDevice
*
pci_dev
)
static
void
pci_set_default_subsystem_id
(
PCIDevice
*
pci_dev
)
{
uint16_t
*
id
;
id
=
(
void
*
)(
&
pci_dev
->
config
[
PCI_SUBSYSTEM_VENDOR_ID
]);
id
[
0
]
=
cpu_to_le16
(
pci_default_sub_vendor_id
);
id
[
1
]
=
cpu_to_le16
(
pci_default_sub_device_id
);
return
0
;
pci_set_word
(
pci_dev
->
config
+
PCI_SUBSYSTEM_VENDOR_ID
,
pci_default_sub_vendor_id
);
pci_set_word
(
pci_dev
->
config
+
PCI_SUBSYSTEM_ID
,
pci_default_sub_device_id
);
}
/*
...
...
@@ -507,7 +525,7 @@ PCIBus *pci_get_bus_devfn(int *devfnp, const char *devaddr)
}
*
devfnp
=
slot
<<
3
;
return
pci_find_bus
(
pci_find_root_bus
(
0
),
bus
);
return
pci_find_bus
(
pci_find_root_bus
(
dom
),
bus
);
}
static
void
pci_init_cmask
(
PCIDevice
*
dev
)
...
...
hw/pci.h
浏览文件 @
38141097
...
...
@@ -97,17 +97,6 @@ typedef struct PCIIORegion {
/* PCI HEADER_TYPE */
#define PCI_HEADER_TYPE_MULTI_FUNCTION 0x80
#define PCI_STATUS_RESERVED_MASK_LO (PCI_STATUS_RESERVED1 | \
PCI_STATUS_INT_STATUS | PCI_STATUS_CAPABILITIES | \
PCI_STATUS_66MHZ | PCI_STATUS_RESERVED2 | PCI_STATUS_FAST_BACK)
#define PCI_STATUS_RESERVED_MASK_HI (PCI_STATUS_DEVSEL >> 8)
/* Bits in the PCI Command Register (PCI 2.3 spec) */
#define PCI_COMMAND_RESERVED 0xf800
#define PCI_COMMAND_RESERVED_MASK_HI (PCI_COMMAND_RESERVED >> 8)
/* Size of the standard PCI config header */
#define PCI_CONFIG_HEADER_SIZE 0x40
/* Size of the standard PCI config space */
...
...
@@ -229,6 +218,7 @@ PCIDevice *pci_nic_init_nofail(NICInfo *nd, const char *default_model,
int
pci_bus_num
(
PCIBus
*
s
);
void
pci_for_each_device
(
PCIBus
*
bus
,
int
bus_num
,
void
(
*
fn
)(
PCIBus
*
bus
,
PCIDevice
*
d
));
PCIBus
*
pci_find_root_bus
(
int
domain
);
int
pci_find_domain
(
const
PCIBus
*
bus
);
PCIBus
*
pci_find_bus
(
PCIBus
*
bus
,
int
bus_num
);
PCIDevice
*
pci_find_device
(
PCIBus
*
bus
,
int
bus_num
,
int
slot
,
int
function
);
PCIBus
*
pci_get_bus_devfn
(
int
*
devfnp
,
const
char
*
devaddr
);
...
...
@@ -350,12 +340,12 @@ void pci_qdev_register_many(PCIDeviceInfo *info);
PCIDevice
*
pci_create
(
PCIBus
*
bus
,
int
devfn
,
const
char
*
name
);
PCIDevice
*
pci_create_simple
(
PCIBus
*
bus
,
int
devfn
,
const
char
*
name
);
static
inline
int
pci_is_express
(
PCIDevice
*
d
)
static
inline
int
pci_is_express
(
const
PCIDevice
*
d
)
{
return
d
->
cap_present
&
QEMU_PCI_CAP_EXPRESS
;
}
static
inline
uint32_t
pci_config_size
(
PCIDevice
*
d
)
static
inline
uint32_t
pci_config_size
(
const
PCIDevice
*
d
)
{
return
pci_is_express
(
d
)
?
PCIE_CONFIG_SPACE_SIZE
:
PCI_CONFIG_SPACE_SIZE
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录