/*
 * Intel MIC Platform Software Stack (MPSS)
 *
 * Copyright(c) 2015 Intel Corporation.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License, version 2, as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details.
 *
 * The full GNU General Public License is included in this distribution in
 * the file called "COPYING".
 *
 * Intel MIC Coprocessor State Management (COSM) Driver
 *
 */
#ifndef _COSM_COSM_H_
#define _COSM_COSM_H_

#include <linux/scif.h>
#include "../bus/cosm_bus.h"

#define COSM_HEARTBEAT_SEND_SEC 30
#define SCIF_COSM_LISTEN_PORT  201

/**
 * enum COSM msg id's
 * @COSM_MSG_SHUTDOWN: host->card trigger shutdown
 * @COSM_MSG_SYNC_TIME: host->card send host time to card to sync time
 * @COSM_MSG_HEARTBEAT: card->host heartbeat
 * @COSM_MSG_SHUTDOWN_STATUS: card->host with shutdown status as payload
 */
enum cosm_msg_id {
	COSM_MSG_SHUTDOWN,
	COSM_MSG_SYNC_TIME,
	COSM_MSG_HEARTBEAT,
	COSM_MSG_SHUTDOWN_STATUS,
};

struct cosm_msg {
	u64 id;
	union {
		u64 shutdown_status;
		struct timespec64 timespec;
	};
};

extern const char * const cosm_state_string[];
extern const char * const cosm_shutdown_status_string[];

void cosm_sysfs_init(struct cosm_device *cdev);
int cosm_start(struct cosm_device *cdev);
void cosm_stop(struct cosm_device *cdev, bool force);
int cosm_reset(struct cosm_device *cdev);
int cosm_shutdown(struct cosm_device *cdev);
void cosm_set_state(struct cosm_device *cdev, u8 state);
void cosm_set_shutdown_status(struct cosm_device *cdev, u8 status);
void cosm_init_debugfs(void);
void cosm_exit_debugfs(void);
void cosm_create_debug_dir(struct cosm_device *cdev);
void cosm_delete_debug_dir(struct cosm_device *cdev);
int cosm_scif_init(void);
void cosm_scif_exit(void);
void cosm_scif_work(struct work_struct *work);

#endif
