Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
67b2dcc3
Commit
67b2dcc3
authored
Oct 12, 2002
by
Alan Cox
Committed by
Linus Torvalds
Oct 12, 2002
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] update dmi support
parent
e4192bb6
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
65 additions
and
71 deletions
+65
-71
arch/i386/kernel/dmi_scan.c
arch/i386/kernel/dmi_scan.c
+65
-71
No files found.
arch/i386/kernel/dmi_scan.c
View file @
67b2dcc3
...
...
@@ -31,7 +31,7 @@ static char * __init dmi_string(struct dmi_header *dm, u8 s)
if
(
!
s
)
return
""
;
s
--
;
while
(
s
>
0
)
while
(
s
>
0
&&
*
bp
)
{
bp
+=
strlen
(
bp
);
bp
++
;
...
...
@@ -50,7 +50,7 @@ static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dm
u8
*
buf
;
struct
dmi_header
*
dm
;
u8
*
data
;
int
i
=
1
;
int
i
=
0
;
buf
=
bt_ioremap
(
base
,
len
);
if
(
buf
==
NULL
)
...
...
@@ -59,28 +59,23 @@ static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dm
data
=
buf
;
/*
* Stop when we see al the items the table claimed to have
* Stop when we see al
l
the items the table claimed to have
* OR we run off the end of the table (also happens)
*/
while
(
i
<
num
&&
(
data
-
buf
)
<
len
)
while
(
i
<
num
&&
data
-
buf
+
sizeof
(
struct
dmi_header
)
<=
len
)
{
dm
=
(
struct
dmi_header
*
)
data
;
/*
* Avoid misparsing crud if the length of the last
* record is crap
* We want to know the total length (formated area and strings)
* before decoding to make sure we won't run off the table in
* dmi_decode or dmi_string
*/
if
((
data
-
buf
+
dm
->
length
)
>=
len
)
break
;
decode
(
dm
);
data
+=
dm
->
length
;
/*
* Don't go off the end of the data if there is
* stuff looking like string fill past the end
*/
while
((
data
-
buf
)
<
len
&&
(
*
data
||
data
[
1
]))
while
(
data
-
buf
<
len
-
1
&&
(
data
[
0
]
||
data
[
1
]))
data
++
;
if
(
data
-
buf
<
len
-
1
)
decode
(
dm
);
data
+=
2
;
i
++
;
}
...
...
@@ -89,11 +84,20 @@ static int __init dmi_table(u32 base, int len, int num, void (*decode)(struct dm
}
inline
static
int
__init
dmi_checksum
(
u8
*
buf
)
{
u8
sum
=
0
;
int
a
;
for
(
a
=
0
;
a
<
15
;
a
++
)
sum
+=
buf
[
a
];
return
(
sum
==
0
);
}
static
int
__init
dmi_iterate
(
void
(
*
decode
)(
struct
dmi_header
*
))
{
unsigned
char
buf
[
20
];
long
fp
=
0xE0000L
;
fp
-=
16
;
u8
buf
[
15
];
u32
fp
=
0xF0000
;
#ifdef CONFIG_SIMNOW
/*
...
...
@@ -105,24 +109,30 @@ static int __init dmi_iterate(void (*decode)(struct dmi_header *))
while
(
fp
<
0xFFFFF
)
{
fp
+=
16
;
isa_memcpy_fromio
(
buf
,
fp
,
20
);
if
(
memcmp
(
buf
,
"_DMI_"
,
5
)
==
0
)
isa_memcpy_fromio
(
buf
,
fp
,
15
);
if
(
memcmp
(
buf
,
"_DMI_"
,
5
)
==
0
&&
dmi_checksum
(
buf
))
{
u16
num
=
buf
[
13
]
<<
8
|
buf
[
12
];
u16
len
=
buf
[
7
]
<<
8
|
buf
[
6
];
u32
base
=
buf
[
11
]
<<
24
|
buf
[
10
]
<<
16
|
buf
[
9
]
<<
8
|
buf
[
8
];
dmi_printk
((
KERN_INFO
"DMI %d.%d present.
\n
"
,
buf
[
14
]
>>
4
,
buf
[
14
]
&
0x0F
));
/*
* DMI version 0.0 means that the real version is taken from
* the SMBIOS version, which we don't know at this point.
*/
if
(
buf
[
14
]
!=
0
)
dmi_printk
((
KERN_INFO
"DMI %d.%d present.
\n
"
,
buf
[
14
]
>>
4
,
buf
[
14
]
&
0x0F
));
else
dmi_printk
((
KERN_INFO
"DMI present.
\n
"
));
dmi_printk
((
KERN_INFO
"%d structures occupying %d bytes.
\n
"
,
buf
[
13
]
<<
8
|
buf
[
12
],
buf
[
7
]
<<
8
|
buf
[
6
]));
num
,
len
));
dmi_printk
((
KERN_INFO
"DMI table at 0x%08X.
\n
"
,
b
uf
[
11
]
<<
24
|
buf
[
10
]
<<
16
|
buf
[
9
]
<<
8
|
buf
[
8
]
));
b
ase
));
if
(
dmi_table
(
base
,
len
,
num
,
decode
)
==
0
)
return
0
;
}
fp
+=
16
;
}
return
-
1
;
}
...
...
@@ -823,59 +833,43 @@ static __init void dmi_check_blacklist(void)
static
void
__init
dmi_decode
(
struct
dmi_header
*
dm
)
{
u8
*
data
=
(
u8
*
)
dm
;
char
*
p
;
switch
(
dm
->
type
)
{
case
0
:
p
=
dmi_string
(
dm
,
data
[
4
]);
if
(
*
p
)
{
dmi_printk
((
"BIOS Vendor: %s
\n
"
,
p
));
dmi_save_ident
(
dm
,
DMI_BIOS_VENDOR
,
4
);
dmi_printk
((
"BIOS Version: %s
\n
"
,
dmi_string
(
dm
,
data
[
5
])));
dmi_save_ident
(
dm
,
DMI_BIOS_VERSION
,
5
);
dmi_printk
((
"BIOS Release: %s
\n
"
,
dmi_string
(
dm
,
data
[
8
])));
dmi_save_ident
(
dm
,
DMI_BIOS_DATE
,
8
);
}
dmi_printk
((
"BIOS Vendor: %s
\n
"
,
dmi_string
(
dm
,
data
[
4
])));
dmi_save_ident
(
dm
,
DMI_BIOS_VENDOR
,
4
);
dmi_printk
((
"BIOS Version: %s
\n
"
,
dmi_string
(
dm
,
data
[
5
])));
dmi_save_ident
(
dm
,
DMI_BIOS_VERSION
,
5
);
dmi_printk
((
"BIOS Release: %s
\n
"
,
dmi_string
(
dm
,
data
[
8
])));
dmi_save_ident
(
dm
,
DMI_BIOS_DATE
,
8
);
break
;
case
1
:
p
=
dmi_string
(
dm
,
data
[
4
]);
if
(
*
p
)
{
dmi_printk
((
"System Vendor: %s.
\n
"
,
p
));
dmi_save_ident
(
dm
,
DMI_SYS_VENDOR
,
4
);
dmi_printk
((
"Product Name: %s.
\n
"
,
dmi_string
(
dm
,
data
[
5
])));
dmi_save_ident
(
dm
,
DMI_PRODUCT_NAME
,
5
);
dmi_printk
((
"Version %s.
\n
"
,
dmi_string
(
dm
,
data
[
6
])));
dmi_save_ident
(
dm
,
DMI_PRODUCT_VERSION
,
6
);
dmi_printk
((
"Serial Number %s.
\n
"
,
dmi_string
(
dm
,
data
[
7
])));
}
dmi_printk
((
"System Vendor: %s
\n
"
,
dmi_string
(
dm
,
data
[
4
])));
dmi_save_ident
(
dm
,
DMI_SYS_VENDOR
,
4
);
dmi_printk
((
"Product Name: %s
\n
"
,
dmi_string
(
dm
,
data
[
5
])));
dmi_save_ident
(
dm
,
DMI_PRODUCT_NAME
,
5
);
dmi_printk
((
"Version: %s
\n
"
,
dmi_string
(
dm
,
data
[
6
])));
dmi_save_ident
(
dm
,
DMI_PRODUCT_VERSION
,
6
);
dmi_printk
((
"Serial Number: %s
\n
"
,
dmi_string
(
dm
,
data
[
7
])));
break
;
case
2
:
p
=
dmi_string
(
dm
,
data
[
4
]);
if
(
*
p
)
{
dmi_printk
((
"Board Vendor: %s.
\n
"
,
p
));
dmi_save_ident
(
dm
,
DMI_BOARD_VENDOR
,
4
);
dmi_printk
((
"Board Name: %s.
\n
"
,
dmi_string
(
dm
,
data
[
5
])));
dmi_save_ident
(
dm
,
DMI_BOARD_NAME
,
5
);
dmi_printk
((
"Board Version: %s.
\n
"
,
dmi_string
(
dm
,
data
[
6
])));
dmi_save_ident
(
dm
,
DMI_BOARD_VERSION
,
6
);
}
break
;
case
3
:
p
=
dmi_string
(
dm
,
data
[
8
]);
if
(
*
p
&&
*
p
!=
' '
)
dmi_printk
((
"Asset Tag: %s.
\n
"
,
p
));
dmi_printk
((
"Board Vendor: %s
\n
"
,
dmi_string
(
dm
,
data
[
4
])));
dmi_save_ident
(
dm
,
DMI_BOARD_VENDOR
,
4
);
dmi_printk
((
"Board Name: %s
\n
"
,
dmi_string
(
dm
,
data
[
5
])));
dmi_save_ident
(
dm
,
DMI_BOARD_NAME
,
5
);
dmi_printk
((
"Board Version: %s
\n
"
,
dmi_string
(
dm
,
data
[
6
])));
dmi_save_ident
(
dm
,
DMI_BOARD_VERSION
,
6
);
break
;
}
}
...
...
Write
Preview
Markdown
is supported
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