Lines Matching refs:zatm_dev
126 #define zin_n(r) inl(zatm_dev->base+r*4)
127 #define zin(r) inl(zatm_dev->base+uPD98401_##r*4)
128 #define zout(v,r) outl(v,zatm_dev->base+uPD98401_##r*4)
141 static void zpokel(struct zatm_dev *zatm_dev,u32 value,u32 addr) in zpokel() argument
150 static u32 zpeekl(struct zatm_dev *zatm_dev,u32 addr) in zpeekl() argument
181 struct zatm_dev *zatm_dev; in refill_pool() local
188 zatm_dev = ZATM_DEV(dev); in refill_pool()
197 offset = zatm_dev->pool_info[pool].offset+ in refill_pool()
201 spin_lock_irqsave(&zatm_dev->lock, flags); in refill_pool()
202 free = zpeekl(zatm_dev,zatm_dev->pool_base+2*pool) & in refill_pool()
204 spin_unlock_irqrestore(&zatm_dev->lock, flags); in refill_pool()
205 if (free >= zatm_dev->pool_info[pool].low_water) return; in refill_pool()
207 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool), in refill_pool()
208 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1)); in refill_pool()
212 while (free < zatm_dev->pool_info[pool].high_water) { in refill_pool()
233 spin_lock_irqsave(&zatm_dev->lock, flags); in refill_pool()
234 if (zatm_dev->last_free[pool]) in refill_pool()
235 ((struct rx_buffer_head *) (zatm_dev->last_free[pool]-> in refill_pool()
237 zatm_dev->last_free[pool] = skb; in refill_pool()
238 skb_queue_tail(&zatm_dev->pool[pool],skb); in refill_pool()
239 spin_unlock_irqrestore(&zatm_dev->lock, flags); in refill_pool()
243 spin_lock_irqsave(&zatm_dev->lock, flags); in refill_pool()
248 spin_unlock_irqrestore(&zatm_dev->lock, flags); in refill_pool()
250 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool), in refill_pool()
251 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1)); in refill_pool()
281 struct zatm_dev *zatm_dev; in use_pool() local
285 zatm_dev = ZATM_DEV(dev); in use_pool()
286 if (!(zatm_dev->pool_info[pool].ref_count++)) { in use_pool()
287 skb_queue_head_init(&zatm_dev->pool[pool]); in use_pool()
291 spin_lock_irqsave(&zatm_dev->lock, flags); in use_pool()
292 zpokel(zatm_dev,((zatm_dev->pool_info[pool].low_water/4) << in use_pool()
296 zatm_dev->pool_base+pool*2); in use_pool()
297 zpokel(zatm_dev,(unsigned long) dummy,zatm_dev->pool_base+ in use_pool()
299 spin_unlock_irqrestore(&zatm_dev->lock, flags); in use_pool()
300 zatm_dev->last_free[pool] = NULL; in use_pool()
303 DPRINTK("pool %d: %d\n",pool,zatm_dev->pool_info[pool].ref_count); in use_pool()
320 struct zatm_dev *zatm_dev = ZATM_DEV(vcc->dev);
328 zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+i));
331 zpeekl(zatm_dev,uPD98401_IM(zatm_vcc->shaper)+16*i));
332 qrp = (unsigned long *) zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+
362 struct zatm_dev *zatm_dev; in poll_rx() local
368 zatm_dev = ZATM_DEV(dev); in poll_rx()
369 pos = (zatm_dev->mbx_start[mbx] & ~0xffffUL) | zin(MTA(mbx)); in poll_rx()
378 if (((pos += 16) & 0xffff) == zatm_dev->mbx_end[mbx]) in poll_rx()
379 pos = zatm_dev->mbx_start[mbx]; in poll_rx()
385 printk("POOL: 0x%08x, 0x%08x\n",zpeekl(zatm_dev, in poll_rx()
386 zatm_dev->pool_base), in poll_rx()
387 zpeekl(zatm_dev,zatm_dev->pool_base+1)); in poll_rx()
419 if (chan < zatm_dev->chans && zatm_dev->rx_map[chan]) { in poll_rx()
421 vcc = zatm_dev->rx_map[chan]; in poll_rx()
423 if (skb == zatm_dev->last_free[pos]) in poll_rx()
424 zatm_dev->last_free[pos] = NULL; in poll_rx()
425 skb_unlink(skb, zatm_dev->pool + pos); in poll_rx()
485 struct zatm_dev *zatm_dev; in open_rx_first() local
492 zatm_dev = ZATM_DEV(vcc->dev); in open_rx_first()
510 spin_lock_irqsave(&zatm_dev->lock, flags); in open_rx_first()
516 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_rx_first()
522 spin_lock_irqsave(&zatm_dev->lock, flags); in open_rx_first()
523 zpokel(zatm_dev,zatm_vcc->pool << uPD98401_RXVC_POOL_SHIFT, in open_rx_first()
525 zpokel(zatm_dev,uPD98401_RXVC_OD | (vcc->qos.aal == ATM_AAL5 ? in open_rx_first()
527 zpokel(zatm_dev,0,chan*VC_SIZE/4+2); in open_rx_first()
529 zatm_dev->rx_map[chan] = vcc; in open_rx_first()
530 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_rx_first()
537 struct zatm_dev *zatm_dev; in open_rx_second() local
543 zatm_dev = ZATM_DEV(vcc->dev); in open_rx_second()
546 spin_lock_irqsave(&zatm_dev->lock, flags); in open_rx_second()
550 zpokel(zatm_dev,(zpeekl(zatm_dev,pos) & ~(0xffff << shift)) | in open_rx_second()
552 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_rx_second()
559 struct zatm_dev *zatm_dev; in close_rx() local
565 zatm_dev = ZATM_DEV(vcc->dev); in close_rx()
570 spin_lock_irqsave(&zatm_dev->lock, flags); in close_rx()
573 zpokel(zatm_dev,zpeekl(zatm_dev,pos) & ~(0xffff << shift),pos); in close_rx()
578 spin_unlock_irqrestore(&zatm_dev->lock, flags); in close_rx()
580 spin_lock_irqsave(&zatm_dev->lock, flags); in close_rx()
592 spin_unlock_irqrestore(&zatm_dev->lock, flags); in close_rx()
593 zatm_dev->rx_map[zatm_vcc->rx_chan] = NULL; in close_rx()
601 struct zatm_dev *zatm_dev; in start_rx() local
605 zatm_dev = ZATM_DEV(dev); in start_rx()
606 zatm_dev->rx_map = kcalloc(zatm_dev->chans, in start_rx()
607 sizeof(*zatm_dev->rx_map), in start_rx()
609 if (!zatm_dev->rx_map) return -ENOMEM; in start_rx()
611 zpokel(zatm_dev,(1 << dev->ci_range.vci_bits)-1,uPD98401_VRR); in start_rx()
614 zatm_dev->pool_info[i].ref_count = 0; in start_rx()
615 zatm_dev->pool_info[i].rqa_count = 0; in start_rx()
616 zatm_dev->pool_info[i].rqu_count = 0; in start_rx()
617 zatm_dev->pool_info[i].low_water = LOW_MARK; in start_rx()
618 zatm_dev->pool_info[i].high_water = HIGH_MARK; in start_rx()
619 zatm_dev->pool_info[i].offset = 0; in start_rx()
620 zatm_dev->pool_info[i].next_off = 0; in start_rx()
621 zatm_dev->pool_info[i].next_cnt = 0; in start_rx()
622 zatm_dev->pool_info[i].next_thres = OFF_CNG_THRES; in start_rx()
634 struct zatm_dev *zatm_dev; in do_tx() local
642 zatm_dev = ZATM_DEV(vcc->dev); in do_tx()
645 spin_lock_irqsave(&zatm_dev->lock, flags); in do_tx()
648 spin_unlock_irqrestore(&zatm_dev->lock, flags); in do_tx()
700 DPRINTK("QRP=0x%08lx\n",zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+ in do_tx()
705 spin_unlock_irqrestore(&zatm_dev->lock, flags); in do_tx()
745 struct zatm_dev *zatm_dev; in poll_tx() local
750 zatm_dev = ZATM_DEV(dev); in poll_tx()
751 pos = (zatm_dev->mbx_start[mbx] & ~0xffffUL) | zin(MTA(mbx)); in poll_tx()
767 chan = (zatm_dev->mbx_start[mbx][pos >> 2] & uPD98401_TXI_CONN) in poll_tx()
770 if (chan < zatm_dev->chans && zatm_dev->tx_map[chan]) in poll_tx()
771 dequeue_tx(zatm_dev->tx_map[chan]); in poll_tx()
777 if (((pos += 4) & 0xffff) == zatm_dev->mbx_end[mbx]) in poll_tx()
778 pos = zatm_dev->mbx_start[mbx]; in poll_tx()
790 struct zatm_dev *zatm_dev; in alloc_shaper() local
796 zatm_dev = ZATM_DEV(dev); in alloc_shaper()
797 if (!zatm_dev->free_shapers) return -EAGAIN; in alloc_shaper()
798 for (shaper = 0; !((zatm_dev->free_shapers >> shaper) & 1); shaper++); in alloc_shaper()
799 zatm_dev->free_shapers &= ~1 << shaper; in alloc_shaper()
803 zatm_dev->ubr_ref_cnt++; in alloc_shaper()
804 zatm_dev->ubr = shaper; in alloc_shaper()
819 if (max > zatm_dev->tx_bw) max = zatm_dev->tx_bw; in alloc_shaper()
837 if (zatm_dev->tx_bw < *pcr) return -EAGAIN; in alloc_shaper()
838 zatm_dev->tx_bw -= *pcr; in alloc_shaper()
840 spin_lock_irqsave(&zatm_dev->lock, flags); in alloc_shaper()
842 zpokel(zatm_dev,(i << uPD98401_IM_I_SHIFT) | m,uPD98401_IM(shaper)); in alloc_shaper()
843 zpokel(zatm_dev,c << uPD98401_PC_C_SHIFT,uPD98401_PC(shaper)); in alloc_shaper()
844 zpokel(zatm_dev,0,uPD98401_X(shaper)); in alloc_shaper()
845 zpokel(zatm_dev,0,uPD98401_Y(shaper)); in alloc_shaper()
846 zpokel(zatm_dev,uPD98401_PS_E,uPD98401_PS(shaper)); in alloc_shaper()
847 spin_unlock_irqrestore(&zatm_dev->lock, flags); in alloc_shaper()
854 struct zatm_dev *zatm_dev; in dealloc_shaper() local
857 zatm_dev = ZATM_DEV(dev); in dealloc_shaper()
858 if (shaper == zatm_dev->ubr) { in dealloc_shaper()
859 if (--zatm_dev->ubr_ref_cnt) return; in dealloc_shaper()
860 zatm_dev->ubr = -1; in dealloc_shaper()
862 spin_lock_irqsave(&zatm_dev->lock, flags); in dealloc_shaper()
863 zpokel(zatm_dev,zpeekl(zatm_dev,uPD98401_PS(shaper)) & ~uPD98401_PS_E, in dealloc_shaper()
865 spin_unlock_irqrestore(&zatm_dev->lock, flags); in dealloc_shaper()
866 zatm_dev->free_shapers |= 1 << shaper; in dealloc_shaper()
872 struct zatm_dev *zatm_dev; in close_tx() local
878 zatm_dev = ZATM_DEV(vcc->dev); in close_tx()
892 spin_lock_irqsave(&zatm_dev->lock, flags); in close_tx()
903 spin_unlock_irqrestore(&zatm_dev->lock, flags); in close_tx()
905 zatm_dev->tx_map[chan] = NULL; in close_tx()
906 if (zatm_vcc->shaper != zatm_dev->ubr) { in close_tx()
907 zatm_dev->tx_bw += vcc->qos.txtp.min_pcr; in close_tx()
916 struct zatm_dev *zatm_dev; in open_tx_first() local
924 zatm_dev = ZATM_DEV(vcc->dev); in open_tx_first()
928 spin_lock_irqsave(&zatm_dev->lock, flags); in open_tx_first()
934 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_tx_first()
940 if (unlimited && zatm_dev->ubr != -1) zatm_vcc->shaper = zatm_dev->ubr; in open_tx_first()
967 zpokel(zatm_dev,virt_to_bus(zatm_vcc->ring), in open_tx_first()
975 struct zatm_dev *zatm_dev; in open_tx_second() local
980 zatm_dev = ZATM_DEV(vcc->dev); in open_tx_second()
984 spin_lock_irqsave(&zatm_dev->lock, flags); in open_tx_second()
985 zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4); in open_tx_second()
986 zpokel(zatm_dev,uPD98401_TXVC_L | (zatm_vcc->shaper << in open_tx_second()
989 zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4+2); in open_tx_second()
990 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_tx_second()
991 zatm_dev->tx_map[zatm_vcc->tx_chan] = vcc; in open_tx_second()
998 struct zatm_dev *zatm_dev; in start_tx() local
1002 zatm_dev = ZATM_DEV(dev); in start_tx()
1003 zatm_dev->tx_map = kmalloc_array(zatm_dev->chans, in start_tx()
1004 sizeof(*zatm_dev->tx_map), in start_tx()
1006 if (!zatm_dev->tx_map) return -ENOMEM; in start_tx()
1007 zatm_dev->tx_bw = ATM_OC3_PCR; in start_tx()
1008 zatm_dev->free_shapers = (1 << NR_SHAPERS)-1; in start_tx()
1009 zatm_dev->ubr = -1; in start_tx()
1010 zatm_dev->ubr_ref_cnt = 0; in start_tx()
1012 for (i = 0; i < NR_SHAPERS; i++) zpokel(zatm_dev,0,uPD98401_PS(i)); in start_tx()
1023 struct zatm_dev *zatm_dev; in zatm_int() local
1028 zatm_dev = ZATM_DEV(dev); in zatm_int()
1045 zatm_dev->pool_info[i].rqa_count++; in zatm_int()
1060 zatm_dev->pool_info[i].rqu_count++; in zatm_int()
1100 static void eprom_set(struct zatm_dev *zatm_dev, unsigned long value, in eprom_set() argument
1105 if ((error = pci_write_config_dword(zatm_dev->pci_dev,cmd,value))) in eprom_set()
1111 static unsigned long eprom_get(struct zatm_dev *zatm_dev, unsigned short cmd) in eprom_get() argument
1116 if ((error = pci_read_config_dword(zatm_dev->pci_dev,cmd,&value))) in eprom_get()
1123 static void eprom_put_bits(struct zatm_dev *zatm_dev, unsigned long data, in eprom_put_bits() argument
1131 eprom_set(zatm_dev,value,cmd); in eprom_put_bits()
1132 eprom_set(zatm_dev,value | ZEPROM_SK,cmd); in eprom_put_bits()
1133 eprom_set(zatm_dev,value,cmd); in eprom_put_bits()
1138 static void eprom_get_byte(struct zatm_dev *zatm_dev, unsigned char *byte, in eprom_get_byte() argument
1145 eprom_set(zatm_dev,ZEPROM_CS,cmd); in eprom_get_byte()
1146 eprom_set(zatm_dev,ZEPROM_CS | ZEPROM_SK,cmd); in eprom_get_byte()
1148 if (eprom_get(zatm_dev,cmd) & ZEPROM_DO) *byte |= 1; in eprom_get_byte()
1149 eprom_set(zatm_dev,ZEPROM_CS,cmd); in eprom_get_byte()
1158 struct zatm_dev *zatm_dev; in eprom_try_esi() local
1161 zatm_dev = ZATM_DEV(dev); in eprom_try_esi()
1163 eprom_set(zatm_dev,ZEPROM_CS,cmd); /* select EPROM */ in eprom_try_esi()
1164 eprom_put_bits(zatm_dev,ZEPROM_CMD_READ,ZEPROM_CMD_LEN,cmd); in eprom_try_esi()
1165 eprom_put_bits(zatm_dev,i >> 1,ZEPROM_ADDR_LEN,cmd); in eprom_try_esi()
1166 eprom_get_byte(zatm_dev,buf+i+swap,cmd); in eprom_try_esi()
1167 eprom_get_byte(zatm_dev,buf+i+1-swap,cmd); in eprom_try_esi()
1168 eprom_set(zatm_dev,0,cmd); /* deselect EPROM */ in eprom_try_esi()
1187 struct zatm_dev *zatm_dev; in zatm_init() local
1194 zatm_dev = ZATM_DEV(dev); in zatm_init()
1195 spin_lock_init(&zatm_dev->lock); in zatm_init()
1196 pci_dev = zatm_dev->pci_dev; in zatm_init()
1197 zatm_dev->base = pci_resource_start(pci_dev, 0); in zatm_init()
1198 zatm_dev->irq = pci_dev->irq; in zatm_init()
1212 dev->number,pci_dev->revision,zatm_dev->base,zatm_dev->irq); in zatm_init()
1219 zpokel(zatm_dev,0x55555555,i); in zatm_init()
1220 if (zpeekl(zatm_dev,i) != 0x55555555) last = i; in zatm_init()
1222 zpokel(zatm_dev,0xAAAAAAAA,i); in zatm_init()
1223 if (zpeekl(zatm_dev,i) != 0xAAAAAAAA) last = i; in zatm_init()
1224 else zpokel(zatm_dev,i,i); in zatm_init()
1228 if (zpeekl(zatm_dev,i) != i) break; in zatm_init()
1229 zatm_dev->mem = i << 2; in zatm_init()
1230 while (i) zpokel(zatm_dev,0,--i); in zatm_init()
1237 printk("mem=%dkB,%s (",zatm_dev->mem >> 10,zatm_dev->copper ? "UTP" : in zatm_init()
1244 spin_lock_irqsave(&zatm_dev->lock, flags); in zatm_init()
1245 t0 = zpeekl(zatm_dev,uPD98401_TSR); in zatm_init()
1247 t1 = zpeekl(zatm_dev,uPD98401_TSR); in zatm_init()
1249 t2 = zpeekl(zatm_dev,uPD98401_TSR); in zatm_init()
1250 spin_unlock_irqrestore(&zatm_dev->lock, flags); in zatm_init()
1253 zatm_dev->khz = t2-2*t1+t0; in zatm_init()
1257 zin(VER) & uPD98401_MINOR,zatm_dev->khz/1000,zatm_dev->khz % 1000); in zatm_init()
1264 struct zatm_dev *zatm_dev = ZATM_DEV(dev); in zatm_start() local
1265 struct pci_dev *pdev = zatm_dev->pci_dev; in zatm_start()
1271 zatm_dev->rx_map = zatm_dev->tx_map = NULL; in zatm_start()
1273 zatm_dev->mbx_start[i] = 0; in zatm_start()
1274 error = request_irq(zatm_dev->irq, zatm_int, IRQF_SHARED, DEV_LABEL, dev); in zatm_start()
1277 dev->number,zatm_dev->irq); in zatm_start()
1284 vccs = (zatm_dev->mem-NR_SHAPERS*SHAPER_SIZE-pools*POOL_SIZE)/ in zatm_start()
1291 zatm_dev->chans = vccs; /* ??? */ in zatm_start()
1294 zpokel(zatm_dev,curr,uPD98401_PMA); /* receive pool */ in zatm_start()
1295 zatm_dev->pool_base = curr; in zatm_start()
1298 zpokel(zatm_dev,curr,uPD98401_SMA); /* shapers */ in zatm_start()
1301 zpokel(zatm_dev,curr,uPD98401_TOS); /* free pool */ in zatm_start()
1304 (zatm_dev->mem-curr*4)/VC_SIZE); in zatm_start()
1330 zatm_dev->mbx_start[i] = (unsigned long)mbx; in zatm_start()
1331 zatm_dev->mbx_dma[i] = mbx_dma; in zatm_start()
1332 zatm_dev->mbx_end[i] = (zatm_dev->mbx_start[i] + MBX_SIZE(i)) & in zatm_start()
1336 zout(zatm_dev->mbx_end[i], MBA(i)); in zatm_start()
1356 kfree(zatm_dev->rx_map); in zatm_start()
1358 kfree(zatm_dev->tx_map); in zatm_start()
1362 (void *)zatm_dev->mbx_start[i], in zatm_start()
1363 zatm_dev->mbx_dma[i]); in zatm_start()
1365 free_irq(zatm_dev->irq, dev); in zatm_start()
1442 struct zatm_dev *zatm_dev; in zatm_ioctl() local
1445 zatm_dev = ZATM_DEV(dev); in zatm_ioctl()
1462 spin_lock_irqsave(&zatm_dev->lock, flags); in zatm_ioctl()
1463 info = zatm_dev->pool_info[pool]; in zatm_ioctl()
1465 zatm_dev->pool_info[pool].rqa_count = 0; in zatm_ioctl()
1466 zatm_dev->pool_info[pool].rqu_count = 0; in zatm_ioctl()
1468 spin_unlock_irqrestore(&zatm_dev->lock, flags); in zatm_ioctl()
1490 info.low_water = zatm_dev-> in zatm_ioctl()
1493 info.high_water = zatm_dev-> in zatm_ioctl()
1496 info.next_thres = zatm_dev-> in zatm_ioctl()
1501 spin_lock_irqsave(&zatm_dev->lock, flags); in zatm_ioctl()
1502 zatm_dev->pool_info[pool].low_water = in zatm_ioctl()
1504 zatm_dev->pool_info[pool].high_water = in zatm_ioctl()
1506 zatm_dev->pool_info[pool].next_thres = in zatm_ioctl()
1508 spin_unlock_irqrestore(&zatm_dev->lock, flags); in zatm_ioctl()
1557 struct zatm_dev *zatm_dev; in zatm_phy_put() local
1559 zatm_dev = ZATM_DEV(dev); in zatm_phy_put()
1569 struct zatm_dev *zatm_dev; in zatm_phy_get() local
1571 zatm_dev = ZATM_DEV(dev); in zatm_phy_get()
1596 struct zatm_dev *zatm_dev; in zatm_init_one() local
1599 zatm_dev = kmalloc(sizeof(*zatm_dev), GFP_KERNEL); in zatm_init_one()
1600 if (!zatm_dev) { in zatm_init_one()
1621 zatm_dev->pci_dev = pci_dev; in zatm_init_one()
1622 dev->dev_data = zatm_dev; in zatm_init_one()
1623 zatm_dev->copper = (int)ent->driver_data; in zatm_init_one()
1628 zatm_dev->more = zatm_boards; in zatm_init_one()
1641 kfree(zatm_dev); in zatm_init_one()