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

mantis_common.h (4424B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3	Mantis PCI bridge driver
      4
      5	Copyright (C) Manu Abraham (abraham.manu@gmail.com)
      6
      7*/
      8
      9#ifndef __MANTIS_COMMON_H
     10#define __MANTIS_COMMON_H
     11
     12#include <linux/interrupt.h>
     13#include <linux/mutex.h>
     14#include <linux/workqueue.h>
     15
     16#include "mantis_reg.h"
     17#include "mantis_uart.h"
     18
     19#include "mantis_link.h"
     20
     21#define MANTIS_ERROR		0
     22#define MANTIS_NOTICE		1
     23#define MANTIS_INFO		2
     24#define MANTIS_DEBUG		3
     25#define MANTIS_TMG		9
     26
     27#define dprintk(y, z, format, arg...) do {								\
     28	if (z) {											\
     29		if	((mantis->verbose > MANTIS_ERROR) && (mantis->verbose > y))			\
     30			printk(KERN_ERR "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
     31		else if	((mantis->verbose > MANTIS_NOTICE) && (mantis->verbose > y))			\
     32			printk(KERN_NOTICE "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
     33		else if ((mantis->verbose > MANTIS_INFO) && (mantis->verbose > y))			\
     34			printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
     35		else if ((mantis->verbose > MANTIS_DEBUG) && (mantis->verbose > y))			\
     36			printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
     37		else if ((mantis->verbose > MANTIS_TMG) && (mantis->verbose > y))			\
     38			printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg);	\
     39	} else {											\
     40		if (mantis->verbose > y)								\
     41			printk(format , ##arg);								\
     42	}												\
     43} while(0)
     44
     45#define mwrite(dat, addr)	writel((dat), addr)
     46#define mread(addr)		readl(addr)
     47
     48#define mmwrite(dat, addr)	mwrite((dat), (mantis->mmio + (addr)))
     49#define mmread(addr)		mread(mantis->mmio + (addr))
     50
     51#define MANTIS_TS_188		0
     52#define MANTIS_TS_204		1
     53
     54#define TWINHAN_TECHNOLOGIES	0x1822
     55#define MANTIS			0x4e35
     56
     57#define TECHNISAT		0x1ae4
     58#define TERRATEC		0x153b
     59
     60#define MAKE_ENTRY(__subven, __subdev, __configptr, __rc) {		\
     61		.vendor		= TWINHAN_TECHNOLOGIES,			\
     62		.device		= MANTIS,				\
     63		.subvendor	= (__subven),				\
     64		.subdevice	= (__subdev),				\
     65		.driver_data	= (unsigned long)			\
     66			&(struct mantis_pci_drvdata){__configptr, __rc}	\
     67}
     68
     69enum mantis_i2c_mode {
     70	MANTIS_PAGE_MODE = 0,
     71	MANTIS_BYTE_MODE,
     72};
     73
     74struct mantis_pci;
     75
     76struct mantis_hwconfig {
     77	char			*model_name;
     78	char			*dev_type;
     79	u32			ts_size;
     80
     81	enum mantis_baud	baud_rate;
     82	enum mantis_parity	parity;
     83	u32			bytes;
     84
     85	irqreturn_t (*irq_handler)(int irq, void *dev_id);
     86	int (*frontend_init)(struct mantis_pci *mantis, struct dvb_frontend *fe);
     87
     88	u8			power;
     89	u8			reset;
     90
     91	enum mantis_i2c_mode	i2c_mode;
     92};
     93
     94struct mantis_pci_drvdata {
     95	struct mantis_hwconfig *hwconfig;
     96	char *rc_map_name;
     97};
     98
     99struct mantis_pci {
    100	unsigned int		verbose;
    101
    102	/*	PCI stuff		*/
    103	u16			vendor_id;
    104	u16			device_id;
    105	u16			subsystem_vendor;
    106	u16			subsystem_device;
    107
    108	u8			latency;
    109
    110	struct pci_dev		*pdev;
    111
    112	unsigned long		mantis_addr;
    113	void __iomem		*mmio;
    114
    115	u8			irq;
    116	u8			revision;
    117
    118	unsigned int		num;
    119
    120	/*	RISC Core		*/
    121	u32			busy_block;
    122	u32			last_block;
    123	u8			*buf_cpu;
    124	dma_addr_t		buf_dma;
    125	__le32			*risc_cpu;
    126	dma_addr_t		risc_dma;
    127
    128	struct tasklet_struct	tasklet;
    129	spinlock_t		intmask_lock;
    130
    131	struct i2c_adapter	adapter;
    132	int			i2c_rc;
    133	wait_queue_head_t	i2c_wq;
    134	struct mutex		i2c_lock;
    135
    136	/*	DVB stuff		*/
    137	struct dvb_adapter	dvb_adapter;
    138	struct dvb_frontend	*fe;
    139	struct dvb_demux	demux;
    140	struct dmxdev		dmxdev;
    141	struct dmx_frontend	fe_hw;
    142	struct dmx_frontend	fe_mem;
    143	struct dvb_net		dvbnet;
    144
    145	u8			feeds;
    146
    147	struct mantis_hwconfig	*hwconfig;
    148
    149	u32			mantis_int_stat;
    150	u32			mantis_int_mask;
    151
    152	/*	board specific		*/
    153	u8			mac_address[8];
    154	u32			sub_vendor_id;
    155	u32			sub_device_id;
    156
    157	 /*	A12 A13 A14		*/
    158	u32			gpio_status;
    159
    160	u32			gpif_status;
    161
    162	struct mantis_ca	*mantis_ca;
    163
    164	struct work_struct	uart_work;
    165
    166	struct rc_dev		*rc;
    167	char			device_name[80];
    168	char			input_phys[80];
    169	char			*rc_map_name;
    170};
    171
    172#define MANTIS_HIF_STATUS	(mantis->gpio_status)
    173
    174static inline void mantis_mask_ints(struct mantis_pci *mantis, u32 mask)
    175{
    176	unsigned long flags;
    177
    178	spin_lock_irqsave(&mantis->intmask_lock, flags);
    179	mmwrite(mmread(MANTIS_INT_MASK) & ~mask, MANTIS_INT_MASK);
    180	spin_unlock_irqrestore(&mantis->intmask_lock, flags);
    181}
    182
    183static inline void mantis_unmask_ints(struct mantis_pci *mantis, u32 mask)
    184{
    185	unsigned long flags;
    186
    187	spin_lock_irqsave(&mantis->intmask_lock, flags);
    188	mmwrite(mmread(MANTIS_INT_MASK) | mask, MANTIS_INT_MASK);
    189	spin_unlock_irqrestore(&mantis->intmask_lock, flags);
    190}
    191
    192#endif /* __MANTIS_COMMON_H */