29 #include <linux/module.h>
30 #include <linux/pci.h>
31 #include <linux/poison.h>
33 #include <linux/kernel.h>
35 #include <linux/netdevice.h>
36 #include <linux/atmdev.h>
37 #include <linux/atm.h>
41 #include <linux/bitops.h>
42 #include <linux/wait.h>
45 #include <linux/slab.h>
48 #include <asm/uaccess.h>
50 #include <asm/byteorder.h>
52 #ifdef CONFIG_ATM_IDT77252_USE_SUNI
60 static unsigned int vpibits = 1;
63 #define ATM_IDT77252_SEND_IDLE 1
69 #define DEBUG_MODULE 1
72 #ifdef CONFIG_ATM_IDT77252_DEBUG
77 #define SAR_RX_DELAY (SAR_CFG_RXINT_NODELAY)
121 static void idt77252_dev_close(
struct atm_dev *
dev);
122 static int idt77252_open(
struct atm_vcc *
vcc);
123 static void idt77252_close(
struct atm_vcc *
vcc);
125 static int idt77252_send_oam(
struct atm_vcc *
vcc,
void *cell,
129 static unsigned char idt77252_phy_get(
struct atm_dev *
dev,
unsigned long addr);
132 static int idt77252_proc_read(
struct atm_dev *
dev, loff_t *
pos,
139 .dev_close = idt77252_dev_close,
140 .open = idt77252_open,
141 .close = idt77252_close,
142 .send = idt77252_send,
143 .send_oam = idt77252_send_oam,
144 .phy_put = idt77252_phy_put,
145 .phy_get = idt77252_phy_get,
146 .change_qos = idt77252_change_qos,
147 .proc_read = idt77252_proc_read,
152 static unsigned int idt77252_sram_write_errors = 0;
180 spin_unlock_irqrestore(&card->
cmd_lock, flags);
189 if ((idt77252_sram_write_errors == 0) &&
194 printk(
"%s: ERROR: TST JMP section at %08lx written: %08x\n",
195 card->
name, addr, value);
202 spin_unlock_irqrestore(&card->
cmd_lock, flags);
206 read_utility(
void *
dev,
unsigned long ubus_addr)
213 printk(
"Error: No such device.\n");
221 spin_unlock_irqrestore(&card->
cmd_lock, flags);
226 write_utility(
void *dev,
unsigned long ubus_addr,
u8 value)
232 printk(
"Error: No such device.\n");
240 spin_unlock_irqrestore(&card->
cmd_lock, flags);
244 static u32 rdsrtab[] =
262 SAR_GP_EESCLK | SAR_GP_EEDO
265 static u32 wrentab[] =
304 SAR_GP_EESCLK | SAR_GP_EEDO
328 static u32 clktab[] =
375 spin_unlock_irqrestore(&card->
cmd_lock, flags);
388 idt77252_write_gp(card, gp | rdsrtab[i]);
395 for (i = 0, j = 0; i < 8; i++) {
398 idt77252_write_gp(card, gp | clktab[j++]);
401 byte |= idt77252_read_gp(card) &
SAR_GP_EEDI ? 1 : 0;
403 idt77252_write_gp(card, gp | clktab[j++]);
422 idt77252_write_gp(card, gp | rdtab[i]);
428 for (i = 0, j = 0; i < 8; i++) {
429 idt77252_write_gp(card, gp | clktab[j++] |
433 idt77252_write_gp(card, gp | clktab[j++] |
443 for (i = 0, j = 0; i < 8; i++) {
446 idt77252_write_gp(card, gp | clktab[j++]);
449 byte |= idt77252_read_gp(card) &
SAR_GP_EEDI ? 1 : 0;
451 idt77252_write_gp(card, gp | clktab[j++]);
469 idt77252_write_gp(card, gp | wrentab[i]);
476 idt77252_write_gp(card, gp | wrtab[i]);
482 for (i = 0, j = 0; i < 8; i++) {
483 idt77252_write_gp(card, gp | clktab[j++] |
487 idt77252_write_gp(card, gp | clktab[j++] |
496 for (i = 0, j = 0; i < 8; i++) {
497 idt77252_write_gp(card, gp | clktab[j++] |
501 idt77252_write_gp(card, gp | clktab[j++] |
530 #ifdef CONFIG_ATM_IDT77252_DEBUG
540 for (i = 0; i < 8; i++) {
541 printk(
" %08x", read_sram(card, tct + i));
554 for (i = 0; i < card->
tct_size; i++) {
569 dump_tct(card, vc->
index);
588 while (pool->
skb[index]) {
590 if (index == pool->
index)
604 unsigned int queue,
index;
623 unsigned int queue,
index;
659 skb_queue_head_init(&scq->
transmit);
660 skb_queue_head_init(&scq->
pending);
662 TXPRINTK(
"idt77252: SCQ: base 0x%p, next 0x%p, last 0x%p, paddr %08llx\n",
725 struct sock *
sk = sk_atm(vcc);
741 spin_unlock_irqrestore(&vc->
lock, flags);
757 write_sram(card, scq->
scd,
759 (
u32)((
unsigned long)scq->
next - (
unsigned long)scq->
base));
760 spin_unlock_irqrestore(&scq->
lock, flags);
771 XPRINTK(
"%s: SCQ (after push %2d) head = 0x%x, next = 0x%p.\n",
773 read_sram(card, scq->
scd + 1), scq->
next);
779 printk(
"%s: Error pushing TBD for %d.%d\n",
781 #ifdef CONFIG_ATM_IDT77252_DEBUG
782 idt77252_tx_dump(card);
798 TXPRINTK(
"%s: SCQ (before drain %2d) next = 0x%p.\n",
822 if (push_on_scq(card, vc, skb)) {
845 TXPRINTK(
"%s: Sending %d bytes of data.\n",
864 (skb->
data[2] << 8) | (skb->
data[3] << 0);
873 printk(
"%s: Trying to transmit on reserved VC\n", card->
name);
895 (skb->
data[2] << 8) | (skb->
data[3] << 0);
909 printk(
"%s: Traffic type not supported.\n", card->
name);
919 if (push_on_scq(card, vc, skb)) {
924 spin_unlock_irqrestore(&vc->
scq->skblock, flags);
939 for (i = 0; i < card->
scd_size; i++) {
952 write_sram(card, scq->
scd, scq->
paddr);
953 write_sram(card, scq->
scd + 1, 0x00000000);
954 write_sram(card, scq->
scd + 2, 0xffffffff);
955 write_sram(card, scq->
scd + 3, 0x00000000);
978 printk(
"%s: can't allocate RSQ.\n", card->
name);
984 card->
rsq.next = card->
rsq.last;
985 for (rsqe = card->
rsq.base; rsqe <= card->rsq.last; rsqe++)
988 writel((
unsigned long) card->
rsq.last - (
unsigned long) card->
rsq.base,
992 IPRINTK(
"%s: RSQ base at 0x%lx (0x%x).\n", card->
name,
993 (
unsigned long) card->
rsq.base,
995 IPRINTK(
"%s: RSQ head = 0x%x, base = 0x%x, tail = 0x%x.\n",
1008 card->
rsq.base, card->
rsq.paddr);
1025 RXPRINTK(
"%s: message about inactive connection.\n",
1032 printk(
"%s: NULL skb in %s, rsqe: %08x %08x %08x %08x\n",
1033 card->
name, __func__,
1040 vpi = (header >> 16) & 0x00ff;
1041 vci = (header >> 0) & 0xffff;
1043 RXPRINTK(
"%s: SDU for %d.%d received in buffer 0x%p (data 0x%p).\n",
1044 card->
name, vpi, vci, skb, skb->
data);
1046 if ((vpi >= (1 << card->
vpibits)) || (vci != (vci & card->
vcimask))) {
1047 printk(
"%s: SDU received for out-of-range vc %u.%u\n",
1048 card->
name, vpi, vci);
1049 recycle_rx_skb(card, skb);
1055 printk(
"%s: SDU received on non RX vc %u.%u\n",
1056 card->
name, vpi, vci);
1057 recycle_rx_skb(card, skb);
1064 skb_end_pointer(skb) - skb->
data,
1070 unsigned char *cell;
1075 if ((sb = dev_alloc_skb(64)) ==
NULL) {
1076 printk(
"%s: Can't allocate buffers for aal0.\n",
1082 RXPRINTK(
"%s: atm_charge() dropped aal0 packets.\n",
1099 __net_timestamp(sb);
1106 recycle_rx_skb(card, skb);
1110 printk(
"%s: Unexpected AAL type in dequeue_rx(): %d.\n",
1112 recycle_rx_skb(card, skb);
1119 __skb_queue_tail(&rpp->
queue, skb);
1123 unsigned char *l1l2;
1126 l1l2 = (
unsigned char *) ((
unsigned long) skb->
data + skb->
len - 6);
1128 len = (l1l2[0] << 8) | l1l2[1];
1129 len = len ? len : 0x10000;
1133 if ((len + 8 > rpp->
len) || (len + (47 + 8) < rpp->
len)) {
1134 RXPRINTK(
"%s: AAL5 PDU size mismatch: %d != %d. "
1137 recycle_rx_pool_skb(card, rpp);
1143 recycle_rx_pool_skb(card, rpp);
1147 if (skb_queue_len(&rpp->
queue) > 1) {
1150 skb = dev_alloc_skb(rpp->
len);
1152 RXPRINTK(
"%s: Can't alloc RX skb.\n",
1154 recycle_rx_pool_skb(card, rpp);
1159 recycle_rx_pool_skb(card, rpp);
1163 skb_queue_walk(&rpp->
queue, sb)
1167 recycle_rx_pool_skb(card, rpp);
1171 __net_timestamp(skb);
1173 vcc->
push(vcc, skb);
1179 flush_rx_pool(card, rpp);
1182 recycle_rx_skb(card, skb);
1187 skb_end_pointer(skb) - skb->
data,
1189 sb_pool_remove(card, skb);
1193 __net_timestamp(skb);
1195 vcc->
push(vcc, skb);
1215 if (card->
rsq.next == card->
rsq.last)
1216 rsqe = card->
rsq.base;
1218 rsqe = card->
rsq.next + 1;
1226 dequeue_rx(card, rsqe);
1228 card->
rsq.next = rsqe;
1229 if (card->
rsq.next == card->
rsq.last)
1230 rsqe = card->
rsq.base;
1232 rsqe = card->
rsq.next + 1;
1235 writel((
unsigned long) card->
rsq.next - (
unsigned long) card->
rsq.base,
1261 skb_end_offset(queue) - 16,
1264 while (head != tail) {
1265 unsigned int vpi, vci;
1273 #ifdef CONFIG_ATM_IDT77252_DEBUG
1277 printk(
"%s: raw cell %x.%02x.%04x.%x.%x\n",
1278 card->
name, (header >> 28) & 0x000f,
1279 (header >> 20) & 0x00ff,
1280 (header >> 4) & 0xffff,
1281 (header >> 1) & 0x0007,
1282 (header >> 0) & 0x0001);
1283 for (i = 16; i < 64; i++)
1290 RPRINTK(
"%s: SDU received for out-of-range vc %u.%u\n",
1291 card->
name, vpi, vci);
1297 RPRINTK(
"%s: SDU received on non RX vc %u.%u\n",
1298 card->
name, vpi, vci);
1305 RPRINTK(
"%s: raw cell for non AAL0 vc %u.%u\n",
1306 card->
name, vpi, vci);
1311 if ((sb = dev_alloc_skb(64)) ==
NULL) {
1312 printk(
"%s: Can't allocate buffers for AAL0.\n",
1319 RXPRINTK(
"%s: atm_charge() dropped AAL0 packets.\n",
1331 __net_timestamp(sb);
1339 + (queue->
data - queue->
head - 16);
1341 if (queue->
len < 128) {
1348 next = sb_pool_skb(card, handle);
1349 recycle_rx_skb(card, queue);
1354 pci_dma_sync_single_for_cpu(card->
pcidev,
1356 (skb_end_pointer(queue) -
1361 printk(
"%s: raw cell queue overrun\n",
1384 printk(
"%s: can't allocate TSQ.\n", card->
name);
1390 card->
tsq.next = card->
tsq.last;
1391 for (tsqe = card->
tsq.base; tsqe <= card->tsq.last; tsqe++)
1395 writel((
unsigned long) card->
tsq.next - (
unsigned long) card->
tsq.base,
1405 card->
tsq.base, card->
tsq.paddr);
1412 unsigned int vpi, vci;
1416 if (card->
tsq.next == card->
tsq.last)
1417 tsqe = card->
tsq.base;
1419 tsqe = card->
tsq.next + 1;
1421 TXPRINTK(
"idt77252_tx: tsq %p: base %p, next %p, last %p\n", tsqe,
1422 card->
tsq.base, card->
tsq.next, card->
tsq.last);
1423 TXPRINTK(
"idt77252_tx: tsqb %08x, tsqt %08x, tsqh %08x, \n",
1434 TXPRINTK(
"tsqe: 0x%p [0x%08x 0x%08x]\n", tsqe,
1440 TXPRINTK(
"%s: Timer RollOver detected.\n", card->
name);
1449 printk(
"%s: Connection %d halted.\n",
1456 vc = card->
vcs[conn & 0x1fff];
1458 printk(
"%s: could not find VC from conn %d\n",
1459 card->
name, conn & 0x1fff);
1463 printk(
"%s: Connection %d IDLE.\n",
1473 vc = card->
vcs[conn & 0x1fff];
1475 printk(
"%s: no VC at index %d\n",
1481 drain_scq(card, vc);
1491 if (vpi >= (1 << card->
vpibits) ||
1492 vci >= (1 << card->
vcibits)) {
1493 printk(
"%s: TBD complete: "
1494 "out of range VPI.VCI %u.%u\n",
1495 card->
name, vpi, vci);
1501 printk(
"%s: TBD complete: "
1502 "no VC at VPI.VCI %u.%u\n",
1503 card->
name, vpi, vci);
1507 drain_scq(card, vc);
1513 card->
tsq.next = tsqe;
1514 if (card->
tsq.next == card->
tsq.last)
1515 tsqe = card->
tsq.base;
1517 tsqe = card->
tsq.next + 1;
1519 TXPRINTK(
"tsqe: %p: base %p, next %p, last %p\n", tsqe,
1520 card->
tsq.base, card->
tsq.next, card->
tsq.last);
1524 }
while (!(stat & SAR_TSQE_INVALID));
1526 writel((
unsigned long)card->
tsq.next - (
unsigned long)card->
tsq.base,
1529 XPRINTK(
"idt77252_tx-after writel%d: TSQ head = 0x%x, tail = 0x%x, next = 0x%p.\n",
1536 tst_timer(
unsigned long data)
1540 unsigned long flags;
1553 if ((pc ^ idle) & ~(card->
tst_size - 1)) {
1566 for (e = 0; e < card->
tst_size - 2; e++) {
1568 write_sram(card, idle + e,
1577 for (e = 0; e < card->
tst_size - 2; e++) {
1579 write_sram(card, idle + e,
1595 spin_unlock_irqrestore(&card->
tst_lock, flags);
1600 int n,
unsigned int opc)
1608 for (e = 0; e <
avail; e++) {
1613 printk(
"%s: No free TST entries found\n", card->
name);
1617 NPRINTK(
"%s: conn %d: first TST entry at %d.\n",
1624 data = opc | vc->
index;
1642 write_sram(card, idle + e, data);
1661 unsigned long flags;
1666 res = __fill_tst(card, vc, n, opc);
1672 spin_unlock_irqrestore(&card->
tst_lock, flags);
1684 for (e = 0; e < card->
tst_size - 2; e++) {
1704 unsigned long flags;
1709 res = __clear_tst(card, vc);
1715 spin_unlock_irqrestore(&card->
tst_lock, flags);
1721 int n,
unsigned int opc)
1723 unsigned long flags;
1728 __clear_tst(card, vc);
1729 res = __fill_tst(card, vc, n, opc);
1735 spin_unlock_irqrestore(&card->
tst_lock, flags);
1747 switch (vc->
class) {
1749 OPRINTK(
"%s: writing TCT at 0x%lx, SCD 0x%lx.\n",
1750 card->
name, tct, vc->
scq->scd);
1752 write_sram(card, tct + 0,
TCT_CBR | vc->
scq->scd);
1753 write_sram(card, tct + 1, 0);
1754 write_sram(card, tct + 2, 0);
1755 write_sram(card, tct + 3, 0);
1756 write_sram(card, tct + 4, 0);
1757 write_sram(card, tct + 5, 0);
1758 write_sram(card, tct + 6, 0);
1759 write_sram(card, tct + 7, 0);
1763 OPRINTK(
"%s: writing TCT at 0x%lx, SCD 0x%lx.\n",
1764 card->
name, tct, vc->
scq->scd);
1766 write_sram(card, tct + 0,
TCT_UBR | vc->
scq->scd);
1767 write_sram(card, tct + 1, 0);
1768 write_sram(card, tct + 2,
TCT_TSIF);
1770 write_sram(card, tct + 4, 0);
1771 write_sram(card, tct + 5, vc->
init_er);
1772 write_sram(card, tct + 6, 0);
1792 idt77252_fbq_level(
struct idt77252_dev *card,
int queue)
1798 idt77252_fbq_full(
struct idt77252_dev *card,
int queue)
1806 unsigned long flags;
1811 skb_reset_tail_pointer(skb);
1814 skb_reserve(skb, 16);
1833 if (idt77252_fbq_full(card, queue))
1844 spin_unlock_irqrestore(&card->
cmd_lock, flags);
1858 skb = dev_alloc_skb(size);
1862 if (sb_pool_add(card, skb, queue)) {
1863 printk(
"%s: SB POOL full\n", __func__);
1867 paddr = pci_map_single(card->
pcidev, skb->
data,
1868 skb_end_pointer(skb) - skb->
data,
1872 if (push_rx_skb(card, skb, queue)) {
1873 printk(
"%s: FB QUEUE full\n", __func__);
1899 skb_end_pointer(skb) - skb->
data,
1902 err = push_rx_skb(card, skb,
POOL_QUEUE(handle));
1905 skb_end_pointer(skb) - skb->
data,
1907 sb_pool_remove(card, skb);
1915 skb_queue_head_init(&rpp->
queue);
1924 skb_queue_walk_safe(&rpp->
queue, skb, tmp)
1925 recycle_rx_skb(card, skb);
1927 flush_rx_pool(card, rpp);
1937 idt77252_phy_put(
struct atm_dev *dev,
unsigned char value,
unsigned long addr)
1939 write_utility(dev->dev_data, 0x100 + (addr & 0x1ff), value);
1942 static unsigned char
1943 idt77252_phy_get(
struct atm_dev *dev,
unsigned long addr)
1945 return read_utility(dev->
dev_data, 0x100 + (addr & 0x1ff));
1949 idt77252_send_skb(
struct atm_vcc *vcc,
struct sk_buff *skb,
int oam)
1957 printk(
"%s: NULL connection in send().\n", card->
name);
1963 printk(
"%s: Trying to transmit on a non-tx VC.\n", card->
name);
1969 switch (vcc->
qos.aal) {
1975 printk(
"%s: Unsupported AAL: %d\n", card->
name, vcc->
qos.aal);
1981 if (skb_shinfo(skb)->nr_frags != 0) {
1982 printk(
"%s: No scatter-gather yet.\n", card->
name);
1989 err = queue_skb(card, vc, skb, oam);
1999 static int idt77252_send(
struct atm_vcc *vcc,
struct sk_buff *skb)
2001 return idt77252_send_skb(vcc, skb, 0);
2005 idt77252_send_oam(
struct atm_vcc *vcc,
void *cell,
int flags)
2011 skb = dev_alloc_skb(64);
2013 printk(
"%s: Out of memory in send_oam().\n", card->
name);
2021 return idt77252_send_skb(vcc, skb, 1);
2025 idt77252_fls(
unsigned int x)
2031 if (x & 0xffff0000) {
2053 idt77252_int_to_atmfp(
unsigned int rate)
2059 e = idt77252_fls(rate) - 1;
2061 m = (rate - (1 <<
e)) << (9 -
e);
2063 m = (rate - (1 <<
e));
2065 m = (rate - (1 <<
e)) >> (e - 9);
2066 return 0x4000 | (e << 9) | m;
2070 idt77252_rate_logindex(
struct idt77252_dev *card,
int pcr)
2074 afp = idt77252_int_to_atmfp(pcr < 0 ? -pcr : pcr);
2076 return rate_to_log[(afp >> 5) & 0x1ff];
2077 return rate_to_log[((afp >> 5) + 1) & 0x1ff];
2081 idt77252_est_timer(
unsigned long data)
2086 unsigned long flags;
2096 ncells = est->
cells;
2101 est->
cps = (est->
avcps + 0x1f) >> 5;
2104 if (cps < (est->
maxcps >> 4))
2107 lacr = idt77252_rate_logindex(card, cps);
2111 if (lacr != vc->
lacr) {
2120 spin_unlock_irqrestore(&vc->
lock, flags);
2124 idt77252_init_est(
struct vc_map *vc,
int pcr)
2131 est->
maxcps = pcr < 0 ? -pcr : pcr;
2139 est->
timer.function = idt77252_est_timer;
2151 int tst_free, tst_used, tst_entries;
2152 unsigned long tmpl, modl;
2155 if ((qos->
txtp.max_pcr == 0) &&
2156 (qos->
txtp.pcr == 0) && (qos->
txtp.min_pcr == 0)) {
2157 printk(
"%s: trying to open a CBR VC with cell rate = 0\n",
2165 tst_used = vc->
ntste;
2166 tst_free += tst_used;
2169 tcra = tcr >= 0 ? tcr : -
tcr;
2171 TXPRINTK(
"%s: CBR target cell rate = %d\n", card->
name, tcra);
2173 tmpl = (
unsigned long) tcra * ((
unsigned long) card->
tst_size - 2);
2176 tst_entries = (
int) (tmpl / card->
utopia_pcr);
2180 }
else if (tcr == 0) {
2182 if (tst_entries <= 0) {
2183 printk(
"%s: no CBR bandwidth free.\n", card->
name);
2188 if (tst_entries == 0) {
2189 printk(
"%s: selected CBR bandwidth < granularity.\n",
2194 if (tst_entries > (tst_free - SAR_TST_RESERVED)) {
2195 printk(
"%s: not enough CBR bandwidth free.\n", card->
name);
2199 vc->
ntste = tst_entries;
2201 card->
tst_free = tst_free - tst_entries;
2203 if (tst_used == tst_entries)
2206 OPRINTK(
"%s: modify %d -> %d entries in TST.\n",
2207 card->
name, tst_used, tst_entries);
2212 OPRINTK(
"%s: setting %d entries in TST.\n", card->
name, tst_entries);
2221 unsigned long flags;
2230 spin_unlock_irqrestore(&vc->
lock, flags);
2236 vc->
estimator = idt77252_init_est(vc, tcr);
2239 vc->
init_er = idt77252_rate_logindex(card, tcr);
2258 switch (qos->
txtp.traffic_class) {
2273 vc->
scq = alloc_scq(card, vc->
class);
2279 vc->
scq->scd = get_free_scd(card, vc);
2280 if (vc->
scq->scd == 0) {
2281 printk(
"%s: no SCD available.\n", card->
name);
2282 free_scq(card, vc->
scq);
2286 fill_scd(card, vc->
scq, vc->
class);
2288 if (set_tct(card, vc)) {
2289 printk(
"%s: class %d not supported.\n",
2290 card->
name, qos->
txtp.traffic_class);
2293 free_scq(card, vc->
scq);
2297 switch (vc->
class) {
2299 error = idt77252_init_cbr(card, vc, vcc, qos);
2302 free_scq(card, vc->
scq);
2311 error = idt77252_init_ubr(card, vc, vcc, qos);
2314 free_scq(card, vc->
scq);
2331 unsigned long flags;
2341 if ((vcc->
vci == 3) || (vcc->
vci == 4))
2380 OPRINTK(
"%s: writing RCT at 0x%lx\n", card->
name, addr);
2381 write_sram(card, addr, rcte);
2386 spin_unlock_irqrestore(&card->
cmd_lock, flags);
2392 idt77252_open(
struct atm_vcc *vcc)
2401 short vpi = vcc->
vpi;
2406 if (vpi >= (1 << card->
vpibits)) {
2407 printk(
"%s: unsupported VPI: %d\n", card->
name, vpi);
2411 if (vci >= (1 << card->
vcibits)) {
2412 printk(
"%s: unsupported VCI: %d\n", card->
name, vci);
2420 OPRINTK(
"%s: opening vpi.vci: %d.%d\n", card->
name, vpi, vci);
2422 switch (vcc->
qos.aal) {
2428 printk(
"%s: Unsupported AAL: %d\n", card->
name, vcc->
qos.aal);
2433 index =
VPCI2VC(card, vpi, vci);
2434 if (!card->
vcs[index]) {
2436 if (!card->
vcs[index]) {
2437 printk(
"%s: can't alloc vc in open()\n", card->
name);
2450 IPRINTK(
"%s: idt77252_open: vc = %d (%d.%d) %s/%s (max RX SDU: %u)\n",
2452 vcc->
qos.rxtp.traffic_class !=
ATM_NONE ?
"rx" :
"--",
2453 vcc->
qos.txtp.traffic_class !=
ATM_NONE ?
"tx" :
"--",
2454 vcc->
qos.rxtp.max_sdu);
2465 printk(
"%s: %s vci already in use.\n", card->
name,
2466 inuse == 1 ?
"tx" : inuse == 2 ?
"rx" :
"tx and rx");
2472 error = idt77252_init_tx(card, vc, vcc, &vcc->
qos);
2480 error = idt77252_init_rx(card, vc, vcc, &vcc->
qos);
2494 idt77252_close(
struct atm_vcc *vcc)
2499 unsigned long flags;
2505 IPRINTK(
"%s: idt77252_close: vc = %d (%d.%d)\n",
2515 spin_unlock_irqrestore(&vc->
lock, flags);
2517 if ((vcc->
vci == 3) || (vcc->
vci == 4))
2525 spin_unlock_irqrestore(&card->
cmd_lock, flags);
2527 if (skb_queue_len(&vc->
rcv.
rx_pool.queue) != 0) {
2528 DPRINTK(
"%s: closing a VC with pending rx buffers.\n",
2549 spin_unlock_irqrestore(&vc->
lock, flags);
2558 printk(
"%s: SCQ drain timeout: %u used\n",
2562 clear_scd(card, vc->
scq, vc->
class);
2565 clear_tst(card, vc);
2571 free_scq(card, vc->
scq);
2578 idt77252_change_qos(
struct atm_vcc *vcc,
struct atm_qos *qos,
int flags)
2589 error = idt77252_init_tx(card, vc, vcc, qos);
2593 switch (qos->
txtp.traffic_class) {
2595 error = idt77252_init_cbr(card, vc, vcc, qos);
2601 error = idt77252_init_ubr(card, vc, vcc, qos);
2619 if ((qos->rxtp.traffic_class !=
ATM_NONE) &&
2621 error = idt77252_init_rx(card, vc, vcc, qos);
2636 idt77252_proc_read(
struct atm_dev *dev, loff_t *
pos,
char *
page)
2643 return sprintf(page,
"IDT77252 Interrupts:\n");
2671 return sprintf(page,
"IDT77252 Transmit Connection Table:\n");
2673 for (i = 0; i < card->
tct_size; i++) {
2693 tct = (
unsigned long) (card->
tct_base + i * SAR_SRAM_TCT_SIZE);
2695 for (i = 0; i < 8; i++)
2696 p +=
sprintf(p,
" %08x", read_sram(card, tct + i));
2719 idt77252_interrupt(
int irq,
void *
dev_id)
2729 printk(
"%s: Re-entering irq_handler()\n", card->
name);
2743 #ifdef CONFIG_ATM_IDT77252_DEBUG
2744 idt77252_tx_dump(card);
2755 idt77252_collect_stat(card);
2776 idt77252_rx_raw(card);
2818 for (done = 1; ; done = 1) {
2855 unsigned long flags;
2862 for (vpi = 0; vpi < (1 << card->
vpibits); vpi++) {
2863 for (vci = 3; vci < 5; vci++) {
2864 index =
VPCI2VC(card, vpi, vci);
2882 write_sram(card, addr, rcte);
2888 spin_unlock_irqrestore(&card->
cmd_lock, flags);
2898 unsigned long flags;
2904 for (vpi = 0; vpi < (1 << card->
vpibits); vpi++) {
2905 for (vci = 3; vci < 5; vci++) {
2906 index =
VPCI2VC(card, vpi, vci);
2915 spin_unlock_irqrestore(&card->
cmd_lock, flags);
2917 if (skb_queue_len(&vc->
rcv.
rx_pool.queue) != 0) {
2919 "with pending rx buffers.\n",
2941 vc->
scq = alloc_scq(card, vc->
class);
2951 fill_scd(card, vc->
scq, vc->
class);
2954 write_sram(card, card->
tct_base + 1, 0);
2955 write_sram(card, card->
tct_base + 2, 0);
2956 write_sram(card, card->
tct_base + 3, 0);
2957 write_sram(card, card->
tct_base + 4, 0);
2958 write_sram(card, card->
tct_base + 5, 0);
2959 write_sram(card, card->
tct_base + 6, 0);
2973 printk(
"%s: SAR not yet initialized.\n", card->
name);
2990 #ifdef CONFIG_ATM_IDT77252_RCV_ALL
2997 if (open_card_oam(card)) {
2998 printk(
"%s: Error initializing OAM.\n", card->
name);
3002 if (open_card_ubr0(card)) {
3003 printk(
"%s: Error initializing UBR0.\n", card->
name);
3007 IPRINTK(
"%s: opened IDT77252 ABR SAR.\n", card->
name);
3011 static void idt77252_dev_close(
struct atm_dev *dev)
3016 close_card_oam(card);
3032 DIPRINTK(
"%s: closed IDT77252 ABR SAR.\n", card->
name);
3050 printk(
"%s: SAR not yet initialized.\n", card->
name);
3060 for (i = 0; i < 4; i++) {
3064 pci_unmap_single(card->
pcidev,
3066 (skb_end_pointer(skb) -
3086 if (card->
rsq.base) {
3091 if (card->
tsq.base) {
3096 DIPRINTK(
"idt77252: Release IRQ.\n");
3099 for (i = 0; i < 4; i++) {
3117 for (i = 0; i < card->
sramsize; i += 4)
3118 write_sram(card, (i >> 2), 0);
3121 if (card->
sramsize == (512 * 1024)) {
3124 / SAR_SRAM_TCT_SIZE;
3142 / SAR_SRAM_TCT_SIZE;
3160 for (i = 0; i < card->
tct_size; i++) {
3161 write_sram(card, i * SAR_SRAM_TCT_SIZE + 0, 0);
3162 write_sram(card, i * SAR_SRAM_TCT_SIZE + 1, 0);
3163 write_sram(card, i * SAR_SRAM_TCT_SIZE + 2, 0);
3164 write_sram(card, i * SAR_SRAM_TCT_SIZE + 3, 0);
3165 write_sram(card, i * SAR_SRAM_TCT_SIZE + 4, 0);
3166 write_sram(card, i * SAR_SRAM_TCT_SIZE + 5, 0);
3167 write_sram(card, i * SAR_SRAM_TCT_SIZE + 6, 0);
3168 write_sram(card, i * SAR_SRAM_TCT_SIZE + 7, 0);
3172 for (i = 0; i < card->
rct_size; i++) {
3193 for (i = 0; i < 256; i++) {
3194 write_sram(card, card->
rt_base + i, log_to_rate[i]);
3197 for (i = 0; i < 128; i++) {
3200 tmp = rate_to_log[(i << 2) + 0] << 0;
3201 tmp |= rate_to_log[(i << 2) + 1] << 8;
3202 tmp |= rate_to_log[(i << 2) + 2] << 16;
3203 tmp |= rate_to_log[(i << 2) + 3] << 24;
3204 write_sram(card, card->
rt_base + 256 + i, tmp);
3208 for (i = 0; i < 128; i++) {
3211 tmp =
RDF[0][(i << 1) + 0] << 16;
3212 tmp |=
RDF[0][(i << 1) + 1] << 0;
3213 write_sram(card, card->
rt_base + 512 + i, tmp);
3216 for (i = 0; i < 128; i++) {
3219 tmp = AIR[0][(i << 1) + 0] << 16;
3220 tmp |= AIR[0][(i << 1) + 1] << 0;
3221 write_sram(card, card->
rt_base + 640 + i, tmp);
3225 IPRINTK(
"%s: initialize rate table ...\n", card->
name);
3232 for (i = card->
tst[0]; i < card->
tst[0] + card->
tst_size - 2; i++)
3235 idt77252_sram_write_errors = 1;
3237 idt77252_sram_write_errors = 0;
3238 for (i = card->
tst[1]; i < card->
tst[1] + card->
tst_size - 2; i++)
3241 idt77252_sram_write_errors = 1;
3243 idt77252_sram_write_errors = 0;
3249 IPRINTK(
"%s: initialize ABRSTD ...\n", card->
name);
3253 IPRINTK(
"%s: initialize receive fifo ...\n", card->
name);
3257 IPRINTK(
"%s: SRAM initialization complete.\n", card->
name);
3261 init_card(
struct atm_dev *dev)
3265 unsigned long tmpl, modl;
3266 unsigned int linkrate, rsvdcr;
3267 unsigned int tst_entries;
3277 printk(
"Error: SAR already initialized.\n");
3286 IPRINTK(
"%s: Checking PCI retries.\n", card->
name);
3287 if (pci_read_config_byte(pcidev, 0x40, &pci_byte) != 0) {
3288 printk(
"%s: can't read PCI retry timeout.\n", card->
name);
3292 if (pci_byte != 0) {
3293 IPRINTK(
"%s: PCI retry timeout: %d, set to 0.\n",
3294 card->
name, pci_byte);
3295 if (pci_write_config_byte(pcidev, 0x40, 0) != 0) {
3296 printk(
"%s: can't set PCI retry timeout.\n",
3303 if (pci_read_config_byte(pcidev, 0x41, &pci_byte) != 0) {
3304 printk(
"%s: can't read PCI TRDY timeout.\n", card->
name);
3308 if (pci_byte != 0) {
3309 IPRINTK(
"%s: PCI TRDY timeout: %d, set to 0.\n",
3310 card->
name, pci_byte);
3311 if (pci_write_config_byte(pcidev, 0x41, 0) != 0) {
3312 printk(
"%s: can't set PCI TRDY timeout.\n", card->
name);
3319 printk(
"%s: resetting timer overflow.\n", card->
name);
3324 card->
name, card) != 0) {
3325 printk(
"%s: can't allocate IRQ.\n", card->
name);
3341 #ifndef ATM_IDT77252_SEND_IDLE
3346 if (card->
sramsize == (512 * 1024))
3375 if (0 != init_tsq(card)) {
3380 if (0 != init_rsq(card)) {
3386 if (card->
sramsize == (512 * 1024)) {
3393 for (k = 0, i = 1; k < card->
vcibits; k++) {
3398 IPRINTK(
"%s: Setting VPI/VCI mask to zero.\n", card->
name);
3408 printk(
"%s: memory allocation failure.\n", card->
name);
3414 IPRINTK(
"%s: raw cell handle is at 0x%p.\n", card->
name,
3418 IPRINTK(
"%s: allocate %d byte for VC map.\n", card->
name, size);
3421 printk(
"%s: memory allocation failure.\n", card->
name);
3427 IPRINTK(
"%s: allocate %d byte for SCD to VC mapping.\n",
3431 printk(
"%s: memory allocation failure.\n", card->
name);
3437 IPRINTK(
"%s: allocate %d byte for TST to VC mapping.\n",
3441 printk(
"%s: memory allocation failure.\n", card->
name);
3445 for (i = 0; i < card->
tst_size - 2; i++) {
3451 printk(
"%s: No LT device defined.\n", card->
name);
3455 if (dev->
phy->ioctl ==
NULL) {
3456 printk(
"%s: LT had no IOCTL function defined.\n", card->
name);
3461 #ifdef CONFIG_ATM_IDT77252_USE_SUNI
3471 linkrate = 149760000;
3474 card->
link_pcr = (linkrate / 8 / 53);
3475 printk(
"%s: Linkrate on ATM line : %u bit/s, %u cell/s.\n",
3478 #ifdef ATM_IDT77252_SEND_IDLE
3488 tmpl = (
unsigned long) rsvdcr * ((
unsigned long) card->
tst_size - 2);
3497 idt77252_eeprom_init(card);
3499 idt77252_eeprom_read_status(card));
3501 for (i = 0; i < 0x80; i++) {
3503 idt77252_eeprom_read_byte(card, i)
3528 XPRINTK(
"%s: IDT77252 ABR SAR initialization complete.\n", card->
name);
3549 XPRINTK(
"%s: Enable PCI master and memory access for SAR.\n",
3552 printk(
"%s: can't read PCI_COMMAND.\n", card->
name);
3557 printk(
"%s: PCI_COMMAND: %04x (???)\n",
3558 card->
name, pci_command);
3564 printk(
"%s: can't write PCI_COMMAND.\n", card->
name);
3590 for (addr = 0x4000; addr < 0x80000; addr += 0x4000) {
3601 return addr *
sizeof(
u32);
3608 static int index = 0;
3617 printk(
"idt77252: can't enable PCI device at %s\n", pci_name(pcidev));
3623 printk(
"idt77252-%d: can't allocate private data\n", index);
3625 goto err_out_disable_pdev;
3648 printk(
"%s: can't ioremap() membase\n", card->
name);
3650 goto err_out_free_card;
3653 if (idt77252_preset(card)) {
3656 goto err_out_iounmap;
3662 printk(
"%s: can't register atm device\n", card->
name);
3664 goto err_out_iounmap;
3669 #ifdef CONFIG_ATM_IDT77252_USE_SUNI
3674 goto err_out_deinit_card;
3680 for (i = 0; i < 4; i++) {
3681 card->
fbq[
i] =
ioremap(srambase | 0x200000 | (i << 18), 4);
3682 if (!card->
fbq[i]) {
3683 printk(
"%s: can't ioremap() FBQ%d\n", card->
name, i);
3685 goto err_out_deinit_card;
3689 printk(
"%s: ABR SAR (Rev %c): MEM %08lx SRAM %08lx [%u KB]\n",
3691 'A' + card->
revision - 1 :
'?', membase, srambase,
3694 if (init_card(dev)) {
3695 printk(
"%s: init_card failed\n", card->
name);
3697 goto err_out_deinit_card;
3704 if (dev->
phy->start)
3705 dev->
phy->start(dev);
3707 if (idt77252_dev_open(card)) {
3721 dev->
phy->stop(dev);
3723 err_out_deinit_card:
3732 err_out_disable_pdev:
3747 .id_table = idt77252_pci_tbl,
3748 .probe = idt77252_init_one,
3751 static int __init idt77252_init(
void)
3755 printk(
"%s: at %p\n", __func__, idt77252_init);
3760 __func__, (
unsigned long)
sizeof(skb->cb),
3766 return pci_register_driver(&idt77252_driver);
3769 static void __exit idt77252_exit(
void)
3776 while (idt77252_chain) {
3777 card = idt77252_chain;
3779 idt77252_chain = card->
next;
3782 dev->
phy->stop(dev);
3788 DIPRINTK(
"idt77252: finished cleanup-module().\n");
3798 #ifdef CONFIG_ATM_IDT77252_DEBUG