Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
da942337
提交
da942337
8月 27, 2007
创建
作者:
rsc
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
nits
上级
3ce16470
隐藏空白字符变更
内嵌
并排
正在显示
1 个修改的文件
包含
13 行增加
和
17 行删除
+13
-17
mp.c
mp.c
+13
-17
没有找到文件。
mp.c
浏览文件 @
da942337
...
@@ -72,8 +72,7 @@ mp_search(void)
...
@@ -72,8 +72,7 @@ mp_search(void)
if
((
p
=
(
bda
[
0x0F
]
<<
8
)
|
bda
[
0x0E
])){
if
((
p
=
(
bda
[
0x0F
]
<<
8
)
|
bda
[
0x0E
])){
if
((
mp
=
mp_scan
((
uchar
*
)
p
,
1024
)))
if
((
mp
=
mp_scan
((
uchar
*
)
p
,
1024
)))
return
mp
;
return
mp
;
}
}
else
{
else
{
p
=
((
bda
[
0x14
]
<<
8
)
|
bda
[
0x13
])
*
1024
;
p
=
((
bda
[
0x14
]
<<
8
)
|
bda
[
0x13
])
*
1024
;
if
((
mp
=
mp_scan
((
uchar
*
)
p
-
1024
,
1024
)))
if
((
mp
=
mp_scan
((
uchar
*
)
p
-
1024
,
1024
)))
return
mp
;
return
mp
;
...
@@ -94,19 +93,20 @@ mp_detect(void)
...
@@ -94,19 +93,20 @@ mp_detect(void)
uint
length
;
uint
length
;
if
((
mp
=
mp_search
())
==
0
||
mp
->
physaddr
==
0
)
if
((
mp
=
mp_search
())
==
0
||
mp
->
physaddr
==
0
)
return
1
;
return
-
1
;
pcmp
=
(
struct
mpctb
*
)
mp
->
physaddr
;
pcmp
=
(
struct
mpctb
*
)
mp
->
physaddr
;
if
(
memcmp
(
pcmp
,
"PCMP"
,
4
))
if
(
memcmp
(
pcmp
,
"PCMP"
,
4
)
!=
0
)
return
2
;
return
-
1
;
if
(
pcmp
->
version
!=
1
&&
pcmp
->
version
!=
4
)
return
-
1
;
length
=
pcmp
->
length
;
length
=
pcmp
->
length
;
sum
=
0
;
sum
=
0
;
for
(
p
=
(
uchar
*
)
pcmp
;
length
;
length
--
)
for
(
p
=
(
uchar
*
)
pcmp
;
length
;
length
--
)
sum
+=
*
p
++
;
sum
+=
*
p
++
;
if
(
sum
!=
0
)
if
(
sum
||
(
pcmp
->
version
!=
1
&&
pcmp
->
version
!=
4
))
return
-
1
;
return
3
;
return
0
;
return
0
;
}
}
...
@@ -114,20 +114,17 @@ mp_detect(void)
...
@@ -114,20 +114,17 @@ mp_detect(void)
void
void
mp_init
(
void
)
mp_init
(
void
)
{
{
int
r
;
int
i
,
r
;
uchar
*
p
,
*
e
;
uchar
*
p
,
*
e
;
struct
mpctb
*
mpctb
;
struct
mpctb
*
mpctb
;
struct
mppe
*
proc
;
struct
mppe
*
proc
;
struct
mpbe
*
bus
;
struct
mpbe
*
bus
;
struct
mpioapic
*
ioapic
;
struct
mpioapic
*
ioapic
;
struct
mpie
*
intr
;
struct
mpie
*
intr
;
int
i
;
uchar
byte
;
ncpu
=
0
;
ncpu
=
0
;
if
(
(
r
=
mp_detect
())
!=
0
)
{
if
(
mp_detect
()
<
0
)
return
;
return
;
}
ismp
=
1
;
ismp
=
1
;
...
@@ -179,11 +176,10 @@ mp_init(void)
...
@@ -179,11 +176,10 @@ mp_init(void)
}
}
if
(
mp
->
imcrp
)
{
if
(
mp
->
imcrp
)
{
// It appears that Bochs doesn't support IMCR, so code won't run.
// Bochs doesn't support IMCR, so this doesn't run on Bochs.
// But it would on real hardware.
outb
(
0x22
,
0x70
);
// Select IMCR
outb
(
0x22
,
0x70
);
// Select IMCR
byte
=
inb
(
0x23
);
// Current contents
outb
(
0x23
,
inb
(
0x23
)
|
1
);
// Mask external interrupts.
byte
|=
0x01
;
// Mask external INTR
outb
(
0x23
,
byte
);
// Disconnect 8259s/NMI
}
}
}
}
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论