Lines Matching refs:zatm_dev
127 #define zin_n(r) inl(zatm_dev->base+r*4)
128 #define zin(r) inl(zatm_dev->base+uPD98401_##r*4)
129 #define zout(v,r) outl(v,zatm_dev->base+uPD98401_##r*4)
142 static void zpokel(struct zatm_dev *zatm_dev,u32 value,u32 addr) in zpokel() argument
151 static u32 zpeekl(struct zatm_dev *zatm_dev,u32 addr) in zpeekl() argument
182 struct zatm_dev *zatm_dev; in refill_pool() local
189 zatm_dev = ZATM_DEV(dev); in refill_pool()
198 offset = zatm_dev->pool_info[pool].offset+ in refill_pool()
202 spin_lock_irqsave(&zatm_dev->lock, flags); in refill_pool()
203 free = zpeekl(zatm_dev,zatm_dev->pool_base+2*pool) & in refill_pool()
205 spin_unlock_irqrestore(&zatm_dev->lock, flags); in refill_pool()
206 if (free >= zatm_dev->pool_info[pool].low_water) return; in refill_pool()
208 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool), in refill_pool()
209 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1)); in refill_pool()
213 while (free < zatm_dev->pool_info[pool].high_water) { in refill_pool()
234 spin_lock_irqsave(&zatm_dev->lock, flags); in refill_pool()
235 if (zatm_dev->last_free[pool]) in refill_pool()
236 ((struct rx_buffer_head *) (zatm_dev->last_free[pool]-> in refill_pool()
238 zatm_dev->last_free[pool] = skb; in refill_pool()
239 skb_queue_tail(&zatm_dev->pool[pool],skb); in refill_pool()
240 spin_unlock_irqrestore(&zatm_dev->lock, flags); in refill_pool()
244 spin_lock_irqsave(&zatm_dev->lock, flags); in refill_pool()
249 spin_unlock_irqrestore(&zatm_dev->lock, flags); in refill_pool()
251 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool), in refill_pool()
252 zpeekl(zatm_dev,zatm_dev->pool_base+2*pool+1)); in refill_pool()
282 struct zatm_dev *zatm_dev; in use_pool() local
286 zatm_dev = ZATM_DEV(dev); in use_pool()
287 if (!(zatm_dev->pool_info[pool].ref_count++)) { in use_pool()
288 skb_queue_head_init(&zatm_dev->pool[pool]); in use_pool()
292 spin_lock_irqsave(&zatm_dev->lock, flags); in use_pool()
293 zpokel(zatm_dev,((zatm_dev->pool_info[pool].low_water/4) << in use_pool()
297 zatm_dev->pool_base+pool*2); in use_pool()
298 zpokel(zatm_dev,(unsigned long) dummy,zatm_dev->pool_base+ in use_pool()
300 spin_unlock_irqrestore(&zatm_dev->lock, flags); in use_pool()
301 zatm_dev->last_free[pool] = NULL; in use_pool()
304 DPRINTK("pool %d: %d\n",pool,zatm_dev->pool_info[pool].ref_count); in use_pool()
321 struct zatm_dev *zatm_dev = ZATM_DEV(vcc->dev);
329 zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+i));
332 zpeekl(zatm_dev,uPD98401_IM(zatm_vcc->shaper)+16*i));
333 qrp = (unsigned long *) zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+
363 struct zatm_dev *zatm_dev; in poll_rx() local
369 zatm_dev = ZATM_DEV(dev); in poll_rx()
370 pos = (zatm_dev->mbx_start[mbx] & ~0xffffUL) | zin(MTA(mbx)); in poll_rx()
379 if (((pos += 16) & 0xffff) == zatm_dev->mbx_end[mbx]) in poll_rx()
380 pos = zatm_dev->mbx_start[mbx]; in poll_rx()
386 printk("POOL: 0x%08x, 0x%08x\n",zpeekl(zatm_dev, in poll_rx()
387 zatm_dev->pool_base), in poll_rx()
388 zpeekl(zatm_dev,zatm_dev->pool_base+1)); in poll_rx()
420 if (chan < zatm_dev->chans && zatm_dev->rx_map[chan]) { in poll_rx()
422 vcc = zatm_dev->rx_map[chan]; in poll_rx()
424 if (skb == zatm_dev->last_free[pos]) in poll_rx()
425 zatm_dev->last_free[pos] = NULL; in poll_rx()
426 skb_unlink(skb, zatm_dev->pool + pos); in poll_rx()
486 struct zatm_dev *zatm_dev; in open_rx_first() local
493 zatm_dev = ZATM_DEV(vcc->dev); in open_rx_first()
511 spin_lock_irqsave(&zatm_dev->lock, flags); in open_rx_first()
517 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_rx_first()
523 spin_lock_irqsave(&zatm_dev->lock, flags); in open_rx_first()
524 zpokel(zatm_dev,zatm_vcc->pool << uPD98401_RXVC_POOL_SHIFT, in open_rx_first()
526 zpokel(zatm_dev,uPD98401_RXVC_OD | (vcc->qos.aal == ATM_AAL5 ? in open_rx_first()
528 zpokel(zatm_dev,0,chan*VC_SIZE/4+2); in open_rx_first()
530 zatm_dev->rx_map[chan] = vcc; in open_rx_first()
531 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_rx_first()
538 struct zatm_dev *zatm_dev; in open_rx_second() local
544 zatm_dev = ZATM_DEV(vcc->dev); in open_rx_second()
547 spin_lock_irqsave(&zatm_dev->lock, flags); in open_rx_second()
551 zpokel(zatm_dev,(zpeekl(zatm_dev,pos) & ~(0xffff << shift)) | in open_rx_second()
553 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_rx_second()
560 struct zatm_dev *zatm_dev; in close_rx() local
566 zatm_dev = ZATM_DEV(vcc->dev); in close_rx()
571 spin_lock_irqsave(&zatm_dev->lock, flags); in close_rx()
574 zpokel(zatm_dev,zpeekl(zatm_dev,pos) & ~(0xffff << shift),pos); in close_rx()
579 spin_unlock_irqrestore(&zatm_dev->lock, flags); in close_rx()
581 spin_lock_irqsave(&zatm_dev->lock, flags); in close_rx()
593 spin_unlock_irqrestore(&zatm_dev->lock, flags); in close_rx()
594 zatm_dev->rx_map[zatm_vcc->rx_chan] = NULL; in close_rx()
602 struct zatm_dev *zatm_dev; in start_rx() local
606 zatm_dev = ZATM_DEV(dev); in start_rx()
607 zatm_dev->rx_map = kcalloc(zatm_dev->chans, in start_rx()
608 sizeof(*zatm_dev->rx_map), in start_rx()
610 if (!zatm_dev->rx_map) return -ENOMEM; in start_rx()
612 zpokel(zatm_dev,(1 << dev->ci_range.vci_bits)-1,uPD98401_VRR); in start_rx()
615 zatm_dev->pool_info[i].ref_count = 0; in start_rx()
616 zatm_dev->pool_info[i].rqa_count = 0; in start_rx()
617 zatm_dev->pool_info[i].rqu_count = 0; in start_rx()
618 zatm_dev->pool_info[i].low_water = LOW_MARK; in start_rx()
619 zatm_dev->pool_info[i].high_water = HIGH_MARK; in start_rx()
620 zatm_dev->pool_info[i].offset = 0; in start_rx()
621 zatm_dev->pool_info[i].next_off = 0; in start_rx()
622 zatm_dev->pool_info[i].next_cnt = 0; in start_rx()
623 zatm_dev->pool_info[i].next_thres = OFF_CNG_THRES; in start_rx()
635 struct zatm_dev *zatm_dev; in do_tx() local
643 zatm_dev = ZATM_DEV(vcc->dev); in do_tx()
646 spin_lock_irqsave(&zatm_dev->lock, flags); in do_tx()
649 spin_unlock_irqrestore(&zatm_dev->lock, flags); in do_tx()
701 DPRINTK("QRP=0x%08lx\n",zpeekl(zatm_dev,zatm_vcc->tx_chan*VC_SIZE/4+ in do_tx()
706 spin_unlock_irqrestore(&zatm_dev->lock, flags); in do_tx()
746 struct zatm_dev *zatm_dev; in poll_tx() local
751 zatm_dev = ZATM_DEV(dev); in poll_tx()
752 pos = (zatm_dev->mbx_start[mbx] & ~0xffffUL) | zin(MTA(mbx)); in poll_tx()
768 chan = (zatm_dev->mbx_start[mbx][pos >> 2] & uPD98401_TXI_CONN) in poll_tx()
771 if (chan < zatm_dev->chans && zatm_dev->tx_map[chan]) in poll_tx()
772 dequeue_tx(zatm_dev->tx_map[chan]); in poll_tx()
778 if (((pos += 4) & 0xffff) == zatm_dev->mbx_end[mbx]) in poll_tx()
779 pos = zatm_dev->mbx_start[mbx]; in poll_tx()
791 struct zatm_dev *zatm_dev; in alloc_shaper() local
797 zatm_dev = ZATM_DEV(dev); in alloc_shaper()
798 if (!zatm_dev->free_shapers) return -EAGAIN; in alloc_shaper()
799 for (shaper = 0; !((zatm_dev->free_shapers >> shaper) & 1); shaper++); in alloc_shaper()
800 zatm_dev->free_shapers &= ~1 << shaper; in alloc_shaper()
804 zatm_dev->ubr_ref_cnt++; in alloc_shaper()
805 zatm_dev->ubr = shaper; in alloc_shaper()
820 if (max > zatm_dev->tx_bw) max = zatm_dev->tx_bw; in alloc_shaper()
838 if (zatm_dev->tx_bw < *pcr) return -EAGAIN; in alloc_shaper()
839 zatm_dev->tx_bw -= *pcr; in alloc_shaper()
841 spin_lock_irqsave(&zatm_dev->lock, flags); in alloc_shaper()
843 zpokel(zatm_dev,(i << uPD98401_IM_I_SHIFT) | m,uPD98401_IM(shaper)); in alloc_shaper()
844 zpokel(zatm_dev,c << uPD98401_PC_C_SHIFT,uPD98401_PC(shaper)); in alloc_shaper()
845 zpokel(zatm_dev,0,uPD98401_X(shaper)); in alloc_shaper()
846 zpokel(zatm_dev,0,uPD98401_Y(shaper)); in alloc_shaper()
847 zpokel(zatm_dev,uPD98401_PS_E,uPD98401_PS(shaper)); in alloc_shaper()
848 spin_unlock_irqrestore(&zatm_dev->lock, flags); in alloc_shaper()
855 struct zatm_dev *zatm_dev; in dealloc_shaper() local
858 zatm_dev = ZATM_DEV(dev); in dealloc_shaper()
859 if (shaper == zatm_dev->ubr) { in dealloc_shaper()
860 if (--zatm_dev->ubr_ref_cnt) return; in dealloc_shaper()
861 zatm_dev->ubr = -1; in dealloc_shaper()
863 spin_lock_irqsave(&zatm_dev->lock, flags); in dealloc_shaper()
864 zpokel(zatm_dev,zpeekl(zatm_dev,uPD98401_PS(shaper)) & ~uPD98401_PS_E, in dealloc_shaper()
866 spin_unlock_irqrestore(&zatm_dev->lock, flags); in dealloc_shaper()
867 zatm_dev->free_shapers |= 1 << shaper; in dealloc_shaper()
873 struct zatm_dev *zatm_dev; in close_tx() local
879 zatm_dev = ZATM_DEV(vcc->dev); in close_tx()
893 spin_lock_irqsave(&zatm_dev->lock, flags); in close_tx()
904 spin_unlock_irqrestore(&zatm_dev->lock, flags); in close_tx()
906 zatm_dev->tx_map[chan] = NULL; in close_tx()
907 if (zatm_vcc->shaper != zatm_dev->ubr) { in close_tx()
908 zatm_dev->tx_bw += vcc->qos.txtp.min_pcr; in close_tx()
917 struct zatm_dev *zatm_dev; in open_tx_first() local
925 zatm_dev = ZATM_DEV(vcc->dev); in open_tx_first()
929 spin_lock_irqsave(&zatm_dev->lock, flags); in open_tx_first()
935 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_tx_first()
941 if (unlimited && zatm_dev->ubr != -1) zatm_vcc->shaper = zatm_dev->ubr; in open_tx_first()
968 zpokel(zatm_dev,virt_to_bus(zatm_vcc->ring), in open_tx_first()
976 struct zatm_dev *zatm_dev; in open_tx_second() local
981 zatm_dev = ZATM_DEV(vcc->dev); in open_tx_second()
985 spin_lock_irqsave(&zatm_dev->lock, flags); in open_tx_second()
986 zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4); in open_tx_second()
987 zpokel(zatm_dev,uPD98401_TXVC_L | (zatm_vcc->shaper << in open_tx_second()
990 zpokel(zatm_dev,0,zatm_vcc->tx_chan*VC_SIZE/4+2); in open_tx_second()
991 spin_unlock_irqrestore(&zatm_dev->lock, flags); in open_tx_second()
992 zatm_dev->tx_map[zatm_vcc->tx_chan] = vcc; in open_tx_second()
999 struct zatm_dev *zatm_dev; in start_tx() local
1003 zatm_dev = ZATM_DEV(dev); in start_tx()
1004 zatm_dev->tx_map = kmalloc_array(zatm_dev->chans, in start_tx()
1005 sizeof(*zatm_dev->tx_map), in start_tx()
1007 if (!zatm_dev->tx_map) return -ENOMEM; in start_tx()
1008 zatm_dev->tx_bw = ATM_OC3_PCR; in start_tx()
1009 zatm_dev->free_shapers = (1 << NR_SHAPERS)-1; in start_tx()
1010 zatm_dev->ubr = -1; in start_tx()
1011 zatm_dev->ubr_ref_cnt = 0; in start_tx()
1013 for (i = 0; i < NR_SHAPERS; i++) zpokel(zatm_dev,0,uPD98401_PS(i)); in start_tx()
1024 struct zatm_dev *zatm_dev; in zatm_int() local
1029 zatm_dev = ZATM_DEV(dev); in zatm_int()
1046 zatm_dev->pool_info[i].rqa_count++; in zatm_int()
1061 zatm_dev->pool_info[i].rqu_count++; in zatm_int()
1101 static void eprom_set(struct zatm_dev *zatm_dev, unsigned long value, in eprom_set() argument
1106 if ((error = pci_write_config_dword(zatm_dev->pci_dev,cmd,value))) in eprom_set()
1112 static unsigned long eprom_get(struct zatm_dev *zatm_dev, unsigned short cmd) in eprom_get() argument
1117 if ((error = pci_read_config_dword(zatm_dev->pci_dev,cmd,&value))) in eprom_get()
1124 static void eprom_put_bits(struct zatm_dev *zatm_dev, unsigned long data, in eprom_put_bits() argument
1132 eprom_set(zatm_dev,value,cmd); in eprom_put_bits()
1133 eprom_set(zatm_dev,value | ZEPROM_SK,cmd); in eprom_put_bits()
1134 eprom_set(zatm_dev,value,cmd); in eprom_put_bits()
1139 static void eprom_get_byte(struct zatm_dev *zatm_dev, unsigned char *byte, in eprom_get_byte() argument
1146 eprom_set(zatm_dev,ZEPROM_CS,cmd); in eprom_get_byte()
1147 eprom_set(zatm_dev,ZEPROM_CS | ZEPROM_SK,cmd); in eprom_get_byte()
1149 if (eprom_get(zatm_dev,cmd) & ZEPROM_DO) *byte |= 1; in eprom_get_byte()
1150 eprom_set(zatm_dev,ZEPROM_CS,cmd); in eprom_get_byte()
1159 struct zatm_dev *zatm_dev; in eprom_try_esi() local
1162 zatm_dev = ZATM_DEV(dev); in eprom_try_esi()
1164 eprom_set(zatm_dev,ZEPROM_CS,cmd); /* select EPROM */ in eprom_try_esi()
1165 eprom_put_bits(zatm_dev,ZEPROM_CMD_READ,ZEPROM_CMD_LEN,cmd); in eprom_try_esi()
1166 eprom_put_bits(zatm_dev,i >> 1,ZEPROM_ADDR_LEN,cmd); in eprom_try_esi()
1167 eprom_get_byte(zatm_dev,buf+i+swap,cmd); in eprom_try_esi()
1168 eprom_get_byte(zatm_dev,buf+i+1-swap,cmd); in eprom_try_esi()
1169 eprom_set(zatm_dev,0,cmd); /* deselect EPROM */ in eprom_try_esi()
1188 struct zatm_dev *zatm_dev; in zatm_init() local
1195 zatm_dev = ZATM_DEV(dev); in zatm_init()
1196 spin_lock_init(&zatm_dev->lock); in zatm_init()
1197 pci_dev = zatm_dev->pci_dev; in zatm_init()
1198 zatm_dev->base = pci_resource_start(pci_dev, 0); in zatm_init()
1199 zatm_dev->irq = pci_dev->irq; in zatm_init()
1213 dev->number,pci_dev->revision,zatm_dev->base,zatm_dev->irq); in zatm_init()
1220 zpokel(zatm_dev,0x55555555,i); in zatm_init()
1221 if (zpeekl(zatm_dev,i) != 0x55555555) last = i; in zatm_init()
1223 zpokel(zatm_dev,0xAAAAAAAA,i); in zatm_init()
1224 if (zpeekl(zatm_dev,i) != 0xAAAAAAAA) last = i; in zatm_init()
1225 else zpokel(zatm_dev,i,i); in zatm_init()
1229 if (zpeekl(zatm_dev,i) != i) break; in zatm_init()
1230 zatm_dev->mem = i << 2; in zatm_init()
1231 while (i) zpokel(zatm_dev,0,--i); in zatm_init()
1238 printk("mem=%dkB,%s (",zatm_dev->mem >> 10,zatm_dev->copper ? "UTP" : in zatm_init()
1245 spin_lock_irqsave(&zatm_dev->lock, flags); in zatm_init()
1246 t0 = zpeekl(zatm_dev,uPD98401_TSR); in zatm_init()
1248 t1 = zpeekl(zatm_dev,uPD98401_TSR); in zatm_init()
1250 t2 = zpeekl(zatm_dev,uPD98401_TSR); in zatm_init()
1251 spin_unlock_irqrestore(&zatm_dev->lock, flags); in zatm_init()
1254 zatm_dev->khz = t2-2*t1+t0; in zatm_init()
1258 zin(VER) & uPD98401_MINOR,zatm_dev->khz/1000,zatm_dev->khz % 1000); in zatm_init()
1265 struct zatm_dev *zatm_dev = ZATM_DEV(dev); in zatm_start() local
1266 struct pci_dev *pdev = zatm_dev->pci_dev; in zatm_start()
1272 zatm_dev->rx_map = zatm_dev->tx_map = NULL; in zatm_start()
1274 zatm_dev->mbx_start[i] = 0; in zatm_start()
1275 error = request_irq(zatm_dev->irq, zatm_int, IRQF_SHARED, DEV_LABEL, dev); in zatm_start()
1278 dev->number,zatm_dev->irq); in zatm_start()
1285 vccs = (zatm_dev->mem-NR_SHAPERS*SHAPER_SIZE-pools*POOL_SIZE)/ in zatm_start()
1292 zatm_dev->chans = vccs; /* ??? */ in zatm_start()
1295 zpokel(zatm_dev,curr,uPD98401_PMA); /* receive pool */ in zatm_start()
1296 zatm_dev->pool_base = curr; in zatm_start()
1299 zpokel(zatm_dev,curr,uPD98401_SMA); /* shapers */ in zatm_start()
1302 zpokel(zatm_dev,curr,uPD98401_TOS); /* free pool */ in zatm_start()
1305 (zatm_dev->mem-curr*4)/VC_SIZE); in zatm_start()
1331 zatm_dev->mbx_start[i] = (unsigned long)mbx; in zatm_start()
1332 zatm_dev->mbx_dma[i] = mbx_dma; in zatm_start()
1333 zatm_dev->mbx_end[i] = (zatm_dev->mbx_start[i] + MBX_SIZE(i)) & in zatm_start()
1337 zout(zatm_dev->mbx_end[i], MBA(i)); in zatm_start()
1357 kfree(zatm_dev->rx_map); in zatm_start()
1359 kfree(zatm_dev->tx_map); in zatm_start()
1363 (void *)zatm_dev->mbx_start[i], in zatm_start()
1364 zatm_dev->mbx_dma[i]); in zatm_start()
1366 free_irq(zatm_dev->irq, dev); in zatm_start()
1443 struct zatm_dev *zatm_dev; in zatm_ioctl() local
1446 zatm_dev = ZATM_DEV(dev); in zatm_ioctl()
1463 spin_lock_irqsave(&zatm_dev->lock, flags); in zatm_ioctl()
1464 info = zatm_dev->pool_info[pool]; in zatm_ioctl()
1466 zatm_dev->pool_info[pool].rqa_count = 0; in zatm_ioctl()
1467 zatm_dev->pool_info[pool].rqu_count = 0; in zatm_ioctl()
1469 spin_unlock_irqrestore(&zatm_dev->lock, flags); in zatm_ioctl()
1491 info.low_water = zatm_dev-> in zatm_ioctl()
1494 info.high_water = zatm_dev-> in zatm_ioctl()
1497 info.next_thres = zatm_dev-> in zatm_ioctl()
1502 spin_lock_irqsave(&zatm_dev->lock, flags); in zatm_ioctl()
1503 zatm_dev->pool_info[pool].low_water = in zatm_ioctl()
1505 zatm_dev->pool_info[pool].high_water = in zatm_ioctl()
1507 zatm_dev->pool_info[pool].next_thres = in zatm_ioctl()
1509 spin_unlock_irqrestore(&zatm_dev->lock, flags); in zatm_ioctl()
1558 struct zatm_dev *zatm_dev; in zatm_phy_put() local
1560 zatm_dev = ZATM_DEV(dev); in zatm_phy_put()
1570 struct zatm_dev *zatm_dev; in zatm_phy_get() local
1572 zatm_dev = ZATM_DEV(dev); in zatm_phy_get()
1597 struct zatm_dev *zatm_dev; in zatm_init_one() local
1600 zatm_dev = kmalloc(sizeof(*zatm_dev), GFP_KERNEL); in zatm_init_one()
1601 if (!zatm_dev) { in zatm_init_one()
1622 zatm_dev->pci_dev = pci_dev; in zatm_init_one()
1623 dev->dev_data = zatm_dev; in zatm_init_one()
1624 zatm_dev->copper = (int)ent->driver_data; in zatm_init_one()
1629 zatm_dev->more = zatm_boards; in zatm_init_one()
1642 kfree(zatm_dev); in zatm_init_one()