#ifndef __TITAN_ASIC_H
#define __TITAN_ASIC_H

#include "knc-asic/knc-asic.h"
#include "knc-asic/knc-transport.h"

#define	KNC_TITAN_MAX_ASICS		6
#define	KNC_TITAN_DIES_PER_ASIC		4
#define	KNC_TITAN_CORES_PER_DIE		571
#define	KNC_TITAN_CORES_PER_ASIC	(KNC_TITAN_CORES_PER_DIE * KNC_TITAN_DIES_PER_ASIC)
#define	KNC_TITAN_WORKSLOTS_PER_CORE	2
#define	KNC_TITAN_THREADS_PER_CORE	8
#define	KNC_TITAN_NONCES_PER_REPORT	5

/* Valid slot numbers: 1..15 */
#define	KNC_TITAN_MIN_WORK_SLOT_NUM	1
#define	KNC_TITAN_MAX_WORK_SLOT_NUM	15

struct nonce_report {
	uint32_t nonce;
	uint8_t slot;
};

bool knc_titan_get_info(const char *repr, void * const ctx, int channel, int die, struct knc_die_info *die_info);
bool knc_titan_set_work(const char *repr, void * const ctx, int channel, int die, int core, int slot, struct work *work, bool urgent, bool *work_accepted, struct knc_report *report);
bool knc_titan_get_report(const char *repr, void * const ctx, int channel, int die, int core, struct knc_report *report);
bool knc_titan_setup_core_local(const char *repr, void * const ctx, int channel, int die, int core, struct titan_setup_core_params *params);

#endif /* __TITAN_ASIC_H */
