#ifndef _AMDZEN_CLIENT_H
#define _AMDZEN_CLIENT_H
#include <sys/types.h>
#include <sys/amdzen/df.h>
#include <sys/amdzen/smn.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
uint32_t dfd_sock_mask;
uint32_t dfd_die_mask;
uint32_t dfd_node_mask;
uint32_t dfd_comp_mask;
uint8_t dfd_sock_shift;
uint8_t dfd_die_shift;
uint8_t dfd_node_shift;
uint8_t dfd_comp_shift;
} df_fabric_decomp_t;
typedef struct {
uint32_t aad_sock_mask;
uint32_t aad_die_mask;
uint32_t aad_ccd_mask;
uint32_t aad_ccx_mask;
uint32_t aad_core_mask;
uint32_t aad_thread_mask;
uint8_t aad_sock_shift;
uint8_t aad_die_shift;
uint8_t aad_ccd_shift;
uint8_t aad_ccx_shift;
uint8_t aad_core_shift;
uint8_t aad_thread_shift;
} amdzen_apic_decomp_t;
extern boolean_t zen_fabric_id_valid_fabid(const df_fabric_decomp_t *,
const uint32_t);
extern boolean_t zen_fabric_id_valid_parts(const df_fabric_decomp_t *,
const uint32_t, const uint32_t, const uint32_t);
extern void zen_fabric_id_decompose(const df_fabric_decomp_t *, const uint32_t,
uint32_t *, uint32_t *, uint32_t *);
extern void zen_fabric_id_compose(const df_fabric_decomp_t *, const uint32_t,
const uint32_t, const uint32_t, uint32_t *);
extern void zen_apic_id_compose(const amdzen_apic_decomp_t *, const uint32_t,
const uint32_t, const uint32_t, const uint32_t, const uint32_t,
const uint32_t, uint32_t *);
#ifdef _KERNEL
extern uint_t amdzen_c_df_count(void);
extern df_rev_t amdzen_c_df_rev(void);
extern int amdzen_c_df_fabric_decomp(df_fabric_decomp_t *);
extern int amdzen_c_smn_read(uint_t, const smn_reg_t, uint32_t *);
extern int amdzen_c_smn_write(uint_t, const smn_reg_t, const uint32_t);
extern int amdzen_c_df_read32(uint_t, uint8_t, const df_reg_def_t, uint32_t *);
extern int amdzen_c_df_read64(uint_t, uint8_t, const df_reg_def_t, uint64_t *);
extern int amdzen_c_df_read32_bcast(uint_t, const df_reg_def_t, uint32_t *);
extern int amdzen_c_df_read64_bcast(uint_t, const df_reg_def_t, uint64_t *);
typedef enum {
ZEN_DF_TYPE_CS_UMC,
ZEN_DF_TYPE_CCM_CPU
} zen_df_type_t;
typedef int (*amdzen_c_iter_f)(uint_t, uint32_t, uint32_t, void *);
extern int amdzen_c_df_iter(uint_t, zen_df_type_t, amdzen_c_iter_f, void *);
#endif
#ifdef __cplusplus
}
#endif
#endif