cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

netup_unidvb.h (3494B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 * netup_unidvb.h
      4 *
      5 * Data type definitions for NetUP Universal Dual DVB-CI
      6 *
      7 * Copyright (C) 2014 NetUP Inc.
      8 * Copyright (C) 2014 Sergey Kozlov <serjk@netup.ru>
      9 * Copyright (C) 2014 Abylay Ospan <aospan@netup.ru>
     10 */
     11
     12#include <linux/pci.h>
     13#include <linux/i2c.h>
     14#include <linux/workqueue.h>
     15#include <media/v4l2-common.h>
     16#include <media/v4l2-device.h>
     17#include <media/videobuf2-dvb.h>
     18#include <media/dvb_ca_en50221.h>
     19
     20#define NETUP_UNIDVB_NAME	"netup_unidvb"
     21#define NETUP_UNIDVB_VERSION	"0.0.1"
     22#define NETUP_VENDOR_ID		0x1b55
     23#define NETUP_PCI_DEV_REVISION  0x2
     24
     25/* IRQ-related regisers */
     26#define REG_ISR			0x4890
     27#define REG_ISR_MASKED		0x4892
     28#define REG_IMASK_SET		0x4894
     29#define REG_IMASK_CLEAR		0x4896
     30/* REG_ISR register bits */
     31#define NETUP_UNIDVB_IRQ_SPI	(1 << 0)
     32#define NETUP_UNIDVB_IRQ_I2C0	(1 << 1)
     33#define NETUP_UNIDVB_IRQ_I2C1	(1 << 2)
     34#define NETUP_UNIDVB_IRQ_FRA0	(1 << 4)
     35#define NETUP_UNIDVB_IRQ_FRA1	(1 << 5)
     36#define NETUP_UNIDVB_IRQ_FRB0	(1 << 6)
     37#define NETUP_UNIDVB_IRQ_FRB1	(1 << 7)
     38#define NETUP_UNIDVB_IRQ_DMA1	(1 << 8)
     39#define NETUP_UNIDVB_IRQ_DMA2	(1 << 9)
     40#define NETUP_UNIDVB_IRQ_CI	(1 << 10)
     41#define NETUP_UNIDVB_IRQ_CAM0	(1 << 11)
     42#define NETUP_UNIDVB_IRQ_CAM1	(1 << 12)
     43
     44/* NetUP Universal DVB card hardware revisions and it's PCI device id's:
     45 * 1.3 - CXD2841ER demod, ASCOT2E and HORUS3A tuners
     46 * 1.4 - CXD2854ER demod, HELENE tuner
     47*/
     48enum netup_hw_rev {
     49	NETUP_HW_REV_1_3 = 0x18F6,
     50	NETUP_HW_REV_1_4 = 0x18F7
     51};
     52
     53struct netup_dma {
     54	u8			num;
     55	spinlock_t		lock;
     56	struct netup_unidvb_dev	*ndev;
     57	struct netup_dma_regs __iomem *regs;
     58	u32			ring_buffer_size;
     59	u8			*addr_virt;
     60	dma_addr_t		addr_phys;
     61	u64			addr_last;
     62	u32			high_addr;
     63	u32			data_offset;
     64	u32			data_size;
     65	struct list_head	free_buffers;
     66	struct work_struct	work;
     67	struct timer_list	timeout;
     68};
     69
     70enum netup_i2c_state {
     71	STATE_DONE,
     72	STATE_WAIT,
     73	STATE_WANT_READ,
     74	STATE_WANT_WRITE,
     75	STATE_ERROR
     76};
     77
     78struct netup_i2c_regs;
     79
     80struct netup_i2c {
     81	spinlock_t			lock;
     82	wait_queue_head_t		wq;
     83	struct i2c_adapter		adap;
     84	struct netup_unidvb_dev		*dev;
     85	struct netup_i2c_regs __iomem	*regs;
     86	struct i2c_msg			*msg;
     87	enum netup_i2c_state		state;
     88	u32				xmit_size;
     89};
     90
     91struct netup_ci_state {
     92	struct dvb_ca_en50221		ca;
     93	u8 __iomem			*membase8_config;
     94	u8 __iomem			*membase8_io;
     95	struct netup_unidvb_dev		*dev;
     96	int status;
     97	int nr;
     98};
     99
    100struct netup_spi;
    101
    102struct netup_unidvb_dev {
    103	struct pci_dev			*pci_dev;
    104	int				pci_bus;
    105	int				pci_slot;
    106	int				pci_func;
    107	int				board_num;
    108	int				old_fw;
    109	u32 __iomem			*lmmio0;
    110	u8 __iomem			*bmmio0;
    111	u32 __iomem			*lmmio1;
    112	u8 __iomem			*bmmio1;
    113	u8				*dma_virt;
    114	dma_addr_t			dma_phys;
    115	u32				dma_size;
    116	struct vb2_dvb_frontends	frontends[2];
    117	struct netup_i2c		i2c[2];
    118	struct workqueue_struct		*wq;
    119	struct netup_dma		dma[2];
    120	struct netup_ci_state		ci[2];
    121	struct netup_spi		*spi;
    122	enum netup_hw_rev		rev;
    123};
    124
    125int netup_i2c_register(struct netup_unidvb_dev *ndev);
    126void netup_i2c_unregister(struct netup_unidvb_dev *ndev);
    127irqreturn_t netup_ci_interrupt(struct netup_unidvb_dev *ndev);
    128irqreturn_t netup_i2c_interrupt(struct netup_i2c *i2c);
    129irqreturn_t netup_spi_interrupt(struct netup_spi *spi);
    130int netup_unidvb_ci_register(struct netup_unidvb_dev *dev,
    131			     int num, struct pci_dev *pci_dev);
    132void netup_unidvb_ci_unregister(struct netup_unidvb_dev *dev, int num);
    133int netup_spi_init(struct netup_unidvb_dev *ndev);
    134void netup_spi_release(struct netup_unidvb_dev *ndev);