Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
X
xv6-public
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
问题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
银宸时代
OS Lab Group
奖励实验
xv6-public
提交
577f85e1
提交
577f85e1
2月 10, 2012
创建
作者:
Nickolai Zeldovich
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
more c++
上级
9bbaf1df
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
49 行增加
和
39 行删除
+49
-39
e1000.cc
e1000.cc
+4
-2
hwvm.c
hwvm.c
+1
-1
hz.cc
hz.cc
+2
-0
kernel.h
kernel.h
+28
-0
main.c
main.c
+0
-26
memide.cc
memide.cc
+2
-0
pci.cc
pci.cc
+12
-10
没有找到文件。
e1000.c
→
e1000.c
c
浏览文件 @
577f85e1
extern
"C"
{
#include "types.h"
#include "amd64.h"
#include "kernel.h"
#include "pci.h"
#include "spinlock.h"
#include "e1000reg.h"
}
#define TX_RING_SIZE 64
#define RX_RING_SIZE 64
...
...
@@ -34,7 +36,7 @@ static inline u32
erd
(
u32
reg
)
{
paddr
pa
=
e1000
.
membase
+
reg
;
volatile
u32
*
ptr
=
p2v
(
pa
);
volatile
u32
*
ptr
=
(
u32
*
)
p2v
(
pa
);
return
*
ptr
;
}
...
...
@@ -42,7 +44,7 @@ static inline void
ewr
(
u32
reg
,
u32
val
)
{
paddr
pa
=
e1000
.
membase
+
reg
;
volatile
u32
*
ptr
=
p2v
(
pa
);
volatile
u32
*
ptr
=
(
u32
*
)
p2v
(
pa
);
*
ptr
=
val
;
}
...
...
hwvm.c
浏览文件 @
577f85e1
...
...
@@ -85,7 +85,7 @@ updatepages(pme_t *pml4, void *begin, void *end, int perm)
// Map from 0 to 128Gbytes starting at KBASE.
void
initpg
(
char
*
(
*
alloc
)(
void
)
)
initpg
(
void
)
{
extern
char
end
[];
void
*
va
=
(
void
*
)
KBASE
;
...
...
hz.c
→
hz.c
c
浏览文件 @
577f85e1
// Intel 8253/8254/82C54 Programmable Interval Timer (PIT).
// http://en.wikipedia.org/wiki/Intel_8253
extern
"C"
{
#include "types.h"
#include "amd64.h"
#include "kernel.h"
}
#define IO_TIMER1 0x040 // 8253 Timer #1
#define TIMER_FREQ 1193182
...
...
kernel.h
浏览文件 @
577f85e1
...
...
@@ -132,6 +132,7 @@ pme_t * walkpgdir(pml4e_t*, const void*, int);
// hz.c
void
microdelay
(
u64
);
u64
nsectime
(
void
);
void
inithz
(
void
);
// ide.c
void
ideinit
(
void
);
...
...
@@ -351,3 +352,30 @@ void initcilkframe(struct cilkframe *wq);
#define cilk_trywork() 0
#define initcilkframe(x) do { } while (0)
#endif
// various init functions
void
initpic
(
void
);
void
initioapic
(
void
);
void
inituart
(
void
);
void
initcga
(
void
);
void
initconsole
(
void
);
void
initpg
(
void
);
void
initmp
(
void
);
void
initlapic
(
void
);
void
inittls
(
void
);
void
inittrap
(
void
);
void
initseg
(
void
);
void
initkalloc
(
u64
mbaddr
);
void
initrcu
(
void
);
void
initproc
(
void
);
void
initbio
(
void
);
void
initinode
(
void
);
void
initdisk
(
void
);
void
inituser
(
void
);
void
initcilk
(
void
);
void
initsamp
(
void
);
void
initpci
(
void
);
void
initnet
(
void
);
void
initsched
(
void
);
void
initlockstat
(
void
);
main.c
浏览文件 @
577f85e1
...
...
@@ -4,32 +4,6 @@
#include "cpu.h"
#include "amd64.h"
extern
void
initpic
(
void
);
extern
void
initioapic
(
void
);
extern
void
inituart
(
void
);
extern
void
initcga
(
void
);
extern
void
initconsole
(
void
);
extern
void
initpg
(
void
);
extern
void
initmp
(
void
);
extern
void
initlapic
(
void
);
extern
void
inittls
(
void
);
extern
void
inittrap
(
void
);
extern
void
initseg
(
void
);
extern
void
initkalloc
(
u64
mbaddr
);
extern
void
initrcu
(
void
);
extern
void
initproc
(
void
);
extern
void
initbio
(
void
);
extern
void
initinode
(
void
);
extern
void
initdisk
(
void
);
extern
void
inituser
(
void
);
extern
void
inithz
(
void
);
extern
void
initcilk
(
void
);
extern
void
initsamp
(
void
);
extern
void
initpci
(
void
);
extern
void
initnet
(
void
);
extern
void
initsched
(
void
);
extern
void
initlockstat
(
void
);
static
volatile
int
bstate
;
void
...
...
memide.c
→
memide.c
c
浏览文件 @
577f85e1
// Fake IDE disk; stores blocks in memory.
// Useful for running kernel without scratch disk.
extern
"C"
{
#include "types.h"
#include "mmu.h"
#include "kernel.h"
...
...
@@ -11,6 +12,7 @@
#include "amd64.h"
#include "traps.h"
#include "buf.h"
}
extern
u8
_fs_img_start
[];
extern
u64
_fs_img_size
;
...
...
pci.c
→
pci.c
c
浏览文件 @
577f85e1
extern
"C"
{
#include "types.h"
#include "amd64.h"
#include "kernel.h"
#include "pci.h"
#include "pcireg.h"
}
extern
int
e1000attach
(
struct
pci_func
*
pcif
);
extern
int
e1000eattach
(
struct
pci_func
*
pcif
);
...
...
@@ -45,26 +47,26 @@ struct pci_driver pci_attach_vendor[] = {
static
const
char
*
pci_class
[]
=
{
[
0x0
]
=
"Unknown"
,
[
0x1
]
=
"Storage controller"
,
[
0x2
]
=
"Network controller"
,
[
0x3
]
=
"Display controller"
,
[
0x4
]
=
"Multimedia device"
,
[
0x5
]
=
"Memory controller"
,
[
0x6
]
=
"Bridge device"
,
"Unknown"
,
"Storage controller"
,
"Network controller"
,
"Display controller"
,
"Multimedia device"
,
"Memory controller"
,
"Bridge device"
,
};
static
void
pci_print_func
(
struct
pci_func
*
f
)
{
const
char
*
class
=
pci_class
[
0
];
const
char
*
class
name
=
pci_class
[
0
];
if
(
PCI_CLASS
(
f
->
dev_class
)
<
sizeof
(
pci_class
)
/
sizeof
(
pci_class
[
0
]))
class
=
pci_class
[
PCI_CLASS
(
f
->
dev_class
)];
class
name
=
pci_class
[
PCI_CLASS
(
f
->
dev_class
)];
cprintf
(
"PCI: %x:%x.%d: %x:%x: class: %x.%x (%s) irq: %d
\n
"
,
f
->
bus
->
busno
,
f
->
dev
,
f
->
func
,
PCI_VENDOR
(
f
->
dev_id
),
PCI_PRODUCT
(
f
->
dev_id
),
PCI_CLASS
(
f
->
dev_class
),
PCI_SUBCLASS
(
f
->
dev_class
),
class
,
PCI_CLASS
(
f
->
dev_class
),
PCI_SUBCLASS
(
f
->
dev_class
),
class
name
,
f
->
irq_line
);
}
...
...
编写
预览
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论