3 Hardware driver for NI Mite PCI interface chip
5 COMEDI - Linux Control and Measurement Device Interface
6 Copyright (C) 1997-2002 David A. Schleef <ds@schleef.org>
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 2 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 The PCI-MIO E series driver was originally written by
26 Tomasz Motylewski <...>, and ported to comedi by ds.
28 References for specifications:
30 321747b.pdf Register Level Programmer Manual (obsolete)
31 321747c.pdf Register Level Programmer Manual (new)
32 DAQ-STC reference manual
34 Other possibly relevant info:
36 320517c.pdf User manual (obsolete)
37 320517f.pdf User manual (new)
39 320906c.pdf maximum signal ratings
41 321791a.pdf discontinuation of at-mio-16e-10 rev. c
42 321808a.pdf about at-mio-16e-10 rev P
43 321837a.pdf discontinuation of at-mio-16de-10 rev d
44 321838a.pdf about at-mio-16de-10 rev N
50 /* #define USE_KMALLOC */
54 #include "comedi_fc.h"
55 #include "comedi_pci.h"
56 #include "../comedidev.h"
58 #include <asm/system.h>
60 #define PCI_MITE_SIZE 4096
61 #define PCI_DAQ_SIZE 4096
62 #define PCI_DAQ_SIZE_660X 8192
64 MODULE_LICENSE("GPL");
66 struct mite_struct *mite_devices;
68 #define TOP_OF_PAGE(x) ((x)|(~(PAGE_MASK)))
72 struct pci_dev *pcidev;
73 struct mite_struct *mite;
75 for (pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, NULL);
77 pcidev = pci_get_device(PCI_ANY_ID, PCI_ANY_ID, pcidev)) {
78 if (pcidev->vendor == PCI_VENDOR_ID_NATINST) {
81 mite = kzalloc(sizeof(*mite), GFP_KERNEL);
83 printk("mite: allocation failed\n");
87 spin_lock_init(&mite->lock);
88 mite->pcidev = pci_dev_get(pcidev);
89 for (i = 0; i < MAX_MITE_DMA_CHANNELS; ++i) {
90 mite->channels[i].mite = mite;
91 mite->channels[i].channel = i;
92 mite->channels[i].done = 1;
94 mite->next = mite_devices;
100 static void dump_chip_signature(u32 csigr_bits)
103 ("mite: version = %i, type = %i, mite mode = %i, interface mode = %i\n",
104 mite_csigr_version(csigr_bits), mite_csigr_type(csigr_bits),
105 mite_csigr_mmode(csigr_bits), mite_csigr_imode(csigr_bits));
107 ("mite: num channels = %i, write post fifo depth = %i, wins = %i, iowins = %i\n",
108 mite_csigr_dmac(csigr_bits), mite_csigr_wpdep(csigr_bits),
109 mite_csigr_wins(csigr_bits), mite_csigr_iowins(csigr_bits));
112 unsigned mite_fifo_size(struct mite_struct *mite, unsigned channel)
114 unsigned fcr_bits = readl(mite->mite_io_addr + MITE_FCR(channel));
115 unsigned empty_count = (fcr_bits >> 16) & 0xff;
116 unsigned full_count = fcr_bits & 0xff;
117 return empty_count + full_count;
120 int mite_setup2(struct mite_struct *mite, unsigned use_iodwbsr_1)
122 unsigned long length;
123 resource_size_t addr;
126 unsigned unknown_dma_burst_bits;
128 if (comedi_pci_enable(mite->pcidev, "mite")) {
129 printk("error enabling mite and requesting io regions\n");
132 pci_set_master(mite->pcidev);
134 addr = pci_resource_start(mite->pcidev, 0);
135 mite->mite_phys_addr = addr;
136 mite->mite_io_addr = ioremap(addr, PCI_MITE_SIZE);
137 if (!mite->mite_io_addr) {
138 printk("failed to remap mite io memory address\n");
141 printk("MITE:0x%08llx mapped to %p ",
142 (unsigned long long)mite->mite_phys_addr, mite->mite_io_addr);
144 addr = pci_resource_start(mite->pcidev, 1);
145 mite->daq_phys_addr = addr;
146 length = pci_resource_len(mite->pcidev, 1);
147 /* In case of a 660x board, DAQ size is 8k instead of 4k (see as shown by lspci output) */
148 mite->daq_io_addr = ioremap(mite->daq_phys_addr, length);
149 if (!mite->daq_io_addr) {
150 printk("failed to remap daq io memory address\n");
153 printk("DAQ:0x%08llx mapped to %p\n",
154 (unsigned long long)mite->daq_phys_addr, mite->daq_io_addr);
157 writel(0, mite->mite_io_addr + MITE_IODWBSR);
158 printk("mite: using I/O Window Base Size register 1\n");
159 writel(mite->daq_phys_addr | WENAB |
160 MITE_IODWBSR_1_WSIZE_bits(length),
161 mite->mite_io_addr + MITE_IODWBSR_1);
162 writel(0, mite->mite_io_addr + MITE_IODWCR_1);
164 writel(mite->daq_phys_addr | WENAB,
165 mite->mite_io_addr + MITE_IODWBSR);
167 /* make sure dma bursts work. I got this from running a bus analyzer
168 on a pxi-6281 and a pxi-6713. 6713 powered up with register value
169 of 0x61f and bursts worked. 6281 powered up with register value of
170 0x1f and bursts didn't work. The NI windows driver reads the register,
171 then does a bitwise-or of 0x600 with it and writes it back.
173 unknown_dma_burst_bits =
174 readl(mite->mite_io_addr + MITE_UNKNOWN_DMA_BURST_REG);
175 unknown_dma_burst_bits |= UNKNOWN_DMA_BURST_ENABLE_BITS;
176 writel(unknown_dma_burst_bits,
177 mite->mite_io_addr + MITE_UNKNOWN_DMA_BURST_REG);
179 csigr_bits = readl(mite->mite_io_addr + MITE_CSIGR);
180 mite->num_channels = mite_csigr_dmac(csigr_bits);
181 if (mite->num_channels > MAX_MITE_DMA_CHANNELS) {
183 ("mite: bug? chip claims to have %i dma channels. Setting to %i.\n",
184 mite->num_channels, MAX_MITE_DMA_CHANNELS);
185 mite->num_channels = MAX_MITE_DMA_CHANNELS;
187 dump_chip_signature(csigr_bits);
188 for (i = 0; i < mite->num_channels; i++) {
189 writel(CHOR_DMARESET, mite->mite_io_addr + MITE_CHOR(i));
190 /* disable interrupts */
191 writel(CHCR_CLR_DMA_IE | CHCR_CLR_LINKP_IE | CHCR_CLR_SAR_IE |
192 CHCR_CLR_DONE_IE | CHCR_CLR_MRDY_IE | CHCR_CLR_DRDY_IE |
193 CHCR_CLR_LC_IE | CHCR_CLR_CONT_RB_IE,
194 mite->mite_io_addr + MITE_CHCR(i));
196 mite->fifo_size = mite_fifo_size(mite, 0);
197 printk("mite: fifo size is %i.\n", mite->fifo_size);
203 int mite_setup(struct mite_struct *mite)
205 return mite_setup2(mite, 0);
208 void mite_cleanup(void)
210 struct mite_struct *mite, *next;
212 for (mite = mite_devices; mite; mite = next) {
213 pci_dev_put(mite->pcidev);
219 void mite_unsetup(struct mite_struct *mite)
221 /* unsigned long offset, start, length; */
226 if (mite->mite_io_addr) {
227 iounmap(mite->mite_io_addr);
228 mite->mite_io_addr = NULL;
230 if (mite->daq_io_addr) {
231 iounmap(mite->daq_io_addr);
232 mite->daq_io_addr = NULL;
234 if (mite->mite_phys_addr) {
235 comedi_pci_disable(mite->pcidev);
236 mite->mite_phys_addr = 0;
242 void mite_list_devices(void)
244 struct mite_struct *mite, *next;
246 printk("Available NI device IDs:");
248 for (mite = mite_devices; mite; mite = next) {
250 printk(" 0x%04x", mite_device_id(mite));
258 struct mite_channel *mite_request_channel_in_range(struct mite_struct *mite,
260 mite_dma_descriptor_ring
261 *ring, unsigned min_channel,
262 unsigned max_channel)
266 struct mite_channel *channel = NULL;
268 /* spin lock so mite_release_channel can be called safely from interrupts */
269 spin_lock_irqsave(&mite->lock, flags);
270 for (i = min_channel; i <= max_channel; ++i) {
271 if (mite->channel_allocated[i] == 0) {
272 mite->channel_allocated[i] = 1;
273 channel = &mite->channels[i];
274 channel->ring = ring;
278 spin_unlock_irqrestore(&mite->lock, flags);
282 void mite_release_channel(struct mite_channel *mite_chan)
284 struct mite_struct *mite = mite_chan->mite;
287 /* spin lock to prevent races with mite_request_channel */
288 spin_lock_irqsave(&mite->lock, flags);
289 if (mite->channel_allocated[mite_chan->channel]) {
290 mite_dma_disarm(mite_chan);
291 mite_dma_reset(mite_chan);
292 /* disable all channel's interrupts (do it after disarm/reset so
293 MITE_CHCR reg isn't changed while dma is still active!) */
294 writel(CHCR_CLR_DMA_IE | CHCR_CLR_LINKP_IE |
295 CHCR_CLR_SAR_IE | CHCR_CLR_DONE_IE |
296 CHCR_CLR_MRDY_IE | CHCR_CLR_DRDY_IE |
297 CHCR_CLR_LC_IE | CHCR_CLR_CONT_RB_IE,
298 mite->mite_io_addr + MITE_CHCR(mite_chan->channel));
299 mite->channel_allocated[mite_chan->channel] = 0;
300 mite_chan->ring = NULL;
303 spin_unlock_irqrestore(&mite->lock, flags);
306 void mite_dma_arm(struct mite_channel *mite_chan)
308 struct mite_struct *mite = mite_chan->mite;
312 MDPRINTK("mite_dma_arm ch%i\n", channel);
313 /* memory barrier is intended to insure any twiddling with the buffer
314 is done before writing to the mite to arm dma transfer */
318 spin_lock_irqsave(&mite->lock, flags);
320 writel(chor, mite->mite_io_addr + MITE_CHOR(mite_chan->channel));
322 spin_unlock_irqrestore(&mite->lock, flags);
323 /* mite_dma_tcr(mite, channel); */
326 /**************************************/
328 int mite_buf_change(struct mite_dma_descriptor_ring *ring,
329 struct comedi_async *async)
331 unsigned int n_links;
334 if (ring->descriptors) {
335 dma_free_coherent(ring->hw_dev,
337 sizeof(struct mite_dma_descriptor),
339 ring->descriptors_dma_addr);
341 ring->descriptors = NULL;
342 ring->descriptors_dma_addr = 0;
345 if (async->prealloc_bufsz == 0)
348 n_links = async->prealloc_bufsz >> PAGE_SHIFT;
350 MDPRINTK("ring->hw_dev=%p, n_links=0x%04x\n", ring->hw_dev, n_links);
353 dma_alloc_coherent(ring->hw_dev,
354 n_links * sizeof(struct mite_dma_descriptor),
355 &ring->descriptors_dma_addr, GFP_KERNEL);
356 if (!ring->descriptors) {
357 printk("mite: ring buffer allocation failed\n");
360 ring->n_links = n_links;
362 for (i = 0; i < n_links; i++) {
363 ring->descriptors[i].count = cpu_to_le32(PAGE_SIZE);
364 ring->descriptors[i].addr =
365 cpu_to_le32(async->buf_page_list[i].dma_addr);
366 ring->descriptors[i].next =
367 cpu_to_le32(ring->descriptors_dma_addr + (i +
369 sizeof(struct mite_dma_descriptor));
371 ring->descriptors[n_links - 1].next =
372 cpu_to_le32(ring->descriptors_dma_addr);
373 /* barrier is meant to insure that all the writes to the dma descriptors
374 have completed before the dma controller is commanded to read them */
379 void mite_prep_dma(struct mite_channel *mite_chan,
380 unsigned int num_device_bits, unsigned int num_memory_bits)
382 unsigned int chor, chcr, mcr, dcr, lkcr;
383 struct mite_struct *mite = mite_chan->mite;
385 MDPRINTK("mite_prep_dma ch%i\n", mite_chan->channel);
387 /* reset DMA and FIFO */
388 chor = CHOR_DMARESET | CHOR_FRESET;
389 writel(chor, mite->mite_io_addr + MITE_CHOR(mite_chan->channel));
391 /* short link chaining mode */
392 chcr = CHCR_SET_DMA_IE | CHCR_LINKSHORT | CHCR_SET_DONE_IE |
395 * Link Complete Interrupt: interrupt every time a link
396 * in MITE_RING is completed. This can generate a lot of
397 * extra interrupts, but right now we update the values
398 * of buf_int_ptr and buf_int_count at each interrupt. A
399 * better method is to poll the MITE before each user
400 * "read()" to calculate the number of bytes available.
402 chcr |= CHCR_SET_LC_IE;
403 if (num_memory_bits == 32 && num_device_bits == 16) {
404 /* Doing a combined 32 and 16 bit byteswap gets the 16 bit samples into the fifo in the right order.
405 Tested doing 32 bit memory to 16 bit device transfers to the analog out of a pxi-6281,
406 which has mite version = 1, type = 4. This also works for dma reads from the counters
407 on e-series boards. */
408 chcr |= CHCR_BYTE_SWAP_DEVICE | CHCR_BYTE_SWAP_MEMORY;
410 if (mite_chan->dir == COMEDI_INPUT)
411 chcr |= CHCR_DEV_TO_MEM;
413 writel(chcr, mite->mite_io_addr + MITE_CHCR(mite_chan->channel));
416 mcr = CR_RL(64) | CR_ASEQUP;
417 switch (num_memory_bits) {
428 printk("mite: bug! invalid mem bit width for dma transfer\n");
431 writel(mcr, mite->mite_io_addr + MITE_MCR(mite_chan->channel));
434 dcr = CR_RL(64) | CR_ASEQUP;
435 dcr |= CR_PORTIO | CR_AMDEVICE | CR_REQSDRQ(mite_chan->channel);
436 switch (num_device_bits) {
447 printk("mite: bug! invalid dev bit width for dma transfer\n");
450 writel(dcr, mite->mite_io_addr + MITE_DCR(mite_chan->channel));
453 writel(0, mite->mite_io_addr + MITE_DAR(mite_chan->channel));
455 /* the link is 32bits */
456 lkcr = CR_RL(64) | CR_ASEQUP | CR_PSIZE32;
457 writel(lkcr, mite->mite_io_addr + MITE_LKCR(mite_chan->channel));
459 /* starting address for link chaining */
460 writel(mite_chan->ring->descriptors_dma_addr,
461 mite->mite_io_addr + MITE_LKAR(mite_chan->channel));
463 MDPRINTK("exit mite_prep_dma\n");
466 u32 mite_device_bytes_transferred(struct mite_channel *mite_chan)
468 struct mite_struct *mite = mite_chan->mite;
469 return readl(mite->mite_io_addr + MITE_DAR(mite_chan->channel));
472 u32 mite_bytes_in_transit(struct mite_channel * mite_chan)
474 struct mite_struct *mite = mite_chan->mite;
475 return readl(mite->mite_io_addr +
476 MITE_FCR(mite_chan->channel)) & 0x000000FF;
479 /* returns lower bound for number of bytes transferred from device to memory */
480 u32 mite_bytes_written_to_memory_lb(struct mite_channel * mite_chan)
482 u32 device_byte_count;
484 device_byte_count = mite_device_bytes_transferred(mite_chan);
485 return device_byte_count - mite_bytes_in_transit(mite_chan);
488 /* returns upper bound for number of bytes transferred from device to memory */
489 u32 mite_bytes_written_to_memory_ub(struct mite_channel * mite_chan)
491 u32 in_transit_count;
493 in_transit_count = mite_bytes_in_transit(mite_chan);
494 return mite_device_bytes_transferred(mite_chan) - in_transit_count;
497 /* returns lower bound for number of bytes read from memory for transfer to device */
498 u32 mite_bytes_read_from_memory_lb(struct mite_channel * mite_chan)
500 u32 device_byte_count;
502 device_byte_count = mite_device_bytes_transferred(mite_chan);
503 return device_byte_count + mite_bytes_in_transit(mite_chan);
506 /* returns upper bound for number of bytes read from memory for transfer to device */
507 u32 mite_bytes_read_from_memory_ub(struct mite_channel * mite_chan)
509 u32 in_transit_count;
511 in_transit_count = mite_bytes_in_transit(mite_chan);
512 return mite_device_bytes_transferred(mite_chan) + in_transit_count;
515 unsigned mite_dma_tcr(struct mite_channel *mite_chan)
517 struct mite_struct *mite = mite_chan->mite;
521 lkar = readl(mite->mite_io_addr + MITE_LKAR(mite_chan->channel));
522 tcr = readl(mite->mite_io_addr + MITE_TCR(mite_chan->channel));
523 MDPRINTK("mite_dma_tcr ch%i, lkar=0x%08x tcr=%d\n", mite_chan->channel,
529 void mite_dma_disarm(struct mite_channel *mite_chan)
531 struct mite_struct *mite = mite_chan->mite;
536 writel(chor, mite->mite_io_addr + MITE_CHOR(mite_chan->channel));
539 int mite_sync_input_dma(struct mite_channel *mite_chan,
540 struct comedi_async *async)
543 unsigned int nbytes, old_alloc_count;
544 const unsigned bytes_per_scan = cfc_bytes_per_scan(async->subdevice);
546 old_alloc_count = async->buf_write_alloc_count;
547 /* write alloc as much as we can */
548 comedi_buf_write_alloc(async, async->prealloc_bufsz);
550 nbytes = mite_bytes_written_to_memory_lb(mite_chan);
551 if ((int)(mite_bytes_written_to_memory_ub(mite_chan) -
552 old_alloc_count) > 0) {
553 printk("mite: DMA overwrite of free area\n");
554 async->events |= COMEDI_CB_OVERFLOW;
558 count = nbytes - async->buf_write_count;
559 /* it's possible count will be negative due to
560 * conservative value returned by mite_bytes_written_to_memory_lb */
564 comedi_buf_write_free(async, count);
566 async->scan_progress += count;
567 if (async->scan_progress >= bytes_per_scan) {
568 async->scan_progress %= bytes_per_scan;
569 async->events |= COMEDI_CB_EOS;
571 async->events |= COMEDI_CB_BLOCK;
575 int mite_sync_output_dma(struct mite_channel *mite_chan,
576 struct comedi_async *async)
579 u32 nbytes_ub, nbytes_lb;
580 unsigned int old_alloc_count;
582 async->cmd.stop_arg * cfc_bytes_per_scan(async->subdevice);
584 old_alloc_count = async->buf_read_alloc_count;
585 /* read alloc as much as we can */
586 comedi_buf_read_alloc(async, async->prealloc_bufsz);
587 nbytes_lb = mite_bytes_read_from_memory_lb(mite_chan);
588 if (async->cmd.stop_src == TRIG_COUNT &&
589 (int)(nbytes_lb - stop_count) > 0)
590 nbytes_lb = stop_count;
591 nbytes_ub = mite_bytes_read_from_memory_ub(mite_chan);
592 if (async->cmd.stop_src == TRIG_COUNT &&
593 (int)(nbytes_ub - stop_count) > 0)
594 nbytes_ub = stop_count;
595 if ((int)(nbytes_ub - old_alloc_count) > 0) {
596 printk("mite: DMA underrun\n");
597 async->events |= COMEDI_CB_OVERFLOW;
600 count = nbytes_lb - async->buf_read_count;
605 comedi_buf_read_free(async, count);
606 async->events |= COMEDI_CB_BLOCK;
611 unsigned mite_get_status(struct mite_channel *mite_chan)
613 struct mite_struct *mite = mite_chan->mite;
617 spin_lock_irqsave(&mite->lock, flags);
618 status = readl(mite->mite_io_addr + MITE_CHSR(mite_chan->channel));
619 if (status & CHSR_DONE) {
622 mite->mite_io_addr + MITE_CHOR(mite_chan->channel));
625 spin_unlock_irqrestore(&mite->lock, flags);
629 int mite_done(struct mite_channel *mite_chan)
631 struct mite_struct *mite = mite_chan->mite;
635 mite_get_status(mite_chan);
636 spin_lock_irqsave(&mite->lock, flags);
637 done = mite_chan->done;
638 spin_unlock_irqrestore(&mite->lock, flags);
644 static void mite_decode(char **bit_str, unsigned int bits);
646 /* names of bits in mite registers */
648 static const char *const mite_CHOR_strings[] = {
649 "start", "cont", "stop", "abort",
650 "freset", "clrlc", "clrrb", "clrdone",
651 "clr_lpause", "set_lpause", "clr_send_tc",
652 "set_send_tc", "12", "13", "14",
653 "15", "16", "17", "18",
654 "19", "20", "21", "22",
655 "23", "24", "25", "26",
656 "27", "28", "29", "30",
660 static const char *const mite_CHCR_strings[] = {
661 "continue", "ringbuff", "2", "3",
663 "8", "9", "10", "11",
664 "12", "13", "bursten", "fifodis",
665 "clr_cont_rb_ie", "set_cont_rb_ie", "clr_lc_ie", "set_lc_ie",
666 "clr_drdy_ie", "set_drdy_ie", "clr_mrdy_ie", "set_mrdy_ie",
667 "clr_done_ie", "set_done_ie", "clr_sar_ie", "set_sar_ie",
668 "clr_linkp_ie", "set_linkp_ie", "clr_dma_ie", "set_dma_ie",
671 static const char *const mite_MCR_strings[] = {
672 "amdevice", "1", "2", "3",
673 "4", "5", "portio", "portvxi",
674 "psizebyte", "psizehalf (byte & half = word)", "aseqxp1", "11",
675 "12", "13", "blocken", "berhand",
676 "reqsintlim/reqs0", "reqs1", "reqs2", "rd32",
677 "rd512", "rl1", "rl2", "rl8",
678 "24", "25", "26", "27",
679 "28", "29", "30", "stopen",
682 static const char *const mite_DCR_strings[] = {
683 "amdevice", "1", "2", "3",
684 "4", "5", "portio", "portvxi",
685 "psizebyte", "psizehalf (byte & half = word)", "aseqxp1", "aseqxp2",
686 "aseqxp8", "13", "blocken", "berhand",
687 "reqsintlim", "reqs1", "reqs2", "rd32",
688 "rd512", "rl1", "rl2", "rl8",
689 "23", "24", "25", "27",
690 "28", "wsdevc", "wsdevs", "rwdevpack",
693 static const char *const mite_LKCR_strings[] = {
694 "amdevice", "1", "2", "3",
695 "4", "5", "portio", "portvxi",
696 "psizebyte", "psizehalf (byte & half = word)", "asequp", "aseqdown",
697 "12", "13", "14", "berhand",
698 "16", "17", "18", "rd32",
699 "rd512", "rl1", "rl2", "rl8",
700 "24", "25", "26", "27",
701 "28", "29", "30", "chngend",
704 static const char *const mite_CHSR_strings[] = {
705 "d.err0", "d.err1", "m.err0", "m.err1",
706 "l.err0", "l.err1", "drq0", "drq1",
707 "end", "xferr", "operr0", "operr1",
708 "stops", "habort", "sabort", "error",
709 "16", "conts_rb", "18", "linkc",
710 "20", "drdy", "22", "mrdy",
711 "24", "done", "26", "sars",
712 "28", "lpauses", "30", "int",
715 void mite_dump_regs(struct mite_channel *mite_chan)
717 unsigned long mite_io_addr =
718 (unsigned long)mite_chan->mite->mite_io_addr;
719 unsigned long addr = 0;
720 unsigned long temp = 0;
722 printk("mite_dump_regs ch%i\n", mite_chan->channel);
723 printk("mite address is =0x%08lx\n", mite_io_addr);
725 addr = mite_io_addr + MITE_CHOR(channel);
726 printk("mite status[CHOR]at 0x%08lx =0x%08lx\n", addr, temp =
728 mite_decode(mite_CHOR_strings, temp);
729 addr = mite_io_addr + MITE_CHCR(channel);
730 printk("mite status[CHCR]at 0x%08lx =0x%08lx\n", addr, temp =
732 mite_decode(mite_CHCR_strings, temp);
733 addr = mite_io_addr + MITE_TCR(channel);
734 printk("mite status[TCR] at 0x%08lx =0x%08x\n", addr, readl(addr));
735 addr = mite_io_addr + MITE_MCR(channel);
736 printk("mite status[MCR] at 0x%08lx =0x%08lx\n", addr, temp =
738 mite_decode(mite_MCR_strings, temp);
740 addr = mite_io_addr + MITE_MAR(channel);
741 printk("mite status[MAR] at 0x%08lx =0x%08x\n", addr, readl(addr));
742 addr = mite_io_addr + MITE_DCR(channel);
743 printk("mite status[DCR] at 0x%08lx =0x%08lx\n", addr, temp =
745 mite_decode(mite_DCR_strings, temp);
746 addr = mite_io_addr + MITE_DAR(channel);
747 printk("mite status[DAR] at 0x%08lx =0x%08x\n", addr, readl(addr));
748 addr = mite_io_addr + MITE_LKCR(channel);
749 printk("mite status[LKCR]at 0x%08lx =0x%08lx\n", addr, temp =
751 mite_decode(mite_LKCR_strings, temp);
752 addr = mite_io_addr + MITE_LKAR(channel);
753 printk("mite status[LKAR]at 0x%08lx =0x%08x\n", addr, readl(addr));
755 addr = mite_io_addr + MITE_CHSR(channel);
756 printk("mite status[CHSR]at 0x%08lx =0x%08lx\n", addr, temp =
758 mite_decode(mite_CHSR_strings, temp);
759 addr = mite_io_addr + MITE_FCR(channel);
760 printk("mite status[FCR] at 0x%08lx =0x%08x\n\n", addr, readl(addr));
763 static void mite_decode(char **bit_str, unsigned int bits)
767 for (i = 31; i >= 0; i--) {
769 printk(" %s", bit_str[i]);
776 int __init init_module(void)
784 void __exit cleanup_module(void)
789 EXPORT_SYMBOL(mite_dma_tcr);
790 EXPORT_SYMBOL(mite_dma_arm);
791 EXPORT_SYMBOL(mite_dma_disarm);
792 EXPORT_SYMBOL(mite_sync_input_dma);
793 EXPORT_SYMBOL(mite_sync_output_dma);
794 EXPORT_SYMBOL(mite_setup);
795 EXPORT_SYMBOL(mite_setup2);
796 EXPORT_SYMBOL(mite_unsetup);
798 EXPORT_SYMBOL(mite_kvmem_segment_load);
799 EXPORT_SYMBOL(mite_ll_from_kvmem);
800 EXPORT_SYMBOL(mite_setregs);
802 EXPORT_SYMBOL(mite_devices);
803 EXPORT_SYMBOL(mite_list_devices);
804 EXPORT_SYMBOL(mite_request_channel_in_range);
805 EXPORT_SYMBOL(mite_release_channel);
806 EXPORT_SYMBOL(mite_prep_dma);
807 EXPORT_SYMBOL(mite_buf_change);
808 EXPORT_SYMBOL(mite_bytes_written_to_memory_lb);
809 EXPORT_SYMBOL(mite_bytes_written_to_memory_ub);
810 EXPORT_SYMBOL(mite_bytes_read_from_memory_lb);
811 EXPORT_SYMBOL(mite_bytes_read_from_memory_ub);
812 EXPORT_SYMBOL(mite_bytes_in_transit);
813 EXPORT_SYMBOL(mite_get_status);
814 EXPORT_SYMBOL(mite_done);
816 EXPORT_SYMBOL(mite_decode);
817 EXPORT_SYMBOL(mite_dump_regs);