/* * CPUMF HW sampler functions and internal structures * * Copyright IBM Corp. 2010 * Author(s): Heinz Graalfs <graalfs@de.ibm.com> */ #ifndef HWSAMPLER_H_ #define HWSAMPLER_H_ #include <linux/workqueue.h> #include <asm/cpu_mf.h> struct hws_ssctl_request_block /* SET SAMPLING CONTROLS req block */ { /* bytes 0 - 7 Bit(s) */ unsigned int s:1; /* 0: maximum buffer indicator */ unsigned int h:1; /* 1: part. level reserved for VM use*/ unsigned long b2_53:52; /* 2-53: zeros */ unsigned int es:1; /* 54: sampling enable control */ unsigned int b55_61:7; /* 55-61: - zeros */ unsigned int cs:1; /* 62: sampling activation control */ unsigned int b63:1; /* 63: zero */ unsigned long interval; /* 8-15: sampling interval */ unsigned long tear; /* 16-23: TEAR contents */ unsigned long dear; /* 24-31: DEAR contents */ /* 32-63: */ unsigned long rsvrd1; /* reserved */ unsigned long rsvrd2; /* reserved */ unsigned long rsvrd3; /* reserved */ unsigned long rsvrd4; /* reserved */ }; struct hws_cpu_buffer { unsigned long first_sdbt; /* @ of 1st SDB-Table for this CP*/ unsigned long worker_entry; unsigned long sample_overflow; /* taken from SDB ... */ struct hws_qsi_info_block qsi; struct hws_ssctl_request_block ssctl; struct work_struct worker; atomic_t ext_params; unsigned long req_alert; unsigned long loss_of_sample_data; unsigned long invalid_entry_address; unsigned long incorrect_sdbt_entry; unsigned long sample_auth_change_alert; unsigned int finish:1; unsigned int oom:1; unsigned int stop_mode:1; }; int hwsampler_setup(void); int hwsampler_shutdown(void); int hwsampler_allocate(unsigned long sdbt, unsigned long sdb); int hwsampler_deallocate(void); unsigned long hwsampler_query_min_interval(void); unsigned long hwsampler_query_max_interval(void); int hwsampler_start_all(unsigned long interval); int hwsampler_stop_all(void); int hwsampler_deactivate(unsigned int cpu); int hwsampler_activate(unsigned int cpu); unsigned long hwsampler_get_sample_overflow_count(unsigned int cpu); #endif /*HWSAMPLER_H_*/