17 #if CONFIG(HAVE_ACPI_TABLES)
21 #if CONFIG(GENERATE_SMBIOS_TABLES)
52 if (ret !=
sizeof(*rsp)) {
72 if (ret !=
sizeof(*rsp)) {
158 for (retry_count = 0; retry_count < conf->
bmc_boot_timeout; retry_count++) {
165 switch (selftestrsp.
result) {
173 printk(
BIOS_ERR,
"BMC: Corrupted or inaccessible data or device\n");
219 if (
CONFIG(DRIVERS_IPMI_SUPERMICRO_OEM))
223 #if CONFIG(HAVE_ACPI_TABLES)
227 ipmi_write_acpi_tables(
const struct device *dev,
unsigned long current,
232 s8 gpe_interrupt = -1;
233 u32 apic_interrupt = 0;
241 switch (CONFIG_IPMI_KCS_REGISTER_SPACING) {
243 addr.bit_offset = 32;
246 addr.bit_offset = 128;
249 printk(
BIOS_ERR,
"IPMI: Unsupported register spacing for SPMI\n");
282 static void ipmi_ssdt(
const struct device *dev)
299 conf->
uid = uid_cnt++;
312 dev->
path.
pnp.
port + CONFIG_IPMI_KCS_REGISTER_SPACING, 1, 1, 1);
338 *ipmi_bmc_major_revision = 0;
339 *ipmi_bmc_minor_revision = 0;
346 #if CONFIG(GENERATE_SMBIOS_TABLES)
347 static int ipmi_smbios_data(
struct device *dev,
int *handle,
348 unsigned long *current)
351 u8 nv_storage = 0xff;
363 switch (CONFIG_IPMI_KCS_REGISTER_SPACING) {
365 register_spacing = 1 << 6;
368 register_spacing = 2 << 6;
371 printk(
BIOS_ERR,
"IPMI: Unsupported register spacing for SMBIOS\n");
374 register_spacing = 0 << 6;
420 #if CONFIG(HAVE_ACPI_TABLES)
421 .write_acpi_tables = ipmi_write_acpi_tables,
422 .acpi_fill_ssdt = ipmi_ssdt,
424 #if CONFIG(GENERATE_SMBIOS_TABLES)
425 .get_smbios_data = ipmi_smbios_data,
void acpi_create_ipmi(const struct device *device, struct acpi_spmi *spmi, const u16 ipmi_revision, const acpi_addr_t *addr, const enum acpi_ipmi_interface_type type, const s8 gpe_interrupt, const u32 apic_interrupt, const u32 uid)
void acpi_add_table(acpi_rsdp_t *rsdp, void *table)
Add an ACPI table to the RSDT (and XSDT) structure, recalculate length and checksum.
const char * acpi_device_scope(const struct device *dev)
void acpigen_write_return_integer(uint64_t arg)
void acpigen_pop_len(void)
void acpigen_write_name_byte(const char *name, uint8_t val)
void acpigen_write_scope(const char *name)
void acpigen_write_return_byte(uint8_t arg)
void acpigen_write_resourcetemplate_footer(void)
void acpigen_write_irq(u16 mask)
void acpigen_write_STA(uint8_t status)
void acpigen_write_name_unicode(const char *name, const char *string)
void acpigen_write_resourcetemplate_header(void)
void acpigen_write_device(const char *name)
void acpigen_write_io16(u16 min, u16 max, u8 align, u8 len, u8 decode16)
void acpigen_write_method(const char *name, int nargs)
void acpigen_write_name(const char *name)
void acpigen_write_name_string(const char *name, const char *string)
void * memcpy(void *dest, const void *src, size_t n)
int get_smbios_data(struct device *dev, int *handle, unsigned long *current)
int smbios_write_type38(unsigned long *current, int *handle, const enum smbios_bmc_interface_type interface_type, const u8 ipmi_rev, const u8 i2c_addr, const u8 nv_addr, const u64 base_addr, const u8 base_modifier, const u8 irq)
int boot_state_sched_on_entry(struct boot_state_callback *bscb, boot_state_t state)
#define printk(level,...)
void mdelay(unsigned int msecs)
const struct gpio_operations * dev_get_gpio_ops(struct device *dev)
struct resource * new_resource(struct device *dev, unsigned int index)
See if a resource structure already exists for a given index and if not allocate one.
void report_resource_stored(struct device *dev, const struct resource *resource, const char *comment)
Print the resource that was just stored.
const char * dev_path(const struct device *dev)
static struct gpio_operations gpio_ops
#define ACPI_ACCESS_SIZE_BYTE_ACCESS
#define ACPI_ADDRESS_SPACE_IO
@ SMBIOS_BMC_INTERFACE_KCS
static int stopwatch_expired(struct stopwatch *sw)
static void stopwatch_init_msecs_expire(struct stopwatch *sw, long ms)
int ipmi_kcs_message(int port, int netfn, int lun, int cmd, const unsigned char *inmsg, int inlen, unsigned char *outmsg, int outlen)
#define IPMI_IPMI_VERSION_MAJOR(x)
#define IPMI_APP_SELFTEST_NOT_IMPLEMENTED
#define IPMI_BMC_GET_DEVICE_ID
#define IPMI_APP_SELFTEST_RESERVED
#define IPMI_NETFN_APPLICATION
#define IPMI_BMC_GET_SELFTEST_RESULTS
#define IPMI_IPMI_VERSION_MINOR(x)
#define IPMI_APP_SELFTEST_ERROR
#define IPMI_APP_SELFTEST_FATAL_HW_ERROR
#define IPMI_APP_SELFTEST_NO_ERROR
static void bmc_set_post_complete_gpio_callback(void *arg)
static u8 ipmi_revision_major
static int ipmi_get_device_id(struct device *dev, struct ipmi_devid_rsp *rsp)
static int ipmi_get_bmc_self_test_result(struct device *dev, struct ipmi_selftest_rsp *rsp)
static u8 bmc_revision_major
static void enable_dev(struct device *dev)
static void ipmi_read_resources(struct device *dev)
static struct device_operations ops
void ipmi_bmc_version(uint8_t *ipmi_bmc_major_revision, uint8_t *ipmi_bmc_minor_revision)
static u8 ipmi_revision_minor
static void ipmi_set_resources(struct device *dev)
static void ipmi_kcs_init(struct device *dev)
static struct boot_state_callback bscb_post_complete
struct chip_operations drivers_ipmi_ops
static u8 bmc_revision_minor
void supermicro_ipmi_oem(const uint16_t kcs_port)
#define BIOS_INFO
BIOS_INFO - Expected events.
#define BIOS_DEBUG
BIOS_DEBUG - Verbose output.
#define BIOS_ERR
BIOS_ERR - System in incomplete state.
#define BIOS_WARNING
BIOS_WARNING - Bad configuration.
#define IORESOURCE_STORED
#define IORESOURCE_ASSIGNED
void(* callback)(void *arg)
void(* read_resources)(struct device *dev)
enum device_path_type type
struct device_operations * ops
DEVTREE_CONST struct resource * resource_list
DEVTREE_CONST void * chip_info
bool post_complete_invert
DEVTREE_CONST struct device * gpio_dev
u8 nv_storage_device_address
int(* get)(uint32_t gpio)
void(* output)(uint32_t gpio, int value)
uint8_t manufacturer_id[3]
DEVTREE_CONST struct resource * next