Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
redox-os
drivers
Commits
2b4b9403
Commit
2b4b9403
authored
Dec 01, 2017
by
Browse files
unsafe problem fixed
parent
66826a8b
Changes
1
Hide whitespace changes
Inline
Side-by-side
pcid/src/main.rs
View file @
2b4b9403
...
...
@@ -38,14 +38,18 @@ fn main() {
for
bus
in
pci
.buses
()
{
for
dev
in
bus
.devs
()
{
for
func
in
dev
.funcs
()
{
if
let
Some
(
header
)
=
unsafe
func
.header
()
{
if
let
Some
(
header
)
=
func
.header
()
{
let
pci_class
=
PciClass
::
from
(
header
.class
);
let
mut
string
=
format!
(
"PCI {:>02X}/{:>02X}/{:>02X} {:>04X}:{:>04X} {:>02X}.{:>02X}.{:>02X}.{:>02X} {:?}"
,
bus
.num
,
dev
.num
,
func
.num
,
header
.vendor_id
,
header
.device_id
,
header
.class
,
header
.subclass
,
header
.interface
,
header
.revision
,
pci_class
);
let
mut
string
;
unsafe
{
string
=
format!
(
"PCI {:>02X}/{:>02X}/{:>02X} {:>04X}:{:>04X} {:>02X}.{:>02X}.{:>02X}.{:>02X} {:?}"
,
bus
.num
,
dev
.num
,
func
.num
,
header
.vendor_id
,
header
.device_id
,
header
.class
,
header
.subclass
,
header
.interface
,
header
.revision
,
pci_class
);
}
match
pci_class
{
PciClass
::
Storage
=>
match
header
.subclass
{
...
...
@@ -78,14 +82,16 @@ fn main() {
_
=>
()
}
for
i
in
0
..
header
.bars
.len
()
{
match
PciBar
::
from
(
header
.bars
[
i
])
{
PciBar
::
None
=>
(),
PciBar
::
Memory
(
address
)
=>
string
.push_str
(
&
format!
(
" {}={:>08X}"
,
i
,
address
)),
PciBar
::
Port
(
address
)
=>
string
.push_str
(
&
format!
(
" {}={:>04X}"
,
i
,
address
))
unsafe
{
for
i
in
0
..
header
.bars
.len
()
{
match
PciBar
::
from
(
header
.bars
[
i
])
{
PciBar
::
None
=>
(),
PciBar
::
Memory
(
address
)
=>
string
.push_str
(
&
format!
(
" {}={:>08X}"
,
i
,
address
)),
PciBar
::
Port
(
address
)
=>
string
.push_str
(
&
format!
(
" {}={:>04X}"
,
i
,
address
))
}
}
}
string
.push
(
'\n'
);
print!
(
"{}"
,
string
);
...
...
@@ -124,27 +130,31 @@ fn main() {
let
mut
command
=
Command
::
new
(
program
);
for
arg
in
args
{
let
bar_arg
=
|
i
|
->
String
{
match
PciBar
::
from
(
header
.bars
[
i
])
{
PciBar
::
None
=>
String
::
new
(),
PciBar
::
Memory
(
address
)
=>
format!
(
"{:>08X}"
,
address
),
PciBar
::
Port
(
address
)
=>
format!
(
"{:>04X}"
,
address
)
unsafe
{
match
PciBar
::
from
(
header
.bars
[
i
])
{
PciBar
::
None
=>
String
::
new
(),
PciBar
::
Memory
(
address
)
=>
format!
(
"{:>08X}"
,
address
),
PciBar
::
Port
(
address
)
=>
format!
(
"{:>04X}"
,
address
)
}
}
};
let
arg
=
match
arg
.as_str
()
{
"$BUS"
=>
format!
(
"{:>02X}"
,
bus
.num
),
"$DEV"
=>
format!
(
"{:>02X}"
,
dev
.num
),
"$FUNC"
=>
format!
(
"{:>02X}"
,
func
.num
),
"$NAME"
=>
format!
(
"pci-{:>02X}.{:>02X}.{:>02X}"
,
bus
.num
,
dev
.num
,
func
.num
),
"$BAR0"
=>
bar_arg
(
0
),
"$BAR1"
=>
bar_arg
(
1
),
"$BAR2"
=>
bar_arg
(
2
),
"$BAR3"
=>
bar_arg
(
3
),
"$BAR4"
=>
bar_arg
(
4
),
"$BAR5"
=>
bar_arg
(
5
),
"$IRQ"
=>
format!
(
"{}"
,
header
.interrupt_line
),
"$VENID"
=>
format!
(
"{:>04X}"
,
header
.vendor_id
),
"$DEVID"
=>
format!
(
"{:>04X}"
,
header
.device_id
),
_
=>
arg
.clone
()
let
arg
=
unsafe
{
match
arg
.as_str
()
{
"$BUS"
=>
format!
(
"{:>02X}"
,
bus
.num
),
"$DEV"
=>
format!
(
"{:>02X}"
,
dev
.num
),
"$FUNC"
=>
format!
(
"{:>02X}"
,
func
.num
),
"$NAME"
=>
format!
(
"pci-{:>02X}.{:>02X}.{:>02X}"
,
bus
.num
,
dev
.num
,
func
.num
),
"$BAR0"
=>
bar_arg
(
0
),
"$BAR1"
=>
bar_arg
(
1
),
"$BAR2"
=>
bar_arg
(
2
),
"$BAR3"
=>
bar_arg
(
3
),
"$BAR4"
=>
bar_arg
(
4
),
"$BAR5"
=>
bar_arg
(
5
),
"$IRQ"
=>
format!
(
"{}"
,
header
.interrupt_line
),
"$VENID"
=>
format!
(
"{:>04X}"
,
header
.vendor_id
),
"$DEVID"
=>
format!
(
"{:>04X}"
,
header
.device_id
),
_
=>
arg
.clone
()
}
};
command
.arg
(
&
arg
);
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment