git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git]
/
drivers
/
atm
/
he.c
diff --git
a/drivers/atm/he.c
b/drivers/atm/he.c
index
df2c83f
..
db33f6f
100644
(file)
--- a/
drivers/atm/he.c
+++ b/
drivers/atm/he.c
@@
-55,9
+55,7
@@
*/
*/
-#include <linux/config.h>
#include <linux/module.h>
#include <linux/module.h>
-#include <linux/version.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/pci.h>
#include <linux/kernel.h>
#include <linux/skbuff.h>
#include <linux/pci.h>
@@
-111,7
+109,7
@@
static int he_open(struct atm_vcc *vcc);
static void he_close(struct atm_vcc *vcc);
static int he_send(struct atm_vcc *vcc, struct sk_buff *skb);
static int he_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg);
static void he_close(struct atm_vcc *vcc);
static int he_send(struct atm_vcc *vcc, struct sk_buff *skb);
static int he_ioctl(struct atm_dev *dev, unsigned int cmd, void __user *arg);
-static irqreturn_t he_irq_handler(int irq, void *dev_id
, struct pt_regs *regs
);
+static irqreturn_t he_irq_handler(int irq, void *dev_id);
static void he_tasklet(unsigned long data);
static int he_proc_read(struct atm_dev *dev,loff_t *pos,char *page);
static int he_start(struct atm_dev *dev);
static void he_tasklet(unsigned long data);
static int he_proc_read(struct atm_dev *dev,loff_t *pos,char *page);
static int he_start(struct atm_dev *dev);
@@
-385,14
+383,12
@@
he_init_one(struct pci_dev *pci_dev, const struct pci_device_id *pci_ent)
}
pci_set_drvdata(pci_dev, atm_dev);
}
pci_set_drvdata(pci_dev, atm_dev);
- he_dev =
(struct he_dev *) km
alloc(sizeof(struct he_dev),
+ he_dev =
kz
alloc(sizeof(struct he_dev),
GFP_KERNEL);
if (!he_dev) {
err = -ENOMEM;
goto init_one_failure;
}
GFP_KERNEL);
if (!he_dev) {
err = -ENOMEM;
goto init_one_failure;
}
- memset(he_dev, 0, sizeof(struct he_dev));
-
he_dev->pci_dev = pci_dev;
he_dev->atm_dev = atm_dev;
he_dev->atm_dev->dev_data = he_dev;
he_dev->pci_dev = pci_dev;
he_dev->atm_dev = atm_dev;
he_dev->atm_dev->dev_data = he_dev;
@@
-456,7
+452,7
@@
rate_to_atmf(unsigned rate) /* cps to atm forum format */
return (NONZERO | (exp << 9) | (rate & 0x1ff));
}
return (NONZERO | (exp << 9) | (rate & 0x1ff));
}
-static void __init
+static void __
dev
init
he_init_rx_lbfp0(struct he_dev *he_dev)
{
unsigned i, lbm_offset, lbufd_index, lbuf_addr, lbuf_count;
he_init_rx_lbfp0(struct he_dev *he_dev)
{
unsigned i, lbm_offset, lbufd_index, lbuf_addr, lbuf_count;
@@
-487,7
+483,7
@@
he_init_rx_lbfp0(struct he_dev *he_dev)
he_writel(he_dev, he_dev->r0_numbuffs, RLBF0_C);
}
he_writel(he_dev, he_dev->r0_numbuffs, RLBF0_C);
}
-static void __init
+static void __
dev
init
he_init_rx_lbfp1(struct he_dev *he_dev)
{
unsigned i, lbm_offset, lbufd_index, lbuf_addr, lbuf_count;
he_init_rx_lbfp1(struct he_dev *he_dev)
{
unsigned i, lbm_offset, lbufd_index, lbuf_addr, lbuf_count;
@@
-518,7
+514,7
@@
he_init_rx_lbfp1(struct he_dev *he_dev)
he_writel(he_dev, he_dev->r1_numbuffs, RLBF1_C);
}
he_writel(he_dev, he_dev->r1_numbuffs, RLBF1_C);
}
-static void __init
+static void __
dev
init
he_init_tx_lbfp(struct he_dev *he_dev)
{
unsigned i, lbm_offset, lbufd_index, lbuf_addr, lbuf_count;
he_init_tx_lbfp(struct he_dev *he_dev)
{
unsigned i, lbm_offset, lbufd_index, lbuf_addr, lbuf_count;
@@
-548,7
+544,7
@@
he_init_tx_lbfp(struct he_dev *he_dev)
he_writel(he_dev, lbufd_index - 1, TLBF_T);
}
he_writel(he_dev, lbufd_index - 1, TLBF_T);
}
-static int __init
+static int __
dev
init
he_init_tpdrq(struct he_dev *he_dev)
{
he_dev->tpdrq_base = pci_alloc_consistent(he_dev->pci_dev,
he_init_tpdrq(struct he_dev *he_dev)
{
he_dev->tpdrq_base = pci_alloc_consistent(he_dev->pci_dev,
@@
-570,7
+566,7
@@
he_init_tpdrq(struct he_dev *he_dev)
return 0;
}
return 0;
}
-static void __init
+static void __
dev
init
he_init_cs_block(struct he_dev *he_dev)
{
unsigned clock, rate, delta;
he_init_cs_block(struct he_dev *he_dev)
{
unsigned clock, rate, delta;
@@
-666,7
+662,7
@@
he_init_cs_block(struct he_dev *he_dev)
}
}
-static int __init
+static int __
dev
init
he_init_cs_block_rcm(struct he_dev *he_dev)
{
unsigned (*rategrid)[16][16];
he_init_cs_block_rcm(struct he_dev *he_dev)
{
unsigned (*rategrid)[16][16];
@@
-787,7
+783,7
@@
he_init_cs_block_rcm(struct he_dev *he_dev)
return 0;
}
return 0;
}
-static int __init
+static int __
dev
init
he_init_group(struct he_dev *he_dev, int group)
{
int i;
he_init_group(struct he_dev *he_dev, int group)
{
int i;
@@
-824,7
+820,7
@@
he_init_group(struct he_dev *he_dev, int group)
void *cpuaddr;
#ifdef USE_RBPS_POOL
void *cpuaddr;
#ifdef USE_RBPS_POOL
- cpuaddr = pci_pool_alloc(he_dev->rbps_pool,
SLAB_KERNEL|SLAB
_DMA, &dma_handle);
+ cpuaddr = pci_pool_alloc(he_dev->rbps_pool,
GFP_KERNEL|GFP
_DMA, &dma_handle);
if (cpuaddr == NULL)
return -ENOMEM;
#else
if (cpuaddr == NULL)
return -ENOMEM;
#else
@@
-888,7
+884,7
@@
he_init_group(struct he_dev *he_dev, int group)
void *cpuaddr;
#ifdef USE_RBPL_POOL
void *cpuaddr;
#ifdef USE_RBPL_POOL
- cpuaddr = pci_pool_alloc(he_dev->rbpl_pool,
SLAB_KERNEL|SLAB
_DMA, &dma_handle);
+ cpuaddr = pci_pool_alloc(he_dev->rbpl_pool,
GFP_KERNEL|GFP
_DMA, &dma_handle);
if (cpuaddr == NULL)
return -ENOMEM;
#else
if (cpuaddr == NULL)
return -ENOMEM;
#else
@@
-957,7
+953,7
@@
he_init_group(struct he_dev *he_dev, int group)
return 0;
}
return 0;
}
-static int __init
+static int __
dev
init
he_init_irq(struct he_dev *he_dev)
{
int i;
he_init_irq(struct he_dev *he_dev)
{
int i;
@@
-1009,7
+1005,7
@@
he_init_irq(struct he_dev *he_dev)
he_writel(he_dev, 0x0, GRP_54_MAP);
he_writel(he_dev, 0x0, GRP_76_MAP);
he_writel(he_dev, 0x0, GRP_54_MAP);
he_writel(he_dev, 0x0, GRP_76_MAP);
- if (request_irq(he_dev->pci_dev->irq, he_irq_handler,
SA_INTERRUPT|SA_SHIRQ
, DEV_LABEL, he_dev)) {
+ if (request_irq(he_dev->pci_dev->irq, he_irq_handler,
IRQF_DISABLED|IRQF_SHARED
, DEV_LABEL, he_dev)) {
hprintk("irq %d already in use\n", he_dev->pci_dev->irq);
return -EINVAL;
}
hprintk("irq %d already in use\n", he_dev->pci_dev->irq);
return -EINVAL;
}
@@
-1019,7
+1015,7
@@
he_init_irq(struct he_dev *he_dev)
return 0;
}
return 0;
}
-static int __init
+static int __
dev
init
he_start(struct atm_dev *dev)
{
struct he_dev *he_dev;
he_start(struct atm_dev *dev)
{
struct he_dev *he_dev;
@@
-1728,7
+1724,7
@@
__alloc_tpd(struct he_dev *he_dev)
struct he_tpd *tpd;
dma_addr_t dma_handle;
struct he_tpd *tpd;
dma_addr_t dma_handle;
- tpd = pci_pool_alloc(he_dev->tpd_pool,
SLAB_ATOMIC|SLAB_DMA, &dma_handle);
+ tpd = pci_pool_alloc(he_dev->tpd_pool,
GFP_ATOMIC|GFP_DMA, &dma_handle);
if (tpd == NULL)
return NULL;
if (tpd == NULL)
return NULL;
@@
-1887,7
+1883,7
@@
he_service_rbrq(struct he_dev *he_dev, int group)
if (rx_skb_reserve > 0)
skb_reserve(skb, rx_skb_reserve);
if (rx_skb_reserve > 0)
skb_reserve(skb, rx_skb_reserve);
-
do_gettimeofday(&skb->stamp
);
+
__net_timestamp(skb
);
for (iov = he_vcc->iov_head;
iov < he_vcc->iov_tail; ++iov) {
for (iov = he_vcc->iov_head;
iov < he_vcc->iov_tail; ++iov) {
@@
-1914,7
+1910,7
@@
he_service_rbrq(struct he_dev *he_dev, int group)
skb->tail = skb->data + skb->len;
#ifdef USE_CHECKSUM_HW
if (vcc->vpi == 0 && vcc->vci >= ATM_NOT_RSV_VCI) {
skb->tail = skb->data + skb->len;
#ifdef USE_CHECKSUM_HW
if (vcc->vpi == 0 && vcc->vci >= ATM_NOT_RSV_VCI) {
- skb->ip_summed = CHECKSUM_
HW
;
+ skb->ip_summed = CHECKSUM_
COMPLETE
;
skb->csum = TCP_CKSUM(skb->data,
he_vcc->pdu_len);
}
skb->csum = TCP_CKSUM(skb->data,
he_vcc->pdu_len);
}
@@
-1930,7
+1926,9
@@
he_service_rbrq(struct he_dev *he_dev, int group)
#ifdef notdef
ATM_SKB(skb)->vcc = vcc;
#endif
#ifdef notdef
ATM_SKB(skb)->vcc = vcc;
#endif
+ spin_unlock(&he_dev->global_lock);
vcc->push(vcc, skb);
vcc->push(vcc, skb);
+ spin_lock(&he_dev->global_lock);
atomic_inc(&vcc->stats->rx);
atomic_inc(&vcc->stats->rx);
@@
-2218,7
+2216,7
@@
he_tasklet(unsigned long data)
}
static irqreturn_t
}
static irqreturn_t
-he_irq_handler(int irq, void *dev_id
, struct pt_regs *regs
)
+he_irq_handler(int irq, void *dev_id)
{
unsigned long flags;
struct he_dev *he_dev = (struct he_dev * )dev_id;
{
unsigned long flags;
struct he_dev *he_dev = (struct he_dev * )dev_id;
@@
-2284,6
+2282,8
@@
__enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid)
TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H)));
if (new_tail == he_dev->tpdrq_head) {
TPDRQ_MASK(he_readl(he_dev, TPDRQ_B_H)));
if (new_tail == he_dev->tpdrq_head) {
+ int slot;
+
hprintk("tpdrq full (cid 0x%x)\n", cid);
/*
* FIXME
hprintk("tpdrq full (cid 0x%x)\n", cid);
/*
* FIXME
@@
-2291,6
+2291,13
@@
__enqueue_tpd(struct he_dev *he_dev, struct he_tpd *tpd, unsigned cid)
* after service_tbrq, service the backlog
* for now, we just drop the pdu
*/
* after service_tbrq, service the backlog
* for now, we just drop the pdu
*/
+ for (slot = 0; slot < TPD_MAXIOV; ++slot) {
+ if (tpd->iovec[slot].addr)
+ pci_unmap_single(he_dev->pci_dev,
+ tpd->iovec[slot].addr,
+ tpd->iovec[slot].len & TPD_LEN_MASK,
+ PCI_DMA_TODEVICE);
+ }
if (tpd->skb) {
if (tpd->vcc->pop)
tpd->vcc->pop(tpd->vcc, tpd->skb);
if (tpd->skb) {
if (tpd->vcc->pop)
tpd->vcc->pop(tpd->vcc, tpd->skb);
@@
-2344,7
+2351,7
@@
he_open(struct atm_vcc *vcc)
cid = he_mkcid(he_dev, vpi, vci);
cid = he_mkcid(he_dev, vpi, vci);
- he_vcc =
(struct he_vcc *)
kmalloc(sizeof(struct he_vcc), GFP_ATOMIC);
+ he_vcc = kmalloc(sizeof(struct he_vcc), GFP_ATOMIC);
if (he_vcc == NULL) {
hprintk("unable to allocate he_vcc during open\n");
return -ENOMEM;
if (he_vcc == NULL) {
hprintk("unable to allocate he_vcc during open\n");
return -ENOMEM;