162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci	Mantis PCI bridge driver
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci	Copyright (C) Manu Abraham (abraham.manu@gmail.com)
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci*/
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#ifndef __MANTIS_LINK_H
1062306a36Sopenharmony_ci#define __MANTIS_LINK_H
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include <linux/mutex.h>
1362306a36Sopenharmony_ci#include <linux/workqueue.h>
1462306a36Sopenharmony_ci#include <media/dvb_ca_en50221.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cienum mantis_sbuf_status {
1762306a36Sopenharmony_ci	MANTIS_SBUF_DATA_AVAIL		= 1,
1862306a36Sopenharmony_ci	MANTIS_SBUF_DATA_EMPTY		= 2,
1962306a36Sopenharmony_ci	MANTIS_SBUF_DATA_OVFLW		= 3
2062306a36Sopenharmony_ci};
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct mantis_slot {
2362306a36Sopenharmony_ci	u32				timeout;
2462306a36Sopenharmony_ci	u32				slave_cfg;
2562306a36Sopenharmony_ci	u32				bar;
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/* Physical layer */
2962306a36Sopenharmony_cienum mantis_slot_state {
3062306a36Sopenharmony_ci	MODULE_INSERTED			= 3,
3162306a36Sopenharmony_ci	MODULE_XTRACTED			= 4
3262306a36Sopenharmony_ci};
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistruct mantis_ca {
3562306a36Sopenharmony_ci	struct mantis_slot		slot[4];
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	struct work_struct		hif_evm_work;
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ci	u32				hif_event;
4062306a36Sopenharmony_ci	wait_queue_head_t		hif_opdone_wq;
4162306a36Sopenharmony_ci	wait_queue_head_t		hif_brrdyw_wq;
4262306a36Sopenharmony_ci	wait_queue_head_t		hif_data_wq;
4362306a36Sopenharmony_ci	wait_queue_head_t		hif_write_wq; /* HIF Write op */
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci	enum mantis_sbuf_status		sbuf_status;
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci	enum mantis_slot_state		slot_state;
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_ci	void				*ca_priv;
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci	struct dvb_ca_en50221		en50221;
5262306a36Sopenharmony_ci	struct mutex			ca_lock;
5362306a36Sopenharmony_ci};
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ci/* CA */
5662306a36Sopenharmony_ciextern void mantis_event_cam_plugin(struct mantis_ca *ca);
5762306a36Sopenharmony_ciextern void mantis_event_cam_unplug(struct mantis_ca *ca);
5862306a36Sopenharmony_ciextern int mantis_pcmcia_init(struct mantis_ca *ca);
5962306a36Sopenharmony_ciextern void mantis_pcmcia_exit(struct mantis_ca *ca);
6062306a36Sopenharmony_ciextern int mantis_evmgr_init(struct mantis_ca *ca);
6162306a36Sopenharmony_ciextern void mantis_evmgr_exit(struct mantis_ca *ca);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci/* HIF */
6462306a36Sopenharmony_ciextern int mantis_hif_init(struct mantis_ca *ca);
6562306a36Sopenharmony_ciextern void mantis_hif_exit(struct mantis_ca *ca);
6662306a36Sopenharmony_ciextern int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr);
6762306a36Sopenharmony_ciextern int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data);
6862306a36Sopenharmony_ciextern int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr);
6962306a36Sopenharmony_ciextern int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data);
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci#endif /* __MANTIS_LINK_H */
72