diff options
Diffstat (limited to 'drivers/atm/horizon.c')
| -rw-r--r-- | drivers/atm/horizon.c | 81 |
1 files changed, 39 insertions, 42 deletions
diff --git a/drivers/atm/horizon.c b/drivers/atm/horizon.c index 9b2cf253f02..1dc0519333f 100644 --- a/drivers/atm/horizon.c +++ b/drivers/atm/horizon.c @@ -38,12 +38,13 @@ #include <linux/delay.h> #include <linux/uio.h> #include <linux/init.h> +#include <linux/interrupt.h> #include <linux/ioport.h> #include <linux/wait.h> +#include <linux/slab.h> -#include <asm/system.h> #include <asm/io.h> -#include <asm/atomic.h> +#include <linux/atomic.h> #include <asm/uaccess.h> #include <asm/string.h> #include <asm/byteorder.h> @@ -168,13 +169,13 @@ static inline void __init show_version (void) { Real Time (cdv and max CDT given) CBR(pcr) pcr bandwidth always available - rtVBR(pcr,scr,mbs) scr bandwidth always available, upto pcr at mbs too + rtVBR(pcr,scr,mbs) scr bandwidth always available, up to pcr at mbs too Non Real Time - nrtVBR(pcr,scr,mbs) scr bandwidth always available, upto pcr at mbs too + nrtVBR(pcr,scr,mbs) scr bandwidth always available, up to pcr at mbs too UBR() - ABR(mcr,pcr) mcr bandwidth always available, upto pcr (depending) too + ABR(mcr,pcr) mcr bandwidth always available, up to pcr (depending) too mbs is max burst size (bucket) pcr and scr have associated cdvt values @@ -424,7 +425,7 @@ static inline void FLUSH_RX_CHANNEL (hrz_dev * dev, u16 channel) { return; } -static inline void WAIT_FLUSH_RX_COMPLETE (hrz_dev * dev) { +static void WAIT_FLUSH_RX_COMPLETE (hrz_dev * dev) { while (rd_regw (dev, RX_CHANNEL_PORT_OFF) & FLUSH_CHANNEL) ; return; @@ -435,7 +436,7 @@ static inline void SELECT_RX_CHANNEL (hrz_dev * dev, u16 channel) { return; } -static inline void WAIT_UPDATE_COMPLETE (hrz_dev * dev) { +static void WAIT_UPDATE_COMPLETE (hrz_dev * dev) { while (rd_regw (dev, RX_CHANNEL_PORT_OFF) & RX_CHANNEL_UPDATE_IN_PROGRESS) ; return; @@ -635,13 +636,13 @@ static int make_rate (const hrz_dev * dev, u32 c, rounding r, // take care of rounding switch (r) { case round_down: - pre = (br+(c<<div)-1)/(c<<div); + pre = DIV_ROUND_UP(br, c<<div); // but p must be non-zero if (!pre) pre = 1; break; case round_nearest: - pre = (br+(c<<div)/2)/(c<<div); + pre = DIV_ROUND_CLOSEST(br, c<<div); // but p must be non-zero if (!pre) pre = 1; @@ -668,10 +669,10 @@ static int make_rate (const hrz_dev * dev, u32 c, rounding r, // take care of rounding switch (r) { case round_down: - pre = (br+(c<<div)-1)/(c<<div); + pre = DIV_ROUND_UP(br, c<<div); break; case round_nearest: - pre = (br+(c<<div)/2)/(c<<div); + pre = DIV_ROUND_CLOSEST(br, c<<div); break; default: /* round_up */ pre = br/(c<<div); @@ -698,7 +699,7 @@ got_it: if (bits) *bits = (div<<CLOCK_SELECT_SHIFT) | (pre-1); if (actual) { - *actual = (br + (pre<<div) - 1) / (pre<<div); + *actual = DIV_ROUND_UP(br, pre<<div); PRINTD (DBG_QOS, "actual rate: %u", *actual); } return 0; @@ -796,7 +797,7 @@ static void hrz_change_vc_qos (ATM_RXER * rxer, MAAL_QOS * qos) { /********** free an skb (as per ATM device driver documentation) **********/ -static inline void hrz_kfree_skb (struct sk_buff * skb) { +static void hrz_kfree_skb (struct sk_buff * skb) { if (ATM_SKB(skb)->vcc->pop) { ATM_SKB(skb)->vcc->pop (ATM_SKB(skb)->vcc, skb); } else { @@ -943,7 +944,7 @@ static void hrz_close_rx (hrz_dev * dev, u16 vc) { // to be fixed soon, so do not define TAILRECUSRIONWORKS unless you // are sure it does as you may otherwise overflow the kernel stack. -// giving this fn a return value would help GCC, alledgedly +// giving this fn a return value would help GCC, allegedly static void rx_schedule (hrz_dev * dev, int irq) { unsigned int rx_bytes; @@ -1035,7 +1036,7 @@ static void rx_schedule (hrz_dev * dev, int irq) { // VC layer stats atomic_inc(&vcc->stats->rx); __net_timestamp(skb); - // end of our responsability + // end of our responsibility vcc->push (vcc, skb); } } @@ -1076,7 +1077,7 @@ static void rx_schedule (hrz_dev * dev, int irq) { /********** handle RX bus master complete events **********/ -static inline void rx_bus_master_complete_handler (hrz_dev * dev) { +static void rx_bus_master_complete_handler (hrz_dev * dev) { if (test_bit (rx_busy, &dev->flags)) { rx_schedule (dev, 1); } else { @@ -1089,7 +1090,7 @@ static inline void rx_bus_master_complete_handler (hrz_dev * dev) { /********** (queue to) become the next TX thread **********/ -static inline int tx_hold (hrz_dev * dev) { +static int tx_hold (hrz_dev * dev) { PRINTD (DBG_TX, "sleeping at tx lock %p %lu", dev, dev->flags); wait_event_interruptible(dev->tx_queue, (!test_and_set_bit(tx_busy, &dev->flags))); PRINTD (DBG_TX, "woken at tx lock %p %lu", dev, dev->flags); @@ -1232,7 +1233,7 @@ static void tx_schedule (hrz_dev * const dev, int irq) { /********** handle TX bus master complete events **********/ -static inline void tx_bus_master_complete_handler (hrz_dev * dev) { +static void tx_bus_master_complete_handler (hrz_dev * dev) { if (test_bit (tx_busy, &dev->flags)) { tx_schedule (dev, 1); } else { @@ -1246,7 +1247,7 @@ static inline void tx_bus_master_complete_handler (hrz_dev * dev) { /********** move RX Q pointer to next item in circular buffer **********/ // called only from IRQ sub-handler -static inline u32 rx_queue_entry_next (hrz_dev * dev) { +static u32 rx_queue_entry_next (hrz_dev * dev) { u32 rx_queue_entry; spin_lock (&dev->mem_lock); rx_queue_entry = rd_mem (dev, &dev->rx_q_entry->entry); @@ -1270,7 +1271,7 @@ static inline void rx_disabled_handler (hrz_dev * dev) { /********** handle RX data received by device **********/ // called from IRQ handler -static inline void rx_data_av_handler (hrz_dev * dev) { +static void rx_data_av_handler (hrz_dev * dev) { u32 rx_queue_entry; u32 rx_queue_entry_flags; u16 rx_len; @@ -1394,7 +1395,7 @@ static irqreturn_t interrupt_handler(int irq, void *dev_id) irq_ok = 0; while ((int_source = rd_regl (dev, INT_SOURCE_REG_OFF) & INTERESTING_INTERRUPTS)) { - // In the interests of fairness, the (inline) handlers below are + // In the interests of fairness, the handlers below are // called in sequence and without immediate return to the head of // the while loop. This is only of issue for slow hosts (or when // debugging messages are on). Really slow hosts may find a fast @@ -1458,7 +1459,7 @@ static void do_housekeeping (unsigned long arg) { /********** find an idle channel for TX and set it up **********/ // called with tx_busy set -static inline short setup_idle_tx_channel (hrz_dev * dev, hrz_vcc * vcc) { +static short setup_idle_tx_channel (hrz_dev * dev, hrz_vcc * vcc) { unsigned short idle_channels; short tx_channel = -1; unsigned int spin_count; @@ -1644,10 +1645,8 @@ static int hrz_send (struct atm_vcc * atm_vcc, struct sk_buff * skb) { unsigned short d = 0; char * s = skb->data; if (*s++ == 'D') { - for (i = 0; i < 4; ++i) { - d = (d<<4) | ((*s <= '9') ? (*s - '0') : (*s - 'a' + 10)); - ++s; - } + for (i = 0; i < 4; ++i) + d = (d << 4) | hex_to_bin(*s++); PRINTK (KERN_INFO, "debug bitmap is now %hx", debug = d); } } @@ -1777,20 +1776,20 @@ static void hrz_reset (const hrz_dev * dev) { /********** read the burnt in address **********/ -static inline void WRITE_IT_WAIT (const hrz_dev *dev, u32 ctrl) +static void WRITE_IT_WAIT (const hrz_dev *dev, u32 ctrl) { wr_regl (dev, CONTROL_0_REG, ctrl); udelay (5); } -static inline void CLOCK_IT (const hrz_dev *dev, u32 ctrl) +static void CLOCK_IT (const hrz_dev *dev, u32 ctrl) { // DI must be valid around rising SK edge WRITE_IT_WAIT(dev, ctrl & ~SEEPROM_SK); WRITE_IT_WAIT(dev, ctrl | SEEPROM_SK); } -static u16 __devinit read_bia (const hrz_dev * dev, u16 addr) +static u16 read_bia(const hrz_dev *dev, u16 addr) { u32 ctrl = rd_regl (dev, CONTROL_0_REG); @@ -1846,7 +1845,8 @@ static u16 __devinit read_bia (const hrz_dev * dev, u16 addr) /********** initialise a card **********/ -static int __devinit hrz_init (hrz_dev * dev) { +static int hrz_init(hrz_dev *dev) +{ int onefivefive; u16 chan; @@ -1967,7 +1967,7 @@ static int __devinit hrz_init (hrz_dev * dev) { // Set the max AAL5 cell count to be just enough to contain the // largest AAL5 frame that the user wants to receive wr_regw (dev, MAX_AAL5_CELL_COUNT_OFF, - (max_rx_size + ATM_AAL5_TRAILER + ATM_CELL_PAYLOAD - 1) / ATM_CELL_PAYLOAD); + DIV_ROUND_UP(max_rx_size + ATM_AAL5_TRAILER, ATM_CELL_PAYLOAD)); // Enable receive wr_regw (dev, RX_CONFIG_OFF, rd_regw (dev, RX_CONFIG_OFF) | RX_ENABLE); @@ -2183,7 +2183,6 @@ static int hrz_open (struct atm_vcc *atm_vcc) default: PRINTD (DBG_QOS|DBG_VCC, "Bad AAL!"); return -EINVAL; - break; } // TX traffic parameters @@ -2358,7 +2357,6 @@ static int hrz_open (struct atm_vcc *atm_vcc) default: { PRINTD (DBG_QOS, "unsupported TX traffic class"); return -EINVAL; - break; } } } @@ -2434,7 +2432,6 @@ static int hrz_open (struct atm_vcc *atm_vcc) default: { PRINTD (DBG_QOS, "unsupported RX traffic class"); return -EINVAL; - break; } } } @@ -2582,7 +2579,6 @@ static int hrz_getsockopt (struct atm_vcc * atm_vcc, int level, int optname, // break; default: return -ENOPROTOOPT; - break; }; break; } @@ -2590,7 +2586,7 @@ static int hrz_getsockopt (struct atm_vcc * atm_vcc, int level, int optname, } static int hrz_setsockopt (struct atm_vcc * atm_vcc, int level, int optname, - void *optval, int optlen) { + void *optval, unsigned int optlen) { hrz_dev * dev = HRZ_DEV(atm_vcc->dev); PRINTD (DBG_FLOW|DBG_VCC, "hrz_setsockopt"); switch (level) { @@ -2602,7 +2598,6 @@ static int hrz_setsockopt (struct atm_vcc * atm_vcc, int level, int optname, // break; default: return -ENOPROTOOPT; - break; }; break; } @@ -2687,7 +2682,8 @@ static const struct atmdev_ops hrz_ops = { .owner = THIS_MODULE, }; -static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent) +static int hrz_probe(struct pci_dev *pci_dev, + const struct pci_device_id *pci_ent) { hrz_dev * dev; int err = 0; @@ -2705,7 +2701,7 @@ static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_ /* XXX DEV_LABEL is a guess */ if (!request_region(iobase, HRZ_IO_EXTENT, DEV_LABEL)) { - return -EINVAL; + err = -EINVAL; goto out_disable; } @@ -2734,7 +2730,8 @@ static int __devinit hrz_probe(struct pci_dev *pci_dev, const struct pci_device_ PRINTD(DBG_INFO, "found Madge ATM adapter (hrz) at: IO %x, IRQ %u, MEM %p", iobase, irq, membase); - dev->atm_dev = atm_dev_register(DEV_LABEL, &hrz_ops, -1, NULL); + dev->atm_dev = atm_dev_register(DEV_LABEL, &pci_dev->dev, &hrz_ops, -1, + NULL); if (!(dev->atm_dev)) { PRINTD(DBG_ERR, "failed to register Madge ATM adapter"); err = -EINVAL; @@ -2841,7 +2838,7 @@ out_disable: goto out; } -static void __devexit hrz_remove_one(struct pci_dev *pci_dev) +static void hrz_remove_one(struct pci_dev *pci_dev) { hrz_dev *dev; @@ -2906,7 +2903,7 @@ MODULE_DEVICE_TABLE(pci, hrz_pci_tbl); static struct pci_driver hrz_driver = { .name = "horizon", .probe = hrz_probe, - .remove = __devexit_p(hrz_remove_one), + .remove = hrz_remove_one, .id_table = hrz_pci_tbl, }; |
