2  * Alchemy Semi Au1000 IrDA driver
 
   4  * Copyright 2001 MontaVista Software Inc.
 
   5  * Author: MontaVista Software, Inc.
 
   6  *              ppopov@mvista.com or source@mvista.com
 
   8  *  This program is free software; you can distribute it and/or modify it
 
   9  *  under the terms of the GNU General Public License (Version 2) as
 
  10  *  published by the Free Software Foundation.
 
  12  *  This program is distributed in the hope it will be useful, but WITHOUT
 
  13  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 
  14  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 
  17  *  You should have received a copy of the GNU General Public License along
 
  18  *  with this program; if not, write to the Free Software Foundation, Inc.,
 
  19  *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
 
  21 #include <linux/module.h>
 
  22 #include <linux/types.h>
 
  23 #include <linux/init.h>
 
  24 #include <linux/errno.h>
 
  25 #include <linux/netdevice.h>
 
  26 #include <linux/slab.h>
 
  27 #include <linux/rtnetlink.h>
 
  28 #include <linux/interrupt.h>
 
  30 #include <linux/bitops.h>
 
  34 #include <asm/au1000.h>
 
  35 #if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_PB1100)
 
  36 #include <asm/pb1000.h>
 
  37 #elif defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
 
  38 #include <asm/db1x00.h>
 
  40 #error au1k_ir: unsupported board
 
  43 #include <net/irda/irda.h>
 
  44 #include <net/irda/irmod.h>
 
  45 #include <net/irda/wrapper.h>
 
  46 #include <net/irda/irda_device.h>
 
  47 #include "au1000_ircc.h"
 
  49 static int au1k_irda_net_init(struct net_device *);
 
  50 static int au1k_irda_start(struct net_device *);
 
  51 static int au1k_irda_stop(struct net_device *dev);
 
  52 static int au1k_irda_hard_xmit(struct sk_buff *, struct net_device *);
 
  53 static int au1k_irda_rx(struct net_device *);
 
  54 static void au1k_irda_interrupt(int, void *);
 
  55 static void au1k_tx_timeout(struct net_device *);
 
  56 static struct net_device_stats *au1k_irda_stats(struct net_device *);
 
  57 static int au1k_irda_ioctl(struct net_device *, struct ifreq *, int);
 
  58 static int au1k_irda_set_speed(struct net_device *dev, int speed);
 
  60 static void *dma_alloc(size_t, dma_addr_t *);
 
  61 static void dma_free(void *, size_t);
 
  63 static int qos_mtt_bits = 0x07;  /* 1 ms or more */
 
  64 static struct net_device *ir_devs[NUM_IR_IFF];
 
  65 static char version[] __devinitdata =
 
  66     "au1k_ircc:1.2 ppopov@mvista.com\n";
 
  68 #define RUN_AT(x) (jiffies + (x))
 
  70 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
 
  71 static BCSR * const bcsr = (BCSR *)0xAE000000;
 
  74 static DEFINE_SPINLOCK(ir_lock);
 
  77  * IrDA peripheral bug. You have to read the register
 
  78  * twice to get the right value.
 
  80 u32 read_ir_reg(u32 addr) 
 
  88  * Buffer allocation/deallocation routines. The buffer descriptor returned
 
  89  * has the virtual and dma address of a buffer suitable for 
 
  90  * both, receive and transmit operations.
 
  92 static db_dest_t *GetFreeDB(struct au1k_private *aup)
 
  98                 aup->pDBfree = pDB->pnext;
 
 103 static void ReleaseDB(struct au1k_private *aup, db_dest_t *pDB)
 
 105         db_dest_t *pDBfree = aup->pDBfree;
 
 107                 pDBfree->pnext = pDB;
 
 113   DMA memory allocation, derived from pci_alloc_consistent.
 
 114   However, the Au1000 data cache is coherent (when programmed
 
 115   so), therefore we return KSEG0 address, not KSEG1.
 
 117 static void *dma_alloc(size_t size, dma_addr_t * dma_handle)
 
 120         int gfp = GFP_ATOMIC | GFP_DMA;
 
 122         ret = (void *) __get_free_pages(gfp, get_order(size));
 
 125                 memset(ret, 0, size);
 
 126                 *dma_handle = virt_to_bus(ret);
 
 127                 ret = (void *)KSEG0ADDR(ret);
 
 133 static void dma_free(void *vaddr, size_t size)
 
 135         vaddr = (void *)KSEG0ADDR(vaddr);
 
 136         free_pages((unsigned long) vaddr, get_order(size));
 
 141 setup_hw_rings(struct au1k_private *aup, u32 rx_base, u32 tx_base)
 
 144         for (i=0; i<NUM_IR_DESC; i++) {
 
 145                 aup->rx_ring[i] = (volatile ring_dest_t *) 
 
 146                         (rx_base + sizeof(ring_dest_t)*i);
 
 148         for (i=0; i<NUM_IR_DESC; i++) {
 
 149                 aup->tx_ring[i] = (volatile ring_dest_t *) 
 
 150                         (tx_base + sizeof(ring_dest_t)*i);
 
 154 static int au1k_irda_init(void)
 
 156         static unsigned version_printed = 0;
 
 157         struct au1k_private *aup;
 
 158         struct net_device *dev;
 
 161         if (version_printed++ == 0) printk(version);
 
 163         dev = alloc_irdadev(sizeof(struct au1k_private));
 
 167         dev->irq = AU1000_IRDA_RX_INT; /* TX has its own interrupt */
 
 168         err = au1k_irda_net_init(dev);
 
 171         err = register_netdev(dev);
 
 175         printk(KERN_INFO "IrDA: Registered device %s\n", dev->name);
 
 179         aup = netdev_priv(dev);
 
 180         dma_free((void *)aup->db[0].vaddr,
 
 181                 MAX_BUF_SIZE * 2*NUM_IR_DESC);
 
 182         dma_free((void *)aup->rx_ring[0],
 
 183                 2 * MAX_NUM_IR_DESC*(sizeof(ring_dest_t)));
 
 184         kfree(aup->rx_buff.head);
 
 190 static int au1k_irda_init_iobuf(iobuff_t *io, int size)
 
 192         io->head = kmalloc(size, GFP_KERNEL);
 
 193         if (io->head != NULL) {
 
 195                 io->in_frame = FALSE;
 
 196                 io->state    = OUTSIDE_FRAME;
 
 199         return io->head ? 0 : -ENOMEM;
 
 202 static int au1k_irda_net_init(struct net_device *dev)
 
 204         struct au1k_private *aup = netdev_priv(dev);
 
 205         int i, retval = 0, err;
 
 206         db_dest_t *pDB, *pDBfree;
 
 209         err = au1k_irda_init_iobuf(&aup->rx_buff, 14384);
 
 213         dev->open = au1k_irda_start;
 
 214         dev->hard_start_xmit = au1k_irda_hard_xmit;
 
 215         dev->stop = au1k_irda_stop;
 
 216         dev->get_stats = au1k_irda_stats;
 
 217         dev->do_ioctl = au1k_irda_ioctl;
 
 218         dev->tx_timeout = au1k_tx_timeout;
 
 220         irda_init_max_qos_capabilies(&aup->qos);
 
 222         /* The only value we must override it the baudrate */
 
 223         aup->qos.baud_rate.bits = IR_9600|IR_19200|IR_38400|IR_57600|
 
 224                 IR_115200|IR_576000 |(IR_4000000 << 8);
 
 226         aup->qos.min_turn_time.bits = qos_mtt_bits;
 
 227         irda_qos_bits_to_value(&aup->qos);
 
 231         /* Tx ring follows rx ring + 512 bytes */
 
 232         /* we need a 1k aligned buffer */
 
 233         aup->rx_ring[0] = (ring_dest_t *)
 
 234                 dma_alloc(2*MAX_NUM_IR_DESC*(sizeof(ring_dest_t)), &temp);
 
 235         if (!aup->rx_ring[0])
 
 238         /* allocate the data buffers */
 
 240                 (void *)dma_alloc(MAX_BUF_SIZE * 2*NUM_IR_DESC, &temp);
 
 241         if (!aup->db[0].vaddr)
 
 244         setup_hw_rings(aup, (u32)aup->rx_ring[0], (u32)aup->rx_ring[0] + 512);
 
 248         for (i=0; i<(2*NUM_IR_DESC); i++) {
 
 249                 pDB->pnext = pDBfree;
 
 252                         (u32 *)((unsigned)aup->db[0].vaddr + MAX_BUF_SIZE*i);
 
 253                 pDB->dma_addr = (dma_addr_t)virt_to_bus(pDB->vaddr);
 
 256         aup->pDBfree = pDBfree;
 
 258         /* attach a data buffer to each descriptor */
 
 259         for (i=0; i<NUM_IR_DESC; i++) {
 
 260                 pDB = GetFreeDB(aup);
 
 262                 aup->rx_ring[i]->addr_0 = (u8)(pDB->dma_addr & 0xff);
 
 263                 aup->rx_ring[i]->addr_1 = (u8)((pDB->dma_addr>>8) & 0xff);
 
 264                 aup->rx_ring[i]->addr_2 = (u8)((pDB->dma_addr>>16) & 0xff);
 
 265                 aup->rx_ring[i]->addr_3 = (u8)((pDB->dma_addr>>24) & 0xff);
 
 266                 aup->rx_db_inuse[i] = pDB;
 
 268         for (i=0; i<NUM_IR_DESC; i++) {
 
 269                 pDB = GetFreeDB(aup);
 
 271                 aup->tx_ring[i]->addr_0 = (u8)(pDB->dma_addr & 0xff);
 
 272                 aup->tx_ring[i]->addr_1 = (u8)((pDB->dma_addr>>8) & 0xff);
 
 273                 aup->tx_ring[i]->addr_2 = (u8)((pDB->dma_addr>>16) & 0xff);
 
 274                 aup->tx_ring[i]->addr_3 = (u8)((pDB->dma_addr>>24) & 0xff);
 
 275                 aup->tx_ring[i]->count_0 = 0;
 
 276                 aup->tx_ring[i]->count_1 = 0;
 
 277                 aup->tx_ring[i]->flags = 0;
 
 278                 aup->tx_db_inuse[i] = pDB;
 
 281 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
 
 283         bcsr->resets &= ~BCSR_RESETS_IRDA_MODE_MASK;
 
 284         bcsr->resets |= BCSR_RESETS_IRDA_MODE_FULL;
 
 291         dma_free((void *)aup->rx_ring[0],
 
 292                 2 * MAX_NUM_IR_DESC*(sizeof(ring_dest_t)));
 
 294         kfree(aup->rx_buff.head);
 
 296         printk(KERN_ERR "au1k_init_module failed.  Returns %d\n", retval);
 
 301 static int au1k_init(struct net_device *dev)
 
 303         struct au1k_private *aup = netdev_priv(dev);
 
 308         /* bring the device out of reset */
 
 309         control = 0xe; /* coherent, clock enable, one half system clock */
 
 311 #ifndef CONFIG_CPU_LITTLE_ENDIAN
 
 318         for (i=0; i<NUM_IR_DESC; i++) {
 
 319                 aup->rx_ring[i]->flags = AU_OWN;
 
 322         writel(control, IR_INTERFACE_CONFIG);
 
 325         writel(read_ir_reg(IR_ENABLE) & ~0x8000, IR_ENABLE); /* disable PHY */
 
 328         writel(MAX_BUF_SIZE, IR_MAX_PKT_LEN);
 
 330         ring_address = (u32)virt_to_phys((void *)aup->rx_ring[0]);
 
 331         writel(ring_address >> 26, IR_RING_BASE_ADDR_H);
 
 332         writel((ring_address >> 10) & 0xffff, IR_RING_BASE_ADDR_L);
 
 334         writel(RING_SIZE_64<<8 | RING_SIZE_64<<12, IR_RING_SIZE);
 
 336         writel(1<<2 | IR_ONE_PIN, IR_CONFIG_2); /* 48MHz */
 
 337         writel(0, IR_RING_ADDR_CMPR);
 
 339         au1k_irda_set_speed(dev, 9600);
 
 343 static int au1k_irda_start(struct net_device *dev)
 
 347         struct au1k_private *aup = netdev_priv(dev);
 
 349         if ((retval = au1k_init(dev))) {
 
 350                 printk(KERN_ERR "%s: error in au1k_init\n", dev->name);
 
 354         if ((retval = request_irq(AU1000_IRDA_TX_INT, &au1k_irda_interrupt, 
 
 355                                         0, dev->name, dev))) {
 
 356                 printk(KERN_ERR "%s: unable to get IRQ %d\n", 
 
 357                                 dev->name, dev->irq);
 
 360         if ((retval = request_irq(AU1000_IRDA_RX_INT, &au1k_irda_interrupt, 
 
 361                                         0, dev->name, dev))) {
 
 362                 free_irq(AU1000_IRDA_TX_INT, dev);
 
 363                 printk(KERN_ERR "%s: unable to get IRQ %d\n", 
 
 364                                 dev->name, dev->irq);
 
 368         /* Give self a hardware name */
 
 369         sprintf(hwname, "Au1000 SIR/FIR");
 
 370         aup->irlap = irlap_open(dev, &aup->qos, hwname);
 
 371         netif_start_queue(dev);
 
 373         writel(read_ir_reg(IR_CONFIG_2) | 1<<8, IR_CONFIG_2); /* int enable */
 
 375         aup->timer.expires = RUN_AT((3*HZ)); 
 
 376         aup->timer.data = (unsigned long)dev;
 
 380 static int au1k_irda_stop(struct net_device *dev)
 
 382         struct au1k_private *aup = netdev_priv(dev);
 
 384         /* disable interrupts */
 
 385         writel(read_ir_reg(IR_CONFIG_2) & ~(1<<8), IR_CONFIG_2);
 
 386         writel(0, IR_CONFIG_1); 
 
 387         writel(0, IR_INTERFACE_CONFIG); /* disable clock */
 
 391                 irlap_close(aup->irlap);
 
 395         netif_stop_queue(dev);
 
 396         del_timer(&aup->timer);
 
 398         /* disable the interrupt */
 
 399         free_irq(AU1000_IRDA_TX_INT, dev);
 
 400         free_irq(AU1000_IRDA_RX_INT, dev);
 
 404 static void __exit au1k_irda_exit(void)
 
 406         struct net_device *dev = ir_devs[0];
 
 407         struct au1k_private *aup = netdev_priv(dev);
 
 409         unregister_netdev(dev);
 
 411         dma_free((void *)aup->db[0].vaddr,
 
 412                 MAX_BUF_SIZE * 2*NUM_IR_DESC);
 
 413         dma_free((void *)aup->rx_ring[0],
 
 414                 2 * MAX_NUM_IR_DESC*(sizeof(ring_dest_t)));
 
 415         kfree(aup->rx_buff.head);
 
 421 update_tx_stats(struct net_device *dev, u32 status, u32 pkt_len)
 
 423         struct au1k_private *aup = netdev_priv(dev);
 
 424         struct net_device_stats *ps = &aup->stats;
 
 427         ps->tx_bytes += pkt_len;
 
 429         if (status & IR_TX_ERROR) {
 
 431                 ps->tx_aborted_errors++;
 
 436 static void au1k_tx_ack(struct net_device *dev)
 
 438         struct au1k_private *aup = netdev_priv(dev);
 
 439         volatile ring_dest_t *ptxd;
 
 441         ptxd = aup->tx_ring[aup->tx_tail];
 
 442         while (!(ptxd->flags & AU_OWN) && (aup->tx_tail != aup->tx_head)) {
 
 443                 update_tx_stats(dev, ptxd->flags, 
 
 444                                 ptxd->count_1<<8 | ptxd->count_0);
 
 449                 aup->tx_tail = (aup->tx_tail + 1) & (NUM_IR_DESC - 1);
 
 450                 ptxd = aup->tx_ring[aup->tx_tail];
 
 454                         netif_wake_queue(dev);
 
 458         if (aup->tx_tail == aup->tx_head) {
 
 460                         au1k_irda_set_speed(dev, aup->newspeed);
 
 464                         writel(read_ir_reg(IR_CONFIG_1) & ~IR_TX_ENABLE, 
 
 467                         writel(read_ir_reg(IR_CONFIG_1) | IR_RX_ENABLE, 
 
 469                         writel(0, IR_RING_PROMPT);
 
 477  * Au1000 transmit routine.
 
 479 static int au1k_irda_hard_xmit(struct sk_buff *skb, struct net_device *dev)
 
 481         struct au1k_private *aup = netdev_priv(dev);
 
 482         int speed = irda_get_next_speed(skb);
 
 483         volatile ring_dest_t *ptxd;
 
 489         if (speed != aup->speed && speed != -1) {
 
 490                 aup->newspeed = speed;
 
 493         if ((skb->len == 0) && (aup->newspeed)) {
 
 494                 if (aup->tx_tail == aup->tx_head) {
 
 495                         au1k_irda_set_speed(dev, speed);
 
 502         ptxd = aup->tx_ring[aup->tx_head];
 
 505         if (flags & AU_OWN) {
 
 506                 printk(KERN_DEBUG "%s: tx_full\n", dev->name);
 
 507                 netif_stop_queue(dev);
 
 511         else if (((aup->tx_head + 1) & (NUM_IR_DESC - 1)) == aup->tx_tail) {
 
 512                 printk(KERN_DEBUG "%s: tx_full\n", dev->name);
 
 513                 netif_stop_queue(dev);
 
 518         pDB = aup->tx_db_inuse[aup->tx_head];
 
 521         if (read_ir_reg(IR_RX_BYTE_CNT) != 0) {
 
 522                 printk("tx warning: rx byte cnt %x\n", 
 
 523                                 read_ir_reg(IR_RX_BYTE_CNT));
 
 527         if (aup->speed == 4000000) {
 
 529                 skb_copy_from_linear_data(skb, pDB->vaddr, skb->len);
 
 530                 ptxd->count_0 = skb->len & 0xff;
 
 531                 ptxd->count_1 = (skb->len >> 8) & 0xff;
 
 536                 len = async_wrap_skb(skb, (u8 *)pDB->vaddr, MAX_BUF_SIZE);
 
 537                 ptxd->count_0 = len & 0xff;
 
 538                 ptxd->count_1 = (len >> 8) & 0xff;
 
 539                 ptxd->flags |= IR_DIS_CRC;
 
 540                 au_writel(au_readl(0xae00000c) & ~(1<<13), 0xae00000c);
 
 542         ptxd->flags |= AU_OWN;
 
 545         writel(read_ir_reg(IR_CONFIG_1) | IR_TX_ENABLE, IR_CONFIG_1); 
 
 546         writel(0, IR_RING_PROMPT);
 
 550         aup->tx_head = (aup->tx_head + 1) & (NUM_IR_DESC - 1);
 
 551         dev->trans_start = jiffies;
 
 557 update_rx_stats(struct net_device *dev, u32 status, u32 count)
 
 559         struct au1k_private *aup = netdev_priv(dev);
 
 560         struct net_device_stats *ps = &aup->stats;
 
 564         if (status & IR_RX_ERROR) {
 
 566                 if (status & (IR_PHY_ERROR|IR_FIFO_OVER))
 
 567                         ps->rx_missed_errors++;
 
 568                 if (status & IR_MAX_LEN)
 
 569                         ps->rx_length_errors++;
 
 570                 if (status & IR_CRC_ERROR)
 
 574                 ps->rx_bytes += count;
 
 578  * Au1000 receive routine.
 
 580 static int au1k_irda_rx(struct net_device *dev)
 
 582         struct au1k_private *aup = netdev_priv(dev);
 
 584         volatile ring_dest_t *prxd;
 
 588         prxd = aup->rx_ring[aup->rx_head];
 
 591         while (!(flags & AU_OWN))  {
 
 592                 pDB = aup->rx_db_inuse[aup->rx_head];
 
 593                 count = prxd->count_1<<8 | prxd->count_0;
 
 594                 if (!(flags & IR_RX_ERROR))  {
 
 596                         update_rx_stats(dev, flags, count);
 
 597                         skb=alloc_skb(count+1,GFP_ATOMIC);
 
 599                                 aup->stats.rx_dropped++;
 
 603                         if (aup->speed == 4000000)
 
 606                                 skb_put(skb, count-2);
 
 607                         skb_copy_to_linear_data(skb, pDB->vaddr, count - 2);
 
 609                         skb_reset_mac_header(skb);
 
 610                         skb->protocol = htons(ETH_P_IRDA);
 
 615                 prxd->flags |= AU_OWN;
 
 616                 aup->rx_head = (aup->rx_head + 1) & (NUM_IR_DESC - 1);
 
 617                 writel(0, IR_RING_PROMPT);
 
 620                 /* next descriptor */
 
 621                 prxd = aup->rx_ring[aup->rx_head];
 
 623                 dev->last_rx = jiffies;
 
 630 static irqreturn_t au1k_irda_interrupt(int dummy, void *dev_id)
 
 632         struct net_device *dev = dev_id;
 
 634         writel(0, IR_INT_CLEAR); /* ack irda interrupts */
 
 644  * The Tx ring has been full longer than the watchdog timeout
 
 645  * value. The transmitter must be hung?
 
 647 static void au1k_tx_timeout(struct net_device *dev)
 
 650         struct au1k_private *aup = netdev_priv(dev);
 
 652         printk(KERN_ERR "%s: tx timeout\n", dev->name);
 
 655         au1k_irda_set_speed(dev, speed);
 
 657         netif_wake_queue(dev);
 
 662  * Set the IrDA communications speed.
 
 665 au1k_irda_set_speed(struct net_device *dev, int speed)
 
 668         struct au1k_private *aup = netdev_priv(dev);
 
 670         int ret = 0, timeout = 10, i;
 
 671         volatile ring_dest_t *ptxd;
 
 672 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
 
 673         unsigned long irda_resets;
 
 676         if (speed == aup->speed)
 
 679         spin_lock_irqsave(&ir_lock, flags);
 
 681         /* disable PHY first */
 
 682         writel(read_ir_reg(IR_ENABLE) & ~0x8000, IR_ENABLE);
 
 685         writel(read_ir_reg(IR_CONFIG_1) & ~(IR_RX_ENABLE|IR_TX_ENABLE), 
 
 688         while (read_ir_reg(IR_ENABLE) & (IR_RX_STATUS | IR_TX_STATUS)) {
 
 691                         printk(KERN_ERR "%s: rx/tx disable timeout\n",
 
 698         writel(read_ir_reg(IR_CONFIG_1) & ~IR_DMA_ENABLE, IR_CONFIG_1);
 
 702          *  After we disable tx/rx. the index pointers
 
 705         aup->tx_head = aup->tx_tail = aup->rx_head = 0;
 
 706         for (i=0; i<NUM_IR_DESC; i++) {
 
 707                 ptxd = aup->tx_ring[i];
 
 713         for (i=0; i<NUM_IR_DESC; i++) {
 
 714                 ptxd = aup->rx_ring[i];
 
 717                 ptxd->flags = AU_OWN;
 
 720         if (speed == 4000000) {
 
 721 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
 
 722                 bcsr->resets |= BCSR_RESETS_FIR_SEL;
 
 723 #else /* Pb1000 and Pb1100 */
 
 724                 writel(1<<13, CPLD_AUX1);
 
 728 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
 
 729                 bcsr->resets &= ~BCSR_RESETS_FIR_SEL;
 
 730 #else /* Pb1000 and Pb1100 */
 
 731                 writel(readl(CPLD_AUX1) & ~(1<<13), CPLD_AUX1);
 
 737                 writel(11<<10 | 12<<5, IR_WRITE_PHY_CONFIG); 
 
 738                 writel(IR_SIR_MODE, IR_CONFIG_1); 
 
 741                 writel(5<<10 | 12<<5, IR_WRITE_PHY_CONFIG); 
 
 742                 writel(IR_SIR_MODE, IR_CONFIG_1); 
 
 745                 writel(2<<10 | 12<<5, IR_WRITE_PHY_CONFIG); 
 
 746                 writel(IR_SIR_MODE, IR_CONFIG_1); 
 
 749                 writel(1<<10 | 12<<5, IR_WRITE_PHY_CONFIG); 
 
 750                 writel(IR_SIR_MODE, IR_CONFIG_1); 
 
 753                 writel(12<<5, IR_WRITE_PHY_CONFIG); 
 
 754                 writel(IR_SIR_MODE, IR_CONFIG_1); 
 
 757                 writel(0xF, IR_WRITE_PHY_CONFIG);
 
 758                 writel(IR_FIR|IR_DMA_ENABLE|IR_RX_ENABLE, IR_CONFIG_1); 
 
 761                 printk(KERN_ERR "%s unsupported speed %x\n", dev->name, speed);
 
 767         writel(read_ir_reg(IR_ENABLE) | 0x8000, IR_ENABLE);
 
 770         control = read_ir_reg(IR_ENABLE);
 
 771         writel(0, IR_RING_PROMPT);
 
 774         if (control & (1<<14)) {
 
 775                 printk(KERN_ERR "%s: configuration error\n", dev->name);
 
 778                 if (control & (1<<11))
 
 779                         printk(KERN_DEBUG "%s Valid SIR config\n", dev->name);
 
 780                 if (control & (1<<12))
 
 781                         printk(KERN_DEBUG "%s Valid MIR config\n", dev->name);
 
 782                 if (control & (1<<13))
 
 783                         printk(KERN_DEBUG "%s Valid FIR config\n", dev->name);
 
 784                 if (control & (1<<10))
 
 785                         printk(KERN_DEBUG "%s TX enabled\n", dev->name);
 
 786                 if (control & (1<<9))
 
 787                         printk(KERN_DEBUG "%s RX enabled\n", dev->name);
 
 790         spin_unlock_irqrestore(&ir_lock, flags);
 
 795 au1k_irda_ioctl(struct net_device *dev, struct ifreq *ifreq, int cmd)
 
 797         struct if_irda_req *rq = (struct if_irda_req *)ifreq;
 
 798         struct au1k_private *aup = netdev_priv(dev);
 
 799         int ret = -EOPNOTSUPP;
 
 803                 if (capable(CAP_NET_ADMIN)) {
 
 805                          * We are unable to set the speed if the
 
 806                          * device is not running.
 
 809                                 ret = au1k_irda_set_speed(dev,
 
 812                                 printk(KERN_ERR "%s ioctl: !netif_running\n",
 
 821                 if (capable(CAP_NET_ADMIN)) {
 
 822                         irda_device_set_media_busy(dev, TRUE);
 
 828                 rq->ifr_receiving = 0;
 
 837 static struct net_device_stats *au1k_irda_stats(struct net_device *dev)
 
 839         struct au1k_private *aup = netdev_priv(dev);
 
 843 MODULE_AUTHOR("Pete Popov <ppopov@mvista.com>");
 
 844 MODULE_DESCRIPTION("Au1000 IrDA Device Driver");
 
 846 module_init(au1k_irda_init);
 
 847 module_exit(au1k_irda_exit);