/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Greybus Host Device
 *
 * Copyright 2014-2015 Google Inc.
 * Copyright 2014-2015 Linaro Ltd.
 */

#ifndef __HD_H
#define __HD_H

#include <linux/types.h>
#include <linux/device.h>

struct gb_host_device;
struct gb_message;

struct gb_hd_driver {
	size_t	hd_priv_size;

	int (*cport_allocate)(struct gb_host_device *hd, int cport_id,
				unsigned long flags);
	void (*cport_release)(struct gb_host_device *hd, u16 cport_id);
	int (*cport_enable)(struct gb_host_device *hd, u16 cport_id,
				unsigned long flags);
	int (*cport_disable)(struct gb_host_device *hd, u16 cport_id);
	int (*cport_connected)(struct gb_host_device *hd, u16 cport_id);
	int (*cport_flush)(struct gb_host_device *hd, u16 cport_id);
	int (*cport_shutdown)(struct gb_host_device *hd, u16 cport_id,
				u8 phase, unsigned int timeout);
	int (*cport_quiesce)(struct gb_host_device *hd, u16 cport_id,
				size_t peer_space, unsigned int timeout);
	int (*cport_clear)(struct gb_host_device *hd, u16 cport_id);

	int (*message_send)(struct gb_host_device *hd, u16 dest_cport_id,
			struct gb_message *message, gfp_t gfp_mask);
	void (*message_cancel)(struct gb_message *message);
	int (*latency_tag_enable)(struct gb_host_device *hd, u16 cport_id);
	int (*latency_tag_disable)(struct gb_host_device *hd, u16 cport_id);
	int (*output)(struct gb_host_device *hd, void *req, u16 size, u8 cmd,
		      bool async);
};

struct gb_host_device {
	struct device dev;
	int bus_id;
	const struct gb_hd_driver *driver;

	struct list_head modules;
	struct list_head connections;
	struct ida cport_id_map;

	/* Number of CPorts supported by the UniPro IP */
	size_t num_cports;

	/* Host device buffer constraints */
	size_t buffer_size_max;

	struct gb_svc *svc;
	/* Private data for the host driver */
	unsigned long hd_priv[] __aligned(sizeof(s64));
};
#define to_gb_host_device(d) container_of(d, struct gb_host_device, dev)

int gb_hd_cport_reserve(struct gb_host_device *hd, u16 cport_id);
void gb_hd_cport_release_reserved(struct gb_host_device *hd, u16 cport_id);
int gb_hd_cport_allocate(struct gb_host_device *hd, int cport_id,
					unsigned long flags);
void gb_hd_cport_release(struct gb_host_device *hd, u16 cport_id);

struct gb_host_device *gb_hd_create(struct gb_hd_driver *driver,
					struct device *parent,
					size_t buffer_size_max,
					size_t num_cports);
int gb_hd_add(struct gb_host_device *hd);
void gb_hd_del(struct gb_host_device *hd);
void gb_hd_shutdown(struct gb_host_device *hd);
void gb_hd_put(struct gb_host_device *hd);
int gb_hd_output(struct gb_host_device *hd, void *req, u16 size, u8 cmd,
		 bool in_irq);

int gb_hd_init(void);
void gb_hd_exit(void);

#endif	/* __HD_H */
