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_dynamic_sensor)(int token, int sensor, void *loc_code,
00038 int *state);
00039 int (*get_indices)(int token, int is_sensor, int type, char *workarea,
00040 size_t size, int start, int *next);
00041 int (*get_power_level)(int token, int powerdomain, int *level);
00042 int (*get_rmo_buffer)(size_t size, void **buf, uint32_t *phys_addr);
00043 int (*get_sensor)(int token, int sensor, int index, int *state);
00044 int (*get_sysparm)(int token, unsigned int parameter,
00045 unsigned int length, char *data);
00046 int (*get_time)(int token, uint32_t *year, uint32_t *month,
00047 uint32_t *day, uint32_t *hour, uint32_t *min,
00048 uint32_t *sec, uint32_t *nsec);
00049 int (*get_vpd)(int token, char *loc_code, char *workarea, size_t size,
00050 unsigned int sequence, unsigned int *seq_next,
00051 unsigned int *bytes_ret);
00052 int (*lpar_perftools)(int token, int subfunc, char *workarea,
00053 unsigned int length, unsigned int sequence,
00054 unsigned int *seq_next);
00055 int (*platform_dump)(int token, uint64_t dump_tag, uint64_t sequence,
00056 void *buffer, size_t length,
00057 uint64_t *next_seq, uint64_t *bytes_ret);
00058 int (*read_slot_reset)(int token, uint32_t cfg_addr, uint64_t phbid,
00059 int *state, int *eeh);
00060 int (*scan_log_dump)(int token, void *buffer, size_t length);
00061 int (*set_dynamic_indicator)(int token, int indicator, int new_value,
00062 void *loc_code);
00063 int (*set_eeh_option)(int token, uint32_t cfg_addr, uint64_t phbid,
00064 int function);
00065 int (*set_indicator)(int token, int indicator, int index,
00066 int new_value);
00067 int (*set_power_level)(int token, int powerdomain, int level,
00068 int *setlevel);
00069 int (*set_poweron_time)(int token, uint32_t year, uint32_t month,
00070 uint32_t day, uint32_t hour, uint32_t min,
00071 uint32_t sec, uint32_t nsec);
00072 int (*set_sysparm)(int token, unsigned int parameter, char *data);
00073 int (*set_time)(int token, uint32_t year, uint32_t month, uint32_t day,
00074 uint32_t hour, uint32_t min, uint32_t sec,
00075 uint32_t nsec);
00076 int (*interface_exists)();
00077 };
00078
00079 struct librtas_config {
00080 struct rtas_operations *rtas_ops;
00081 uint64_t rtas_timeout_ms;
00082 int debug;
00083 };
00084
00085 extern int open_proc_rtas_file(const char *name, int mode);
00086 extern int rtas_token(const char *call_name);
00087 extern int read_entire_file(int fd, char **buf, size_t *len);
00088
00089 extern struct librtas_config config;
00090
00091 #define RETURN(_rc) \
00092 if (_rc < 0) \
00093 return _rc
00094
00095 #define CLEANUP(_rc, _label) \
00096 if (_rc < 0) \
00097 goto _label
00098
00099 #define dbg(_lvl, _fmt, _args...) \
00100 do { \
00101 if (config.debug >= _lvl) \
00102 printf("librtas %s(): " _fmt, __FUNCTION__, ##_args); \
00103 } while (0)
00104
00105 #define dbg1(_fmt, _args...) \
00106 do { \
00107 dbg(1, _fmt, ##_args); \
00108 } while (0) \
00109
00110 #endif