tag | line | file | source code |
adapter | 232 | drivers/net/3c505.c | #define GET_ASF() (get_status(adapter)&ASF_PCB_MASK) |
adapter | 233 | drivers/net/3c505.c | #define GET_STATUS() (get_status(adapter)) |
adapter | 235 | drivers/net/3c505.c | static int get_status (elp_device * adapter) |
adapter | 241 | drivers/net/3c505.c | stat1 = INB(adapter->io_addr+PORT_STATUS); |
adapter | 242 | drivers/net/3c505.c | } while (stat1 != INB(adapter->io_addr+PORT_STATUS) && jiffies < timeout); |
adapter | 248 | drivers/net/3c505.c | #define SET_HSF(hsf) (set_hsf(adapter,hsf)) |
adapter | 250 | drivers/net/3c505.c | static void set_hsf (elp_device * adapter, int hsf) |
adapter | 254 | drivers/net/3c505.c | OUTB((INB(adapter->io_addr+PORT_CONTROL)&(~HSF_PCB_MASK))|hsf, adapter->io_addr+PORT_CONTROL); |
adapter | 258 | drivers/net/3c505.c | #define WAIT_HCRE(toval) (wait_hcre(adapter,toval)) |
adapter | 260 | drivers/net/3c505.c | static int wait_hcre(elp_device * adapter, int toval) |
adapter | 264 | drivers/net/3c505.c | while(((INB(adapter->io_addr+PORT_STATUS)&STATUS_HCRE)==0) && |
adapter | 289 | drivers/net/3c505.c | static int send_pcb(elp_device * adapter, pcb_struct * pcb) |
adapter | 298 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 313 | drivers/net/3c505.c | OUTB(pcb->command, (adapter->io_addr)+PORT_COMMAND); |
adapter | 317 | drivers/net/3c505.c | OUTB(pcb->length, (adapter->io_addr)+PORT_COMMAND); |
adapter | 322 | drivers/net/3c505.c | OUTB(pcb->data.raw[i], (adapter->io_addr)+PORT_COMMAND); |
adapter | 331 | drivers/net/3c505.c | OUTB(2+pcb->length, adapter->io_addr+PORT_COMMAND); |
adapter | 348 | drivers/net/3c505.c | printk("%s: PCB send was NAKed\n", adapter->name); |
adapter | 358 | drivers/net/3c505.c | printk("%s: NAK/timeout on send PCB\n", adapter->name); |
adapter | 360 | drivers/net/3c505.c | printk("%s: retry #%i on send PCB\n", adapter->name, retry); |
adapter | 379 | drivers/net/3c505.c | static int receive_pcb(elp_device * adapter, pcb_struct * pcb) |
adapter | 388 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 398 | drivers/net/3c505.c | pcb->command = INB(adapter->io_addr+PORT_COMMAND); |
adapter | 407 | drivers/net/3c505.c | pcb->length = INB(adapter->io_addr+PORT_COMMAND); |
adapter | 420 | drivers/net/3c505.c | pcb->data.raw[i++] = INB(adapter->io_addr+PORT_COMMAND); |
adapter | 434 | drivers/net/3c505.c | printk("%s: mangled PCB received\n", adapter->name); |
adapter | 450 | drivers/net/3c505.c | static void adapter_hard_reset(elp_device * adapter) |
adapter | 455 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 460 | drivers/net/3c505.c | OUTB(CONTROL_ATTN|CONTROL_FLSH, adapter->io_addr+PORT_CONTROL); |
adapter | 471 | drivers/net/3c505.c | OUTB(0, adapter->io_addr+PORT_CONTROL); |
adapter | 489 | drivers/net/3c505.c | static void adapter_reset(elp_device * adapter) |
adapter | 493 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 496 | drivers/net/3c505.c | OUTB(CONTROL_ATTN|INB(adapter->io_addr+PORT_CONTROL), adapter->io_addr+PORT_CONTROL); |
adapter | 506 | drivers/net/3c505.c | OUTB(INB(adapter->io_addr+PORT_CONTROL)&~(CONTROL_ATTN), adapter->io_addr+PORT_CONTROL); |
adapter | 518 | drivers/net/3c505.c | static int start_receive(elp_device * adapter, pcb_struct * tx_pcb) |
adapter | 521 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 525 | drivers/net/3c505.c | printk("%s: restarting receiver\n", adapter->name); |
adapter | 531 | drivers/net/3c505.c | return send_pcb(adapter, tx_pcb); |
adapter | 544 | drivers/net/3c505.c | elp_device * adapter, |
adapter | 564 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 581 | drivers/net/3c505.c | OUTB(INB(adapter->io_addr+PORT_CONTROL)|CONTROL_DIR, adapter->io_addr+PORT_CONTROL); |
adapter | 589 | drivers/net/3c505.c | while ((INB(adapter->io_addr+PORT_STATUS)&STATUS_HRDY) == 0 && |
adapter | 595 | drivers/net/3c505.c | d = inw(adapter->io_addr+PORT_DATA); |
adapter | 597 | drivers/net/3c505.c | adapter->stats.rx_dropped++; |
adapter | 618 | drivers/net/3c505.c | while ((INB(adapter->io_addr+PORT_STATUS)&STATUS_HRDY) == 0 && |
adapter | 633 | drivers/net/3c505.c | *ptr = inw(adapter->io_addr+PORT_DATA); |
adapter | 659 | drivers/net/3c505.c | OUTB(INB(adapter->io_addr+PORT_CONTROL)&(~CONTROL_DIR), adapter->io_addr+PORT_CONTROL); |
adapter | 676 | drivers/net/3c505.c | elp_device * adapter; |
adapter | 699 | drivers/net/3c505.c | adapter = (elp_device *) dev->priv; |
adapter | 701 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 717 | drivers/net/3c505.c | while ((INB(adapter->io_addr+PORT_STATUS)&STATUS_ACRF) != 0 && |
adapter | 720 | drivers/net/3c505.c | if (receive_pcb(adapter, &adapter->irx_pcb)) { |
adapter | 722 | drivers/net/3c505.c | switch (adapter->irx_pcb.command) { |
adapter | 728 | drivers/net/3c505.c | adapter->got[CMD_CONFIGURE_82586] = 1; |
adapter | 737 | drivers/net/3c505.c | adapter->got[CMD_CONFIGURE_ADAPTER_MEMORY] = 1; |
adapter | 740 | drivers/net/3c505.c | adapter->irx_pcb.data.failed?"failed":"succeeded"); |
adapter | 747 | drivers/net/3c505.c | adapter->got[CMD_LOAD_MULTICAST_LIST] = 1; |
adapter | 750 | drivers/net/3c505.c | adapter->irx_pcb.data.failed?"failed":"succeeded"); |
adapter | 757 | drivers/net/3c505.c | adapter->got[CMD_SET_STATION_ADDRESS] = 1; |
adapter | 760 | drivers/net/3c505.c | adapter->irx_pcb.data.failed?"failed":"succeeded"); |
adapter | 768 | drivers/net/3c505.c | adapter->stats.rx_packets += adapter->irx_pcb.data.netstat.tot_recv; |
adapter | 769 | drivers/net/3c505.c | adapter->stats.tx_packets += adapter->irx_pcb.data.netstat.tot_xmit; |
adapter | 770 | drivers/net/3c505.c | adapter->stats.rx_crc_errors += adapter->irx_pcb.data.netstat.err_CRC; |
adapter | 771 | drivers/net/3c505.c | adapter->stats.rx_frame_errors += adapter->irx_pcb.data.netstat.err_align; |
adapter | 772 | drivers/net/3c505.c | adapter->stats.rx_fifo_errors += adapter->irx_pcb.data.netstat.err_ovrrun; |
adapter | 773 | drivers/net/3c505.c | adapter->got[CMD_NETWORK_STATISTICS] = 1; |
adapter | 785 | drivers/net/3c505.c | len = adapter->irx_pcb.data.rcv_resp.pkt_len; |
adapter | 786 | drivers/net/3c505.c | dlen = adapter->irx_pcb.data.rcv_resp.buf_len; |
adapter | 787 | drivers/net/3c505.c | if (adapter->irx_pcb.data.rcv_resp.timeout != 0) { |
adapter | 792 | drivers/net/3c505.c | receive_packet(dev, adapter, dlen); |
adapter | 796 | drivers/net/3c505.c | if (dev->start && !start_receive(adapter, &adapter->itx_pcb)) |
adapter | 812 | drivers/net/3c505.c | if (adapter->irx_pcb.data.xmit_resp.c_stat != 0) |
adapter | 815 | drivers/net/3c505.c | dev->name, adapter->irx_pcb.data.xmit_resp.c_stat); |
adapter | 828 | drivers/net/3c505.c | printk("%s: unknown PCB received - %2.2x\n", dev->name, adapter->irx_pcb.command); |
adapter | 853 | drivers/net/3c505.c | elp_device * adapter = (elp_device *) dev->priv; |
adapter | 863 | drivers/net/3c505.c | if (adapter == NULL) { |
adapter | 871 | drivers/net/3c505.c | OUTB(0x00, adapter->io_addr+PORT_CONTROL); |
adapter | 876 | drivers/net/3c505.c | INB(adapter->io_addr+PORT_COMMAND); |
adapter | 902 | drivers/net/3c505.c | OUTB(CONTROL_CMDE, adapter->io_addr+PORT_CONTROL); |
adapter | 914 | drivers/net/3c505.c | adapter->tx_pcb.command = CMD_CONFIGURE_ADAPTER_MEMORY; |
adapter | 915 | drivers/net/3c505.c | adapter->tx_pcb.data.memconf.cmd_q = 10; |
adapter | 916 | drivers/net/3c505.c | adapter->tx_pcb.data.memconf.rcv_q = 20; |
adapter | 917 | drivers/net/3c505.c | adapter->tx_pcb.data.memconf.mcast = 10; |
adapter | 918 | drivers/net/3c505.c | adapter->tx_pcb.data.memconf.frame = 20; |
adapter | 919 | drivers/net/3c505.c | adapter->tx_pcb.data.memconf.rcv_b = 20; |
adapter | 920 | drivers/net/3c505.c | adapter->tx_pcb.data.memconf.progs = 0; |
adapter | 921 | drivers/net/3c505.c | adapter->tx_pcb.length = sizeof(struct Memconf); |
adapter | 922 | drivers/net/3c505.c | adapter->got[CMD_CONFIGURE_ADAPTER_MEMORY] = 0; |
adapter | 923 | drivers/net/3c505.c | if (!send_pcb(adapter, &adapter->tx_pcb)) |
adapter | 927 | drivers/net/3c505.c | while (adapter->got[CMD_CONFIGURE_ADAPTER_MEMORY] == 0 && jiffies < timeout) |
adapter | 939 | drivers/net/3c505.c | adapter->tx_pcb.command = CMD_CONFIGURE_82586; |
adapter | 940 | drivers/net/3c505.c | adapter->tx_pcb.data.configure = NO_LOOPBACK | RECV_BROAD; |
adapter | 941 | drivers/net/3c505.c | adapter->tx_pcb.length = 2; |
adapter | 942 | drivers/net/3c505.c | adapter->got[CMD_CONFIGURE_82586] = 0; |
adapter | 943 | drivers/net/3c505.c | if (!send_pcb(adapter, &adapter->tx_pcb)) |
adapter | 947 | drivers/net/3c505.c | while (adapter->got[CMD_CONFIGURE_82586] == 0 && jiffies < timeout) |
adapter | 956 | drivers/net/3c505.c | if (!start_receive(adapter, &adapter->tx_pcb)) |
adapter | 971 | drivers/net/3c505.c | static int send_packet (elp_device * adapter, unsigned char * ptr, int len) |
adapter | 981 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 991 | drivers/net/3c505.c | adapter->tx_pcb.command = CMD_TRANSMIT_PACKET; |
adapter | 992 | drivers/net/3c505.c | adapter->tx_pcb.length = sizeof(struct Xmit_pkt); |
adapter | 993 | drivers/net/3c505.c | adapter->tx_pcb.data.xmit_pkt.buf_ofs = adapter->tx_pcb.data.xmit_pkt.buf_seg = 0; /* Unused */ |
adapter | 994 | drivers/net/3c505.c | adapter->tx_pcb.data.xmit_pkt.pkt_len = nlen; |
adapter | 995 | drivers/net/3c505.c | if (!send_pcb(adapter, &adapter->tx_pcb)) |
adapter | 1002 | drivers/net/3c505.c | OUTB(INB(adapter->io_addr+PORT_CONTROL)&(~CONTROL_DIR), adapter->io_addr+PORT_CONTROL); |
adapter | 1010 | drivers/net/3c505.c | while ((INB(adapter->io_addr+PORT_STATUS)&STATUS_HRDY) == 0 && jiffies < timeout) |
adapter | 1018 | drivers/net/3c505.c | outw(*(short *)ptr, adapter->io_addr+PORT_DATA); |
adapter | 1035 | drivers/net/3c505.c | elp_device * adapter = (elp_device *) dev->priv; |
adapter | 1078 | drivers/net/3c505.c | if ((INB(adapter->io_addr+PORT_STATUS)&STATUS_ACRF) != 0) |
adapter | 1080 | drivers/net/3c505.c | adapter_reset(adapter); |
adapter | 1088 | drivers/net/3c505.c | if (!send_packet(adapter, (unsigned char *)SKB_DATA, skb->len)) { |
adapter | 1132 | drivers/net/3c505.c | elp_device *adapter = (elp_device *) dev->priv; |
adapter | 1140 | drivers/net/3c505.c | return &adapter->stats; |
adapter | 1143 | drivers/net/3c505.c | adapter->tx_pcb.command = CMD_NETWORK_STATISTICS; |
adapter | 1144 | drivers/net/3c505.c | adapter->tx_pcb.length = 0; |
adapter | 1145 | drivers/net/3c505.c | adapter->got[CMD_NETWORK_STATISTICS] = 0; |
adapter | 1146 | drivers/net/3c505.c | if (!send_pcb(adapter, &adapter->tx_pcb)) |
adapter | 1151 | drivers/net/3c505.c | while (adapter->got[CMD_NETWORK_STATISTICS] == 0 && jiffies < timeout) |
adapter | 1155 | drivers/net/3c505.c | return &adapter->stats; |
adapter | 1160 | drivers/net/3c505.c | return &adapter->stats; |
adapter | 1172 | drivers/net/3c505.c | elp_device * adapter = (elp_device *) dev->priv; |
adapter | 1175 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 1189 | drivers/net/3c505.c | OUTB(0x00, adapter->io_addr+PORT_CONTROL); |
adapter | 1226 | drivers/net/3c505.c | elp_device *adapter = (elp_device *) dev->priv; |
adapter | 1235 | drivers/net/3c505.c | adapter->tx_pcb.command = CMD_LOAD_MULTICAST_LIST; |
adapter | 1236 | drivers/net/3c505.c | adapter->tx_pcb.length = 6*num_addrs; |
adapter | 1238 | drivers/net/3c505.c | memcpy(adapter->tx_pcb.data.multicast[i], addrs+6*i,6); |
adapter | 1239 | drivers/net/3c505.c | adapter->got[CMD_LOAD_MULTICAST_LIST] = 0; |
adapter | 1240 | drivers/net/3c505.c | if (!send_pcb(adapter, &adapter->tx_pcb)) |
adapter | 1244 | drivers/net/3c505.c | while (adapter->got[CMD_LOAD_MULTICAST_LIST] == 0 && jiffies < timeout) |
adapter | 1251 | drivers/net/3c505.c | adapter->tx_pcb.data.configure = NO_LOOPBACK | RECV_BROAD | RECV_MULTI; |
adapter | 1253 | drivers/net/3c505.c | adapter->tx_pcb.data.configure = NO_LOOPBACK | RECV_BROAD; |
adapter | 1255 | drivers/net/3c505.c | adapter->tx_pcb.data.configure = NO_LOOPBACK | RECV_ALL; |
adapter | 1262 | drivers/net/3c505.c | adapter->tx_pcb.command = CMD_CONFIGURE_82586; |
adapter | 1263 | drivers/net/3c505.c | adapter->tx_pcb.length = 2; |
adapter | 1264 | drivers/net/3c505.c | adapter->got[CMD_CONFIGURE_82586] = 0; |
adapter | 1265 | drivers/net/3c505.c | if (!send_pcb(adapter, &adapter->tx_pcb)) |
adapter | 1269 | drivers/net/3c505.c | while (adapter->got[CMD_CONFIGURE_82586] == 0 && jiffies < timeout) |
adapter | 1285 | drivers/net/3c505.c | elp_device * adapter; |
adapter | 1324 | drivers/net/3c505.c | adapter = (elp_device *)(dev->priv = kmalloc(sizeof(elp_device), GFP_KERNEL)); |
adapter | 1325 | drivers/net/3c505.c | CHECK_NULL(adapter); |
adapter | 1326 | drivers/net/3c505.c | adapter->io_addr = dev->base_addr; |
adapter | 1327 | drivers/net/3c505.c | adapter->name = dev->name; |
adapter | 1328 | drivers/net/3c505.c | memset(&(adapter->stats), 0, sizeof(struct enet_statistics)); |
adapter | 1363 | drivers/net/3c505.c | adapter_hard_reset(adapter); |
adapter | 1365 | drivers/net/3c505.c | adapter_reset(adapter); |
adapter | 1464 | drivers/net/3c505.c | elp_device adapter; |
adapter | 1473 | drivers/net/3c505.c | adapter.io_addr = dev->base_addr = elp_autodetect(dev); |
adapter | 1474 | drivers/net/3c505.c | if ( !adapter.io_addr ) |
adapter | 1489 | drivers/net/3c505.c | adapter.tx_pcb.command = CMD_STATION_ADDRESS; |
adapter | 1490 | drivers/net/3c505.c | adapter.tx_pcb.length = 0; |
adapter | 1491 | drivers/net/3c505.c | if (!send_pcb (&adapter, &adapter.tx_pcb) || |
adapter | 1492 | drivers/net/3c505.c | !receive_pcb(&adapter, &adapter.rx_pcb) || |
adapter | 1493 | drivers/net/3c505.c | (adapter.rx_pcb.command != CMD_ADDRESS_RESPONSE) || |
adapter | 1494 | drivers/net/3c505.c | (adapter.rx_pcb.length != 6)) { |
adapter | 1530 | drivers/net/3c505.c | dev->dev_addr[i] = adapter.rx_pcb.data.eth_addr[i]; |