/* SPDX-License-Identifier: GPL-2.0-or-later */ 
 | 
/* 
 | 
    Mantis PCI bridge driver 
 | 
  
 | 
    Copyright (C) Manu Abraham (abraham.manu@gmail.com) 
 | 
  
 | 
*/ 
 | 
  
 | 
#ifndef __MANTIS_LINK_H 
 | 
#define __MANTIS_LINK_H 
 | 
  
 | 
#include <linux/mutex.h> 
 | 
#include <linux/workqueue.h> 
 | 
#include <media/dvb_ca_en50221.h> 
 | 
  
 | 
enum mantis_sbuf_status { 
 | 
    MANTIS_SBUF_DATA_AVAIL        = 1, 
 | 
    MANTIS_SBUF_DATA_EMPTY        = 2, 
 | 
    MANTIS_SBUF_DATA_OVFLW        = 3 
 | 
}; 
 | 
  
 | 
struct mantis_slot { 
 | 
    u32                timeout; 
 | 
    u32                slave_cfg; 
 | 
    u32                bar; 
 | 
}; 
 | 
  
 | 
/* Physical layer */ 
 | 
enum mantis_slot_state { 
 | 
    MODULE_INSERTED            = 3, 
 | 
    MODULE_XTRACTED            = 4 
 | 
}; 
 | 
  
 | 
struct mantis_ca { 
 | 
    struct mantis_slot        slot[4]; 
 | 
  
 | 
    struct work_struct        hif_evm_work; 
 | 
  
 | 
    u32                hif_event; 
 | 
    wait_queue_head_t        hif_opdone_wq; 
 | 
    wait_queue_head_t        hif_brrdyw_wq; 
 | 
    wait_queue_head_t        hif_data_wq; 
 | 
    wait_queue_head_t        hif_write_wq; /* HIF Write op */ 
 | 
  
 | 
    enum mantis_sbuf_status        sbuf_status; 
 | 
  
 | 
    enum mantis_slot_state        slot_state; 
 | 
  
 | 
    void                *ca_priv; 
 | 
  
 | 
    struct dvb_ca_en50221        en50221; 
 | 
    struct mutex            ca_lock; 
 | 
}; 
 | 
  
 | 
/* CA */ 
 | 
extern void mantis_event_cam_plugin(struct mantis_ca *ca); 
 | 
extern void mantis_event_cam_unplug(struct mantis_ca *ca); 
 | 
extern int mantis_pcmcia_init(struct mantis_ca *ca); 
 | 
extern void mantis_pcmcia_exit(struct mantis_ca *ca); 
 | 
extern int mantis_evmgr_init(struct mantis_ca *ca); 
 | 
extern void mantis_evmgr_exit(struct mantis_ca *ca); 
 | 
  
 | 
/* HIF */ 
 | 
extern int mantis_hif_init(struct mantis_ca *ca); 
 | 
extern void mantis_hif_exit(struct mantis_ca *ca); 
 | 
extern int mantis_hif_read_mem(struct mantis_ca *ca, u32 addr); 
 | 
extern int mantis_hif_write_mem(struct mantis_ca *ca, u32 addr, u8 data); 
 | 
extern int mantis_hif_read_iom(struct mantis_ca *ca, u32 addr); 
 | 
extern int mantis_hif_write_iom(struct mantis_ca *ca, u32 addr, u8 data); 
 | 
  
 | 
#endif /* __MANTIS_LINK_H */ 
 |