Lines Matching refs:dev
214 static void init_rx_ring (struct eth_device *dev);
215 static void purge_tx_ring (struct eth_device *dev);
217 static void read_hw_addr (struct eth_device *dev, bd_t * bis);
219 static int eepro100_init (struct eth_device *dev, bd_t * bis);
220 static int eepro100_send(struct eth_device *dev, void *packet, int length);
221 static int eepro100_recv (struct eth_device *dev);
222 static void eepro100_halt (struct eth_device *dev);
228 #define bus_to_phys(a) pci_mem_to_phys((pci_dev_t)dev->priv, a)
229 #define phys_to_bus(a) pci_phys_to_mem((pci_dev_t)dev->priv, a)
232 static inline int INW (struct eth_device *dev, u_long addr) in INW() argument
234 return le16_to_cpu(*(volatile u16 *)(addr + (u_long)dev->iobase)); in INW()
237 static inline void OUTW (struct eth_device *dev, int command, u_long addr) in OUTW() argument
239 *(volatile u16 *)((addr + (u_long)dev->iobase)) = cpu_to_le16(command); in OUTW()
242 static inline void OUTL (struct eth_device *dev, int command, u_long addr) in OUTL() argument
244 *(volatile u32 *)((addr + (u_long)dev->iobase)) = cpu_to_le32(command); in OUTL()
248 static inline int INL (struct eth_device *dev, u_long addr) in INL() argument
250 return le32_to_cpu(*(volatile u32 *)(addr + (u_long)dev->iobase)); in INL()
253 static int get_phyreg (struct eth_device *dev, unsigned char addr, in get_phyreg() argument
261 OUTL (dev, cmd, SCBCtrlMDI); in get_phyreg()
265 cmd = INL (dev, SCBCtrlMDI); in get_phyreg()
276 static int set_phyreg (struct eth_device *dev, unsigned char addr, in set_phyreg() argument
284 OUTL (dev, cmd | value, SCBCtrlMDI); in set_phyreg()
286 while (!(INL (dev, SCBCtrlMDI) & (1 << 28)) && (--timeout)) in set_phyreg()
301 struct eth_device *dev; in verify_phyaddr() local
305 dev = eth_get_dev_by_name(devname); in verify_phyaddr()
306 if (dev == NULL) { in verify_phyaddr()
312 if (get_phyreg(dev, addr, MII_PHYSID2, &value) != 0) { in verify_phyaddr()
325 return dev; in verify_phyaddr()
332 struct eth_device *dev; in eepro100_miiphy_read() local
334 dev = verify_phyaddr(bus->name, addr); in eepro100_miiphy_read()
335 if (dev == NULL) in eepro100_miiphy_read()
338 if (get_phyreg(dev, addr, reg, &value) != 0) { in eepro100_miiphy_read()
349 struct eth_device *dev; in eepro100_miiphy_write() local
351 dev = verify_phyaddr(bus->name, addr); in eepro100_miiphy_write()
352 if (dev == NULL) in eepro100_miiphy_write()
355 if (set_phyreg(dev, addr, reg, value) != 0) { in eepro100_miiphy_write()
367 static int wait_for_eepro100 (struct eth_device *dev) in wait_for_eepro100() argument
371 for (i = 0; INW (dev, SCBCmd) & (CU_CMD_MASK | RU_CMD_MASK); i++) { in wait_for_eepro100()
391 struct eth_device *dev; in eepro100_initialize() local
427 dev = (struct eth_device *) malloc (sizeof *dev); in eepro100_initialize()
428 if (!dev) { in eepro100_initialize()
432 memset(dev, 0, sizeof(*dev)); in eepro100_initialize()
434 sprintf (dev->name, "i82559#%d", card_number); in eepro100_initialize()
435 dev->priv = (void *) devno; /* this have to come before bus_to_phys() */ in eepro100_initialize()
436 dev->iobase = bus_to_phys (iobase); in eepro100_initialize()
437 dev->init = eepro100_init; in eepro100_initialize()
438 dev->halt = eepro100_halt; in eepro100_initialize()
439 dev->send = eepro100_send; in eepro100_initialize()
440 dev->recv = eepro100_recv; in eepro100_initialize()
442 eth_register (dev); in eepro100_initialize()
450 strncpy(mdiodev->name, dev->name, MDIO_NAME_LEN); in eepro100_initialize()
467 read_hw_addr (dev, bis); in eepro100_initialize()
474 static int eepro100_init (struct eth_device *dev, bd_t * bis) in eepro100_init() argument
482 OUTL (dev, I82559_SELECTIVE_RESET, SCBPort); in eepro100_init()
485 OUTL (dev, I82559_RESET, SCBPort); in eepro100_init()
488 if (!wait_for_eepro100 (dev)) { in eepro100_init()
492 OUTL (dev, 0, SCBPointer); in eepro100_init()
493 OUTW (dev, SCB_M | RUC_ADDR_LOAD, SCBCmd); in eepro100_init()
495 if (!wait_for_eepro100 (dev)) { in eepro100_init()
499 OUTL (dev, 0, SCBPointer); in eepro100_init()
500 OUTW (dev, SCB_M | CU_ADDR_LOAD, SCBCmd); in eepro100_init()
504 init_rx_ring (dev); in eepro100_init()
505 purge_tx_ring (dev); in eepro100_init()
509 if (!wait_for_eepro100 (dev)) { in eepro100_init()
514 OUTL (dev, phys_to_bus ((u32) & rx_ring[rx_next]), SCBPointer); in eepro100_init()
515 OUTW (dev, SCB_M | RUC_START, SCBCmd); in eepro100_init()
529 if (!wait_for_eepro100 (dev)) { in eepro100_init()
534 OUTL (dev, phys_to_bus ((u32) & tx_ring[tx_cur]), SCBPointer); in eepro100_init()
535 OUTW (dev, SCB_M | CU_START, SCBCmd); in eepro100_init()
541 printf ("%s: Tx error buffer not ready\n", dev->name); in eepro100_init()
562 memcpy (ias_cmd->params, dev->enetaddr, 6); in eepro100_init()
566 if (!wait_for_eepro100 (dev)) { in eepro100_init()
571 OUTL (dev, phys_to_bus ((u32) & tx_ring[tx_cur]), SCBPointer); in eepro100_init()
572 OUTW (dev, SCB_M | CU_START, SCBCmd); in eepro100_init()
578 dev->name); in eepro100_init()
595 static int eepro100_send(struct eth_device *dev, void *packet, int length) in eepro100_send() argument
601 printf ("%s: bad packet size: %d\n", dev->name, length); in eepro100_send()
622 if (!wait_for_eepro100 (dev)) { in eepro100_send()
624 dev->name); in eepro100_send()
630 OUTL (dev, phys_to_bus ((u32) & tx_ring[tx_cur]), SCBPointer); in eepro100_send()
631 OUTW (dev, SCB_M | CU_START, SCBCmd); in eepro100_send()
636 printf ("%s: Tx error buffer not ready\n", dev->name); in eepro100_send()
653 static int eepro100_recv (struct eth_device *dev) in eepro100_recv() argument
658 stat = INW (dev, SCBStatus); in eepro100_recv()
659 OUTW (dev, stat & SCB_STATUS_RNR, SCBStatus); in eepro100_recv()
700 printf ("%s: Receiver is not ready, restart it !\n", dev->name); in eepro100_recv()
704 init_rx_ring (dev); in eepro100_recv()
706 if (!wait_for_eepro100 (dev)) { in eepro100_recv()
711 OUTL (dev, phys_to_bus ((u32) & rx_ring[rx_next]), SCBPointer); in eepro100_recv()
712 OUTW (dev, SCB_M | RUC_START, SCBCmd); in eepro100_recv()
719 static void eepro100_halt (struct eth_device *dev) in eepro100_halt() argument
723 OUTL (dev, I82559_SELECTIVE_RESET, SCBPort); in eepro100_halt()
726 OUTL (dev, I82559_RESET, SCBPort); in eepro100_halt()
729 if (!wait_for_eepro100 (dev)) { in eepro100_halt()
733 OUTL (dev, 0, SCBPointer); in eepro100_halt()
734 OUTW (dev, SCB_M | RUC_ADDR_LOAD, SCBCmd); in eepro100_halt()
736 if (!wait_for_eepro100 (dev)) { in eepro100_halt()
740 OUTL (dev, 0, SCBPointer); in eepro100_halt()
741 OUTW (dev, SCB_M | CU_ADDR_LOAD, SCBCmd); in eepro100_halt()
749 static int read_eeprom (struct eth_device *dev, int location, int addr_len) in read_eeprom() argument
755 OUTW (dev, EE_ENB & ~EE_CS, SCBeeprom); in read_eeprom()
756 OUTW (dev, EE_ENB, SCBeeprom); in read_eeprom()
762 OUTW (dev, EE_ENB | dataval, SCBeeprom); in read_eeprom()
764 OUTW (dev, EE_ENB | dataval | EE_SHIFT_CLK, SCBeeprom); in read_eeprom()
767 OUTW (dev, EE_ENB, SCBeeprom); in read_eeprom()
770 OUTW (dev, EE_ENB | EE_SHIFT_CLK, SCBeeprom); in read_eeprom()
773 ((INW (dev, SCBeeprom) & EE_DATA_READ) ? 1 : 0); in read_eeprom()
774 OUTW (dev, EE_ENB, SCBeeprom); in read_eeprom()
779 OUTW (dev, EE_ENB & ~EE_CS, SCBeeprom); in read_eeprom()
784 int eepro100_write_eeprom (struct eth_device* dev, int location, int addr_len, unsigned short data) in eepro100_write_eeprom() argument
792 OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom); in eepro100_write_eeprom()
794 OUTW(dev, EE_ENB, SCBeeprom); in eepro100_write_eeprom()
800 OUTW(dev, EE_ENB | dataval, SCBeeprom); in eepro100_write_eeprom()
802 OUTW(dev, EE_ENB | dataval | EE_SHIFT_CLK, SCBeeprom); in eepro100_write_eeprom()
806 OUTW(dev, EE_ENB, SCBeeprom); in eepro100_write_eeprom()
808 OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom); in eepro100_write_eeprom()
810 OUTW(dev, EE_ENB, SCBeeprom); in eepro100_write_eeprom()
817 OUTW(dev, EE_ENB | dataval, SCBeeprom); in eepro100_write_eeprom()
819 OUTW(dev, EE_ENB | dataval | EE_SHIFT_CLK, SCBeeprom); in eepro100_write_eeprom()
831 OUTW(dev, EE_ENB | dataval, SCBeeprom); in eepro100_write_eeprom()
833 OUTW(dev, EE_ENB | dataval | EE_SHIFT_CLK, SCBeeprom); in eepro100_write_eeprom()
835 OUTW(dev, EE_ENB | dataval, SCBeeprom); in eepro100_write_eeprom()
842 OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom); in eepro100_write_eeprom()
844 OUTW(dev, EE_ENB, SCBeeprom); in eepro100_write_eeprom()
850 dataval = INW(dev, SCBeeprom); in eepro100_write_eeprom()
864 OUTW(dev, EE_ENB & ~EE_CS, SCBeeprom); in eepro100_write_eeprom()
870 static void init_rx_ring (struct eth_device *dev) in init_rx_ring() argument
888 static void purge_tx_ring (struct eth_device *dev) in purge_tx_ring() argument
909 static void read_hw_addr (struct eth_device *dev, bd_t * bis) in read_hw_addr() argument
913 int addr_len = read_eeprom (dev, 0, 6) == 0xffff ? 8 : 6; in read_hw_addr()
916 u16 value = read_eeprom (dev, i, addr_len); in read_hw_addr()
920 dev->enetaddr[j++] = value; in read_hw_addr()
921 dev->enetaddr[j++] = value >> 8; in read_hw_addr()
926 memset (dev->enetaddr, 0, ETH_ALEN); in read_hw_addr()
930 dev->name, sum); in read_hw_addr()