#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/errno.h>
#include <linux/list.h>
#include <linux/wait.h>
#include <linux/spinlock.h>
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/interrupt.h>
#include <linux/kref.h>
#include <linux/device.h>
#include <linux/input.h>
#include <linux/time64.h>
#define DRIVER_NAME …
#define DRIVER_VERSION …
#define DRIVER_AUTHOR …
#define DRIVER_DESC …
#define err(msg) …
#define info(msg) …
extern int ibmasm_debug;
#define dbg(STR, ARGS...) …
static inline char *get_timestamp(char *buf)
{ … }
#define IBMASM_CMD_PENDING …
#define IBMASM_CMD_COMPLETE …
#define IBMASM_CMD_FAILED …
#define IBMASM_CMD_TIMEOUT_NORMAL …
#define IBMASM_CMD_TIMEOUT_EXTRA …
#define IBMASM_CMD_MAX_BUFFER_SIZE …
#define REVERSE_HEARTBEAT_TIMEOUT …
#define HEARTBEAT_BUFFER_SIZE …
#ifdef IA64
#define IBMASM_DRIVER_VPD …
#else
#define IBMASM_DRIVER_VPD …
#endif
#define SYSTEM_STATE_OS_UP …
#define SYSTEM_STATE_OS_DOWN …
#define IBMASM_NAME_SIZE …
#define IBMASM_NUM_EVENTS …
#define IBMASM_EVENT_MAX_SIZE …
struct command { … };
#define to_command(c) …
void ibmasm_free_command(struct kref *kref);
static inline void command_put(struct command *cmd)
{ … }
static inline void command_get(struct command *cmd)
{ … }
struct ibmasm_event { … };
struct event_buffer { … };
struct event_reader { … };
struct reverse_heartbeat { … };
struct ibmasm_remote { … };
struct service_processor { … };
struct command *ibmasm_new_command(struct service_processor *sp, size_t buffer_size);
void ibmasm_exec_command(struct service_processor *sp, struct command *cmd);
void ibmasm_wait_for_response(struct command *cmd, int timeout);
void ibmasm_receive_command_response(struct service_processor *sp, void *response, size_t size);
int ibmasm_event_buffer_init(struct service_processor *sp);
void ibmasm_event_buffer_exit(struct service_processor *sp);
void ibmasm_receive_event(struct service_processor *sp, void *data, unsigned int data_size);
void ibmasm_event_reader_register(struct service_processor *sp, struct event_reader *reader);
void ibmasm_event_reader_unregister(struct service_processor *sp, struct event_reader *reader);
int ibmasm_get_next_event(struct service_processor *sp, struct event_reader *reader);
void ibmasm_cancel_next_event(struct event_reader *reader);
void ibmasm_register_panic_notifier(void);
void ibmasm_unregister_panic_notifier(void);
int ibmasm_heartbeat_init(struct service_processor *sp);
void ibmasm_heartbeat_exit(struct service_processor *sp);
void ibmasm_receive_heartbeat(struct service_processor *sp, void *message, size_t size);
void ibmasm_init_reverse_heartbeat(struct service_processor *sp, struct reverse_heartbeat *rhb);
int ibmasm_start_reverse_heartbeat(struct service_processor *sp, struct reverse_heartbeat *rhb);
void ibmasm_stop_reverse_heartbeat(struct reverse_heartbeat *rhb);
void ibmasm_receive_message(struct service_processor *sp, void *data, int data_size);
int ibmasm_send_driver_vpd(struct service_processor *sp);
int ibmasm_send_os_state(struct service_processor *sp, int os_state);
int ibmasm_send_i2o_message(struct service_processor *sp);
irqreturn_t ibmasm_interrupt_handler(int irq, void * dev_id);
void ibmasm_handle_mouse_interrupt(struct service_processor *sp);
int ibmasm_init_remote_input_dev(struct service_processor *sp);
void ibmasm_free_remote_input_dev(struct service_processor *sp);
int ibmasmfs_register(void);
void ibmasmfs_unregister(void);
void ibmasmfs_add_sp(struct service_processor *sp);
#if IS_ENABLED(CONFIG_SERIAL_8250)
void ibmasm_register_uart(struct service_processor *sp);
void ibmasm_unregister_uart(struct service_processor *sp);
#else
#define ibmasm_register_uart …
#define ibmasm_unregister_uart …
#endif