00001
00010 #ifndef _COMMON_H_
00011 #define _COMMON_H_
00012
00013 #include <stdio.h>
00014 #include <stdint.h>
00015
00016 #define RC_BUSY -2
00017 #define EXTENDED_DELAY_MIN 9900
00018 #define EXTENDED_DELAY_MAX 9905
00019
00020 #define PAGE_SIZE 4096
00021
00022
00023
00024
00025
00026
00027 struct rtas_operations {
00028 int (*activate_firmware)(int token);
00029 int (*cfg_connector)(int token, char *workarea);
00030 int (*delay_timeout)(uint64_t timeout_ms);
00031 int (*display_char)(int token, char c);
00032 int (*display_msg)(int token, char *buf);
00033 int (*errinjct)(int token, int etoken, int otoken, char *workarea);
00034 int (*errinjct_close)(int token, int otoken);
00035 int (*errinjct_open)(int token, int *otoken);
00036 int (*free_rmo_buffer)(void *buf, uint32_t phys_addr, size_t size);
00037 int (*get_config_addr_info2)(int token, uint32_t cfg_addr,
00038 uint64_t phb_id, uint32_t func, uint32_t *info);
00039 int (*get_dynamic_sensor)(int token, int sensor, void *loc_code,
00040 int *state);
00041 int (*get_indices)(int token, int is_sensor, int type, char *workarea,
00042 size_t size, int start, int *next);
00043 int (*get_power_level)(int token, int powerdomain, int *level);
00044 int (*get_rmo_buffer)(size_t size, void **buf, uint32_t *phys_addr);
00045 int (*get_sensor)(int token, int sensor, int index, int *state);
00046 int (*get_sysparm)(int token, unsigned int parameter,
00047 unsigned int length, char *data);
00048 int (*get_time)(int token, uint32_t *year, uint32_t *month,
00049 uint32_t *day, uint32_t *hour, uint32_t *min,
00050 uint32_t *sec, uint32_t *nsec);
00051 int (*get_vpd)(int token, char *loc_code, char *workarea, size_t size,
00052 unsigned int sequence, unsigned int *seq_next,
00053 unsigned int *bytes_ret);
00054 int (*lpar_perftools)(int token, int subfunc, char *workarea,
00055 unsigned int length, unsigned int sequence,
00056 unsigned int *seq_next);
00057 int (*platform_dump)(int token, uint64_t dump_tag, uint64_t sequence,
00058 void *buffer, size_t length,
00059 uint64_t *next_seq, uint64_t *bytes_ret);
00060 int (*read_slot_reset)(int token, uint32_t cfg_addr, uint64_t phbid,
00061 int *state, int *eeh);
00062 int (*scan_log_dump)(int token, void *buffer, size_t length);
00063 int (*set_dynamic_indicator)(int token, int indicator, int new_value,
00064 void *loc_code);
00065 int (*set_eeh_option)(int token, uint32_t cfg_addr, uint64_t phbid,
00066 int function);
00067 int (*set_indicator)(int token, int indicator, int index,
00068 int new_value);
00069 int (*set_power_level)(int token, int powerdomain, int level,
00070 int *setlevel);
00071 int (*set_poweron_time)(int token, uint32_t year, uint32_t month,
00072 uint32_t day, uint32_t hour, uint32_t min,
00073 uint32_t sec, uint32_t nsec);
00074 int (*set_sysparm)(int token, unsigned int parameter, char *data);
00075 int (*set_time)(int token, uint32_t year, uint32_t month, uint32_t day,
00076 uint32_t hour, uint32_t min, uint32_t sec,
00077 uint32_t nsec);
00078 int (*suspend_me)(int token, uint64_t streamid);
00079 int (*update_nodes)(int token, char *workarea, unsigned int scope);
00080 int (*update_properties)(int token, char *workarea, unsigned int scope);
00081 int (*interface_exists)();
00082 };
00083
00084 struct librtas_config {
00085 struct rtas_operations *rtas_ops;
00086 uint64_t rtas_timeout_ms;
00087 int debug;
00088 };
00089
00090 extern int open_proc_rtas_file(const char *name, int mode);
00091 extern int rtas_token(const char *call_name);
00092 extern int read_entire_file(int fd, char **buf, size_t *len);
00093
00094 extern struct librtas_config config;
00095
00096 #define dbg(_lvl, _fmt, _args...) \
00097 do { \
00098 if (config.debug >= _lvl) \
00099 printf("librtas %s(): " _fmt, __FUNCTION__, ##_args); \
00100 } while (0)
00101
00102 #define dbg1(_fmt, _args...) \
00103 do { \
00104 dbg(1, _fmt, ##_args); \
00105 } while (0) \
00106
00107 #endif