87 entry->
len ) ) != 0 ) {
88 DBG (
"SMBIOS at %08lx has bad checksum %02x\n",
94 DBG (
"Found SMBIOS v%d.%d entry point at %08lx\n",
100 DBG (
"No SMBIOS found\n" );
127 entry->
len ) ) != 0 ) {
128 DBG (
"SMBIOS3 at %08lx has bad checksum %02x\n",
134 DBG (
"Found SMBIOS3 v%d.%d entry point at %08lx\n",
140 DBG (
"No SMBIOS3 found\n" );
172 unsigned int count = 0;
174 size_t strings_offset;
175 size_t terminator_offset;
190 sizeof ( structure->
header ) );
195 DBG (
"SMBIOS structure at offset %zx with length " 196 "%x extends beyond SMBIOS\n",
offset,
201 if ( ! terminator_offset ) {
202 DBG (
"SMBIOS structure at offset %zx has " 203 "unterminated strings section\n",
offset );
206 structure->
strings_len = ( terminator_offset - strings_offset);
208 DBG (
"SMBIOS structure at offset %zx has type %d, length %x, " 219 ( instance-- == 0 ) ) {
225 offset = ( terminator_offset + 1 );
229 DBG (
"SMBIOS structure type %d not found\n",
type );
264 size_t strings_end = ( strings_start + structure->
strings_len );
275 offset += ( string_len + 1 ) ) {
281 if ( --
index == 0 ) {
283 if (
len > string_len )
290 DBG (
"SMBIOS string index %d not found\n",
index );
uint32_t signature
Signature.
size_t strings_len
Length of strings section.
struct arbelprm_rc_send_wqe rc
#define SMBIOS_SIGNATURE
Signature for 32-bit SMBIOS entry point.
unsigned int count
Number of SMBIOS structures.
#define SMBIOS_TYPE_END
SMBIOS end of table type.
uint32_t type
Operating system type.
static __always_inline void copy_from_user(void *dest, userptr_t src, off_t src_off, size_t len)
Copy data from user buffer.
unsigned long user_to_phys(userptr_t userptr, off_t offset)
Convert user pointer to physical address.
int read_smbios_structure(struct smbios_structure *structure, void *data, size_t len)
Copy SMBIOS structure.
size_t len
Length of SMBIOS structures.
#define ENOENT
No such file or directory.
SMBIOS entry point descriptor.
struct smbios_header header
Copy of SMBIOS structure header.
#define SMBIOS3_SIGNATURE
Signature for 64-bit SMBIOS entry point.
int find_smbios(struct smbios *smbios)
Access to external ("user") memory.
uint16_t version
SMBIOS version.
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
void smbios_clear(void)
Clear SMBIOS entry point descriptor.
uint32_t start
Starting offset.
uint32_t userptr_t
A pointer to a user buffer.
int find_smbios_structure(unsigned int type, unsigned int instance, struct smbios_structure *structure)
Find specific structure type within SMBIOS.
assert((readw(&hdr->flags) &(GTF_reading|GTF_writing))==0)
uint32_t signature
Signature.
int find_smbios_entry(userptr_t start, size_t len, struct smbios_entry *entry)
Scan for SMBIOS 32-bit entry point structure.
SMBIOS 32-bit entry point.
uint16_t count
Number of entries.
int smbios_version(void)
Get SMBIOS version.
int read_smbios_string(struct smbios_structure *structure, unsigned int index, void *data, size_t len)
Find indexed string within SMBIOS structure.
#define ENODEV
No such device.
uint8_t minor
Minor version.
size_t strlen_user(userptr_t userptr, off_t offset)
Find length of NUL-terminated string in user buffer.
#define UNULL
Equivalent of NULL for user pointers.
int find_smbios3_entry(userptr_t start, size_t len, struct smbios3_entry *entry)
Scan for SMBIOS 64-bit entry point structure.
uint8_t minor
Minor version.
userptr_t address
Start of SMBIOS structures.
static uint8_t smbios_checksum(userptr_t start, size_t offset, size_t len)
Calculate SMBIOS entry point structure checksum.
uint32_t end
Ending offset.
uint8_t data[48]
Additional event data.
uint16_t offset
Offset to command line.
#define DBG(...)
Print a debugging message.
uint8_t major
Major version.
SMBIOS structure descriptor.
static size_t find_strings_terminator(size_t offset)
Find SMBIOS strings terminator.
size_t offset
Offset of structure within SMBIOS.
uint8_t major
Major version.
SMBIOS 64-bit entry point.