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/config.h>
22 #include <linux/module.h>
23 #include <linux/types.h>
24 #include <linux/init.h>
25 #include <linux/errno.h>
26 #include <linux/netdevice.h>
27 #include <linux/slab.h>
28 #include <linux/rtnetlink.h>
29 #include <linux/interrupt.h>
31 #include <linux/bitops.h>
35 #include <asm/au1000.h>
36 #if defined(CONFIG_MIPS_PB1000) || defined(CONFIG_MIPS_PB1100)
37 #include <asm/pb1000.h>
38 #elif defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
39 #include <asm/db1x00.h>
41 #error au1k_ir: unsupported board
44 #include <net/irda/irda.h>
45 #include <net/irda/irmod.h>
46 #include <net/irda/wrapper.h>
47 #include <net/irda/irda_device.h>
48 #include "au1000_ircc.h"
50 static int au1k_irda_net_init(struct net_device
*);
51 static int au1k_irda_start(struct net_device
*);
52 static int au1k_irda_stop(struct net_device
*dev
);
53 static int au1k_irda_hard_xmit(struct sk_buff
*, struct net_device
*);
54 static int au1k_irda_rx(struct net_device
*);
55 static void au1k_irda_interrupt(int, void *, struct pt_regs
*);
56 static void au1k_tx_timeout(struct net_device
*);
57 static struct net_device_stats
*au1k_irda_stats(struct net_device
*);
58 static int au1k_irda_ioctl(struct net_device
*, struct ifreq
*, int);
59 static int au1k_irda_set_speed(struct net_device
*dev
, int speed
);
61 static void *dma_alloc(size_t, dma_addr_t
*);
62 static void dma_free(void *, size_t);
64 static int qos_mtt_bits
= 0x07; /* 1 ms or more */
65 static struct net_device
*ir_devs
[NUM_IR_IFF
];
66 static char version
[] __devinitdata
=
67 "au1k_ircc:1.2 ppopov@mvista.com\n";
69 #define RUN_AT(x) (jiffies + (x))
71 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
72 static BCSR
* const bcsr
= (BCSR
*)0xAE000000;
75 static DEFINE_SPINLOCK(ir_lock
);
78 * IrDA peripheral bug. You have to read the register
79 * twice to get the right value.
81 u32
read_ir_reg(u32 addr
)
89 * Buffer allocation/deallocation routines. The buffer descriptor returned
90 * has the virtual and dma address of a buffer suitable for
91 * both, receive and transmit operations.
93 static db_dest_t
*GetFreeDB(struct au1k_private
*aup
)
99 aup
->pDBfree
= pDB
->pnext
;
104 static void ReleaseDB(struct au1k_private
*aup
, db_dest_t
*pDB
)
106 db_dest_t
*pDBfree
= aup
->pDBfree
;
108 pDBfree
->pnext
= pDB
;
114 DMA memory allocation, derived from pci_alloc_consistent.
115 However, the Au1000 data cache is coherent (when programmed
116 so), therefore we return KSEG0 address, not KSEG1.
118 static void *dma_alloc(size_t size
, dma_addr_t
* dma_handle
)
121 int gfp
= GFP_ATOMIC
| GFP_DMA
;
123 ret
= (void *) __get_free_pages(gfp
, get_order(size
));
126 memset(ret
, 0, size
);
127 *dma_handle
= virt_to_bus(ret
);
128 ret
= (void *)KSEG0ADDR(ret
);
134 static void dma_free(void *vaddr
, size_t size
)
136 vaddr
= (void *)KSEG0ADDR(vaddr
);
137 free_pages((unsigned long) vaddr
, get_order(size
));
142 setup_hw_rings(struct au1k_private
*aup
, u32 rx_base
, u32 tx_base
)
145 for (i
=0; i
<NUM_IR_DESC
; i
++) {
146 aup
->rx_ring
[i
] = (volatile ring_dest_t
*)
147 (rx_base
+ sizeof(ring_dest_t
)*i
);
149 for (i
=0; i
<NUM_IR_DESC
; i
++) {
150 aup
->tx_ring
[i
] = (volatile ring_dest_t
*)
151 (tx_base
+ sizeof(ring_dest_t
)*i
);
155 static int au1k_irda_init(void)
157 static unsigned version_printed
= 0;
158 struct au1k_private
*aup
;
159 struct net_device
*dev
;
162 if (version_printed
++ == 0) printk(version
);
164 dev
= alloc_irdadev(sizeof(struct au1k_private
));
168 dev
->irq
= AU1000_IRDA_RX_INT
; /* TX has its own interrupt */
169 err
= au1k_irda_net_init(dev
);
172 err
= register_netdev(dev
);
176 printk(KERN_INFO
"IrDA: Registered device %s\n", dev
->name
);
180 aup
= netdev_priv(dev
);
181 dma_free((void *)aup
->db
[0].vaddr
,
182 MAX_BUF_SIZE
* 2*NUM_IR_DESC
);
183 dma_free((void *)aup
->rx_ring
[0],
184 2 * MAX_NUM_IR_DESC
*(sizeof(ring_dest_t
)));
185 kfree(aup
->rx_buff
.head
);
191 static int au1k_irda_init_iobuf(iobuff_t
*io
, int size
)
193 io
->head
= kmalloc(size
, GFP_KERNEL
);
194 if (io
->head
!= NULL
) {
196 io
->in_frame
= FALSE
;
197 io
->state
= OUTSIDE_FRAME
;
200 return io
->head
? 0 : -ENOMEM
;
203 static int au1k_irda_net_init(struct net_device
*dev
)
205 struct au1k_private
*aup
= netdev_priv(dev
);
206 int i
, retval
= 0, err
;
207 db_dest_t
*pDB
, *pDBfree
;
210 err
= au1k_irda_init_iobuf(&aup
->rx_buff
, 14384);
214 dev
->open
= au1k_irda_start
;
215 dev
->hard_start_xmit
= au1k_irda_hard_xmit
;
216 dev
->stop
= au1k_irda_stop
;
217 dev
->get_stats
= au1k_irda_stats
;
218 dev
->do_ioctl
= au1k_irda_ioctl
;
219 dev
->tx_timeout
= au1k_tx_timeout
;
221 irda_init_max_qos_capabilies(&aup
->qos
);
223 /* The only value we must override it the baudrate */
224 aup
->qos
.baud_rate
.bits
= IR_9600
|IR_19200
|IR_38400
|IR_57600
|
225 IR_115200
|IR_576000
|(IR_4000000
<< 8);
227 aup
->qos
.min_turn_time
.bits
= qos_mtt_bits
;
228 irda_qos_bits_to_value(&aup
->qos
);
232 /* Tx ring follows rx ring + 512 bytes */
233 /* we need a 1k aligned buffer */
234 aup
->rx_ring
[0] = (ring_dest_t
*)
235 dma_alloc(2*MAX_NUM_IR_DESC
*(sizeof(ring_dest_t
)), &temp
);
236 if (!aup
->rx_ring
[0])
239 /* allocate the data buffers */
241 (void *)dma_alloc(MAX_BUF_SIZE
* 2*NUM_IR_DESC
, &temp
);
242 if (!aup
->db
[0].vaddr
)
245 setup_hw_rings(aup
, (u32
)aup
->rx_ring
[0], (u32
)aup
->rx_ring
[0] + 512);
249 for (i
=0; i
<(2*NUM_IR_DESC
); i
++) {
250 pDB
->pnext
= pDBfree
;
253 (u32
*)((unsigned)aup
->db
[0].vaddr
+ MAX_BUF_SIZE
*i
);
254 pDB
->dma_addr
= (dma_addr_t
)virt_to_bus(pDB
->vaddr
);
257 aup
->pDBfree
= pDBfree
;
259 /* attach a data buffer to each descriptor */
260 for (i
=0; i
<NUM_IR_DESC
; i
++) {
261 pDB
= GetFreeDB(aup
);
263 aup
->rx_ring
[i
]->addr_0
= (u8
)(pDB
->dma_addr
& 0xff);
264 aup
->rx_ring
[i
]->addr_1
= (u8
)((pDB
->dma_addr
>>8) & 0xff);
265 aup
->rx_ring
[i
]->addr_2
= (u8
)((pDB
->dma_addr
>>16) & 0xff);
266 aup
->rx_ring
[i
]->addr_3
= (u8
)((pDB
->dma_addr
>>24) & 0xff);
267 aup
->rx_db_inuse
[i
] = pDB
;
269 for (i
=0; i
<NUM_IR_DESC
; i
++) {
270 pDB
= GetFreeDB(aup
);
272 aup
->tx_ring
[i
]->addr_0
= (u8
)(pDB
->dma_addr
& 0xff);
273 aup
->tx_ring
[i
]->addr_1
= (u8
)((pDB
->dma_addr
>>8) & 0xff);
274 aup
->tx_ring
[i
]->addr_2
= (u8
)((pDB
->dma_addr
>>16) & 0xff);
275 aup
->tx_ring
[i
]->addr_3
= (u8
)((pDB
->dma_addr
>>24) & 0xff);
276 aup
->tx_ring
[i
]->count_0
= 0;
277 aup
->tx_ring
[i
]->count_1
= 0;
278 aup
->tx_ring
[i
]->flags
= 0;
279 aup
->tx_db_inuse
[i
] = pDB
;
282 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
284 bcsr
->resets
&= ~BCSR_RESETS_IRDA_MODE_MASK
;
285 bcsr
->resets
|= BCSR_RESETS_IRDA_MODE_FULL
;
292 dma_free((void *)aup
->rx_ring
[0],
293 2 * MAX_NUM_IR_DESC
*(sizeof(ring_dest_t
)));
295 kfree(aup
->rx_buff
.head
);
297 printk(KERN_ERR
"au1k_init_module failed. Returns %d\n", retval
);
302 static int au1k_init(struct net_device
*dev
)
304 struct au1k_private
*aup
= netdev_priv(dev
);
309 /* bring the device out of reset */
310 control
= 0xe; /* coherent, clock enable, one half system clock */
312 #ifndef CONFIG_CPU_LITTLE_ENDIAN
319 for (i
=0; i
<NUM_IR_DESC
; i
++) {
320 aup
->rx_ring
[i
]->flags
= AU_OWN
;
323 writel(control
, IR_INTERFACE_CONFIG
);
326 writel(read_ir_reg(IR_ENABLE
) & ~0x8000, IR_ENABLE
); /* disable PHY */
329 writel(MAX_BUF_SIZE
, IR_MAX_PKT_LEN
);
331 ring_address
= (u32
)virt_to_phys((void *)aup
->rx_ring
[0]);
332 writel(ring_address
>> 26, IR_RING_BASE_ADDR_H
);
333 writel((ring_address
>> 10) & 0xffff, IR_RING_BASE_ADDR_L
);
335 writel(RING_SIZE_64
<<8 | RING_SIZE_64
<<12, IR_RING_SIZE
);
337 writel(1<<2 | IR_ONE_PIN
, IR_CONFIG_2
); /* 48MHz */
338 writel(0, IR_RING_ADDR_CMPR
);
340 au1k_irda_set_speed(dev
, 9600);
344 static int au1k_irda_start(struct net_device
*dev
)
348 struct au1k_private
*aup
= netdev_priv(dev
);
350 if ((retval
= au1k_init(dev
))) {
351 printk(KERN_ERR
"%s: error in au1k_init\n", dev
->name
);
355 if ((retval
= request_irq(AU1000_IRDA_TX_INT
, &au1k_irda_interrupt
,
356 0, dev
->name
, dev
))) {
357 printk(KERN_ERR
"%s: unable to get IRQ %d\n",
358 dev
->name
, dev
->irq
);
361 if ((retval
= request_irq(AU1000_IRDA_RX_INT
, &au1k_irda_interrupt
,
362 0, dev
->name
, dev
))) {
363 free_irq(AU1000_IRDA_TX_INT
, dev
);
364 printk(KERN_ERR
"%s: unable to get IRQ %d\n",
365 dev
->name
, dev
->irq
);
369 /* Give self a hardware name */
370 sprintf(hwname
, "Au1000 SIR/FIR");
371 aup
->irlap
= irlap_open(dev
, &aup
->qos
, hwname
);
372 netif_start_queue(dev
);
374 writel(read_ir_reg(IR_CONFIG_2
) | 1<<8, IR_CONFIG_2
); /* int enable */
376 aup
->timer
.expires
= RUN_AT((3*HZ
));
377 aup
->timer
.data
= (unsigned long)dev
;
381 static int au1k_irda_stop(struct net_device
*dev
)
383 struct au1k_private
*aup
= netdev_priv(dev
);
385 /* disable interrupts */
386 writel(read_ir_reg(IR_CONFIG_2
) & ~(1<<8), IR_CONFIG_2
);
387 writel(0, IR_CONFIG_1
);
388 writel(0, IR_INTERFACE_CONFIG
); /* disable clock */
392 irlap_close(aup
->irlap
);
396 netif_stop_queue(dev
);
397 del_timer(&aup
->timer
);
399 /* disable the interrupt */
400 free_irq(AU1000_IRDA_TX_INT
, dev
);
401 free_irq(AU1000_IRDA_RX_INT
, dev
);
405 static void __exit
au1k_irda_exit(void)
407 struct net_device
*dev
= ir_devs
[0];
408 struct au1k_private
*aup
= netdev_priv(dev
);
410 unregister_netdev(dev
);
412 dma_free((void *)aup
->db
[0].vaddr
,
413 MAX_BUF_SIZE
* 2*NUM_IR_DESC
);
414 dma_free((void *)aup
->rx_ring
[0],
415 2 * MAX_NUM_IR_DESC
*(sizeof(ring_dest_t
)));
416 kfree(aup
->rx_buff
.head
);
422 update_tx_stats(struct net_device
*dev
, u32 status
, u32 pkt_len
)
424 struct au1k_private
*aup
= netdev_priv(dev
);
425 struct net_device_stats
*ps
= &aup
->stats
;
428 ps
->tx_bytes
+= pkt_len
;
430 if (status
& IR_TX_ERROR
) {
432 ps
->tx_aborted_errors
++;
437 static void au1k_tx_ack(struct net_device
*dev
)
439 struct au1k_private
*aup
= netdev_priv(dev
);
440 volatile ring_dest_t
*ptxd
;
442 ptxd
= aup
->tx_ring
[aup
->tx_tail
];
443 while (!(ptxd
->flags
& AU_OWN
) && (aup
->tx_tail
!= aup
->tx_head
)) {
444 update_tx_stats(dev
, ptxd
->flags
,
445 ptxd
->count_1
<<8 | ptxd
->count_0
);
450 aup
->tx_tail
= (aup
->tx_tail
+ 1) & (NUM_IR_DESC
- 1);
451 ptxd
= aup
->tx_ring
[aup
->tx_tail
];
455 netif_wake_queue(dev
);
459 if (aup
->tx_tail
== aup
->tx_head
) {
461 au1k_irda_set_speed(dev
, aup
->newspeed
);
465 writel(read_ir_reg(IR_CONFIG_1
) & ~IR_TX_ENABLE
,
468 writel(read_ir_reg(IR_CONFIG_1
) | IR_RX_ENABLE
,
470 writel(0, IR_RING_PROMPT
);
478 * Au1000 transmit routine.
480 static int au1k_irda_hard_xmit(struct sk_buff
*skb
, struct net_device
*dev
)
482 struct au1k_private
*aup
= netdev_priv(dev
);
483 int speed
= irda_get_next_speed(skb
);
484 volatile ring_dest_t
*ptxd
;
490 if (speed
!= aup
->speed
&& speed
!= -1) {
491 aup
->newspeed
= speed
;
494 if ((skb
->len
== 0) && (aup
->newspeed
)) {
495 if (aup
->tx_tail
== aup
->tx_head
) {
496 au1k_irda_set_speed(dev
, speed
);
503 ptxd
= aup
->tx_ring
[aup
->tx_head
];
506 if (flags
& AU_OWN
) {
507 printk(KERN_DEBUG
"%s: tx_full\n", dev
->name
);
508 netif_stop_queue(dev
);
512 else if (((aup
->tx_head
+ 1) & (NUM_IR_DESC
- 1)) == aup
->tx_tail
) {
513 printk(KERN_DEBUG
"%s: tx_full\n", dev
->name
);
514 netif_stop_queue(dev
);
519 pDB
= aup
->tx_db_inuse
[aup
->tx_head
];
522 if (read_ir_reg(IR_RX_BYTE_CNT
) != 0) {
523 printk("tx warning: rx byte cnt %x\n",
524 read_ir_reg(IR_RX_BYTE_CNT
));
528 if (aup
->speed
== 4000000) {
530 memcpy((void *)pDB
->vaddr
, skb
->data
, skb
->len
);
531 ptxd
->count_0
= skb
->len
& 0xff;
532 ptxd
->count_1
= (skb
->len
>> 8) & 0xff;
537 len
= async_wrap_skb(skb
, (u8
*)pDB
->vaddr
, MAX_BUF_SIZE
);
538 ptxd
->count_0
= len
& 0xff;
539 ptxd
->count_1
= (len
>> 8) & 0xff;
540 ptxd
->flags
|= IR_DIS_CRC
;
541 au_writel(au_readl(0xae00000c) & ~(1<<13), 0xae00000c);
543 ptxd
->flags
|= AU_OWN
;
546 writel(read_ir_reg(IR_CONFIG_1
) | IR_TX_ENABLE
, IR_CONFIG_1
);
547 writel(0, IR_RING_PROMPT
);
551 aup
->tx_head
= (aup
->tx_head
+ 1) & (NUM_IR_DESC
- 1);
552 dev
->trans_start
= jiffies
;
558 update_rx_stats(struct net_device
*dev
, u32 status
, u32 count
)
560 struct au1k_private
*aup
= netdev_priv(dev
);
561 struct net_device_stats
*ps
= &aup
->stats
;
565 if (status
& IR_RX_ERROR
) {
567 if (status
& (IR_PHY_ERROR
|IR_FIFO_OVER
))
568 ps
->rx_missed_errors
++;
569 if (status
& IR_MAX_LEN
)
570 ps
->rx_length_errors
++;
571 if (status
& IR_CRC_ERROR
)
575 ps
->rx_bytes
+= count
;
579 * Au1000 receive routine.
581 static int au1k_irda_rx(struct net_device
*dev
)
583 struct au1k_private
*aup
= netdev_priv(dev
);
585 volatile ring_dest_t
*prxd
;
589 prxd
= aup
->rx_ring
[aup
->rx_head
];
592 while (!(flags
& AU_OWN
)) {
593 pDB
= aup
->rx_db_inuse
[aup
->rx_head
];
594 count
= prxd
->count_1
<<8 | prxd
->count_0
;
595 if (!(flags
& IR_RX_ERROR
)) {
597 update_rx_stats(dev
, flags
, count
);
598 skb
=alloc_skb(count
+1,GFP_ATOMIC
);
600 aup
->stats
.rx_dropped
++;
604 if (aup
->speed
== 4000000)
607 skb_put(skb
, count
-2);
608 memcpy(skb
->data
, (void *)pDB
->vaddr
, count
-2);
610 skb
->mac
.raw
= skb
->data
;
611 skb
->protocol
= htons(ETH_P_IRDA
);
616 prxd
->flags
|= AU_OWN
;
617 aup
->rx_head
= (aup
->rx_head
+ 1) & (NUM_IR_DESC
- 1);
618 writel(0, IR_RING_PROMPT
);
621 /* next descriptor */
622 prxd
= aup
->rx_ring
[aup
->rx_head
];
624 dev
->last_rx
= jiffies
;
631 void au1k_irda_interrupt(int irq
, void *dev_id
, struct pt_regs
*regs
)
633 struct net_device
*dev
= (struct net_device
*) dev_id
;
636 printk(KERN_ERR
"%s: isr: null dev ptr\n", dev
->name
);
640 writel(0, IR_INT_CLEAR
); /* ack irda interrupts */
648 * The Tx ring has been full longer than the watchdog timeout
649 * value. The transmitter must be hung?
651 static void au1k_tx_timeout(struct net_device
*dev
)
654 struct au1k_private
*aup
= netdev_priv(dev
);
656 printk(KERN_ERR
"%s: tx timeout\n", dev
->name
);
659 au1k_irda_set_speed(dev
, speed
);
661 netif_wake_queue(dev
);
666 * Set the IrDA communications speed.
669 au1k_irda_set_speed(struct net_device
*dev
, int speed
)
672 struct au1k_private
*aup
= netdev_priv(dev
);
674 int ret
= 0, timeout
= 10, i
;
675 volatile ring_dest_t
*ptxd
;
676 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
677 unsigned long irda_resets
;
680 if (speed
== aup
->speed
)
683 spin_lock_irqsave(&ir_lock
, flags
);
685 /* disable PHY first */
686 writel(read_ir_reg(IR_ENABLE
) & ~0x8000, IR_ENABLE
);
689 writel(read_ir_reg(IR_CONFIG_1
) & ~(IR_RX_ENABLE
|IR_TX_ENABLE
),
692 while (read_ir_reg(IR_ENABLE
) & (IR_RX_STATUS
| IR_TX_STATUS
)) {
695 printk(KERN_ERR
"%s: rx/tx disable timeout\n",
702 writel(read_ir_reg(IR_CONFIG_1
) & ~IR_DMA_ENABLE
, IR_CONFIG_1
);
706 * After we disable tx/rx. the index pointers
709 aup
->tx_head
= aup
->tx_tail
= aup
->rx_head
= 0;
710 for (i
=0; i
<NUM_IR_DESC
; i
++) {
711 ptxd
= aup
->tx_ring
[i
];
717 for (i
=0; i
<NUM_IR_DESC
; i
++) {
718 ptxd
= aup
->rx_ring
[i
];
721 ptxd
->flags
= AU_OWN
;
724 if (speed
== 4000000) {
725 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
726 bcsr
->resets
|= BCSR_RESETS_FIR_SEL
;
727 #else /* Pb1000 and Pb1100 */
728 writel(1<<13, CPLD_AUX1
);
732 #if defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100)
733 bcsr
->resets
&= ~BCSR_RESETS_FIR_SEL
;
734 #else /* Pb1000 and Pb1100 */
735 writel(readl(CPLD_AUX1
) & ~(1<<13), CPLD_AUX1
);
741 writel(11<<10 | 12<<5, IR_WRITE_PHY_CONFIG
);
742 writel(IR_SIR_MODE
, IR_CONFIG_1
);
745 writel(5<<10 | 12<<5, IR_WRITE_PHY_CONFIG
);
746 writel(IR_SIR_MODE
, IR_CONFIG_1
);
749 writel(2<<10 | 12<<5, IR_WRITE_PHY_CONFIG
);
750 writel(IR_SIR_MODE
, IR_CONFIG_1
);
753 writel(1<<10 | 12<<5, IR_WRITE_PHY_CONFIG
);
754 writel(IR_SIR_MODE
, IR_CONFIG_1
);
757 writel(12<<5, IR_WRITE_PHY_CONFIG
);
758 writel(IR_SIR_MODE
, IR_CONFIG_1
);
761 writel(0xF, IR_WRITE_PHY_CONFIG
);
762 writel(IR_FIR
|IR_DMA_ENABLE
|IR_RX_ENABLE
, IR_CONFIG_1
);
765 printk(KERN_ERR
"%s unsupported speed %x\n", dev
->name
, speed
);
771 writel(read_ir_reg(IR_ENABLE
) | 0x8000, IR_ENABLE
);
774 control
= read_ir_reg(IR_ENABLE
);
775 writel(0, IR_RING_PROMPT
);
778 if (control
& (1<<14)) {
779 printk(KERN_ERR
"%s: configuration error\n", dev
->name
);
782 if (control
& (1<<11))
783 printk(KERN_DEBUG
"%s Valid SIR config\n", dev
->name
);
784 if (control
& (1<<12))
785 printk(KERN_DEBUG
"%s Valid MIR config\n", dev
->name
);
786 if (control
& (1<<13))
787 printk(KERN_DEBUG
"%s Valid FIR config\n", dev
->name
);
788 if (control
& (1<<10))
789 printk(KERN_DEBUG
"%s TX enabled\n", dev
->name
);
790 if (control
& (1<<9))
791 printk(KERN_DEBUG
"%s RX enabled\n", dev
->name
);
794 spin_unlock_irqrestore(&ir_lock
, flags
);
799 au1k_irda_ioctl(struct net_device
*dev
, struct ifreq
*ifreq
, int cmd
)
801 struct if_irda_req
*rq
= (struct if_irda_req
*)ifreq
;
802 struct au1k_private
*aup
= netdev_priv(dev
);
803 int ret
= -EOPNOTSUPP
;
807 if (capable(CAP_NET_ADMIN
)) {
809 * We are unable to set the speed if the
810 * device is not running.
813 ret
= au1k_irda_set_speed(dev
,
816 printk(KERN_ERR
"%s ioctl: !netif_running\n",
825 if (capable(CAP_NET_ADMIN
)) {
826 irda_device_set_media_busy(dev
, TRUE
);
832 rq
->ifr_receiving
= 0;
841 static struct net_device_stats
*au1k_irda_stats(struct net_device
*dev
)
843 struct au1k_private
*aup
= netdev_priv(dev
);
847 MODULE_AUTHOR("Pete Popov <ppopov@mvista.com>");
848 MODULE_DESCRIPTION("Au1000 IrDA Device Driver");
850 module_init(au1k_irda_init
);
851 module_exit(au1k_irda_exit
);