1#ifndef __PSTORE_INTERNAL_H__ 2#define __PSTORE_INTERNAL_H__ 3 4#include <linux/types.h> 5#include <linux/time.h> 6#include <linux/pstore.h> 7 8#if NR_CPUS <= 2 && defined(CONFIG_ARM_THUMB) 9#define PSTORE_CPU_IN_IP 0x1 10#elif NR_CPUS <= 4 && defined(CONFIG_ARM) 11#define PSTORE_CPU_IN_IP 0x3 12#endif 13 14struct pstore_ftrace_record { 15 unsigned long ip; 16 unsigned long parent_ip; 17#ifndef PSTORE_CPU_IN_IP 18 unsigned int cpu; 19#endif 20}; 21 22static inline void 23pstore_ftrace_encode_cpu(struct pstore_ftrace_record *rec, unsigned int cpu) 24{ 25#ifndef PSTORE_CPU_IN_IP 26 rec->cpu = cpu; 27#else 28 rec->ip |= cpu; 29#endif 30} 31 32static inline unsigned int 33pstore_ftrace_decode_cpu(struct pstore_ftrace_record *rec) 34{ 35#ifndef PSTORE_CPU_IN_IP 36 return rec->cpu; 37#else 38 return rec->ip & PSTORE_CPU_IN_IP; 39#endif 40} 41 42#ifdef CONFIG_PSTORE_FTRACE 43extern void pstore_register_ftrace(void); 44#else 45static inline void pstore_register_ftrace(void) {} 46#endif 47 48#ifdef CONFIG_PSTORE_PMSG 49extern void pstore_register_pmsg(void); 50#else 51static inline void pstore_register_pmsg(void) {} 52#endif 53 54extern struct pstore_info *psinfo; 55 56extern void pstore_set_kmsg_bytes(int); 57extern void pstore_get_records(int); 58extern int pstore_mkfile(enum pstore_type_id, char *psname, u64 id, 59 int count, char *data, bool compressed, 60 size_t size, struct timespec time, 61 struct pstore_info *psi); 62extern int pstore_is_mounted(void); 63 64#endif 65