ipmi,smbios: move smbios_walk_table to smbios.h
This function will be used for exposing DMI info as sysctls in the smbios module (in an upcoming review). While here, add __packed to the structs. Reviewed by: dab MFC after: 1 week Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D29270
This commit is contained in:
parent
a29bff7a52
commit
f689cb23b2
@ -79,8 +79,6 @@ struct ipmi_entry {
|
|||||||
#define SPACING_32 0x1
|
#define SPACING_32 0x1
|
||||||
#define SPACING_16 0x2
|
#define SPACING_16 0x2
|
||||||
|
|
||||||
typedef void (*smbios_callback_t)(struct smbios_structure_header *, void *);
|
|
||||||
|
|
||||||
static struct ipmi_get_info ipmi_info;
|
static struct ipmi_get_info ipmi_info;
|
||||||
static int ipmi_probed;
|
static int ipmi_probed;
|
||||||
static struct mtx ipmi_info_mtx;
|
static struct mtx ipmi_info_mtx;
|
||||||
@ -88,8 +86,6 @@ MTX_SYSINIT(ipmi_info, &ipmi_info_mtx, "ipmi info", MTX_DEF);
|
|||||||
|
|
||||||
static void ipmi_smbios_probe(struct ipmi_get_info *);
|
static void ipmi_smbios_probe(struct ipmi_get_info *);
|
||||||
static int smbios_cksum(struct smbios_eps *);
|
static int smbios_cksum(struct smbios_eps *);
|
||||||
static void smbios_walk_table(uint8_t *, int, smbios_callback_t,
|
|
||||||
void *);
|
|
||||||
static void smbios_ipmi_info(struct smbios_structure_header *, void *);
|
static void smbios_ipmi_info(struct smbios_structure_header *, void *);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -146,31 +142,6 @@ smbios_ipmi_info(struct smbios_structure_header *h, void *arg)
|
|||||||
info->iface_type = s->interface_type;
|
info->iface_type = s->interface_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
smbios_walk_table(uint8_t *p, int entries, smbios_callback_t cb, void *arg)
|
|
||||||
{
|
|
||||||
struct smbios_structure_header *s;
|
|
||||||
|
|
||||||
while (entries--) {
|
|
||||||
s = (struct smbios_structure_header *)p;
|
|
||||||
cb(s, arg);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Look for a double-nul after the end of the
|
|
||||||
* formatted area of this structure.
|
|
||||||
*/
|
|
||||||
p += s->length;
|
|
||||||
while (!(p[0] == 0 && p[1] == 0))
|
|
||||||
p++;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Skip over the double-nul to the start of the next
|
|
||||||
* structure.
|
|
||||||
*/
|
|
||||||
p += 2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Walk the SMBIOS table looking for an IPMI (type 38) entry. If we find
|
* Walk the SMBIOS table looking for an IPMI (type 38) entry. If we find
|
||||||
* one, return the parsed data in the passed in ipmi_get_info structure and
|
* one, return the parsed data in the passed in ipmi_get_info structure and
|
||||||
|
@ -56,12 +56,39 @@ struct smbios_eps {
|
|||||||
uint32_t structure_table_address;
|
uint32_t structure_table_address;
|
||||||
uint16_t number_structures;
|
uint16_t number_structures;
|
||||||
uint8_t BCD_revision;
|
uint8_t BCD_revision;
|
||||||
};
|
} __packed;
|
||||||
|
|
||||||
struct smbios_structure_header {
|
struct smbios_structure_header {
|
||||||
uint8_t type;
|
uint8_t type;
|
||||||
uint8_t length;
|
uint8_t length;
|
||||||
uint16_t handle;
|
uint16_t handle;
|
||||||
};
|
} __packed;
|
||||||
|
|
||||||
|
typedef void (*smbios_callback_t)(struct smbios_structure_header *, void *);
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
smbios_walk_table(uint8_t *p, int entries, smbios_callback_t cb, void *arg)
|
||||||
|
{
|
||||||
|
struct smbios_structure_header *s;
|
||||||
|
|
||||||
|
while (entries--) {
|
||||||
|
s = (struct smbios_structure_header *)p;
|
||||||
|
cb(s, arg);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Look for a double-nul after the end of the
|
||||||
|
* formatted area of this structure.
|
||||||
|
*/
|
||||||
|
p += s->length;
|
||||||
|
while (!(p[0] == 0 && p[1] == 0))
|
||||||
|
p++;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Skip over the double-nul to the start of the next
|
||||||
|
* structure.
|
||||||
|
*/
|
||||||
|
p += 2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* _SMBIOS_H_ */
|
#endif /* _SMBIOS_H_ */
|
||||||
|
Loading…
Reference in New Issue
Block a user