#ifndef __PSTORE_INTERNAL_H__ #define __PSTORE_INTERNAL_H__ #include <linux/types.h> #include <linux/time.h> #include <linux/pstore.h> #if NR_CPUS <= 2 && defined(CONFIG_ARM_THUMB) #define PSTORE_CPU_IN_IP 0x1 #elif NR_CPUS <= 4 && defined(CONFIG_ARM) #define PSTORE_CPU_IN_IP 0x3 #endif struct pstore_ftrace_record { unsigned long ip; unsigned long parent_ip; #ifndef PSTORE_CPU_IN_IP unsigned int cpu; #endif }; static inline void pstore_ftrace_encode_cpu(struct pstore_ftrace_record *rec, unsigned int cpu) { #ifndef PSTORE_CPU_IN_IP rec->cpu = cpu; #else rec->ip |= cpu; #endif } static inline unsigned int pstore_ftrace_decode_cpu(struct pstore_ftrace_record *rec) { #ifndef PSTORE_CPU_IN_IP return rec->cpu; #else return rec->ip & PSTORE_CPU_IN_IP; #endif } #ifdef CONFIG_PSTORE_FTRACE extern void pstore_register_ftrace(void); extern void pstore_unregister_ftrace(void); #else static inline void pstore_register_ftrace(void) {} static inline void pstore_unregister_ftrace(void) {} #endif #ifdef CONFIG_PSTORE_PMSG extern void pstore_register_pmsg(void); extern void pstore_unregister_pmsg(void); #else static inline void pstore_register_pmsg(void) {} static inline void pstore_unregister_pmsg(void) {} #endif extern struct pstore_info *psinfo; extern void pstore_set_kmsg_bytes(int); extern void pstore_get_records(int); extern int pstore_mkfile(enum pstore_type_id, char *psname, u64 id, int count, char *data, bool compressed, size_t size, struct timespec time, struct pstore_info *psi); extern bool pstore_is_mounted(void); #endif