git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
KVM: Reduce misfirings of the fork detector
[safe/jmp/linux-2.6]
/
drivers
/
atm
/
idt77252.c
diff --git
a/drivers/atm/idt77252.c
b/drivers/atm/idt77252.c
index
baaf1a3
..
8f995ce
100644
(file)
--- a/
drivers/atm/idt77252.c
+++ b/
drivers/atm/idt77252.c
@@
-34,8
+34,8
@@
static char const rcsid[] =
#include <linux/module.h>
#include <linux/module.h>
-#include <linux/config.h>
#include <linux/pci.h>
#include <linux/pci.h>
+#include <linux/poison.h>
#include <linux/skbuff.h>
#include <linux/kernel.h>
#include <linux/vmalloc.h>
#include <linux/skbuff.h>
#include <linux/kernel.h>
#include <linux/vmalloc.h>
@@
-46,7
+46,9
@@
static char const rcsid[] =
#include <linux/init.h>
#include <linux/bitops.h>
#include <linux/wait.h>
#include <linux/init.h>
#include <linux/bitops.h>
#include <linux/wait.h>
-#include <asm/semaphore.h>
+#include <linux/jiffies.h>
+#include <linux/mutex.h>
+
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
#include <asm/io.h>
#include <asm/uaccess.h>
#include <asm/atomic.h>
@@
-134,7
+136,7
@@
static int idt77252_change_qos(struct atm_vcc *vcc, struct atm_qos *qos,
int flags);
static int idt77252_proc_read(struct atm_dev *dev, loff_t * pos,
char *page);
int flags);
static int idt77252_proc_read(struct atm_dev *dev, loff_t * pos,
char *page);
-static void idt77252_softint(
void *dev_id
);
+static void idt77252_softint(
struct work_struct *work
);
static struct atmdev_ops idt77252_ops =
static struct atmdev_ops idt77252_ops =
@@
-387,7
+389,7
@@
idt77252_eeprom_read_status(struct idt77252_dev *card)
gp = idt77252_read_gp(card) & ~(SAR_GP_EESCLK|SAR_GP_EECS|SAR_GP_EEDO);
gp = idt77252_read_gp(card) & ~(SAR_GP_EESCLK|SAR_GP_EECS|SAR_GP_EEDO);
- for (i = 0; i <
sizeof(rdsrtab)/sizeof(rdsrtab[0]
); i++) {
+ for (i = 0; i <
ARRAY_SIZE(rdsrtab
); i++) {
idt77252_write_gp(card, gp | rdsrtab[i]);
udelay(5);
}
idt77252_write_gp(card, gp | rdsrtab[i]);
udelay(5);
}
@@
-421,7
+423,7
@@
idt77252_eeprom_read_byte(struct idt77252_dev *card, u8 offset)
gp = idt77252_read_gp(card) & ~(SAR_GP_EESCLK|SAR_GP_EECS|SAR_GP_EEDO);
gp = idt77252_read_gp(card) & ~(SAR_GP_EESCLK|SAR_GP_EECS|SAR_GP_EEDO);
- for (i = 0; i <
sizeof(rdtab)/sizeof(rdtab[0]
); i++) {
+ for (i = 0; i <
ARRAY_SIZE(rdtab
); i++) {
idt77252_write_gp(card, gp | rdtab[i]);
udelay(5);
}
idt77252_write_gp(card, gp | rdtab[i]);
udelay(5);
}
@@
-468,14
+470,14
@@
idt77252_eeprom_write_byte(struct idt77252_dev *card, u8 offset, u8 data)
gp = idt77252_read_gp(card) & ~(SAR_GP_EESCLK|SAR_GP_EECS|SAR_GP_EEDO);
gp = idt77252_read_gp(card) & ~(SAR_GP_EESCLK|SAR_GP_EECS|SAR_GP_EEDO);
- for (i = 0; i <
sizeof(wrentab)/sizeof(wrentab[0]
); i++) {
+ for (i = 0; i <
ARRAY_SIZE(wrentab
); i++) {
idt77252_write_gp(card, gp | wrentab[i]);
udelay(5);
}
idt77252_write_gp(card, gp | SAR_GP_EECS);
udelay(5);
idt77252_write_gp(card, gp | wrentab[i]);
udelay(5);
}
idt77252_write_gp(card, gp | SAR_GP_EECS);
udelay(5);
- for (i = 0; i <
sizeof(wrtab)/sizeof(wrtab[0]
); i++) {
+ for (i = 0; i <
ARRAY_SIZE(wrtab
); i++) {
idt77252_write_gp(card, gp | wrtab[i]);
udelay(5);
}
idt77252_write_gp(card, gp | wrtab[i]);
udelay(5);
}
@@
-641,11
+643,9
@@
alloc_scq(struct idt77252_dev *card, int class)
{
struct scq_info *scq;
{
struct scq_info *scq;
- scq =
(struct scq_info *) km
alloc(sizeof(struct scq_info), GFP_KERNEL);
+ scq =
kz
alloc(sizeof(struct scq_info), GFP_KERNEL);
if (!scq)
return NULL;
if (!scq)
return NULL;
- memset(scq, 0, sizeof(struct scq_info));
-
scq->base = pci_alloc_consistent(card->pcidev, SCQ_SIZE,
&scq->paddr);
if (scq->base == NULL) {
scq->base = pci_alloc_consistent(card->pcidev, SCQ_SIZE,
&scq->paddr);
if (scq->base == NULL) {
@@
-780,7
+780,7
@@
push_on_scq(struct idt77252_dev *card, struct vc_map *vc, struct sk_buff *skb)
return 0;
out:
return 0;
out:
- if (
jiffies - scq->trans_start > HZ
) {
+ if (
time_after(jiffies, scq->trans_start + HZ)
) {
printk("%s: Error pushing TBD for %d.%d\n",
card->name, vc->tx_vcc->vpi, vc->tx_vcc->vci);
#ifdef CONFIG_ATM_IDT77252_DEBUG
printk("%s: Error pushing TBD for %d.%d\n",
card->name, vc->tx_vcc->vpi, vc->tx_vcc->vci);
#ifdef CONFIG_ATM_IDT77252_DEBUG
@@
-1066,7
+1066,8
@@
dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe)
vcc = vc->rx_vcc;
pci_dma_sync_single_for_cpu(card->pcidev, IDT77252_PRV_PADDR(skb),
vcc = vc->rx_vcc;
pci_dma_sync_single_for_cpu(card->pcidev, IDT77252_PRV_PADDR(skb),
- skb->end - skb->data, PCI_DMA_FROMDEVICE);
+ skb_end_pointer(skb) - skb->data,
+ PCI_DMA_FROMDEVICE);
if ((vcc->qos.aal == ATM_AAL0) ||
(vcc->qos.aal == ATM_AAL34)) {
if ((vcc->qos.aal == ATM_AAL0) ||
(vcc->qos.aal == ATM_AAL34)) {
@@
-1100,7
+1101,7
@@
dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe)
cell, ATM_CELL_PAYLOAD);
ATM_SKB(sb)->vcc = vcc;
cell, ATM_CELL_PAYLOAD);
ATM_SKB(sb)->vcc = vcc;
-
do_gettimeofday(&sb->stamp
);
+
__net_timestamp(sb
);
vcc->push(vcc, sb);
atomic_inc(&vcc->stats->rx);
vcc->push(vcc, sb);
atomic_inc(&vcc->stats->rx);
@@
-1178,7
+1179,7
@@
dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe)
skb_trim(skb, len);
ATM_SKB(skb)->vcc = vcc;
skb_trim(skb, len);
ATM_SKB(skb)->vcc = vcc;
-
do_gettimeofday(&skb->stamp
);
+
__net_timestamp(skb
);
vcc->push(vcc, skb);
atomic_inc(&vcc->stats->rx);
vcc->push(vcc, skb);
atomic_inc(&vcc->stats->rx);
@@
-1195,12
+1196,13
@@
dequeue_rx(struct idt77252_dev *card, struct rsq_entry *rsqe)
}
pci_unmap_single(card->pcidev, IDT77252_PRV_PADDR(skb),
}
pci_unmap_single(card->pcidev, IDT77252_PRV_PADDR(skb),
- skb->end - skb->data, PCI_DMA_FROMDEVICE);
+ skb_end_pointer(skb) - skb->data,
+ PCI_DMA_FROMDEVICE);
sb_pool_remove(card, skb);
skb_trim(skb, len);
ATM_SKB(skb)->vcc = vcc;
sb_pool_remove(card, skb);
skb_trim(skb, len);
ATM_SKB(skb)->vcc = vcc;
-
do_gettimeofday(&skb->stamp
);
+
__net_timestamp(skb
);
vcc->push(vcc, skb);
atomic_inc(&vcc->stats->rx);
vcc->push(vcc, skb);
atomic_inc(&vcc->stats->rx);
@@
-1268,7
+1270,7
@@
idt77252_rx_raw(struct idt77252_dev *card)
tail = readl(SAR_REG_RAWCT);
pci_dma_sync_single_for_cpu(card->pcidev, IDT77252_PRV_PADDR(queue),
tail = readl(SAR_REG_RAWCT);
pci_dma_sync_single_for_cpu(card->pcidev, IDT77252_PRV_PADDR(queue),
-
queue->end
- queue->head - 16,
+
skb_end_pointer(queue)
- queue->head - 16,
PCI_DMA_FROMDEVICE);
while (head != tail) {
PCI_DMA_FROMDEVICE);
while (head != tail) {
@@
-1339,7
+1341,7
@@
idt77252_rx_raw(struct idt77252_dev *card)
ATM_CELL_PAYLOAD);
ATM_SKB(sb)->vcc = vcc;
ATM_CELL_PAYLOAD);
ATM_SKB(sb)->vcc = vcc;
-
do_gettimeofday(&sb->stamp
);
+
__net_timestamp(sb
);
vcc->push(vcc, sb);
atomic_inc(&vcc->stats->rx);
vcc->push(vcc, sb);
atomic_inc(&vcc->stats->rx);
@@
-1364,7
+1366,8
@@
drop:
queue = card->raw_cell_head;
pci_dma_sync_single_for_cpu(card->pcidev,
IDT77252_PRV_PADDR(queue),
queue = card->raw_cell_head;
pci_dma_sync_single_for_cpu(card->pcidev,
IDT77252_PRV_PADDR(queue),
- queue->end - queue->data,
+ (skb_end_pointer(queue) -
+ queue->data),
PCI_DMA_FROMDEVICE);
} else {
card->raw_cell_head = NULL;
PCI_DMA_FROMDEVICE);
} else {
card->raw_cell_head = NULL;
@@
-1817,7
+1820,8
@@
push_rx_skb(struct idt77252_dev *card, struct sk_buff *skb, int queue)
u32 handle;
u32 addr;
u32 handle;
u32 addr;
- skb->data = skb->tail = skb->head;
+ skb->data = skb->head;
+ skb_reset_tail_pointer(skb);
skb->len = 0;
skb_reserve(skb, 16);
skb->len = 0;
skb_reserve(skb, 16);
@@
-1836,7
+1840,6
@@
push_rx_skb(struct idt77252_dev *card, struct sk_buff *skb, int queue)
skb_put(skb, SAR_FB_SIZE_3);
break;
default:
skb_put(skb, SAR_FB_SIZE_3);
break;
default:
- dev_kfree_skb(skb);
return -1;
}
return -1;
}
@@
-1875,7
+1878,7
@@
add_rx_skb(struct idt77252_dev *card, int queue,
}
paddr = pci_map_single(card->pcidev, skb->data,
}
paddr = pci_map_single(card->pcidev, skb->data,
- skb
->end
- skb->data,
+ skb
_end_pointer(skb)
- skb->data,
PCI_DMA_FROMDEVICE);
IDT77252_PRV_PADDR(skb) = paddr;
PCI_DMA_FROMDEVICE);
IDT77252_PRV_PADDR(skb) = paddr;
@@
-1889,7
+1892,7
@@
add_rx_skb(struct idt77252_dev *card, int queue,
outunmap:
pci_unmap_single(card->pcidev, IDT77252_PRV_PADDR(skb),
outunmap:
pci_unmap_single(card->pcidev, IDT77252_PRV_PADDR(skb),
- skb
->end
- skb->data, PCI_DMA_FROMDEVICE);
+ skb
_end_pointer(skb)
- skb->data, PCI_DMA_FROMDEVICE);
handle = IDT77252_PRV_POOL(skb);
card->sbpool[POOL_QUEUE(handle)].skb[POOL_INDEX(handle)] = NULL;
handle = IDT77252_PRV_POOL(skb);
card->sbpool[POOL_QUEUE(handle)].skb[POOL_INDEX(handle)] = NULL;
@@
-1906,12
+1909,14
@@
recycle_rx_skb(struct idt77252_dev *card, struct sk_buff *skb)
int err;
pci_dma_sync_single_for_device(card->pcidev, IDT77252_PRV_PADDR(skb),
int err;
pci_dma_sync_single_for_device(card->pcidev, IDT77252_PRV_PADDR(skb),
- skb->end - skb->data, PCI_DMA_FROMDEVICE);
+ skb_end_pointer(skb) - skb->data,
+ PCI_DMA_FROMDEVICE);
err = push_rx_skb(card, skb, POOL_QUEUE(handle));
if (err) {
pci_unmap_single(card->pcidev, IDT77252_PRV_PADDR(skb),
err = push_rx_skb(card, skb, POOL_QUEUE(handle));
if (err) {
pci_unmap_single(card->pcidev, IDT77252_PRV_PADDR(skb),
- skb->end - skb->data, PCI_DMA_FROMDEVICE);
+ skb_end_pointer(skb) - skb->data,
+ PCI_DMA_FROMDEVICE);
sb_pool_remove(card, skb);
dev_kfree_skb(skb);
}
sb_pool_remove(card, skb);
dev_kfree_skb(skb);
}
@@
-2141,11
+2146,9
@@
idt77252_init_est(struct vc_map *vc, int pcr)
{
struct rate_estimator *est;
{
struct rate_estimator *est;
- est = k
m
alloc(sizeof(struct rate_estimator), GFP_KERNEL);
+ est = k
z
alloc(sizeof(struct rate_estimator), GFP_KERNEL);
if (!est)
return NULL;
if (!est)
return NULL;
- memset(est, 0, sizeof(*est));
-
est->maxcps = pcr < 0 ? -pcr : pcr;
est->cps = est->maxcps;
est->avcps = est->cps << 5;
est->maxcps = pcr < 0 ? -pcr : pcr;
est->cps = est->maxcps;
est->avcps = est->cps << 5;
@@
-2433,7
+2436,7
@@
idt77252_open(struct atm_vcc *vcc)
set_bit(ATM_VF_ADDR, &vcc->flags);
set_bit(ATM_VF_ADDR, &vcc->flags);
-
down
(&card->mutex);
+
mutex_lock
(&card->mutex);
OPRINTK("%s: opening vpi.vci: %d.%d\n", card->name, vpi, vci);
OPRINTK("%s: opening vpi.vci: %d.%d\n", card->name, vpi, vci);
@@
-2444,20
+2447,18
@@
idt77252_open(struct atm_vcc *vcc)
break;
default:
printk("%s: Unsupported AAL: %d\n", card->name, vcc->qos.aal);
break;
default:
printk("%s: Unsupported AAL: %d\n", card->name, vcc->qos.aal);
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
return -EPROTONOSUPPORT;
}
index = VPCI2VC(card, vpi, vci);
if (!card->vcs[index]) {
return -EPROTONOSUPPORT;
}
index = VPCI2VC(card, vpi, vci);
if (!card->vcs[index]) {
- card->vcs[index] = k
m
alloc(sizeof(struct vc_map), GFP_KERNEL);
+ card->vcs[index] = k
z
alloc(sizeof(struct vc_map), GFP_KERNEL);
if (!card->vcs[index]) {
printk("%s: can't alloc vc in open()\n", card->name);
if (!card->vcs[index]) {
printk("%s: can't alloc vc in open()\n", card->name);
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
return -ENOMEM;
}
return -ENOMEM;
}
- memset(card->vcs[index], 0, sizeof(struct vc_map));
-
card->vcs[index]->card = card;
card->vcs[index]->index = index;
card->vcs[index]->card = card;
card->vcs[index]->index = index;
@@
-2484,14
+2485,14
@@
idt77252_open(struct atm_vcc *vcc)
if (inuse) {
printk("%s: %s vci already in use.\n", card->name,
inuse == 1 ? "tx" : inuse == 2 ? "rx" : "tx and rx");
if (inuse) {
printk("%s: %s vci already in use.\n", card->name,
inuse == 1 ? "tx" : inuse == 2 ? "rx" : "tx and rx");
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
return -EADDRINUSE;
}
if (vcc->qos.txtp.traffic_class != ATM_NONE) {
error = idt77252_init_tx(card, vc, vcc, &vcc->qos);
if (error) {
return -EADDRINUSE;
}
if (vcc->qos.txtp.traffic_class != ATM_NONE) {
error = idt77252_init_tx(card, vc, vcc, &vcc->qos);
if (error) {
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
return error;
}
}
return error;
}
}
@@
-2499,14
+2500,14
@@
idt77252_open(struct atm_vcc *vcc)
if (vcc->qos.rxtp.traffic_class != ATM_NONE) {
error = idt77252_init_rx(card, vc, vcc, &vcc->qos);
if (error) {
if (vcc->qos.rxtp.traffic_class != ATM_NONE) {
error = idt77252_init_rx(card, vc, vcc, &vcc->qos);
if (error) {
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
return error;
}
}
set_bit(ATM_VF_READY, &vcc->flags);
return error;
}
}
set_bit(ATM_VF_READY, &vcc->flags);
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
return 0;
}
return 0;
}
@@
-2520,7
+2521,7
@@
idt77252_close(struct atm_vcc *vcc)
unsigned long addr;
unsigned long timeout;
unsigned long addr;
unsigned long timeout;
-
down
(&card->mutex);
+
mutex_lock
(&card->mutex);
IPRINTK("%s: idt77252_close: vc = %d (%d.%d)\n",
card->name, vc->index, vcc->vpi, vcc->vci);
IPRINTK("%s: idt77252_close: vc = %d (%d.%d)\n",
card->name, vc->index, vcc->vpi, vcc->vci);
@@
-2591,7
+2592,7
@@
done:
free_scq(card, vc->scq);
}
free_scq(card, vc->scq);
}
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
}
static int
}
static int
@@
-2602,7
+2603,7
@@
idt77252_change_qos(struct atm_vcc *vcc, struct atm_qos *qos, int flags)
struct vc_map *vc = vcc->dev_data;
int error = 0;
struct vc_map *vc = vcc->dev_data;
int error = 0;
-
down
(&card->mutex);
+
mutex_lock
(&card->mutex);
if (qos->txtp.traffic_class != ATM_NONE) {
if (!test_bit(VCF_TX, &vc->flags)) {
if (qos->txtp.traffic_class != ATM_NONE) {
if (!test_bit(VCF_TX, &vc->flags)) {
@@
-2648,7
+2649,7
@@
idt77252_change_qos(struct atm_vcc *vcc, struct atm_qos *qos, int flags)
set_bit(ATM_VF_HASQOS, &vcc->flags);
out:
set_bit(ATM_VF_HASQOS, &vcc->flags);
out:
-
up
(&card->mutex);
+
mutex_unlock
(&card->mutex);
return error;
}
return error;
}
@@
-2779,7
+2780,7
@@
idt77252_collect_stat(struct idt77252_dev *card)
}
static irqreturn_t
}
static irqreturn_t
-idt77252_interrupt(int irq, void *dev_id
, struct pt_regs *ptregs
)
+idt77252_interrupt(int irq, void *dev_id)
{
struct idt77252_dev *card = dev_id;
u32 stat;
{
struct idt77252_dev *card = dev_id;
u32 stat;
@@
-2871,9
+2872,10
@@
out:
}
static void
}
static void
-idt77252_softint(
void *dev_id
)
+idt77252_softint(
struct work_struct *work
)
{
{
- struct idt77252_dev *card = dev_id;
+ struct idt77252_dev *card =
+ container_of(work, struct idt77252_dev, tqueue);
u32 stat;
int done;
u32 stat;
int done;
@@
-2925,13
+2927,11
@@
open_card_oam(struct idt77252_dev *card)
for (vci = 3; vci < 5; vci++) {
index = VPCI2VC(card, vpi, vci);
for (vci = 3; vci < 5; vci++) {
index = VPCI2VC(card, vpi, vci);
- vc = k
m
alloc(sizeof(struct vc_map), GFP_KERNEL);
+ vc = k
z
alloc(sizeof(struct vc_map), GFP_KERNEL);
if (!vc) {
printk("%s: can't alloc vc\n", card->name);
return -ENOMEM;
}
if (!vc) {
printk("%s: can't alloc vc\n", card->name);
return -ENOMEM;
}
- memset(vc, 0, sizeof(struct vc_map));
-
vc->index = index;
card->vcs[index] = vc;
vc->index = index;
card->vcs[index] = vc;
@@
-2994,12
+2994,11
@@
open_card_ubr0(struct idt77252_dev *card)
{
struct vc_map *vc;
{
struct vc_map *vc;
- vc = k
m
alloc(sizeof(struct vc_map), GFP_KERNEL);
+ vc = k
z
alloc(sizeof(struct vc_map), GFP_KERNEL);
if (!vc) {
printk("%s: can't alloc vc\n", card->name);
return -ENOMEM;
}
if (!vc) {
printk("%s: can't alloc vc\n", card->name);
return -ENOMEM;
}
- memset(vc, 0, sizeof(struct vc_map));
card->vcs[0] = vc;
vc->class = SCHED_UBR0;
card->vcs[0] = vc;
vc->class = SCHED_UBR0;
@@
-3129,7
+3128,8
@@
deinit_card(struct idt77252_dev *card)
if (skb) {
pci_unmap_single(card->pcidev,
IDT77252_PRV_PADDR(skb),
if (skb) {
pci_unmap_single(card->pcidev,
IDT77252_PRV_PADDR(skb),
- skb->end - skb->data,
+ (skb_end_pointer(skb) -
+ skb->data),
PCI_DMA_FROMDEVICE);
card->sbpool[i].skb[j] = NULL;
dev_kfree_skb(skb);
PCI_DMA_FROMDEVICE);
card->sbpool[i].skb[j] = NULL;
dev_kfree_skb(skb);
@@
-3386,7
+3386,7
@@
init_card(struct atm_dev *dev)
writel(SAR_STAT_TMROF, SAR_REG_STAT);
}
IPRINTK("%s: Request IRQ ... ", card->name);
writel(SAR_STAT_TMROF, SAR_REG_STAT);
}
IPRINTK("%s: Request IRQ ... ", card->name);
- if (request_irq(pcidev->irq, idt77252_interrupt,
SA_INTERRUPT|SA_SHIRQ
,
+ if (request_irq(pcidev->irq, idt77252_interrupt,
IRQF_DISABLED|IRQF_SHARED
,
card->name, card) != 0) {
printk("%s: can't allocate IRQ.\n", card->name);
deinit_card(card);
card->name, card) != 0) {
printk("%s: can't allocate IRQ.\n", card->name);
deinit_card(card);
@@
-3657,7
+3657,7
@@
probe_sram(struct idt77252_dev *card)
writel(SAR_CMD_WRITE_SRAM | (0 << 2), SAR_REG_CMD);
for (addr = 0x4000; addr < 0x80000; addr += 0x4000) {
writel(SAR_CMD_WRITE_SRAM | (0 << 2), SAR_REG_CMD);
for (addr = 0x4000; addr < 0x80000; addr += 0x4000) {
- writel(
0xdeadbeef
, SAR_REG_DR0);
+ writel(
ATM_POISON
, SAR_REG_DR0);
writel(SAR_CMD_WRITE_SRAM | (addr << 2), SAR_REG_CMD);
writel(SAR_CMD_READ_SRAM | (0 << 2), SAR_REG_CMD);
writel(SAR_CMD_WRITE_SRAM | (addr << 2), SAR_REG_CMD);
writel(SAR_CMD_READ_SRAM | (0 << 2), SAR_REG_CMD);
@@
-3679,7
+3679,6
@@
idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
unsigned long membase, srambase;
struct idt77252_dev *card;
struct atm_dev *dev;
unsigned long membase, srambase;
struct idt77252_dev *card;
struct atm_dev *dev;
- ushort revision = 0;
int i, err;
int i, err;
@@
-3688,31
+3687,23
@@
idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
return err;
}
return err;
}
- if (pci_read_config_word(pcidev, PCI_REVISION_ID, &revision)) {
- printk("idt77252-%d: can't read PCI_REVISION_ID\n", index);
- err = -ENODEV;
- goto err_out_disable_pdev;
- }
-
- card = kmalloc(sizeof(struct idt77252_dev), GFP_KERNEL);
+ card = kzalloc(sizeof(struct idt77252_dev), GFP_KERNEL);
if (!card) {
printk("idt77252-%d: can't allocate private data\n", index);
err = -ENOMEM;
goto err_out_disable_pdev;
}
if (!card) {
printk("idt77252-%d: can't allocate private data\n", index);
err = -ENOMEM;
goto err_out_disable_pdev;
}
- memset(card, 0, sizeof(struct idt77252_dev));
-
- card->revision = revision;
+ card->revision = pcidev->revision;
card->index = index;
card->pcidev = pcidev;
sprintf(card->name, "idt77252-%d", card->index);
card->index = index;
card->pcidev = pcidev;
sprintf(card->name, "idt77252-%d", card->index);
- INIT_WORK(&card->tqueue, idt77252_softint
, (void *)card
);
+ INIT_WORK(&card->tqueue, idt77252_softint);
membase = pci_resource_start(pcidev, 1);
srambase = pci_resource_start(pcidev, 2);
membase = pci_resource_start(pcidev, 1);
srambase = pci_resource_start(pcidev, 2);
-
init_MUTEX
(&card->mutex);
+
mutex_init
(&card->mutex);
spin_lock_init(&card->cmd_lock);
spin_lock_init(&card->tst_lock);
spin_lock_init(&card->cmd_lock);
spin_lock_init(&card->tst_lock);
@@
-3764,8
+3755,8
@@
idt77252_init_one(struct pci_dev *pcidev, const struct pci_device_id *id)
}
printk("%s: ABR SAR (Rev %c): MEM %08lx SRAM %08lx [%u KB]\n",
}
printk("%s: ABR SAR (Rev %c): MEM %08lx SRAM %08lx [%u KB]\n",
- card->name, ((
revision > 1) && (
revision < 25)) ?
- 'A' + revision - 1 : '?', membase, srambase,
+ card->name, ((
card->revision > 1) && (card->
revision < 25)) ?
+ 'A' +
card->
revision - 1 : '?', membase, srambase,
card->sramsize / 1024);
if (init_card(dev)) {
card->sramsize / 1024);
if (init_card(dev)) {