linux/drivers/staging/comedi/drivers/mite.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0+ */
   2/*
   3 * module/mite.h
   4 * Hardware driver for NI Mite PCI interface chip
   5 *
   6 * COMEDI - Linux Control and Measurement Device Interface
   7 * Copyright (C) 1999 David A. Schleef <ds@schleef.org>
   8 */
   9
  10#ifndef _MITE_H_
  11#define _MITE_H_
  12
  13#include <linux/spinlock.h>
  14
  15#define MAX_MITE_DMA_CHANNELS 8
  16
  17struct comedi_device;
  18struct comedi_subdevice;
  19struct device;
  20struct pci_dev;
  21
  22struct mite_dma_desc {
  23        __le32 count;
  24        __le32 addr;
  25        __le32 next;
  26        u32 dar;
  27};
  28
  29struct mite_ring {
  30        struct device *hw_dev;
  31        unsigned int n_links;
  32        struct mite_dma_desc *descs;
  33        dma_addr_t dma_addr;
  34};
  35
  36struct mite_channel {
  37        struct mite *mite;
  38        unsigned int channel;
  39        int dir;
  40        int done;
  41        struct mite_ring *ring;
  42};
  43
  44struct mite {
  45        struct pci_dev *pcidev;
  46        void __iomem *mmio;
  47        struct mite_channel channels[MAX_MITE_DMA_CHANNELS];
  48        int num_channels;
  49        unsigned int fifo_size;
  50        /* protects mite_channel from being released by the driver */
  51        spinlock_t lock;
  52};
  53
  54u32 mite_bytes_in_transit(struct mite_channel *mite_chan);
  55
  56void mite_sync_dma(struct mite_channel *mite_chan, struct comedi_subdevice *s);
  57void mite_ack_linkc(struct mite_channel *mite_chan, struct comedi_subdevice *s,
  58                    bool sync);
  59int mite_done(struct mite_channel *mite_chan);
  60
  61void mite_dma_arm(struct mite_channel *mite_chan);
  62void mite_dma_disarm(struct mite_channel *mite_chan);
  63
  64void mite_prep_dma(struct mite_channel *mite_chan,
  65                   unsigned int num_device_bits, unsigned int num_memory_bits);
  66
  67struct mite_channel *mite_request_channel_in_range(struct mite *mite,
  68                                                   struct mite_ring *ring,
  69                                                   unsigned int min_channel,
  70                                                   unsigned int max_channel);
  71struct mite_channel *mite_request_channel(struct mite *mite,
  72                                          struct mite_ring *ring);
  73void mite_release_channel(struct mite_channel *mite_chan);
  74
  75int mite_init_ring_descriptors(struct mite_ring *ring,
  76                               struct comedi_subdevice *s, unsigned int nbytes);
  77int mite_buf_change(struct mite_ring *ring, struct comedi_subdevice *s);
  78
  79struct mite_ring *mite_alloc_ring(struct mite *mite);
  80void mite_free_ring(struct mite_ring *ring);
  81
  82struct mite *mite_attach(struct comedi_device *dev, bool use_win1);
  83void mite_detach(struct mite *mite);
  84
  85/*
  86 * Mite registers (used outside of the mite driver)
  87 */
  88#define MITE_IODWBSR            0xc0    /* IO Device Window Base Size */
  89#define MITE_IODWBSR_1          0xc4    /* IO Device Window1 Base Size */
  90#define WENAB                   BIT(7)  /* window enable */
  91#define MITE_IODWCR_1           0xf4
  92
  93#endif
  94