Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  mantis_common.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
Mantis PCI bridge driver

Copyright (C) Manu Abraham (abraham.manu@gmail.com)

*/


#ifndef __MANTIS_COMMON_H
#define __MANTIS_COMMON_H

#include <linux/interrupt.h>
#include <linux/mutex.h>
#include <linux/workqueue.h>

#include "mantis_reg.h"
#include "mantis_uart.h"

#include "mantis_link.h"

#define MANTIS_ERROR  0
#define MANTIS_NOTICE  1
#define MANTIS_INFO  2
#define MANTIS_DEBUG  3
#define MANTIS_TMG  9

#define dprintk(y, z, format, arg...) do {        \
 if (z) {           \
  if ((mantis->verbose > MANTIS_ERROR) && (mantis->verbose > y))   \
   printk(KERN_ERR "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
  else if ((mantis->verbose > MANTIS_NOTICE) && (mantis->verbose > y))   \
   printk(KERN_NOTICE "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
  else if ((mantis->verbose > MANTIS_INFO) && (mantis->verbose > y))   \
   printk(KERN_INFO "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
  else if ((mantis->verbose > MANTIS_DEBUG) && (mantis->verbose > y))   \
   printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
  else if ((mantis->verbose > MANTIS_TMG) && (mantis->verbose > y))   \
   printk(KERN_DEBUG "%s (%d): " format "\n" , __func__ , mantis->num , ##arg); \
 } else {           \
  if (mantis->verbose > y)        \
   printk(format , ##arg);        \
 }            \
while(0)

#define mwrite(dat, addr) writel((dat), addr)
#define mread(addr)  readl(addr)

#define mmwrite(dat, addr) mwrite((dat), (mantis->mmio + (addr)))
#define mmread(addr)  mread(mantis->mmio + (addr))

#define MANTIS_TS_188  0
#define MANTIS_TS_204  1

#define TWINHAN_TECHNOLOGIES 0x1822
#define MANTIS   0x4e35

#define TECHNISAT  0x1ae4
#define TERRATEC  0x153b

#define MAKE_ENTRY(__subven, __subdev, __configptr, __rc) {  \
  .vendor  = TWINHAN_TECHNOLOGIES,   \
  .device  = MANTIS,    \
  .subvendor = (__subven),    \
  .subdevice = (__subdev),    \
  .driver_data = (unsigned long)   \
   &(struct mantis_pci_drvdata){__configptr, __rc} \
}

enum mantis_i2c_mode {
 MANTIS_PAGE_MODE = 0,
 MANTIS_BYTE_MODE,
};

struct mantis_pci;

struct mantis_hwconfig {
 char   *model_name;
 char   *dev_type;
 u32   ts_size;

 enum mantis_baud baud_rate;
 enum mantis_parity parity;
 u32   bytes;

 irqreturn_t (*irq_handler)(int irq, void *dev_id);
 int (*frontend_init)(struct mantis_pci *mantis, struct dvb_frontend *fe);

 u8   power;
 u8   reset;

 enum mantis_i2c_mode i2c_mode;
};

struct mantis_pci_drvdata {
 struct mantis_hwconfig *hwconfig;
 char *rc_map_name;
};

struct mantis_pci {
 unsigned int  verbose;

 /* PCI stuff */
 u16   vendor_id;
 u16   device_id;
 u16   subsystem_vendor;
 u16   subsystem_device;

 u8   latency;

 struct pci_dev  *pdev;

 unsigned long  mantis_addr;
 void __iomem  *mmio;

 u8   irq;
 u8   revision;

 unsigned int  num;

 /* RISC Core */
 u32   busy_block;
 u32   last_block;
 u8   *buf_cpu;
 dma_addr_t  buf_dma;
 __le32   *risc_cpu;
 dma_addr_t  risc_dma;

 struct work_struct bh_work;
 spinlock_t  intmask_lock;

 struct i2c_adapter adapter;
 int   i2c_rc;
 wait_queue_head_t i2c_wq;
 struct mutex  i2c_lock;

 /* DVB stuff */
 struct dvb_adapter dvb_adapter;
 struct dvb_frontend *fe;
 struct dvb_demux demux;
 struct dmxdev  dmxdev;
 struct dmx_frontend fe_hw;
 struct dmx_frontend fe_mem;
 struct dvb_net  dvbnet;

 u8   feeds;

 struct mantis_hwconfig *hwconfig;

 u32   mantis_int_stat;
 u32   mantis_int_mask;

 /* board specific */
 u8   mac_address[8];
 u32   sub_vendor_id;
 u32   sub_device_id;

  /* A12 A13 A14 */
 u32   gpio_status;

 u32   gpif_status;

 struct mantis_ca *mantis_ca;

 struct work_struct uart_work;

 struct rc_dev  *rc;
 char   device_name[80];
 char   input_phys[80];
 char   *rc_map_name;
};

#define MANTIS_HIF_STATUS (mantis->gpio_status)

static inline void mantis_mask_ints(struct mantis_pci *mantis, u32 mask)
{
 unsigned long flags;

 spin_lock_irqsave(&mantis->intmask_lock, flags);
 mmwrite(mmread(MANTIS_INT_MASK) & ~mask, MANTIS_INT_MASK);
 spin_unlock_irqrestore(&mantis->intmask_lock, flags);
}

static inline void mantis_unmask_ints(struct mantis_pci *mantis, u32 mask)
{
 unsigned long flags;

 spin_lock_irqsave(&mantis->intmask_lock, flags);
 mmwrite(mmread(MANTIS_INT_MASK) | mask, MANTIS_INT_MASK);
 spin_unlock_irqrestore(&mantis->intmask_lock, flags);
}

#endif /* __MANTIS_COMMON_H */

Messung V0.5
C=96 H=95 G=95

¤ Dauer der Verarbeitung: 0.1 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge