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