Linux MIPS Architecture development
 help / color / mirror / Atom feed
* Is this a toolchain bug?
@ 2002-02-23  1:57 Matthew Dharm
  2002-02-24  2:06 ` Daniel Jacobowitz
  2002-02-25 18:36 ` Kevin Paul Herbert
  0 siblings, 2 replies; 10+ messages in thread
From: Matthew Dharm @ 2002-02-23  1:57 UTC (permalink / raw)
  To: Linux-MIPS

[-- Attachment #1: Type: text/plain, Size: 1942 bytes --]

I'm trying to get the e1000 driver working on my MIPS target... I've
managed to hack it a bit so it works, but at least one of these hacks
looks like a workaround for a toolchain bug.

Attached to this message is the mixed-mode (source and assembly) dump
of one of the driver files.

Specifically, look at the code dealing with the variable
e1000_proc_dir; here is one example:

    if(e1000_proc_dir == NULL)
     53c:       3c020000        lui     v0,0x0
     540:       8c420000        lw      v0,0(v0)
     544:       1440000d        bnez    v0,57c <e1000_probe+0x44c>
     548:       00000000        nop

Is it me, or is that wrong?  load-upper-immediate with zero, then
load-word from that address?  Clearly, v0 is _supposed_ to contain the
value of e1000_proc_dir based on the branch-compare instruction....
but this code just crashes.

In fact, all the references to e1000_proc_dir seem to use the same
lui/lw pair of instructions.

For reference e1000_proc_dir is an extern struct pointer.  No compiler
warnings about it.

Before anyone asks, the assembly doesn't change when linked against
the code that actually declares the variable.

The toolchain I'm using is the one from oss.sgi.com by H.J. Liu
(toolchain-20011020-1).  Because of the way the e1000 driver Makefile
works, I'm actually compiling it using the native compiler on-target.

Full source code available on request (I don't want to spam the list),
or directly from Intel.  I'm using kernel 2.4.17 from CVS (plus the
patch I sent yesterday) with e1000 driver version 4.0.7

If this is user-error, I'd love to know what I'm doing wrong.  If this
is a toolchain bug, who do I report this to?

Matt

--
Matthew D. Dharm                            Senior Software Designer
Momentum Computer Inc.                      1815 Aston Ave.  Suite 107
(760) 431-8663 X-115                        Carlsbad, CA 92008-7310
Momentum Works For You                      www.momenco.com

[-- Attachment #2: e1000_main.dis --]
[-- Type: application/octet-stream, Size: 423044 bytes --]


e1000_main.o:     file format elf32-tradbigmips

Disassembly of section .text:

00000000 <e1000_init_module>:
       0:	27bdffe8 	addiu	sp,sp,-24
       4:	afb00010 	sw	s0,16(sp)
       8:	afbf0014 	sw	ra,20(sp)
    E1000_DBG("e1000_init_module\n");

    /* Print the driver ID string and copyright notice */

    printk("%s - version %s\n%s\n", e1000_driver_string, e1000_driver_version,
       c:	3c040000 	lui	a0,0x0
      10:	24840158 	addiu	a0,a0,344
      14:	3c050000 	lui	a1,0x0
      18:	24a50000 	addiu	a1,a1,0
      1c:	3c060000 	lui	a2,0x0
      20:	24c60000 	addiu	a2,a2,0
      24:	3c070000 	lui	a3,0x0
      28:	24e70000 	addiu	a3,a3,0
      2c:	3c020000 	lui	v0,0x0
      30:	24420000 	addiu	v0,v0,0
      34:	0040f809 	jalr	v0
      38:	00000000 	nop
 * This MUST stay in a header, as it checks for -DMODULE
 */
static inline int pci_module_init(struct pci_driver *drv)
{
	int rc = pci_register_driver (drv);
      3c:	3c040000 	lui	a0,0x0
      40:	24840288 	addiu	a0,a0,648
      44:	3c020000 	lui	v0,0x0
      48:	24420000 	addiu	v0,v0,0
      4c:	0040f809 	jalr	v0
      50:	00000000 	nop
      54:	00408021 	move	s0,v0

	if (rc > 0)
		return 0;

	/* iff CONFIG_HOTPLUG and built into kernel, we should
	 * leave the driver around for future hotplug events.
	 * For the module case, a hotplug daemon of some sort
	 * should load a module in response to an insert event. */
#if defined(CONFIG_HOTPLUG) && !defined(MODULE)
	if (rc == 0)
		return 0;
#else
	if (rc == 0)
		rc = -ENODEV;		
#endif

	/* if we get here, we need to clean up pci driver instance
	 * and return some sort of error */
	pci_unregister_driver (drv);
      58:	3c040000 	lui	a0,0x0
      5c:	24840288 	addiu	a0,a0,648
      60:	3c030000 	lui	v1,0x0
      64:	24630000 	addiu	v1,v1,0
      68:	1e000006 	bgtz	s0,84 <e1000_init_module+0x84>
      6c:	00001021 	move	v0,zero
      70:	52000001 	beqzl	s0,78 <e1000_init_module+0x78>
      74:	2410ffed 	li	s0,-19
      78:	0060f809 	jalr	v1
      7c:	00000000 	nop
	
	return rc;
      80:	02001021 	move	v0,s0
           e1000_copyright);

    /* register the driver with the PCI subsystem */

    return pci_module_init(&e1000_driver);
      84:	8fbf0014 	lw	ra,20(sp)
      88:	8fb00010 	lw	s0,16(sp)
      8c:	03e00008 	jr	ra
      90:	27bd0018 	addiu	sp,sp,24

00000094 <cleanup_module>:
      94:	27bdffe8 	addiu	sp,sp,-24
}

/* this macro creates a special symbol in the object file that
 * identifies the driver initialization routine
 */
module_init(e1000_init_module);

/**
 * e1000_exit_module - Driver Exit Cleanup Routine
 *
 * e1000_exit_module is called just before the driver is removed
 * from memory.
 **/

void
e1000_exit_module()
{
#ifdef CONFIG_PROC_FS
    struct proc_dir_entry *de;
#endif

    E1000_DBG("e1000_exit_module\n");

    pci_unregister_driver(&e1000_driver);
      98:	3c020000 	lui	v0,0x0
      9c:	24420000 	addiu	v0,v0,0
      a0:	afbf0010 	sw	ra,16(sp)
      a4:	3c040000 	lui	a0,0x0
      a8:	24840288 	addiu	a0,a0,648
      ac:	0040f809 	jalr	v0
      b0:	00000000 	nop

#ifdef CONFIG_PROC_FS
    /* if there is no e1000_proc_dir (proc creation failure on load)
     * then we're done
     */
    if(e1000_proc_dir == NULL)
      b4:	3c020000 	lui	v0,0x0
      b8:	8c420000 	lw	v0,0(v0)
      bc:	1040001a 	beqz	v0,128 <cleanup_module+0x94>
      c0:	8fbf0010 	lw	ra,16(sp)
        return;

    /* If ADAPTERS_PROC_DIR (/proc/net/PRO_LAN_Adapters) is empty
     * it can be removed now (might still be in use by e100)
     */
    for(de = e1000_proc_dir->subdir; de; de = de->next) {
      c4:	8c450034 	lw	a1,52(v0)
      c8:	10a0000e 	beqz	a1,104 <cleanup_module+0x70>
      cc:	2404002e 	li	a0,46

        /* ignore . and .. */

        if(*(de->name) == '.')
      d0:	8ca20004 	lw	v0,4(a1)
      d4:	80430000 	lb	v1,0(v0)
      d8:	14640008 	bne	v1,a0,fc <cleanup_module+0x68>
      dc:	00000000 	nop
      e0:	8ca5002c 	lw	a1,44(a1)
      e4:	10a00007 	beqz	a1,104 <cleanup_module+0x70>
      e8:	00000000 	nop
      ec:	8ca20004 	lw	v0,4(a1)
      f0:	80430000 	lb	v1,0(v0)
      f4:	5064fffb 	beql	v1,a0,e4 <cleanup_module+0x50>
      f8:	8ca5002c 	lw	a1,44(a1)
            continue;
        break;
    }
    if(de)
      fc:	14a0000a 	bnez	a1,128 <cleanup_module+0x94>
     100:	8fbf0010 	lw	ra,16(sp)
        return;
    remove_proc_entry(ADAPTERS_PROC_DIR, proc_net);
     104:	3c050000 	lui	a1,0x0
     108:	8ca50000 	lw	a1,0(a1)
     10c:	3c040000 	lui	a0,0x0
     110:	2484016c 	addiu	a0,a0,364
     114:	3c020000 	lui	v0,0x0
     118:	24420000 	addiu	v0,v0,0
     11c:	0040f809 	jalr	v0
     120:	00000000 	nop
#endif

    return;
}
     124:	8fbf0010 	lw	ra,16(sp)
     128:	03e00008 	jr	ra
     12c:	27bd0018 	addiu	sp,sp,24

00000130 <e1000_probe>:
     130:	27bdffd0 	addiu	sp,sp,-48
     134:	afb30024 	sw	s3,36(sp)
     138:	afb00018 	sw	s0,24(sp)
     13c:	afbf0028 	sw	ra,40(sp)
     140:	afb20020 	sw	s2,32(sp)
     144:	afb1001c 	sw	s1,28(sp)

/* this macro creates a special symbol in the object file that
 * identifies the driver cleanup routine
 */
module_exit(e1000_exit_module);

/**
 * e1000_probe - Device Initialization Routine
 * @pdev: PCI device information struct
 * @ent: entry in e1000_pci_table
 *
 * Returns 0 on success, negative on failure
 *
 * e1000_probe initializes an adapter identified by a pci_dev
 * structure.  The OS initialization is handled here, and
 * e1000_sw_init and e1000_hw_init are called to handle the driver
 * specific software structures and hardware initialization
 * respectively.
 **/

int
e1000_probe(struct pci_dev *pdev,
            const struct pci_device_id *ent)
{
    struct net_device *netdev = NULL;
    struct e1000_adapter *adapter;
    static int cards_found = 0;

#ifdef CONFIG_PROC_FS
    int len;
#endif

    E1000_DBG("e1000_probe\n");

    /* Make sure the PCI device has the proper resources available */

    if(pci_enable_device(pdev) != 0) {
     148:	3c020000 	lui	v0,0x0
     14c:	24420000 	addiu	v0,v0,0
     150:	00808021 	move	s0,a0
     154:	0040f809 	jalr	v0
     158:	00a09821 	move	s3,a1
     15c:	10400005 	beqz	v0,174 <e1000_probe+0x44>
     160:	00000000 	nop
        E1000_ERR("pci_enable_device failed\n");
     164:	3c040000 	lui	a0,0x0
     168:	24840180 	addiu	a0,a0,384
        return -ENODEV;
     16c:	0800006b 	j	1ac <e1000_probe+0x7c>
     170:	00000000 	nop
    }

    /* Make sure we are enabled as a bus mastering device */

    pci_set_master(pdev);
     174:	3c020000 	lui	v0,0x0
     178:	24420000 	addiu	v0,v0,0
     17c:	0040f809 	jalr	v0
     180:	02002021 	move	a0,s0

    /* Check to see if our PCI addressing needs are supported */
    if(pci_set_dma_mask(pdev, E1000_DMA_MASK) < 0) {
     184:	24060000 	li	a2,0
     188:	2407ffff 	li	a3,-1
     18c:	3c020000 	lui	v0,0x0
     190:	24420000 	addiu	v0,v0,0
     194:	0040f809 	jalr	v0
     198:	02002021 	move	a0,s0
     19c:	04410009 	bgez	v0,1c4 <e1000_probe+0x94>
     1a0:	00002021 	move	a0,zero
        E1000_ERR("PCI DMA not supported by the system\n");
     1a4:	3c040000 	lui	a0,0x0
     1a8:	248401a4 	addiu	a0,a0,420
     1ac:	3c020000 	lui	v0,0x0
     1b0:	24420000 	addiu	v0,v0,0
     1b4:	0040f809 	jalr	v0
     1b8:	00000000 	nop
        return -ENODEV;
     1bc:	0800018b 	j	62c <e1000_probe+0x4fc>
     1c0:	2402ffed 	li	v0,-19
    }

    /* Register a new network interface + allocate
     * private data structure (struct e1000_adapter)
     */
    netdev = init_etherdev(netdev, sizeof(struct e1000_adapter));
     1c4:	3c020000 	lui	v0,0x0
     1c8:	24420000 	addiu	v0,v0,0
     1cc:	0040f809 	jalr	v0
     1d0:	240503b0 	li	a1,944
     1d4:	00409021 	move	s2,v0
    if(netdev == NULL) {
     1d8:	56400009 	bnezl	s2,200 <e1000_probe+0xd0>
     1dc:	8e510064 	lw	s1,100(s2)
        E1000_ERR("Unable to allocate net_device struct\n");
     1e0:	3c040000 	lui	a0,0x0
     1e4:	248401d4 	addiu	a0,a0,468
     1e8:	3c020000 	lui	v0,0x0
     1ec:	24420000 	addiu	v0,v0,0
     1f0:	0040f809 	jalr	v0
     1f4:	00000000 	nop
        return -ENOMEM;
     1f8:	0800018b 	j	62c <e1000_probe+0x4fc>
     1fc:	2402fff4 	li	v0,-12
    }

    /* Calling init_etherdev with sizeof(struct e1000_adapter) allocates
     * a single buffer of size net_device + struct e1000_adapter +
     * alignment. If this is not done then the struct e1000_adapter needs
     * to be allocated and freed separately.
     */
    adapter = (struct e1000_adapter *) netdev->priv;
    memset(adapter, 0, sizeof(struct e1000_adapter));
     200:	00002821 	move	a1,zero
     204:	240603b0 	li	a2,944
     208:	3c020000 	lui	v0,0x0
     20c:	24420000 	addiu	v0,v0,0
     210:	0040f809 	jalr	v0
     214:	02202021 	move	a0,s1
    adapter->netdev = netdev;
    adapter->pdev = pdev;
     218:	ae30014c 	sw	s0,332(s1)
     21c:	ae320148 	sw	s2,328(s1)

    /* link the struct e1000_adapter into the list */

    if(e1000_adapter_list != NULL)
     220:	3c020000 	lui	v0,0x0
     224:	8c420000 	lw	v0,0(v0)
     228:	50400005 	beqzl	v0,240 <e1000_probe+0x110>
     22c:	ae220000 	sw	v0,0(s1)
        e1000_adapter_list->prev = adapter;
     230:	ac510004 	sw	s1,4(v0)
     234:	3c020000 	lui	v0,0x0
     238:	8c420000 	lw	v0,0(v0)
    adapter->next = e1000_adapter_list;
     23c:	ae220000 	sw	v0,0(s1)
    e1000_adapter_list = adapter;
     240:	3c010000 	lui	at,0x0
     244:	ac310000 	sw	s1,0(at)
    adapter->shared.back = (void *) adapter;
     248:	ae310014 	sw	s1,20(s1)

    /* reserve the MMIO region as ours */

    if(!request_mem_region
     24c:	8e030064 	lw	v1,100(s0)
     250:	14600005 	bnez	v1,268 <e1000_probe+0x138>
     254:	8e020068 	lw	v0,104(s0)
     258:	10400005 	beqz	v0,270 <e1000_probe+0x140>
     25c:	00003021 	move	a2,zero
     260:	0800009b 	j	26c <e1000_probe+0x13c>
     264:	00431023 	subu	v0,v0,v1
     268:	00431023 	subu	v0,v0,v1
     26c:	24460001 	addiu	a2,v0,1
     270:	3c070000 	lui	a3,0x0
     274:	24e70000 	addiu	a3,a3,0
     278:	3c040000 	lui	a0,0x0
     27c:	24840000 	addiu	a0,a0,0
     280:	3c020000 	lui	v0,0x0
     284:	24420000 	addiu	v0,v0,0
     288:	0040f809 	jalr	v0
     28c:	8e050064 	lw	a1,100(s0)
     290:	54400009 	bnezl	v0,2b8 <e1000_probe+0x188>
     294:	8e040064 	lw	a0,100(s0)
       (pci_resource_start(pdev, BAR_0), pci_resource_len(pdev, BAR_0),
        e1000_driver_name)) {
        E1000_ERR("request_mem_region failed\n");
     298:	3c040000 	lui	a0,0x0
     29c:	24840204 	addiu	a0,a0,516
     2a0:	3c020000 	lui	v0,0x0
     2a4:	24420000 	addiu	v0,v0,0
     2a8:	0040f809 	jalr	v0
     2ac:	00000000 	nop
        e1000_remove(pdev);
        return -ENODEV;
     2b0:	08000121 	j	484 <e1000_probe+0x354>
     2b4:	00000000 	nop
    }

    /* map the MMIO region into the kernel virtual address space */

    adapter->shared.hw_addr =
     2b8:	14800005 	bnez	a0,2d0 <e1000_probe+0x1a0>
     2bc:	8e020068 	lw	v0,104(s0)
     2c0:	10400005 	beqz	v0,2d8 <e1000_probe+0x1a8>
     2c4:	00002821 	move	a1,zero
     2c8:	080000b5 	j	2d4 <e1000_probe+0x1a4>
     2cc:	00441023 	subu	v0,v0,a0
     2d0:	00441023 	subu	v0,v0,a0
     2d4:	24450001 	addiu	a1,v0,1
extern void * __ioremap(phys_t offset, phys_t size, unsigned long flags);

static inline void *ioremap(phys_t offset, unsigned long size)
{
	return __ioremap(offset, size, _CACHE_UNCACHED);
     2d8:	3c020000 	lui	v0,0x0
     2dc:	24420000 	addiu	v0,v0,0
     2e0:	0040f809 	jalr	v0
     2e4:	24060400 	li	a2,1024
        ioremap(pci_resource_start(pdev, BAR_0), pci_resource_len(pdev, BAR_0));

    if(adapter->shared.hw_addr == NULL) {
     2e8:	1440001c 	bnez	v0,35c <e1000_probe+0x22c>
     2ec:	ae220008 	sw	v0,8(s1)
        E1000_ERR("ioremap failed\n");
     2f0:	3c040000 	lui	a0,0x0
     2f4:	2484022c 	addiu	a0,a0,556
     2f8:	3c020000 	lui	v0,0x0
     2fc:	24420000 	addiu	v0,v0,0
     300:	0040f809 	jalr	v0
     304:	00000000 	nop
        release_mem_region(pci_resource_start(pdev, BAR_0),
     308:	8e030064 	lw	v1,100(s0)
     30c:	14600005 	bnez	v1,324 <e1000_probe+0x1f4>
     310:	8e020068 	lw	v0,104(s0)
     314:	10400005 	beqz	v0,32c <e1000_probe+0x1fc>
     318:	00003021 	move	a2,zero
     31c:	080000ca 	j	328 <e1000_probe+0x1f8>
     320:	00431023 	subu	v0,v0,v1
     324:	00431023 	subu	v0,v0,v1
     328:	24460001 	addiu	a2,v0,1
     32c:	3c040000 	lui	a0,0x0
     330:	24840000 	addiu	a0,a0,0
     334:	3c020000 	lui	v0,0x0
     338:	24420000 	addiu	v0,v0,0
     33c:	0040f809 	jalr	v0
     340:	8e050064 	lw	a1,100(s0)
                           pci_resource_len(pdev, BAR_0));
        e1000_remove(pdev);
     344:	3c020000 	lui	v0,0x0
     348:	24420000 	addiu	v0,v0,0
     34c:	0040f809 	jalr	v0
     350:	02002021 	move	a0,s0
        return -ENOMEM;
     354:	0800018b 	j	62c <e1000_probe+0x4fc>
     358:	2402fff4 	li	v0,-12
    }

    /* don't actually register the interrupt handler until e1000_open */

    netdev->irq = pdev->irq;
     35c:	8e02005c 	lw	v0,92(s0)
     360:	ae420024 	sw	v0,36(s2)

    /* Set the MMIO base address for the NIC */

#ifdef IANS
    netdev->base_addr = pci_resource_start(pdev, BAR_0);
#endif
    netdev->mem_start = pci_resource_start(pdev, BAR_0);
     364:	8e030064 	lw	v1,100(s0)
     368:	ae43001c 	sw	v1,28(s2)
    netdev->mem_end = netdev->mem_start + pci_resource_len(pdev, BAR_0);
     36c:	8e040064 	lw	a0,100(s0)
     370:	14800005 	bnez	a0,388 <e1000_probe+0x258>
     374:	8e020068 	lw	v0,104(s0)
     378:	10400006 	beqz	v0,394 <e1000_probe+0x264>
     37c:	00605021 	move	t2,v1
     380:	080000e3 	j	38c <e1000_probe+0x25c>
     384:	00441023 	subu	v0,v0,a0
     388:	00441023 	subu	v0,v0,a0
     38c:	00621021 	addu	v0,v1,v0
     390:	244a0001 	addiu	t2,v0,1

    /* set up function pointers to driver entry points */

    netdev->open = &e1000_open;
    netdev->stop = &e1000_close;
    netdev->hard_start_xmit = &e1000_xmit_frame;
    netdev->get_stats = &e1000_get_stats;
    netdev->set_multicast_list = &e1000_set_multi;
    netdev->set_mac_address = &e1000_set_mac;
     394:	3c070000 	lui	a3,0x0
     398:	24e70000 	addiu	a3,a3,0
    netdev->change_mtu = &e1000_change_mtu;
     39c:	3c080000 	lui	t0,0x0
     3a0:	25080000 	addiu	t0,t0,0
    netdev->do_ioctl = &e1000_ioctl;
     3a4:	3c090000 	lui	t1,0x0
     3a8:	25290000 	addiu	t1,t1,0
     3ac:	3c020000 	lui	v0,0x0
     3b0:	24420000 	addiu	v0,v0,0
     3b4:	3c030000 	lui	v1,0x0
     3b8:	24630000 	addiu	v1,v1,0
     3bc:	3c040000 	lui	a0,0x0
     3c0:	24840000 	addiu	a0,a0,0
     3c4:	3c050000 	lui	a1,0x0
     3c8:	24a50000 	addiu	a1,a1,0
     3cc:	3c060000 	lui	a2,0x0
     3d0:	24c60000 	addiu	a2,a2,0
     3d4:	ae4a0018 	sw	t2,24(s2)
     3d8:	ae470108 	sw	a3,264(s2)
     3dc:	ae48011c 	sw	t0,284(s2)
     3e0:	ae49010c 	sw	t1,268(s2)
     3e4:	ae4400f8 	sw	a0,248(s2)
     3e8:	ae450044 	sw	a1,68(s2)
     3ec:	ae4200f0 	sw	v0,240(s2)
     3f0:	ae4300f4 	sw	v1,244(s2)
     3f4:	ae460104 	sw	a2,260(s2)

    /* set up the struct e1000_adapter */

    adapter->bd_number = cards_found;
     3f8:	3c020000 	lui	v0,0x0
     3fc:	8c42043c 	lw	v0,1084(v0)
    adapter->id_string = e1000_strings[ent->driver_data];
    printk("\n%s\n", adapter->id_string);
     400:	3c040000 	lui	a0,0x0
     404:	24840248 	addiu	a0,a0,584
     408:	ae220090 	sw	v0,144(s1)
     40c:	8e630018 	lw	v1,24(s3)
     410:	3c020000 	lui	v0,0x0
     414:	24420000 	addiu	v0,v0,0
     418:	00031880 	sll	v1,v1,0x2
     41c:	3c060000 	lui	a2,0x0
     420:	00c33021 	addu	a2,a2,v1
     424:	8cc6027c 	lw	a2,636(a2)
     428:	00c02821 	move	a1,a2
     42c:	0040f809 	jalr	v0
     430:	ae2601ac 	sw	a2,428(s1)

    /* Order is important here.  e1000_sw_init also identifies the
     * hardware, so that e1000_check_options can treat command line parameters
     * differently depending on the hardware.
     */
    e1000_sw_init(adapter);
     434:	3c020000 	lui	v0,0x0
     438:	244215a0 	addiu	v0,v0,5536
     43c:	0040f809 	jalr	v0
     440:	02202021 	move	a0,s1
    e1000_check_options(adapter);
     444:	3c030000 	lui	v1,0x0
     448:	24630794 	addiu	v1,v1,1940
     44c:	0060f809 	jalr	v1
     450:	02202021 	move	a0,s1

#ifdef MAX_SKB_FRAGS
    if(adapter->shared.mac_type >= e1000_82543) {
     454:	8e22000c 	lw	v0,12(s1)
     458:	2c420002 	sltiu	v0,v0,2
     45c:	54400002 	bnezl	v0,468 <e1000_probe+0x338>
     460:	24020021 	li	v0,33
        netdev->features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_HIGHDMA;
    } else {
     464:	24020023 	li	v0,35
        netdev->features = NETIF_F_SG | NETIF_F_HIGHDMA;
     468:	ae4200e4 	sw	v0,228(s2)
    }
#endif

#ifdef IANS
    adapter->iANSdata = kmalloc(sizeof(iANSsupport_t), GFP_KERNEL);
    if(adapter->iANSdata == NULL) {
        e1000_remove(pdev);
        return -ENOMEM;
    }
    memset(adapter->iANSdata, 0, sizeof(iANSsupport_t));
    bd_ans_drv_InitANS(adapter, adapter->iANSdata);
#endif

    /* finally, we get around to setting up the hardware */

    if(e1000_hw_init(adapter) < 0) {
     46c:	3c020000 	lui	v0,0x0
     470:	244217c4 	addiu	v0,v0,6084
     474:	0040f809 	jalr	v0
     478:	02202021 	move	a0,s1
     47c:	04430007 	bgezl	v0,49c <e1000_probe+0x36c>
     480:	26300008 	addiu	s0,s1,8
        e1000_remove(pdev);
     484:	3c020000 	lui	v0,0x0
     488:	24420000 	addiu	v0,v0,0
     48c:	0040f809 	jalr	v0
     490:	02002021 	move	a0,s0
        return -ENODEV;
     494:	0800018b 	j	62c <e1000_probe+0x4fc>
     498:	2402ffed 	li	v0,-19
    }
    cards_found++;
     49c:	3c020000 	lui	v0,0x0
     4a0:	8c42043c 	lw	v0,1084(v0)
     4a4:	24420001 	addiu	v0,v0,1

    /* reset stats */

    e1000_clear_hw_cntrs(&adapter->shared);
     4a8:	3c030000 	lui	v1,0x0
     4ac:	24630000 	addiu	v1,v1,0
     4b0:	3c010000 	lui	at,0x0
     4b4:	ac22043c 	sw	v0,1084(at)
     4b8:	0060f809 	jalr	v1
     4bc:	02002021 	move	a0,s0
    e1000_phy_get_info(&adapter->shared, &adapter->phy_info);
     4c0:	02002021 	move	a0,s0
     4c4:	3c020000 	lui	v0,0x0
     4c8:	24420000 	addiu	v0,v0,0
     4cc:	0040f809 	jalr	v0
     4d0:	262501b8 	addiu	a1,s1,440

#ifdef CONFIG_PROC_FS
    /* set up the proc fs entry */

    len = strlen(ADAPTERS_PROC_DIR);

    for(e1000_proc_dir = proc_net->subdir; e1000_proc_dir;
     4d4:	3c030000 	lui	v1,0x0
     4d8:	8c630000 	lw	v1,0(v1)
     4dc:	24130010 	li	s3,16
     4e0:	3c100000 	lui	s0,0x0
     4e4:	26100000 	addiu	s0,s0,0
     4e8:	0800013f 	j	4fc <e1000_probe+0x3cc>
     4ec:	8c620034 	lw	v0,52(v1)
        e1000_proc_dir = e1000_proc_dir->next) {
     4f0:	3c040000 	lui	a0,0x0
     4f4:	8c840000 	lw	a0,0(a0)
     4f8:	8c82002c 	lw	v0,44(a0)
     4fc:	3c010000 	lui	at,0x0
     500:	ac220000 	sw	v0,0(at)
     504:	3c030000 	lui	v1,0x0
     508:	8c630000 	lw	v1,0(v1)
        if((e1000_proc_dir->namelen == len) &&
     50c:	3c050000 	lui	a1,0x0
     510:	24a5016c 	addiu	a1,a1,364
     514:	24060010 	li	a2,16
     518:	1060000c 	beqz	v1,54c <e1000_probe+0x41c>
     51c:	00602021 	move	a0,v1
     520:	94620002 	lhu	v0,2(v1)
     524:	5453fff5 	bnel	v0,s3,4fc <e1000_probe+0x3cc>
     528:	8c82002c 	lw	v0,44(a0)
     52c:	0200f809 	jalr	s0
     530:	8c640004 	lw	a0,4(v1)
     534:	1440ffee 	bnez	v0,4f0 <e1000_probe+0x3c0>
     538:	00000000 	nop
           (memcmp(e1000_proc_dir->name, ADAPTERS_PROC_DIR, len) == 0))
            break;
    }

    if(e1000_proc_dir == NULL)
     53c:	3c020000 	lui	v0,0x0
     540:	8c420000 	lw	v0,0(v0)
     544:	1440000d 	bnez	v0,57c <e1000_probe+0x44c>
     548:	00000000 	nop
        e1000_proc_dir =
     54c:	3c060000 	lui	a2,0x0
     550:	8cc60000 	lw	a2,0(a2)
     554:	3c040000 	lui	a0,0x0
     558:	2484016c 	addiu	a0,a0,364
     55c:	3c020000 	lui	v0,0x0
     560:	24420000 	addiu	v0,v0,0
     564:	0040f809 	jalr	v0
     568:	24054000 	li	a1,16384
     56c:	3c010000 	lui	at,0x0
     570:	ac220000 	sw	v0,0(at)
            create_proc_entry(ADAPTERS_PROC_DIR, S_IFDIR, proc_net);

    if(e1000_proc_dir != NULL)
     574:	5040000c 	beqzl	v0,5a8 <e1000_probe+0x478>
     578:	8e2300b0 	lw	v1,176(s1)
        if(e1000_create_proc_dev(adapter) < 0) {
     57c:	3c020000 	lui	v0,0x0
     580:	24420000 	addiu	v0,v0,0
     584:	0040f809 	jalr	v0
     588:	02202021 	move	a0,s1
     58c:	04430006 	bgezl	v0,5a8 <e1000_probe+0x478>
     590:	8e2300b0 	lw	v1,176(s1)
            e1000_remove_proc_dev(adapter->netdev);
     594:	3c020000 	lui	v0,0x0
     598:	24420000 	addiu	v0,v0,0
     59c:	0040f809 	jalr	v0
     5a0:	8e240148 	lw	a0,328(s1)
        }
#endif

    /* print the link status */

    if(adapter->link_active == 1)
     5a4:	8e2300b0 	lw	v1,176(s1)
     5a8:	24020001 	li	v0,1
     5ac:	14620017 	bne	v1,v0,60c <e1000_probe+0x4dc>
     5b0:	02402821 	move	a1,s2
        printk("%s:  Mem:0x%p  IRQ:%d  Speed:%d Mbps  Duplex:%s\n",
     5b4:	962200b4 	lhu	v0,180(s1)
     5b8:	24040002 	li	a0,2
     5bc:	afa20010 	sw	v0,16(sp)
     5c0:	962300b6 	lhu	v1,182(s1)
     5c4:	14640005 	bne	v1,a0,5dc <e1000_probe+0x4ac>
     5c8:	00000000 	nop
     5cc:	3c020000 	lui	v0,0x0
     5d0:	24420284 	addiu	v0,v0,644
     5d4:	0800017a 	j	5e8 <e1000_probe+0x4b8>
     5d8:	afa20014 	sw	v0,20(sp)
     5dc:	3c020000 	lui	v0,0x0
     5e0:	2442028c 	addiu	v0,v0,652
     5e4:	afa20014 	sw	v0,20(sp)
     5e8:	8ca6001c 	lw	a2,28(a1)
     5ec:	3c040000 	lui	a0,0x0
     5f0:	24840250 	addiu	a0,a0,592
     5f4:	3c020000 	lui	v0,0x0
     5f8:	24420000 	addiu	v0,v0,0
     5fc:	0040f809 	jalr	v0
     600:	8ca70024 	lw	a3,36(a1)
     604:	0800018b 	j	62c <e1000_probe+0x4fc>
     608:	00001021 	move	v0,zero
               netdev->name, (void *) netdev->mem_start, netdev->irq,
               adapter->link_speed,
               adapter->link_duplex == FULL_DUPLEX ? "Full" : "Half");
    else
        printk("%s:  Mem:0x%p  IRQ:%d  Speed:N/A  Duplex:N/A\n", netdev->name,
     60c:	8ca6001c 	lw	a2,28(a1)
     610:	3c040000 	lui	a0,0x0
     614:	24840294 	addiu	a0,a0,660
     618:	3c020000 	lui	v0,0x0
     61c:	24420000 	addiu	v0,v0,0
     620:	0040f809 	jalr	v0
     624:	8ca70024 	lw	a3,36(a1)
               (void *) netdev->mem_start, netdev->irq);

    return 0;
     628:	00001021 	move	v0,zero
}
     62c:	8fbf0028 	lw	ra,40(sp)
     630:	8fb30024 	lw	s3,36(sp)
     634:	8fb20020 	lw	s2,32(sp)
     638:	8fb1001c 	lw	s1,28(sp)
     63c:	8fb00018 	lw	s0,24(sp)
     640:	03e00008 	jr	ra
     644:	27bd0030 	addiu	sp,sp,48

00000648 <e1000_remove>:
     648:	27bdffd8 	addiu	sp,sp,-40
     64c:	afb00010 	sw	s0,16(sp)

/**
 * e1000_remove - Device Removal Routine
 * @pdev: PCI device information struct
 *
 * e1000_remove is called by the PCI subsystem to alert the driver
 * that it should release a PCI device.  The could be caused by a
 * Hot-Plug event, or because the driver is going to be removed from
 * memory.
 *
 * This routine is also called to clean up from a failure in
 * e1000_probe.  The Adapter struct and netdev will always exist,
 * all other pointers must be checked for NULL before freeing.
 **/

void
e1000_remove(struct pci_dev *pdev)
{
    struct net_device *netdev;
    struct e1000_adapter *adapter;

    /* find the Adapter struct that matches this PCI device */

    for(adapter = e1000_adapter_list; adapter != NULL; adapter = adapter->next) {
     650:	3c100000 	lui	s0,0x0
     654:	8e100000 	lw	s0,0(s0)
     658:	afb10014 	sw	s1,20(sp)
     65c:	afbf0020 	sw	ra,32(sp)
     660:	afb3001c 	sw	s3,28(sp)
     664:	afb20018 	sw	s2,24(sp)
        if(adapter->pdev == pdev)
     668:	00808821 	move	s1,a0
     66c:	12000043 	beqz	s0,77c <e1000_remove+0x134>
     670:	8fbf0020 	lw	ra,32(sp)
     674:	8e02014c 	lw	v0,332(s0)
     678:	5451fffc 	bnel	v0,s1,66c <e1000_remove+0x24>
     67c:	8e100000 	lw	s0,0(s0)
            break;
    }
    if(adapter == NULL)
     680:	1200003e 	beqz	s0,77c <e1000_remove+0x134>
     684:	26120008 	addiu	s2,s0,8
        return;

    netdev = adapter->netdev;
     688:	8e130148 	lw	s3,328(s0)

    /* this must be called before freeing anything,
     * otherwise there is a case where the open entry point can be
     * running at the same time as remove. Calling unregister_netdev on an
     * open interface results in a call to dev_close, which locks
     * properly against the other netdev entry points, so this takes
     * care of the hotplug issue of removing an active interface as well.
     */
    unregister_netdev(netdev);
     68c:	3c020000 	lui	v0,0x0
     690:	24420000 	addiu	v0,v0,0
     694:	0040f809 	jalr	v0
     698:	02602021 	move	a0,s3

    e1000_phy_hw_reset(&adapter->shared);
     69c:	3c020000 	lui	v0,0x0
     6a0:	24420000 	addiu	v0,v0,0
     6a4:	0040f809 	jalr	v0
     6a8:	02402021 	move	a0,s2

#ifdef CONFIG_PROC_FS
    /* remove the proc nodes */

    if(e1000_proc_dir != NULL)
     6ac:	3c030000 	lui	v1,0x0
     6b0:	8c630000 	lw	v1,0(v1)
     6b4:	10600005 	beqz	v1,6cc <e1000_remove+0x84>
     6b8:	00000000 	nop
        e1000_remove_proc_dev(adapter->netdev);
     6bc:	3c020000 	lui	v0,0x0
     6c0:	24420000 	addiu	v0,v0,0
     6c4:	0040f809 	jalr	v0
     6c8:	8e040148 	lw	a0,328(s0)
#endif

    /* remove from the adapter list */

    if(e1000_adapter_list == adapter)
     6cc:	3c020000 	lui	v0,0x0
     6d0:	8c420000 	lw	v0,0(v0)
     6d4:	54500005 	bnel	v0,s0,6ec <e1000_remove+0xa4>
     6d8:	8e030000 	lw	v1,0(s0)
        e1000_adapter_list = adapter->next;
     6dc:	8e020000 	lw	v0,0(s0)
     6e0:	3c010000 	lui	at,0x0
     6e4:	ac220000 	sw	v0,0(at)
    if(adapter->next != NULL)
     6e8:	8e030000 	lw	v1,0(s0)
     6ec:	50600004 	beqzl	v1,700 <e1000_remove+0xb8>
     6f0:	8e030004 	lw	v1,4(s0)
        adapter->next->prev = adapter->prev;
     6f4:	8e020004 	lw	v0,4(s0)
     6f8:	ac620004 	sw	v0,4(v1)
    if(adapter->prev != NULL)
     6fc:	8e030004 	lw	v1,4(s0)
     700:	50600004 	beqzl	v1,714 <e1000_remove+0xcc>
     704:	8e440000 	lw	a0,0(s2)
        adapter->prev->next = adapter->next;
     708:	8e020000 	lw	v0,0(s0)
     70c:	ac620000 	sw	v0,0(v1)

    /* free system resources */

#ifdef IANS
    if(adapter->iANSdata != NULL)
        kfree(adapter->iANSdata);
#endif

    if(adapter->shared.hw_addr != NULL) {
     710:	8e440000 	lw	a0,0(s2)
     714:	10800014 	beqz	a0,768 <e1000_remove+0x120>
     718:	00000000 	nop
        iounmap((void *) adapter->shared.hw_addr);
     71c:	3c020000 	lui	v0,0x0
     720:	24420000 	addiu	v0,v0,0
     724:	0040f809 	jalr	v0
     728:	00000000 	nop
        release_mem_region(pci_resource_start(pdev, BAR_0),
     72c:	8e230064 	lw	v1,100(s1)
     730:	14600005 	bnez	v1,748 <e1000_remove+0x100>
     734:	8e220068 	lw	v0,104(s1)
     738:	10400005 	beqz	v0,750 <e1000_remove+0x108>
     73c:	00003021 	move	a2,zero
     740:	080001d3 	j	74c <e1000_remove+0x104>
     744:	00431023 	subu	v0,v0,v1
     748:	00431023 	subu	v0,v0,v1
     74c:	24460001 	addiu	a2,v0,1
     750:	3c040000 	lui	a0,0x0
     754:	24840000 	addiu	a0,a0,0
     758:	3c020000 	lui	v0,0x0
     75c:	24420000 	addiu	v0,v0,0
     760:	0040f809 	jalr	v0
     764:	8e250064 	lw	a1,100(s1)
                           pci_resource_len(pdev, BAR_0));
    }

    /* free the net_device _and_ struct e1000_adapter memory */

    kfree(netdev);
     768:	3c020000 	lui	v0,0x0
     76c:	24420000 	addiu	v0,v0,0
     770:	0040f809 	jalr	v0
     774:	02602021 	move	a0,s3

    return;
}
     778:	8fbf0020 	lw	ra,32(sp)
     77c:	8fb3001c 	lw	s3,28(sp)
     780:	8fb20018 	lw	s2,24(sp)
     784:	8fb10014 	lw	s1,20(sp)
     788:	8fb00010 	lw	s0,16(sp)
     78c:	03e00008 	jr	ra
     790:	27bd0028 	addiu	sp,sp,40

00000794 <e1000_check_options>:
     794:	27bdffd8 	addiu	sp,sp,-40
     798:	afb10014 	sw	s1,20(sp)
     79c:	afbf0020 	sw	ra,32(sp)
     7a0:	afb3001c 	sw	s3,28(sp)
     7a4:	afb20018 	sw	s2,24(sp)
     7a8:	afb00010 	sw	s0,16(sp)
     7ac:	00808821 	move	s1,a0

/**
 * e1000_check_options - Range Checking for Command Line Parameters
 * @adapter: board private structure
 *
 * This routine checks all command line paramters for valid user
 * input.  If an invalid value is given, or if no user specified
 * value exists, a default value is used.  The final value is stored
 * in a variable in the Adapter structure.
 **/

static void
e1000_check_options(struct e1000_adapter *adapter)
{
    int board = adapter->bd_number;
     7b0:	8e250090 	lw	a1,144(s1)

    if(board >= E1000_MAX_NIC) {
     7b4:	28a20008 	slti	v0,a1,8
     7b8:	5440000d 	bnezl	v0,7f0 <e1000_check_options+0x5c>
     7bc:	00059080 	sll	s2,a1,0x2
        printk("Warning: no configuration for board #%i\n", board);
     7c0:	3c040000 	lui	a0,0x0
     7c4:	248402c4 	addiu	a0,a0,708
     7c8:	3c130000 	lui	s3,0x0
     7cc:	26730000 	addiu	s3,s3,0
     7d0:	0260f809 	jalr	s3
     7d4:	00000000 	nop
        printk("Using defaults for all values\n");
     7d8:	3c040000 	lui	a0,0x0
     7dc:	248402f0 	addiu	a0,a0,752
     7e0:	0260f809 	jalr	s3
     7e4:	00000000 	nop
        board = E1000_MAX_NIC;
     7e8:	24050008 	li	a1,8
    }

    E1000_DBG("e1000_check_options\n");

    /* Transmit Descriptor Count */

    if(TxDescriptors[board] == OPTION_UNSET) {
     7ec:	00059080 	sll	s2,a1,0x2
     7f0:	3c030000 	lui	v1,0x0
     7f4:	246302b0 	addiu	v1,v1,688
     7f8:	00721821 	addu	v1,v1,s2
     7fc:	8c650000 	lw	a1,0(v1)
     800:	2402ffff 	li	v0,-1
     804:	14a20005 	bne	a1,v0,81c <e1000_check_options+0x88>
     808:	24a2ffb0 	addiu	v0,a1,-80
        adapter->tx_ring.count = DEFAULT_TXD;
     80c:	24020100 	li	v0,256
     810:	ae2200f0 	sw	v0,240(s1)
        TxDescriptors[board] = DEFAULT_TXD;
    } else
     814:	08000234 	j	8d0 <e1000_check_options+0x13c>
     818:	ac620000 	sw	v0,0(v1)
        if(((TxDescriptors[board] > MAX_TXD) ||
     81c:	2c4200b1 	sltiu	v0,v0,177
     820:	1440000d 	bnez	v0,858 <e1000_check_options+0xc4>
     824:	00000000 	nop
     828:	8e22000c 	lw	v0,12(s1)
     82c:	2c420003 	sltiu	v0,v0,3
     830:	10400009 	beqz	v0,858 <e1000_check_options+0xc4>
     834:	00000000 	nop
            (TxDescriptors[board] < MIN_TXD)) &&
           (adapter->shared.mac_type <= e1000_82543)) {
        printk("Invalid TxDescriptors specified (%i), using default %i\n",
     838:	3c040000 	lui	a0,0x0
     83c:	24840310 	addiu	a0,a0,784
     840:	3c130000 	lui	s3,0x0
     844:	26730000 	addiu	s3,s3,0
     848:	0260f809 	jalr	s3
     84c:	24060100 	li	a2,256
               TxDescriptors[board], DEFAULT_TXD);
        adapter->tx_ring.count = DEFAULT_TXD;
    } else
     850:	08000233 	j	8cc <e1000_check_options+0x138>
     854:	24030100 	li	v1,256
        if(((TxDescriptors[board] > MAX_82544_TXD) ||
     858:	3c050000 	lui	a1,0x0
     85c:	00b22821 	addu	a1,a1,s2
     860:	8ca502b0 	lw	a1,688(a1)
     864:	24a2ffb0 	addiu	v0,a1,-80
     868:	2c420fb1 	sltiu	v0,v0,4017
     86c:	1440000d 	bnez	v0,8a4 <e1000_check_options+0x110>
     870:	00000000 	nop
     874:	8e22000c 	lw	v0,12(s1)
     878:	2c420003 	sltiu	v0,v0,3
     87c:	14400009 	bnez	v0,8a4 <e1000_check_options+0x110>
     880:	00000000 	nop
            (TxDescriptors[board] < MIN_TXD)) &&
           (adapter->shared.mac_type > e1000_82543)) {
        printk("Invalid TxDescriptors specified (%i), using default %i\n",
     884:	3c040000 	lui	a0,0x0
     888:	24840310 	addiu	a0,a0,784
     88c:	3c130000 	lui	s3,0x0
     890:	26730000 	addiu	s3,s3,0
     894:	0260f809 	jalr	s3
     898:	24060100 	li	a2,256
               TxDescriptors[board], DEFAULT_TXD);
        adapter->tx_ring.count = DEFAULT_TXD;
    } else {
     89c:	08000233 	j	8cc <e1000_check_options+0x138>
     8a0:	24030100 	li	v1,256
        printk("Using specified value of %i TxDescriptors\n",
     8a4:	3c100000 	lui	s0,0x0
     8a8:	261002b0 	addiu	s0,s0,688
     8ac:	02128021 	addu	s0,s0,s2
     8b0:	3c040000 	lui	a0,0x0
     8b4:	24840348 	addiu	a0,a0,840
     8b8:	3c130000 	lui	s3,0x0
     8bc:	26730000 	addiu	s3,s3,0
     8c0:	0260f809 	jalr	s3
     8c4:	8e050000 	lw	a1,0(s0)
               TxDescriptors[board]);
        adapter->tx_ring.count = TxDescriptors[board];
     8c8:	8e030000 	lw	v1,0(s0)
     8cc:	ae2300f0 	sw	v1,240(s1)
    }

    /* tx_ring.count must be a multiple of 8 */

    adapter->tx_ring.count = E1000_ROUNDUP2(adapter->tx_ring.count,
     8d0:	8e2200f0 	lw	v0,240(s1)
     8d4:	2403fff8 	li	v1,-8
                                            REQ_TX_DESCRIPTOR_MULTIPLE);

    /* Receive Descriptor Count */

    if(RxDescriptors[board] == OPTION_UNSET) {
     8d8:	3c040000 	lui	a0,0x0
     8dc:	248402d4 	addiu	a0,a0,724
     8e0:	00922021 	addu	a0,a0,s2
     8e4:	24420007 	addiu	v0,v0,7
     8e8:	00431024 	and	v0,v0,v1
     8ec:	ae2200f0 	sw	v0,240(s1)
     8f0:	8c850000 	lw	a1,0(a0)
     8f4:	2402ffff 	li	v0,-1
     8f8:	14a20005 	bne	a1,v0,910 <e1000_check_options+0x17c>
     8fc:	24a2ffb0 	addiu	v0,a1,-80
        adapter->rx_ring.count = DEFAULT_RXD;
     900:	24020100 	li	v0,256
     904:	ae22011c 	sw	v0,284(s1)
        RxDescriptors[board] = DEFAULT_RXD;
    } else
     908:	08000271 	j	9c4 <e1000_check_options+0x230>
     90c:	ac820000 	sw	v0,0(a0)
        if(((RxDescriptors[board] > MAX_RXD) ||
     910:	2c4200b1 	sltiu	v0,v0,177
     914:	1440000d 	bnez	v0,94c <e1000_check_options+0x1b8>
     918:	00000000 	nop
     91c:	8e22000c 	lw	v0,12(s1)
     920:	2c420003 	sltiu	v0,v0,3
     924:	10400009 	beqz	v0,94c <e1000_check_options+0x1b8>
     928:	00000000 	nop
            (RxDescriptors[board] < MIN_RXD)) &&
           (adapter->shared.mac_type <= e1000_82543)) {
        printk("Invalid RxDescriptors specified (%i), using default %i\n",
     92c:	3c040000 	lui	a0,0x0
     930:	24840374 	addiu	a0,a0,884
     934:	3c130000 	lui	s3,0x0
     938:	26730000 	addiu	s3,s3,0
     93c:	0260f809 	jalr	s3
     940:	24060100 	li	a2,256
               RxDescriptors[board], DEFAULT_RXD);
        adapter->rx_ring.count = DEFAULT_RXD;
    } else
     944:	08000270 	j	9c0 <e1000_check_options+0x22c>
     948:	24030100 	li	v1,256
        if(((RxDescriptors[board] > MAX_82544_RXD) ||
     94c:	3c050000 	lui	a1,0x0
     950:	00b22821 	addu	a1,a1,s2
     954:	8ca502d4 	lw	a1,724(a1)
     958:	24a2ffb0 	addiu	v0,a1,-80
     95c:	2c420fb1 	sltiu	v0,v0,4017
     960:	1440000d 	bnez	v0,998 <e1000_check_options+0x204>
     964:	00000000 	nop
     968:	8e22000c 	lw	v0,12(s1)
     96c:	2c420003 	sltiu	v0,v0,3
     970:	14400009 	bnez	v0,998 <e1000_check_options+0x204>
     974:	00000000 	nop
            (RxDescriptors[board] < MIN_RXD)) &&
           (adapter->shared.mac_type > e1000_82543)) {
        printk("Invalid RxDescriptors specified (%i), using default %i\n",
     978:	3c040000 	lui	a0,0x0
     97c:	24840374 	addiu	a0,a0,884
     980:	3c130000 	lui	s3,0x0
     984:	26730000 	addiu	s3,s3,0
     988:	0260f809 	jalr	s3
     98c:	24060100 	li	a2,256
               RxDescriptors[board], DEFAULT_RXD);
        adapter->rx_ring.count = DEFAULT_RXD;
    } else {
     990:	08000270 	j	9c0 <e1000_check_options+0x22c>
     994:	24030100 	li	v1,256
        printk("Using specified value of %i RxDescriptors\n",
     998:	3c100000 	lui	s0,0x0
     99c:	261002d4 	addiu	s0,s0,724
     9a0:	02128021 	addu	s0,s0,s2
     9a4:	3c040000 	lui	a0,0x0
     9a8:	248403ac 	addiu	a0,a0,940
     9ac:	3c130000 	lui	s3,0x0
     9b0:	26730000 	addiu	s3,s3,0
     9b4:	0260f809 	jalr	s3
     9b8:	8e050000 	lw	a1,0(s0)
               RxDescriptors[board]);
        adapter->rx_ring.count = RxDescriptors[board];
     9bc:	8e030000 	lw	v1,0(s0)
     9c0:	ae23011c 	sw	v1,284(s1)
    }

    /* rx_ring.count must be a multiple of 8 */

    adapter->rx_ring.count =
     9c4:	8e22011c 	lw	v0,284(s1)
     9c8:	2403fff8 	li	v1,-8
        E1000_ROUNDUP2(adapter->rx_ring.count, REQ_RX_DESCRIPTOR_MULTIPLE);

    /* Receive Checksum Offload Enable */

    if(XsumRX[board] == OPTION_UNSET) {
     9cc:	3c040000 	lui	a0,0x0
     9d0:	24840388 	addiu	a0,a0,904
     9d4:	00922021 	addu	a0,a0,s2
     9d8:	24420007 	addiu	v0,v0,7
     9dc:	00431024 	and	v0,v0,v1
     9e0:	ae22011c 	sw	v0,284(s1)
     9e4:	8c850000 	lw	a1,0(a0)
     9e8:	2402ffff 	li	v0,-1
     9ec:	14a20005 	bne	a1,v0,a04 <e1000_check_options+0x270>
     9f0:	2ca20002 	sltiu	v0,a1,2
        adapter->RxChecksum = XSUMRX_DEFAULT;
     9f4:	24020001 	li	v0,1
     9f8:	ae2201b0 	sw	v0,432(s1)
        XsumRX[board] = XSUMRX_DEFAULT;
    } else if((XsumRX[board] != OPTION_ENABLED) &&
     9fc:	0800029b 	j	a6c <e1000_check_options+0x2d8>
     a00:	ac820000 	sw	v0,0(a0)
     a04:	54400009 	bnezl	v0,a2c <e1000_check_options+0x298>
     a08:	24020001 	li	v0,1
              (XsumRX[board] != OPTION_DISABLED)) {
        printk("Invalid XsumRX specified (%i), using default of %i\n",
     a0c:	3c040000 	lui	a0,0x0
     a10:	248403d8 	addiu	a0,a0,984
     a14:	3c130000 	lui	s3,0x0
     a18:	26730000 	addiu	s3,s3,0
     a1c:	0260f809 	jalr	s3
     a20:	24060001 	li	a2,1
               XsumRX[board], XSUMRX_DEFAULT);
        adapter->RxChecksum = XSUMRX_DEFAULT;
    } else {
     a24:	0800029a 	j	a68 <e1000_check_options+0x2d4>
     a28:	24030001 	li	v1,1
        printk("Receive Checksum Offload %s\n",
     a2c:	3c030000 	lui	v1,0x0
     a30:	2463042c 	addiu	v1,v1,1068
     a34:	10a20003 	beq	a1,v0,a44 <e1000_check_options+0x2b0>
     a38:	00000000 	nop
     a3c:	3c030000 	lui	v1,0x0
     a40:	24630434 	addiu	v1,v1,1076
     a44:	3c040000 	lui	a0,0x0
     a48:	2484040c 	addiu	a0,a0,1036
     a4c:	3c130000 	lui	s3,0x0
     a50:	26730000 	addiu	s3,s3,0
     a54:	0260f809 	jalr	s3
     a58:	00602821 	move	a1,v1
               XsumRX[board] == OPTION_ENABLED ? "Enabled" : "Disabled");
        adapter->RxChecksum = XsumRX[board];
     a5c:	3c030000 	lui	v1,0x0
     a60:	00721821 	addu	v1,v1,s2
     a64:	8c630388 	lw	v1,904(v1)
     a68:	ae2301b0 	sw	v1,432(s1)
    }

    /* Flow Control */

    if(FlowControl[board] == OPTION_UNSET) {
     a6c:	3c030000 	lui	v1,0x0
     a70:	24630364 	addiu	v1,v1,868
     a74:	00721821 	addu	v1,v1,s2
     a78:	8c650000 	lw	a1,0(v1)
     a7c:	2402ffff 	li	v0,-1
     a80:	14a20005 	bne	a1,v0,a98 <e1000_check_options+0x304>
     a84:	2ca20004 	sltiu	v0,a1,4
        adapter->shared.fc = e1000_fc_default;
     a88:	240200ff 	li	v0,255
     a8c:	ae220018 	sw	v0,24(s1)
        FlowControl[board] = e1000_fc_default;
    } else if((FlowControl[board] > e1000_fc_full) ||
     a90:	080002dc 	j	b70 <e1000_check_options+0x3dc>
     a94:	ac620000 	sw	v0,0(v1)
     a98:	1440000a 	bnez	v0,ac4 <e1000_check_options+0x330>
     a9c:	24020002 	li	v0,2
              (FlowControl[board] < e1000_fc_none)) {
        printk("Invalid FlowControl specified (%i), "
     aa0:	3c040000 	lui	a0,0x0
     aa4:	24840440 	addiu	a0,a0,1088
     aa8:	3c020000 	lui	v0,0x0
     aac:	24420000 	addiu	v0,v0,0
     ab0:	0040f809 	jalr	v0
     ab4:	00000000 	nop
               "reading default settings from the EEPROM\n",
               FlowControl[board]);
        adapter->shared.fc = e1000_fc_default;
     ab8:	240300ff 	li	v1,255
    } else {
     abc:	080002dc 	j	b70 <e1000_check_options+0x3dc>
     ac0:	ae230018 	sw	v1,24(s1)
        adapter->shared.fc = FlowControl[board];
        switch (adapter->shared.fc) {
     ac4:	10a20018 	beq	a1,v0,b28 <e1000_check_options+0x394>
     ac8:	ae250018 	sw	a1,24(s1)
     acc:	2ca20003 	sltiu	v0,a1,3
     ad0:	10400007 	beqz	v0,af0 <e1000_check_options+0x35c>
     ad4:	24020003 	li	v0,3
     ad8:	10a0000b 	beqz	a1,b08 <e1000_check_options+0x374>
     adc:	24020001 	li	v0,1
     ae0:	10a2000d 	beq	a1,v0,b18 <e1000_check_options+0x384>
     ae4:	00000000 	nop
     ae8:	080002dc 	j	b70 <e1000_check_options+0x3dc>
     aec:	00000000 	nop
     af0:	10a20015 	beq	a1,v0,b48 <e1000_check_options+0x3b4>
     af4:	240200ff 	li	v0,255
     af8:	10a20019 	beq	a1,v0,b60 <e1000_check_options+0x3cc>
     afc:	00000000 	nop
     b00:	080002dc 	j	b70 <e1000_check_options+0x3dc>
     b04:	00000000 	nop
        case e1000_fc_none:
            printk("Flow Control Disabled\n");
     b08:	3c040000 	lui	a0,0x0
     b0c:	24840490 	addiu	a0,a0,1168
            break;
     b10:	080002cc 	j	b30 <e1000_check_options+0x39c>
     b14:	00000000 	nop
        case e1000_fc_rx_pause:
            printk("Flow Control Receive Only\n");
     b18:	3c040000 	lui	a0,0x0
     b1c:	248404a8 	addiu	a0,a0,1192
            break;
     b20:	080002cc 	j	b30 <e1000_check_options+0x39c>
     b24:	00000000 	nop
        case e1000_fc_tx_pause:
            printk("Flow Control Transmit Only\n");
     b28:	3c040000 	lui	a0,0x0
     b2c:	248404c4 	addiu	a0,a0,1220
     b30:	3c020000 	lui	v0,0x0
     b34:	24420000 	addiu	v0,v0,0
     b38:	0040f809 	jalr	v0
     b3c:	00000000 	nop
            break;
     b40:	080002dc 	j	b70 <e1000_check_options+0x3dc>
     b44:	00000000 	nop
        case e1000_fc_full:
            printk("Flow Control Enabled\n");
     b48:	3c040000 	lui	a0,0x0
     b4c:	248404e0 	addiu	a0,a0,1248
     b50:	3c130000 	lui	s3,0x0
     b54:	26730000 	addiu	s3,s3,0
     b58:	0260f809 	jalr	s3
     b5c:	00000000 	nop
        case e1000_fc_default:
            printk("Flow Control Hardware Default\n");
     b60:	3c040000 	lui	a0,0x0
     b64:	248404f8 	addiu	a0,a0,1272
     b68:	0260f809 	jalr	s3
     b6c:	00000000 	nop
        }
    }

    /* Transmit Interrupt Delay */

    if(TxIntDelay[board] == OPTION_UNSET) {
     b70:	3c100000 	lui	s0,0x0
     b74:	261003ac 	addiu	s0,s0,940
     b78:	02128021 	addu	s0,s0,s2
     b7c:	8e050000 	lw	a1,0(s0)
     b80:	2402ffff 	li	v0,-1
     b84:	14a20005 	bne	a1,v0,b9c <e1000_check_options+0x408>
     b88:	3402ffff 	li	v0,0xffff
        adapter->tx_int_delay = DEFAULT_TIDV;
     b8c:	24020040 	li	v0,64
     b90:	ae220104 	sw	v0,260(s1)
        TxIntDelay[board] = DEFAULT_TIDV;
    } else if((TxIntDelay[board] > MAX_TIDV) || (TxIntDelay[board] < MIN_TIDV)) {
     b94:	080002fa 	j	be8 <e1000_check_options+0x454>
     b98:	ae020000 	sw	v0,0(s0)
     b9c:	0045102b 	sltu	v0,v0,a1
     ba0:	10400009 	beqz	v0,bc8 <e1000_check_options+0x434>
     ba4:	00000000 	nop
        printk("Invalid TxIntDelay specified (%i), using default %i\n",
     ba8:	3c040000 	lui	a0,0x0
     bac:	24840518 	addiu	a0,a0,1304
     bb0:	3c020000 	lui	v0,0x0
     bb4:	24420000 	addiu	v0,v0,0
     bb8:	0040f809 	jalr	v0
     bbc:	24060040 	li	a2,64
               TxIntDelay[board], DEFAULT_TIDV);
        adapter->tx_int_delay = DEFAULT_TIDV;
    } else {
     bc0:	080002f9 	j	be4 <e1000_check_options+0x450>
     bc4:	24030040 	li	v1,64
        printk("Using specified TxIntDelay of %i\n", TxIntDelay[board]);
     bc8:	3c040000 	lui	a0,0x0
     bcc:	24840550 	addiu	a0,a0,1360
     bd0:	3c020000 	lui	v0,0x0
     bd4:	24420000 	addiu	v0,v0,0
     bd8:	0040f809 	jalr	v0
     bdc:	00000000 	nop
        adapter->tx_int_delay = TxIntDelay[board];
     be0:	8e030000 	lw	v1,0(s0)
     be4:	ae230104 	sw	v1,260(s1)
    }

    /* Receive Interrupt Delay */

    if(RxIntDelay[board] == OPTION_UNSET) {
     be8:	3c100000 	lui	s0,0x0
     bec:	261003d0 	addiu	s0,s0,976
     bf0:	02128021 	addu	s0,s0,s2
     bf4:	8e050000 	lw	a1,0(s0)
     bf8:	2402ffff 	li	v0,-1
     bfc:	14a20005 	bne	a1,v0,c14 <e1000_check_options+0x480>
     c00:	3402ffff 	li	v0,0xffff
        adapter->rx_int_delay = DEFAULT_RIDV;
     c04:	24020040 	li	v0,64
     c08:	ae220130 	sw	v0,304(s1)
        RxIntDelay[board] = DEFAULT_RIDV;
    } else if((RxIntDelay[board] > MAX_RIDV) || (RxIntDelay[board] < MIN_RIDV)) {
     c0c:	08000318 	j	c60 <e1000_check_options+0x4cc>
     c10:	ae020000 	sw	v0,0(s0)
     c14:	0045102b 	sltu	v0,v0,a1
     c18:	10400009 	beqz	v0,c40 <e1000_check_options+0x4ac>
     c1c:	00000000 	nop
        printk("Invalid RxIntDelay specified (%i), using default %i\n",
     c20:	3c040000 	lui	a0,0x0
     c24:	24840574 	addiu	a0,a0,1396
     c28:	3c020000 	lui	v0,0x0
     c2c:	24420000 	addiu	v0,v0,0
     c30:	0040f809 	jalr	v0
     c34:	24060040 	li	a2,64
               RxIntDelay[board], DEFAULT_RIDV);
        adapter->rx_int_delay = DEFAULT_RIDV;
    } else {
     c38:	08000317 	j	c5c <e1000_check_options+0x4c8>
     c3c:	24030040 	li	v1,64
        printk("Using specified RxIntDelay of %i\n", RxIntDelay[board]);
     c40:	3c040000 	lui	a0,0x0
     c44:	248405ac 	addiu	a0,a0,1452
     c48:	3c020000 	lui	v0,0x0
     c4c:	24420000 	addiu	v0,v0,0
     c50:	0040f809 	jalr	v0
     c54:	00000000 	nop
        adapter->rx_int_delay = RxIntDelay[board];
     c58:	8e030000 	lw	v1,0(s0)
     c5c:	ae230130 	sw	v1,304(s1)
    }

    if(adapter->shared.media_type == e1000_media_type_copper) {
     c60:	8e330010 	lw	s3,16(s1)
     c64:	16600038 	bnez	s3,d48 <e1000_check_options+0x5b4>
     c68:	2402ffff 	li	v0,-1
        /* MDI/MDI-X Support */

        if(MdiX[board] == OPTION_UNSET) {
     c6c:	3c100000 	lui	s0,0x0
     c70:	261003f4 	addiu	s0,s0,1012
     c74:	02128021 	addu	s0,s0,s2
     c78:	8e050000 	lw	a1,0(s0)
     c7c:	14a20004 	bne	a1,v0,c90 <e1000_check_options+0x4fc>
     c80:	2ca20004 	sltiu	v0,a1,4
            adapter->shared.mdix = DEFAULT_MDIX;
     c84:	a2200079 	sb	zero,121(s1)
            MdiX[board] = DEFAULT_MDIX;
        } else if((MdiX[board] > MAX_MDIX) || (MdiX[board] < MIN_MDIX)) {
     c88:	08000336 	j	cd8 <e1000_check_options+0x544>
     c8c:	ae000000 	sw	zero,0(s0)
     c90:	14400009 	bnez	v0,cb8 <e1000_check_options+0x524>
     c94:	00000000 	nop
            printk("Invalid MDI/MDI-X specified (%i), using default %i\n",
     c98:	3c040000 	lui	a0,0x0
     c9c:	248405d0 	addiu	a0,a0,1488
     ca0:	3c020000 	lui	v0,0x0
     ca4:	24420000 	addiu	v0,v0,0
     ca8:	0040f809 	jalr	v0
     cac:	00003021 	move	a2,zero
                   MdiX[board], DEFAULT_MDIX);
            adapter->shared.mdix = DEFAULT_MDIX;
        } else {
     cb0:	08000336 	j	cd8 <e1000_check_options+0x544>
     cb4:	a2200079 	sb	zero,121(s1)
            printk("Using specified MDI/MDI-X of %i\n", MdiX[board]);
     cb8:	3c040000 	lui	a0,0x0
     cbc:	24840604 	addiu	a0,a0,1540
     cc0:	3c020000 	lui	v0,0x0
     cc4:	24420000 	addiu	v0,v0,0
     cc8:	0040f809 	jalr	v0
     ccc:	00000000 	nop
            adapter->shared.mdix = MdiX[board];
     cd0:	92030003 	lbu	v1,3(s0)
     cd4:	a2230079 	sb	v1,121(s1)
        }

        /* Automatic Correction for Reverse Cable Polarity */

        if(DisablePolarityCorrection[board] == OPTION_UNSET) {
     cd8:	3c100000 	lui	s0,0x0
     cdc:	26100418 	addiu	s0,s0,1048
     ce0:	02128021 	addu	s0,s0,s2
     ce4:	8e050000 	lw	a1,0(s0)
     ce8:	2402ffff 	li	v0,-1
     cec:	14a20004 	bne	a1,v0,d00 <e1000_check_options+0x56c>
     cf0:	2ca20002 	sltiu	v0,a1,2
            adapter->shared.disable_polarity_correction = OPTION_DISABLED;
     cf4:	ae200054 	sw	zero,84(s1)
            DisablePolarityCorrection[board] = OPTION_DISABLED;
        } else if((DisablePolarityCorrection[board] != OPTION_ENABLED) &&
     cf8:	08000352 	j	d48 <e1000_check_options+0x5b4>
     cfc:	ae000000 	sw	zero,0(s0)
     d00:	14400009 	bnez	v0,d28 <e1000_check_options+0x594>
     d04:	00000000 	nop
                  (DisablePolarityCorrection[board] != OPTION_DISABLED)) {
            printk("Invalid polarity correction specified (%i),"
     d08:	3c040000 	lui	a0,0x0
     d0c:	24840628 	addiu	a0,a0,1576
     d10:	3c020000 	lui	v0,0x0
     d14:	24420000 	addiu	v0,v0,0
     d18:	0040f809 	jalr	v0
     d1c:	00003021 	move	a2,zero
                   "    using default %i\n", DisablePolarityCorrection[board],
                   OPTION_DISABLED);
            adapter->shared.disable_polarity_correction = OPTION_DISABLED;
        } else {
     d20:	08000352 	j	d48 <e1000_check_options+0x5b4>
     d24:	ae200054 	sw	zero,84(s1)
            printk("Using specified polarity correction of %i\n",
     d28:	3c040000 	lui	a0,0x0
     d2c:	2484066c 	addiu	a0,a0,1644
     d30:	3c020000 	lui	v0,0x0
     d34:	24420000 	addiu	v0,v0,0
     d38:	0040f809 	jalr	v0
     d3c:	00000000 	nop
                   DisablePolarityCorrection[board]);
            adapter->shared.disable_polarity_correction =
     d40:	8e030000 	lw	v1,0(s0)
     d44:	ae230054 	sw	v1,84(s1)
                DisablePolarityCorrection[board];
        }
    }

    /* Speed, Duplex, and AutoNeg */

    switch (adapter->shared.media_type) {
     d48:	12600009 	beqz	s3,d70 <e1000_check_options+0x5dc>
     d4c:	24020001 	li	v0,1
     d50:	1662000d 	bne	s3,v0,d88 <e1000_check_options+0x5f4>
     d54:	00000000 	nop

    case e1000_media_type_fiber:
        e1000_check_fiber_options(adapter);
     d58:	3c020000 	lui	v0,0x0
     d5c:	24420dbc 	addiu	v0,v0,3516
     d60:	0040f809 	jalr	v0
     d64:	02202021 	move	a0,s1
        break;
     d68:	08000369 	j	da4 <e1000_check_options+0x610>
     d6c:	8fbf0020 	lw	ra,32(sp)

    case e1000_media_type_copper:
        e1000_check_copper_options(adapter);
     d70:	3c020000 	lui	v0,0x0
     d74:	24420ecc 	addiu	v0,v0,3788
     d78:	0040f809 	jalr	v0
     d7c:	02202021 	move	a0,s1
        break;
     d80:	08000369 	j	da4 <e1000_check_options+0x610>
     d84:	8fbf0020 	lw	ra,32(sp)

    default:
        printk("Unknown Media Type\n");
     d88:	3c040000 	lui	a0,0x0
     d8c:	24840698 	addiu	a0,a0,1688
     d90:	3c020000 	lui	v0,0x0
     d94:	24420000 	addiu	v0,v0,0
     d98:	0040f809 	jalr	v0
     d9c:	00000000 	nop
        break;
    }

    return;
}
     da0:	8fbf0020 	lw	ra,32(sp)
     da4:	8fb3001c 	lw	s3,28(sp)
     da8:	8fb20018 	lw	s2,24(sp)
     dac:	8fb10014 	lw	s1,20(sp)
     db0:	8fb00010 	lw	s0,16(sp)
     db4:	03e00008 	jr	ra
     db8:	27bd0028 	addiu	sp,sp,40

00000dbc <e1000_check_fiber_options>:
     dbc:	27bdffd8 	addiu	sp,sp,-40
     dc0:	afb40020 	sw	s4,32(sp)
     dc4:	afb3001c 	sw	s3,28(sp)
     dc8:	afb20018 	sw	s2,24(sp)
     dcc:	afb10014 	sw	s1,20(sp)
     dd0:	afbf0024 	sw	ra,36(sp)
     dd4:	afb00010 	sw	s0,16(sp)

/**
 * e1000_check_fiber_options - Range Checking for Link Options, Fiber Version
 * @adapter: board private structure
 *
 * Handles speed and duplex options on fiber based adapters
 **/

static void
e1000_check_fiber_options(struct e1000_adapter *adapter)
{
    int board =
     dd8:	8c830090 	lw	v1,144(a0)
        adapter->bd_number > E1000_MAX_NIC ? E1000_MAX_NIC : adapter->bd_number;

    E1000_DBG("CheckSpeedDuplexFiber\n");

    /* Speed, Duplex, and AutoNeg are not valid on fiber NICs */

    if((Speed[board] != OPTION_UNSET)) {
        Speed[board] = 0;
        printk("Warning: Speed not valid for fiber adapters\n");
     ddc:	3c020000 	lui	v0,0x0
     de0:	244206ac 	addiu	v0,v0,1708
     de4:	3c120000 	lui	s2,0x0
     de8:	26520000 	addiu	s2,s2,0
     dec:	00402021 	move	a0,v0
        printk("Speed Parameter Ignored\n");
    }
    if((Duplex[board] != OPTION_UNSET)) {
        Duplex[board] = 0;
        printk("Warning: Duplex not valid for fiber adapters\n");
     df0:	02409821 	move	s3,s2
     df4:	2c620009 	sltiu	v0,v1,9
        printk("Duplex Parameter Ignored\n");
    }
    if((AutoNeg[board] != OPTION_UNSET)) {
        AutoNeg[board] = AUTONEG_ADV_DEFAULT;
        printk("Warning: AutoNeg not valid for fiber adapters\n");
     df8:	0260a021 	move	s4,s3
     dfc:	14400002 	bnez	v0,e08 <e1000_check_fiber_options+0x4c>
     e00:	2411ffff 	li	s1,-1
     e04:	24030008 	li	v1,8
     e08:	00038080 	sll	s0,v1,0x2
     e0c:	3c030000 	lui	v1,0x0
     e10:	246302f8 	addiu	v1,v1,760
     e14:	00701821 	addu	v1,v1,s0
     e18:	8c620000 	lw	v0,0(v1)
     e1c:	10510007 	beq	v0,s1,e3c <e1000_check_fiber_options+0x80>
     e20:	00000000 	nop
     e24:	0240f809 	jalr	s2
     e28:	ac600000 	sw	zero,0(v1)
     e2c:	3c040000 	lui	a0,0x0
     e30:	248406dc 	addiu	a0,a0,1756
     e34:	0240f809 	jalr	s2
     e38:	00000000 	nop
     e3c:	3c030000 	lui	v1,0x0
     e40:	2463031c 	addiu	v1,v1,796
     e44:	00701821 	addu	v1,v1,s0
     e48:	8c620000 	lw	v0,0(v1)
     e4c:	3c040000 	lui	a0,0x0
     e50:	248406f8 	addiu	a0,a0,1784
     e54:	10510007 	beq	v0,s1,e74 <e1000_check_fiber_options+0xb8>
     e58:	00000000 	nop
     e5c:	0260f809 	jalr	s3
     e60:	ac600000 	sw	zero,0(v1)
     e64:	3c040000 	lui	a0,0x0
     e68:	24840728 	addiu	a0,a0,1832
     e6c:	0260f809 	jalr	s3
     e70:	00000000 	nop
     e74:	3c030000 	lui	v1,0x0
     e78:	24630340 	addiu	v1,v1,832
     e7c:	00701821 	addu	v1,v1,s0
     e80:	8c620000 	lw	v0,0(v1)
     e84:	3c040000 	lui	a0,0x0
     e88:	24840744 	addiu	a0,a0,1860
     e8c:	10510007 	beq	v0,s1,eac <e1000_check_fiber_options+0xf0>
     e90:	2402002f 	li	v0,47
     e94:	0280f809 	jalr	s4
     e98:	ac620000 	sw	v0,0(v1)
        printk("AutoNeg Parameter Ignored\n");
     e9c:	3c040000 	lui	a0,0x0
     ea0:	24840774 	addiu	a0,a0,1908
     ea4:	0280f809 	jalr	s4
     ea8:	00000000 	nop
    }

    return;
}
     eac:	8fbf0024 	lw	ra,36(sp)
     eb0:	8fb40020 	lw	s4,32(sp)
     eb4:	8fb3001c 	lw	s3,28(sp)
     eb8:	8fb20018 	lw	s2,24(sp)
     ebc:	8fb10014 	lw	s1,20(sp)
     ec0:	8fb00010 	lw	s0,16(sp)
     ec4:	03e00008 	jr	ra
     ec8:	27bd0028 	addiu	sp,sp,40

00000ecc <e1000_check_copper_options>:
     ecc:	27bdffd0 	addiu	sp,sp,-48
     ed0:	afb20018 	sw	s2,24(sp)
     ed4:	afbf0028 	sw	ra,40(sp)
     ed8:	afb50024 	sw	s5,36(sp)
     edc:	afb40020 	sw	s4,32(sp)
     ee0:	afb3001c 	sw	s3,28(sp)
     ee4:	afb10014 	sw	s1,20(sp)
     ee8:	afb00010 	sw	s0,16(sp)
     eec:	00809021 	move	s2,a0

/**
 * e1000_check_copper_options - Range Checking for Link Options, Copper Version
 * @adapter: board private structure
 *
 * Handles speed and duplex options on copper based adapters
 **/

static void
e1000_check_copper_options(struct e1000_adapter *adapter)
{
    int board =
     ef0:	8e430090 	lw	v1,144(s2)
     ef4:	2c620009 	sltiu	v0,v1,9
     ef8:	50400001 	beqzl	v0,f00 <e1000_check_copper_options+0x34>
     efc:	24030008 	li	v1,8
        adapter->bd_number > E1000_MAX_NIC ? E1000_MAX_NIC : adapter->bd_number;
    int speed, duplex;
    boolean_t all_default = TRUE;

    E1000_DBG("CheckSpeedDuplexCopper\n");

    /* User Specified Auto-negotiation Settings */

    if(AutoNeg[board] == OPTION_UNSET) {
     f00:	00038880 	sll	s1,v1,0x2
     f04:	3c040000 	lui	a0,0x0
     f08:	24840340 	addiu	a0,a0,832
     f0c:	00912021 	addu	a0,a0,s1
     f10:	8c850000 	lw	a1,0(a0)
     f14:	2402ffff 	li	v0,-1
     f18:	14a2000a 	bne	a1,v0,f44 <e1000_check_copper_options+0x78>
     f1c:	24140001 	li	s4,1

        adapter->shared.autoneg_advertised = AUTONEG_ADV_DEFAULT;
     f20:	2402002f 	li	v0,47
        AutoNeg[board] = AUTONEG_ADV_DEFAULT;
     f24:	2403002f 	li	v1,47
     f28:	a6420048 	sh	v0,72(s2)

    } else if((Speed[board] != 0 && Speed[board] != OPTION_UNSET) ||
     f2c:	3c130000 	lui	s3,0x0
     f30:	267302f8 	addiu	s3,s3,760
     f34:	3c150000 	lui	s5,0x0
     f38:	26b5031c 	addiu	s5,s5,796
     f3c:	08000463 	j	118c <e1000_check_copper_options+0x2c0>
     f40:	ac830000 	sw	v1,0(a0)
     f44:	3c020000 	lui	v0,0x0
     f48:	00511021 	addu	v0,v0,s1
     f4c:	8c4202f8 	lw	v0,760(v0)
     f50:	3c130000 	lui	s3,0x0
     f54:	267302f8 	addiu	s3,s3,760
     f58:	24420001 	addiu	v0,v0,1
     f5c:	2c420002 	sltiu	v0,v0,2
     f60:	1040000c 	beqz	v0,f94 <e1000_check_copper_options+0xc8>
     f64:	00000000 	nop
     f68:	3c020000 	lui	v0,0x0
     f6c:	00511021 	addu	v0,v0,s1
     f70:	8c42031c 	lw	v0,796(v0)
     f74:	3c150000 	lui	s5,0x0
     f78:	26b5031c 	addiu	s5,s5,796
     f7c:	24420001 	addiu	v0,v0,1
     f80:	2c420002 	sltiu	v0,v0,2
     f84:	14400012 	bnez	v0,fd0 <e1000_check_copper_options+0x104>
     f88:	2402ffd0 	li	v0,-48
     f8c:	080003e7 	j	f9c <e1000_check_copper_options+0xd0>
     f90:	00000000 	nop
     f94:	3c150000 	lui	s5,0x0
     f98:	26b5031c 	addiu	s5,s5,796
              (Duplex[board] != 0 && Duplex[board] != OPTION_UNSET)) {

        printk("Warning: AutoNeg specified along with Speed or Duplex\n");
     f9c:	3c040000 	lui	a0,0x0
     fa0:	24840790 	addiu	a0,a0,1936
     fa4:	3c100000 	lui	s0,0x0
     fa8:	26100000 	addiu	s0,s0,0
     fac:	0200f809 	jalr	s0
     fb0:	00000000 	nop
        printk("AutoNeg Parameter Ignored\n");
     fb4:	3c040000 	lui	a0,0x0
     fb8:	24840774 	addiu	a0,a0,1908
     fbc:	0200f809 	jalr	s0
     fc0:	00000000 	nop

        adapter->shared.autoneg_advertised = AUTONEG_ADV_DEFAULT;
     fc4:	2403002f 	li	v1,47

    } else {
     fc8:	08000463 	j	118c <e1000_check_copper_options+0x2c0>
     fcc:	a6430048 	sh	v1,72(s2)

        if(AutoNeg[board] & ~AUTONEG_ADV_MASK) {
     fd0:	00a21024 	and	v0,a1,v0
     fd4:	5040000a 	beqzl	v0,1000 <e1000_check_copper_options+0x134>
     fd8:	94820002 	lhu	v0,2(a0)

            printk("Invalid AutoNeg Specified (0x%X), Parameter Ignored\n",
     fdc:	3c040000 	lui	a0,0x0
     fe0:	248407c8 	addiu	a0,a0,1992
     fe4:	3c100000 	lui	s0,0x0
     fe8:	26100000 	addiu	s0,s0,0
     fec:	0200f809 	jalr	s0
     ff0:	00000000 	nop
                   AutoNeg[board]);

            adapter->shared.autoneg_advertised = AUTONEG_ADV_DEFAULT;
     ff4:	2403002f 	li	v1,47

        } else {
     ff8:	08000403 	j	100c <e1000_check_copper_options+0x140>
     ffc:	a6430048 	sh	v1,72(s2)

            adapter->shared.autoneg_advertised = AutoNeg[board];
    1000:	3c100000 	lui	s0,0x0
    1004:	26100000 	addiu	s0,s0,0
    1008:	a6420048 	sh	v0,72(s2)
        }

        printk("AutoNeg Advertising ");
    100c:	3c040000 	lui	a0,0x0
    1010:	24840800 	addiu	a0,a0,2048
    1014:	0200f809 	jalr	s0
    1018:	00000000 	nop
        if(adapter->shared.autoneg_advertised & ADVERTISE_1000_FULL) {
    101c:	96430048 	lhu	v1,72(s2)
    1020:	30620020 	andi	v0,v1,0x20
    1024:	5040000f 	beqzl	v0,1064 <e1000_check_copper_options+0x198>
    1028:	30620010 	andi	v0,v1,0x10
            printk("1000/FD");
    102c:	3c040000 	lui	a0,0x0
    1030:	24840818 	addiu	a0,a0,2072
    1034:	0200f809 	jalr	s0
    1038:	00000000 	nop
            if(adapter->shared.autoneg_advertised & (ADVERTISE_1000_FULL - 1))
    103c:	96430048 	lhu	v1,72(s2)
    1040:	3062001f 	andi	v0,v1,0x1f
    1044:	50400007 	beqzl	v0,1064 <e1000_check_copper_options+0x198>
    1048:	30620010 	andi	v0,v1,0x10
                printk(", ");
    104c:	3c040000 	lui	a0,0x0
    1050:	24840820 	addiu	a0,a0,2080
    1054:	0200f809 	jalr	s0
    1058:	00000000 	nop
    105c:	96430048 	lhu	v1,72(s2)
        }
        if(adapter->shared.autoneg_advertised & ADVERTISE_1000_HALF) {
    1060:	30620010 	andi	v0,v1,0x10
    1064:	5040000f 	beqzl	v0,10a4 <e1000_check_copper_options+0x1d8>
    1068:	30620008 	andi	v0,v1,0x8
            printk("1000/HD");
    106c:	3c040000 	lui	a0,0x0
    1070:	24840824 	addiu	a0,a0,2084
    1074:	0200f809 	jalr	s0
    1078:	00000000 	nop
            if(adapter->shared.autoneg_advertised & (ADVERTISE_1000_HALF - 1))
    107c:	96430048 	lhu	v1,72(s2)
    1080:	3062000f 	andi	v0,v1,0xf
    1084:	50400007 	beqzl	v0,10a4 <e1000_check_copper_options+0x1d8>
    1088:	30620008 	andi	v0,v1,0x8
                printk(", ");
    108c:	3c040000 	lui	a0,0x0
    1090:	24840820 	addiu	a0,a0,2080
    1094:	0200f809 	jalr	s0
    1098:	00000000 	nop
    109c:	96430048 	lhu	v1,72(s2)
        }
        if(adapter->shared.autoneg_advertised & ADVERTISE_100_FULL) {
    10a0:	30620008 	andi	v0,v1,0x8
    10a4:	5040000f 	beqzl	v0,10e4 <e1000_check_copper_options+0x218>
    10a8:	30620004 	andi	v0,v1,0x4
            printk("100/FD");
    10ac:	3c040000 	lui	a0,0x0
    10b0:	2484082c 	addiu	a0,a0,2092
    10b4:	0200f809 	jalr	s0
    10b8:	00000000 	nop
            if(adapter->shared.autoneg_advertised & (ADVERTISE_100_FULL - 1))
    10bc:	96430048 	lhu	v1,72(s2)
    10c0:	30620007 	andi	v0,v1,0x7
    10c4:	50400007 	beqzl	v0,10e4 <e1000_check_copper_options+0x218>
    10c8:	30620004 	andi	v0,v1,0x4
                printk(", ");
    10cc:	3c040000 	lui	a0,0x0
    10d0:	24840820 	addiu	a0,a0,2080
    10d4:	0200f809 	jalr	s0
    10d8:	00000000 	nop
    10dc:	96430048 	lhu	v1,72(s2)
        }
        if(adapter->shared.autoneg_advertised & ADVERTISE_100_HALF) {
    10e0:	30620004 	andi	v0,v1,0x4
    10e4:	5040000f 	beqzl	v0,1124 <e1000_check_copper_options+0x258>
    10e8:	30620002 	andi	v0,v1,0x2
            printk("100/HD");
    10ec:	3c040000 	lui	a0,0x0
    10f0:	24840834 	addiu	a0,a0,2100
    10f4:	0200f809 	jalr	s0
    10f8:	00000000 	nop
            if(adapter->shared.autoneg_advertised & (ADVERTISE_100_HALF - 1))
    10fc:	96430048 	lhu	v1,72(s2)
    1100:	30620003 	andi	v0,v1,0x3
    1104:	50400007 	beqzl	v0,1124 <e1000_check_copper_options+0x258>
    1108:	30620002 	andi	v0,v1,0x2
                printk(", ");
    110c:	3c040000 	lui	a0,0x0
    1110:	24840820 	addiu	a0,a0,2080
    1114:	0200f809 	jalr	s0
    1118:	00000000 	nop
    111c:	96430048 	lhu	v1,72(s2)
        }
        if(adapter->shared.autoneg_advertised & ADVERTISE_10_FULL) {
    1120:	30620002 	andi	v0,v1,0x2
    1124:	5040000f 	beqzl	v0,1164 <e1000_check_copper_options+0x298>
    1128:	30620001 	andi	v0,v1,0x1
            printk("10/FD");
    112c:	3c040000 	lui	a0,0x0
    1130:	2484083c 	addiu	a0,a0,2108
    1134:	0200f809 	jalr	s0
    1138:	00000000 	nop
            if(adapter->shared.autoneg_advertised & (ADVERTISE_10_FULL - 1))
    113c:	96430048 	lhu	v1,72(s2)
    1140:	30630001 	andi	v1,v1,0x1
    1144:	1060000d 	beqz	v1,117c <e1000_check_copper_options+0x2b0>
    1148:	00000000 	nop
                printk(", ");
    114c:	3c040000 	lui	a0,0x0
    1150:	24840820 	addiu	a0,a0,2080
    1154:	0200f809 	jalr	s0
    1158:	00000000 	nop
    115c:	96430048 	lhu	v1,72(s2)
        }
        if(adapter->shared.autoneg_advertised & ADVERTISE_10_HALF)
    1160:	30620001 	andi	v0,v1,0x1
    1164:	10400005 	beqz	v0,117c <e1000_check_copper_options+0x2b0>
    1168:	00000000 	nop
            printk("10/HD");
    116c:	3c040000 	lui	a0,0x0
    1170:	24840844 	addiu	a0,a0,2116
    1174:	0200f809 	jalr	s0
    1178:	00000000 	nop
        printk("\n");
    117c:	3c040000 	lui	a0,0x0
    1180:	2484084c 	addiu	a0,a0,2124
    1184:	0200f809 	jalr	s0
    1188:	00000000 	nop
    }

    /* Forced Speed and Duplex */

    switch (Speed[board]) {
    118c:	02331021 	addu	v0,s1,s3
    1190:	8c440000 	lw	a0,0(v0)
    1194:	2403000a 	li	v1,10
    1198:	10830019 	beq	a0,v1,1200 <e1000_check_copper_options+0x334>
    119c:	2882000b 	slti	v0,a0,11
    11a0:	10400008 	beqz	v0,11c4 <e1000_check_copper_options+0x2f8>
    11a4:	24020064 	li	v0,100
    11a8:	2402ffff 	li	v0,-1
    11ac:	10820011 	beq	a0,v0,11f4 <e1000_check_copper_options+0x328>
    11b0:	02331021 	addu	v0,s1,s3
    11b4:	50800014 	beqzl	a0,1208 <e1000_check_copper_options+0x33c>
    11b8:	8c500000 	lw	s0,0(v0)
    11bc:	08000476 	j	11d8 <e1000_check_copper_options+0x30c>
    11c0:	8c450000 	lw	a1,0(v0)
    11c4:	1082000e 	beq	a0,v0,1200 <e1000_check_copper_options+0x334>
    11c8:	240203e8 	li	v0,1000
    11cc:	1082000c 	beq	a0,v0,1200 <e1000_check_copper_options+0x334>
    11d0:	02331021 	addu	v0,s1,s3
    default:
        printk("Invalid Speed Specified (%i), Parameter Ignored\n",
    11d4:	8c450000 	lw	a1,0(v0)
    11d8:	3c040000 	lui	a0,0x0
    11dc:	24840850 	addiu	a0,a0,2128
    11e0:	3c020000 	lui	v0,0x0
    11e4:	24420000 	addiu	v0,v0,0
    11e8:	0040f809 	jalr	v0
    11ec:	0000a021 	move	s4,zero
               Speed[board]);
        all_default = FALSE;
    case OPTION_UNSET:
        speed = 0;
        Speed[board] = 0;
    11f0:	02331021 	addu	v0,s1,s3
    11f4:	ac400000 	sw	zero,0(v0)
        break;
    11f8:	08000483 	j	120c <e1000_check_copper_options+0x340>
    11fc:	00008021 	move	s0,zero
    case 0:
    case 10:
    case 100:
    case 1000:
        speed = Speed[board];
    1200:	02331021 	addu	v0,s1,s3
    1204:	8c500000 	lw	s0,0(v0)
        all_default = FALSE;
    1208:	0000a021 	move	s4,zero
        break;
    }

    switch (Duplex[board]) {
    120c:	02351021 	addu	v0,s1,s5
    1210:	8c450000 	lw	a1,0(v0)
    1214:	2403ffff 	li	v1,-1
    1218:	10a3000b 	beq	a1,v1,1248 <e1000_check_copper_options+0x37c>
    121c:	28a2ffff 	slti	v0,a1,-1
    1220:	14400003 	bnez	v0,1230 <e1000_check_copper_options+0x364>
    1224:	28a20003 	slti	v0,a1,3
    1228:	5440000a 	bnezl	v0,1254 <e1000_check_copper_options+0x388>
    122c:	0000a021 	move	s4,zero
    default:
        printk("Invalid Duplex Specified (%i), Parameter Ignored\n",
    1230:	3c040000 	lui	a0,0x0
    1234:	24840884 	addiu	a0,a0,2180
    1238:	3c020000 	lui	v0,0x0
    123c:	24420000 	addiu	v0,v0,0
    1240:	0040f809 	jalr	v0
    1244:	0000a021 	move	s4,zero
               Duplex[board]);
        all_default = FALSE;
    case OPTION_UNSET:
        duplex = 0;
        Duplex[board] = 0;
    1248:	02351021 	addu	v0,s1,s5
    124c:	ac400000 	sw	zero,0(v0)
        break;
    1250:	00002821 	move	a1,zero
    case 0:
    case 1:
    case 2:
        duplex = Duplex[board];
        all_default = FALSE;
        break;
    }

    switch (speed + duplex) {
    1254:	02058821 	addu	s1,s0,a1
    1258:	2413000c 	li	s3,12
    125c:	12330069 	beq	s1,s3,1404 <e1000_check_copper_options+0x538>
    1260:	2a22000d 	slti	v0,s1,13
    1264:	10400012 	beqz	v0,12b0 <e1000_check_copper_options+0x3e4>
    1268:	24020066 	li	v0,102
    126c:	24020002 	li	v0,2
    1270:	12220040 	beq	s1,v0,1374 <e1000_check_copper_options+0x4a8>
    1274:	2a220003 	slti	v0,s1,3
    1278:	10400007 	beqz	v0,1298 <e1000_check_copper_options+0x3cc>
    127c:	2402000a 	li	v0,10
    1280:	12200023 	beqz	s1,1310 <e1000_check_copper_options+0x444>
    1284:	24020001 	li	v0,1
    1288:	1222002c 	beq	s1,v0,133c <e1000_check_copper_options+0x470>
    128c:	00000000 	nop
    1290:	0800054d 	j	1534 <e1000_check_copper_options+0x668>
    1294:	00000000 	nop
    1298:	12220043 	beq	s1,v0,13a8 <e1000_check_copper_options+0x4dc>
    129c:	2402000b 	li	v0,11
    12a0:	1222004e 	beq	s1,v0,13dc <e1000_check_copper_options+0x510>
    12a4:	00000000 	nop
    12a8:	0800054d 	j	1534 <e1000_check_copper_options+0x668>
    12ac:	00000000 	nop
    12b0:	12220072 	beq	s1,v0,147c <e1000_check_copper_options+0x5b0>
    12b4:	2a220067 	slti	v0,s1,103
    12b8:	10400008 	beqz	v0,12dc <e1000_check_copper_options+0x410>
    12bc:	240203e9 	li	v0,1001
    12c0:	24020064 	li	v0,100
    12c4:	12220057 	beq	s1,v0,1424 <e1000_check_copper_options+0x558>
    12c8:	24020065 	li	v0,101
    12cc:	12220063 	beq	s1,v0,145c <e1000_check_copper_options+0x590>
    12d0:	00000000 	nop
    12d4:	0800054d 	j	1534 <e1000_check_copper_options+0x668>
    12d8:	00000000 	nop
    12dc:	1222007e 	beq	s1,v0,14d8 <e1000_check_copper_options+0x60c>
    12e0:	2a2203ea 	slti	v0,s1,1002
    12e4:	10400006 	beqz	v0,1300 <e1000_check_copper_options+0x434>
    12e8:	240203ea 	li	v0,1002
    12ec:	240203e8 	li	v0,1000
    12f0:	1222006d 	beq	s1,v0,14a8 <e1000_check_copper_options+0x5dc>
    12f4:	00000000 	nop
    12f8:	0800054d 	j	1534 <e1000_check_copper_options+0x668>
    12fc:	00000000 	nop
    1300:	12220081 	beq	s1,v0,1508 <e1000_check_copper_options+0x63c>
    1304:	00000000 	nop
    1308:	0800054d 	j	1534 <e1000_check_copper_options+0x668>
    130c:	00000000 	nop
    case 0:
        if(all_default == FALSE)
    1310:	16800008 	bnez	s4,1334 <e1000_check_copper_options+0x468>
    1314:	24020001 	li	v0,1
            printk("Speed and Duplex Auto-negotiation Enabled\n");
    1318:	3c040000 	lui	a0,0x0
    131c:	248408b8 	addiu	a0,a0,2232
    1320:	3c020000 	lui	v0,0x0
    1324:	24420000 	addiu	v0,v0,0
    1328:	0040f809 	jalr	v0
    132c:	00000000 	nop
        adapter->shared.autoneg = 1;
    1330:	24020001 	li	v0,1
        break;
    1334:	08000553 	j	154c <e1000_check_copper_options+0x680>
    1338:	a2420078 	sb	v0,120(s2)
    case 1:
        printk("Warning: Half Duplex specified without Speed\n");
    133c:	3c040000 	lui	a0,0x0
    1340:	248408e4 	addiu	a0,a0,2276
    1344:	3c100000 	lui	s0,0x0
    1348:	26100000 	addiu	s0,s0,0
    134c:	0200f809 	jalr	s0
    1350:	00000000 	nop
        printk("Using Auto-negotiation at Half Duplex only\n");
    1354:	3c040000 	lui	a0,0x0
    1358:	24840914 	addiu	a0,a0,2324
    135c:	0200f809 	jalr	s0
    1360:	00000000 	nop
        adapter->shared.autoneg = 1;
        adapter->shared.autoneg_advertised =
    1364:	24030005 	li	v1,5
    1368:	a2510078 	sb	s1,120(s2)
            ADVERTISE_10_HALF | ADVERTISE_100_HALF;
        break;
    136c:	08000553 	j	154c <e1000_check_copper_options+0x680>
    1370:	a6430048 	sh	v1,72(s2)
    case 2:
        printk("Warning: Full Duplex specified without Speed\n");
    1374:	3c040000 	lui	a0,0x0
    1378:	24840940 	addiu	a0,a0,2368
    137c:	3c100000 	lui	s0,0x0
    1380:	26100000 	addiu	s0,s0,0
    1384:	0200f809 	jalr	s0
    1388:	00000000 	nop
        printk("Using Auto-negotiation at Full Duplex only\n");
    138c:	3c040000 	lui	a0,0x0
    1390:	24840970 	addiu	a0,a0,2416
    1394:	0200f809 	jalr	s0
    1398:	00000000 	nop
        adapter->shared.autoneg = 1;
    139c:	24030001 	li	v1,1
        adapter->shared.autoneg_advertised =
            ADVERTISE_10_FULL | ADVERTISE_100_FULL | ADVERTISE_1000_FULL;
        break;
    13a0:	0800054a 	j	1528 <e1000_check_copper_options+0x65c>
    13a4:	2402002a 	li	v0,42
    case 10:
        printk("Warning: 10 Mbps Speed specified without Duplex\n");
    13a8:	3c040000 	lui	a0,0x0
    13ac:	2484099c 	addiu	a0,a0,2460
    13b0:	3c100000 	lui	s0,0x0
    13b4:	26100000 	addiu	s0,s0,0
    13b8:	0200f809 	jalr	s0
    13bc:	00000000 	nop
        printk("Using Auto-negotiation at 10 Mbps only\n");
    13c0:	3c040000 	lui	a0,0x0
    13c4:	248409d0 	addiu	a0,a0,2512
    13c8:	0200f809 	jalr	s0
    13cc:	00000000 	nop
        adapter->shared.autoneg = 1;
    13d0:	24030001 	li	v1,1
        adapter->shared.autoneg_advertised =
            ADVERTISE_10_HALF | ADVERTISE_10_FULL;
        break;
    13d4:	0800054a 	j	1528 <e1000_check_copper_options+0x65c>
    13d8:	24020003 	li	v0,3
    case 11:
        printk("Forcing to 10 Mbps Half Duplex\n");
    13dc:	3c040000 	lui	a0,0x0
    13e0:	248409f8 	addiu	a0,a0,2552
    13e4:	3c020000 	lui	v0,0x0
    13e8:	24420000 	addiu	v0,v0,0
    13ec:	0040f809 	jalr	v0
    13f0:	00000000 	nop
        adapter->shared.autoneg = 0;
    13f4:	a2400078 	sb	zero,120(s2)
        adapter->shared.forced_speed_duplex = e1000_10_half;
    13f8:	a240007a 	sb	zero,122(s2)
        adapter->shared.autoneg_advertised = 0;
        break;
    13fc:	08000553 	j	154c <e1000_check_copper_options+0x680>
    1400:	a6400048 	sh	zero,72(s2)
    case 12:
        printk("Forcing to 10 Mbps Full Duplex\n");
    1404:	3c040000 	lui	a0,0x0
    1408:	24840a18 	addiu	a0,a0,2584
    140c:	3c020000 	lui	v0,0x0
    1410:	24420000 	addiu	v0,v0,0
    1414:	0040f809 	jalr	v0
    1418:	00000000 	nop
        adapter->shared.autoneg = 0;
        adapter->shared.forced_speed_duplex = e1000_10_full;
        adapter->shared.autoneg_advertised = 0;
        break;
    141c:	08000526 	j	1498 <e1000_check_copper_options+0x5cc>
    1420:	24030001 	li	v1,1
    case 100:
        printk("Warning: 100 Mbps Speed specified without Duplex\n");
    1424:	3c040000 	lui	a0,0x0
    1428:	24840a38 	addiu	a0,a0,2616
    142c:	3c100000 	lui	s0,0x0
    1430:	26100000 	addiu	s0,s0,0
    1434:	0200f809 	jalr	s0
    1438:	00000000 	nop
        printk("Using Auto-negotiation at 100 Mbps only\n");
    143c:	3c040000 	lui	a0,0x0
    1440:	24840a6c 	addiu	a0,a0,2668
    1444:	0200f809 	jalr	s0
    1448:	00000000 	nop
        adapter->shared.autoneg = 1;
    144c:	24030001 	li	v1,1
    1450:	a2430078 	sb	v1,120(s2)
        adapter->shared.autoneg_advertised =
            ADVERTISE_100_HALF | ADVERTISE_100_FULL;
        break;
    1454:	08000553 	j	154c <e1000_check_copper_options+0x680>
    1458:	a6530048 	sh	s3,72(s2)
    case 101:
        printk("Forcing to 100 Mbps Half Duplex\n");
    145c:	3c040000 	lui	a0,0x0
    1460:	24840a98 	addiu	a0,a0,2712
    1464:	3c020000 	lui	v0,0x0
    1468:	24420000 	addiu	v0,v0,0
    146c:	0040f809 	jalr	v0
    1470:	00000000 	nop
        adapter->shared.autoneg = 0;
        adapter->shared.forced_speed_duplex = e1000_100_half;
        adapter->shared.autoneg_advertised = 0;
        break;
    1474:	08000526 	j	1498 <e1000_check_copper_options+0x5cc>
    1478:	24030002 	li	v1,2
    case 102:
        printk("Forcing to 100 Mbps Full Duplex\n");
    147c:	3c040000 	lui	a0,0x0
    1480:	24840abc 	addiu	a0,a0,2748
    1484:	3c020000 	lui	v0,0x0
    1488:	24420000 	addiu	v0,v0,0
    148c:	0040f809 	jalr	v0
    1490:	00000000 	nop
        adapter->shared.autoneg = 0;
        adapter->shared.forced_speed_duplex = e1000_100_full;
    1494:	24030003 	li	v1,3
    1498:	a243007a 	sb	v1,122(s2)
    149c:	a2400078 	sb	zero,120(s2)
        adapter->shared.autoneg_advertised = 0;
        break;
    14a0:	08000553 	j	154c <e1000_check_copper_options+0x680>
    14a4:	a6400048 	sh	zero,72(s2)
    case 1000:
        printk("Warning: 1000 Mbps Speed specified without Duplex\n");
    14a8:	3c040000 	lui	a0,0x0
    14ac:	24840ae0 	addiu	a0,a0,2784
    14b0:	3c100000 	lui	s0,0x0
    14b4:	26100000 	addiu	s0,s0,0
    14b8:	0200f809 	jalr	s0
    14bc:	00000000 	nop
        printk("Using Auto-negotiation at 1000 Mbps Full Duplex only\n");
    14c0:	3c040000 	lui	a0,0x0
    14c4:	24840b14 	addiu	a0,a0,2836
    14c8:	0200f809 	jalr	s0
    14cc:	00000000 	nop
        adapter->shared.autoneg = 1;
        adapter->shared.autoneg_advertised = ADVERTISE_1000_FULL;
        break;
    14d0:	08000549 	j	1524 <e1000_check_copper_options+0x658>
    14d4:	24030001 	li	v1,1
    case 1001:
        printk("Warning: Half Duplex is not supported at 1000 Mbps\n");
    14d8:	3c040000 	lui	a0,0x0
    14dc:	24840b4c 	addiu	a0,a0,2892
    14e0:	3c100000 	lui	s0,0x0
    14e4:	26100000 	addiu	s0,s0,0
    14e8:	0200f809 	jalr	s0
    14ec:	00000000 	nop
        printk("Using Auto-negotiation at 1000 Mbps Full Duplex only\n");
    14f0:	3c040000 	lui	a0,0x0
    14f4:	24840b14 	addiu	a0,a0,2836
    14f8:	0200f809 	jalr	s0
    14fc:	00000000 	nop
        adapter->shared.autoneg = 1;
        adapter->shared.autoneg_advertised = ADVERTISE_1000_FULL;
        break;
    1500:	08000549 	j	1524 <e1000_check_copper_options+0x658>
    1504:	24030001 	li	v1,1
    case 1002:
        printk("Using Auto-negotiation at 1000 Mbps Full Duplex only\n");
    1508:	3c040000 	lui	a0,0x0
    150c:	24840b14 	addiu	a0,a0,2836
    1510:	3c020000 	lui	v0,0x0
    1514:	24420000 	addiu	v0,v0,0
    1518:	0040f809 	jalr	v0
    151c:	00000000 	nop
        adapter->shared.autoneg = 1;
    1520:	24030001 	li	v1,1
        adapter->shared.autoneg_advertised = ADVERTISE_1000_FULL;
    1524:	24020020 	li	v0,32
    1528:	a2430078 	sb	v1,120(s2)
        break;
    152c:	08000553 	j	154c <e1000_check_copper_options+0x680>
    1530:	a6420048 	sh	v0,72(s2)
    default:
        panic("something is wrong in e1000_check_copper_options");
    1534:	3c040000 	lui	a0,0x0
    1538:	24840b80 	addiu	a0,a0,2944
    153c:	3c020000 	lui	v0,0x0
    1540:	24420000 	addiu	v0,v0,0
    1544:	0040f809 	jalr	v0
    1548:	00000000 	nop
    }

    /* Speed, AutoNeg and MDI/MDI-X */
    if (!e1000_validate_mdi_setting(&(adapter->shared))) {
    154c:	3c020000 	lui	v0,0x0
    1550:	24420000 	addiu	v0,v0,0
    1554:	0040f809 	jalr	v0
    1558:	26440008 	addiu	a0,s2,8
    155c:	14400008 	bnez	v0,1580 <e1000_check_copper_options+0x6b4>
    1560:	8fbf0028 	lw	ra,40(sp)
        printk ("Speed, AutoNeg and MDI-X specifications are incompatible."
    1564:	3c040000 	lui	a0,0x0
    1568:	24840bb4 	addiu	a0,a0,2996
    156c:	3c020000 	lui	v0,0x0
    1570:	24420000 	addiu	v0,v0,0
    1574:	0040f809 	jalr	v0
    1578:	00000000 	nop
                " Setting MDI-X to a compatible value.\n");
    }

    return;
}
    157c:	8fbf0028 	lw	ra,40(sp)
    1580:	8fb50024 	lw	s5,36(sp)
    1584:	8fb40020 	lw	s4,32(sp)
    1588:	8fb3001c 	lw	s3,28(sp)
    158c:	8fb20018 	lw	s2,24(sp)
    1590:	8fb10014 	lw	s1,20(sp)
    1594:	8fb00010 	lw	s0,16(sp)
    1598:	03e00008 	jr	ra
    159c:	27bd0030 	addiu	sp,sp,48

000015a0 <e1000_sw_init>:
    15a0:	27bdffd8 	addiu	sp,sp,-40
    15a4:	afb20018 	sw	s2,24(sp)
    15a8:	afb10014 	sw	s1,20(sp)
    15ac:	00809021 	move	s2,a0
    15b0:	afbf0020 	sw	ra,32(sp)
    15b4:	afb3001c 	sw	s3,28(sp)
    15b8:	afb00010 	sw	s0,16(sp)

/**
 * e1000_sw_init - Initialize general software structures (struct e1000_adapter)
 * @adapter: board private structure to initialize
 *
 * Returns 0 on success, negative on failure
 *
 * e1000_sw_init initializes the Adapter private data structure.
 * Fields are initialized based on PCI device information and
 * OS network device settings (MTU size).
 **/

static int
e1000_sw_init(struct e1000_adapter *adapter)
{
    struct net_device *netdev = adapter->netdev;
    struct pci_dev *pdev = adapter->pdev;
    15bc:	8e50014c 	lw	s0,332(s2)
    uint32_t status;

    E1000_DBG("e1000_sw_init\n");

    /* PCI config space info */

    pci_read_config_word(pdev, PCI_VENDOR_ID, &adapter->vendor_id);
    15c0:	3c110000 	lui	s1,0x0
    15c4:	26310000 	addiu	s1,s1,0
    15c8:	264600bc 	addiu	a2,s2,188
    15cc:	02002021 	move	a0,s0
    15d0:	00002821 	move	a1,zero
    15d4:	0220f809 	jalr	s1
    15d8:	8e530148 	lw	s3,328(s2)
    pci_read_config_word(pdev, PCI_DEVICE_ID, &adapter->device_id);
    15dc:	264600be 	addiu	a2,s2,190
    15e0:	02002021 	move	a0,s0
    15e4:	0220f809 	jalr	s1
    15e8:	24050002 	li	a1,2
    pci_read_config_byte(pdev, PCI_REVISION_ID, &adapter->rev_id);
    15ec:	264600c0 	addiu	a2,s2,192
    15f0:	02002021 	move	a0,s0
    15f4:	3c020000 	lui	v0,0x0
    15f8:	24420000 	addiu	v0,v0,0
    15fc:	0040f809 	jalr	v0
    1600:	24050008 	li	a1,8
    pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &adapter->subven_id);
    1604:	264600c2 	addiu	a2,s2,194
    1608:	02002021 	move	a0,s0
    160c:	0220f809 	jalr	s1
    1610:	2405002c 	li	a1,44
    pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &adapter->subsys_id);
    1614:	264600c4 	addiu	a2,s2,196
    1618:	02002021 	move	a0,s0
    161c:	0220f809 	jalr	s1
    1620:	2405002e 	li	a1,46
    pci_read_config_word(pdev, PCI_COMMAND, &adapter->shared.pci_cmd_word);
    1624:	2646004a 	addiu	a2,s2,74
    1628:	02002021 	move	a0,s0
    162c:	0220f809 	jalr	s1
    1630:	24050004 	li	a1,4

    /* Initial Receive Buffer Length */

    if((netdev->mtu + ENET_HEADER_SIZE + CRC_LENGTH) < E1000_RXBUFFER_2048)
    1634:	8e63005c 	lw	v1,92(s3)
    1638:	24630012 	addiu	v1,v1,18
    163c:	2c620800 	sltiu	v0,v1,2048
    1640:	50400003 	beqzl	v0,1650 <e1000_sw_init+0xb0>
    1644:	2c621000 	sltiu	v0,v1,4096
        adapter->rx_buffer_len = E1000_RXBUFFER_2048;
    1648:	0800059b 	j	166c <e1000_sw_init+0xcc>
    164c:	24020800 	li	v0,2048
    else if((netdev->mtu + ENET_HEADER_SIZE + CRC_LENGTH) < E1000_RXBUFFER_4096)
    1650:	50400003 	beqzl	v0,1660 <e1000_sw_init+0xc0>
    1654:	2c622000 	sltiu	v0,v1,8192
        adapter->rx_buffer_len = E1000_RXBUFFER_4096;
    1658:	0800059b 	j	166c <e1000_sw_init+0xcc>
    165c:	24021000 	li	v0,4096
    else if((netdev->mtu + ENET_HEADER_SIZE + CRC_LENGTH) < E1000_RXBUFFER_8192)
    1660:	50400002 	beqzl	v0,166c <e1000_sw_init+0xcc>
    1664:	24024000 	li	v0,16384
        adapter->rx_buffer_len = E1000_RXBUFFER_8192;
    1668:	24022000 	li	v0,8192
    else
        adapter->rx_buffer_len = E1000_RXBUFFER_16384;
    166c:	ae4200b8 	sw	v0,184(s2)

    adapter->shared.max_frame_size =
        netdev->mtu + ENET_HEADER_SIZE + CRC_LENGTH;

    /* MAC and Phy settings */

    switch (adapter->device_id) {
    1670:	964200be 	lhu	v0,190(s2)
    1674:	8e63005c 	lw	v1,92(s3)
    1678:	2444f000 	addiu	a0,v0,-4096
    167c:	24630012 	addiu	v1,v1,18
    1680:	2c82000e 	sltiu	v0,a0,14
    1684:	1040001f 	beqz	v0,1704 <e1000_sw_init+0x164>
    1688:	ae43003c 	sw	v1,60(s2)
    168c:	00041080 	sll	v0,a0,0x2
    1690:	3c030000 	lui	v1,0x0
    1694:	00621821 	addu	v1,v1,v0
    1698:	8c630c70 	lw	v1,3184(v1)
    169c:	00600008 	jr	v1
    16a0:	00000000 	nop
    case E1000_DEV_ID_82542:
        switch (adapter->rev_id) {
    16a4:	924300c0 	lbu	v1,192(s2)
    16a8:	24020002 	li	v0,2
    16ac:	1062000b 	beq	v1,v0,16dc <e1000_sw_init+0x13c>
    16b0:	24020003 	li	v0,3
    16b4:	1062000b 	beq	v1,v0,16e4 <e1000_sw_init+0x144>
    16b8:	24020001 	li	v0,1
        case E1000_82542_2_0_REV_ID:
            adapter->shared.mac_type = e1000_82542_rev2_0;
            break;
        case E1000_82542_2_1_REV_ID:
            adapter->shared.mac_type = e1000_82542_rev2_1;
            break;
        default:
            adapter->shared.mac_type = e1000_82542_rev2_0;
            E1000_ERR("Could not identify 82542 revision\n");
    16bc:	3c040000 	lui	a0,0x0
    16c0:	24840c14 	addiu	a0,a0,3092
    16c4:	3c020000 	lui	v0,0x0
    16c8:	24420000 	addiu	v0,v0,0
    16cc:	0040f809 	jalr	v0
    16d0:	ae40000c 	sw	zero,12(s2)
        }
        break;
    16d4:	080005ca 	j	1728 <e1000_sw_init+0x188>
    16d8:	8e42000c 	lw	v0,12(s2)
    16dc:	080005c9 	j	1724 <e1000_sw_init+0x184>
    16e0:	ae40000c 	sw	zero,12(s2)
    16e4:	080005c9 	j	1724 <e1000_sw_init+0x184>
    16e8:	ae42000c 	sw	v0,12(s2)
    case E1000_DEV_ID_82543GC_FIBER:
    case E1000_DEV_ID_82543GC_COPPER:
        adapter->shared.mac_type = e1000_82543;
    16ec:	24020002 	li	v0,2
        break;
    16f0:	080005c9 	j	1724 <e1000_sw_init+0x184>
    16f4:	ae42000c 	sw	v0,12(s2)
    case E1000_DEV_ID_82544EI_COPPER:
    case E1000_DEV_ID_82544EI_FIBER:
    case E1000_DEV_ID_82544GC_COPPER:
    case E1000_DEV_ID_82544GC_LOM:
        adapter->shared.mac_type = e1000_82544;
    16f8:	24020003 	li	v0,3
        break;
    16fc:	080005c9 	j	1724 <e1000_sw_init+0x184>
    1700:	ae42000c 	sw	v0,12(s2)
    default:
        E1000_ERR("Could not identify hardware\n");
    1704:	3c040000 	lui	a0,0x0
    1708:	24840c44 	addiu	a0,a0,3140
    170c:	3c020000 	lui	v0,0x0
    1710:	24420000 	addiu	v0,v0,0
    1714:	0040f809 	jalr	v0
    1718:	00000000 	nop
        return -ENODEV;
    171c:	080005ea 	j	17a8 <e1000_sw_init+0x208>
    1720:	2402ffed 	li	v0,-19
    }

    adapter->shared.fc_high_water = FC_DEFAULT_HI_THRESH;
    adapter->shared.fc_low_water = FC_DEFAULT_LO_THRESH;
    adapter->shared.fc_pause_time = FC_DEFAULT_TX_TIMER;
    adapter->shared.fc_send_xon = 1;

    /* Identify the Hardware - this is done by the gigabit shared code
     * in e1000_init_hw, but it would help to identify the NIC
     * before bringing the hardware online for use in e1000_check_options.
     */
    if(adapter->shared.mac_type >= e1000_82543) {
    1724:	8e42000c 	lw	v0,12(s2)
    1728:	34048000 	li	a0,0x8000
    172c:	24054000 	li	a1,16384
    1730:	24030100 	li	v1,256
    1734:	24060001 	li	a2,1
    1738:	2c420002 	sltiu	v0,v0,2
    173c:	a644004c 	sh	a0,76(s2)
    1740:	a645004e 	sh	a1,78(s2)
    1744:	a6430050 	sh	v1,80(s2)
    1748:	14400009 	bnez	v0,1770 <e1000_sw_init+0x1d0>
    174c:	ae460068 	sw	a2,104(s2)
        status = E1000_READ_REG(&adapter->shared, STATUS);
    1750:	8e430008 	lw	v1,8(s2)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    1754:	8c620008 	lw	v0,8(v1)
	return __arch__swab32(x);
    1758:	00021602 	srl	v0,v0,0x18
        if(status & E1000_STATUS_TBIMODE) {
    175c:	30420020 	andi	v0,v0,0x20
    1760:	54400004 	bnezl	v0,1774 <e1000_sw_init+0x1d4>
    1764:	ae460010 	sw	a2,16(s2)
            adapter->shared.media_type = e1000_media_type_fiber;
        } else {
            adapter->shared.media_type = e1000_media_type_copper;
        }
    } else {
    1768:	080005dd 	j	1774 <e1000_sw_init+0x1d4>
    176c:	ae400010 	sw	zero,16(s2)
        adapter->shared.media_type = e1000_media_type_fiber;
    1770:	ae460010 	sw	a2,16(s2)
    }

    if((E1000_REPORT_TX_EARLY == 0) || (E1000_REPORT_TX_EARLY == 1)) {
        adapter->shared.report_tx_early = E1000_REPORT_TX_EARLY;
    } else {
        if(adapter->shared.mac_type < e1000_82543) {
    1774:	8e42000c 	lw	v0,12(s2)
    1778:	2c420002 	sltiu	v0,v0,2
    177c:	10400003 	beqz	v0,178c <e1000_sw_init+0x1ec>
    1780:	24020001 	li	v0,1

            adapter->shared.report_tx_early = 0;
        } else {
    1784:	080005e4 	j	1790 <e1000_sw_init+0x1f0>
    1788:	ae40006c 	sw	zero,108(s2)
            adapter->shared.report_tx_early = 1;
    178c:	ae42006c 	sw	v0,108(s2)
        }
    }

    adapter->shared.wait_autoneg_complete = WAITFORLINK_DEFAULT;
    1790:	24020001 	li	v0,1

    adapter->shared.tbi_compatibility_en = 1;
    1794:	24030001 	li	v1,1
    1798:	a242007b 	sb	v0,123(s2)
    179c:	ae43005c 	sw	v1,92(s2)

    atomic_set(&adapter->tx_timeout, 0);
    17a0:	ae40010c 	sw	zero,268(s2)

    spin_lock_init(&adapter->stats_lock);
    spin_lock_init(&adapter->rx_fill_lock);

    return 0;
    17a4:	00001021 	move	v0,zero
}
    17a8:	8fbf0020 	lw	ra,32(sp)
    17ac:	8fb3001c 	lw	s3,28(sp)
    17b0:	8fb20018 	lw	s2,24(sp)
    17b4:	8fb10014 	lw	s1,20(sp)
    17b8:	8fb00010 	lw	s0,16(sp)
    17bc:	03e00008 	jr	ra
    17c0:	27bd0028 	addiu	sp,sp,40

000017c4 <e1000_hw_init>:
    17c4:	27bdffd8 	addiu	sp,sp,-40
    17c8:	afb20018 	sw	s2,24(sp)
    17cc:	afbf0024 	sw	ra,36(sp)
    17d0:	afb40020 	sw	s4,32(sp)
    17d4:	afb3001c 	sw	s3,28(sp)
    17d8:	afb10014 	sw	s1,20(sp)
    17dc:	afb00010 	sw	s0,16(sp)
    17e0:	00809021 	move	s2,a0

/**
 * e1000_hw_init - prepare the hardware
 * @adapter: board private struct containing configuration
 *
 * Returns 0 on success, negative on failure
 *
 * Initialize the hardware to a configuration as specified by the
 * Adapter structure.  The controler is reset, the EEPROM is
 * verified, the MAC address is set, then the shared initilization
 * routines are called.
 **/

static int
e1000_hw_init(struct e1000_adapter *adapter)
{
    struct net_device *netdev = adapter->netdev;

    E1000_DBG("e1000_hw_init\n");

    /* Repartition Pba for greater than 9k mtu
     * To take effect Ctrl_Rst is required.
     */
    if(adapter->rx_buffer_len > E1000_RXBUFFER_8192)
    17e4:	8e4200b8 	lw	v0,184(s2)
    17e8:	2c422001 	sltiu	v0,v0,8193
    17ec:	14400009 	bnez	v0,1814 <e1000_hw_init+0x50>
    17f0:	8e540148 	lw	s4,328(s2)
    17f4:	8e42000c 	lw	v0,12(s2)
    17f8:	2c420002 	sltiu	v0,v0,2
    17fc:	14400003 	bnez	v0,180c <e1000_hw_init+0x48>
    1800:	8e430008 	lw	v1,8(s2)
        E1000_WRITE_REG(&adapter->shared, PBA, E1000_JUMBO_PBA);
    1804:	08000609 	j	1824 <e1000_hw_init+0x60>
    1808:	3c022800 	lui	v0,0x2800
    180c:	08000609 	j	1824 <e1000_hw_init+0x60>
    1810:	3c022800 	lui	v0,0x2800
    1814:	8e42000c 	lw	v0,12(s2)
    1818:	2c420002 	sltiu	v0,v0,2
    else
        E1000_WRITE_REG(&adapter->shared, PBA, E1000_DEFAULT_PBA);
    181c:	8e430008 	lw	v1,8(s2)
    1820:	3c023000 	lui	v0,0x3000
    1824:	ac621000 	sw	v0,4096(v1)

    /* Issue a global reset */

    E1000_DBG("about to global reset\n");
    adapter->shared.adapter_stopped = 0;
    e1000_adapter_stop(&adapter->shared);
    1828:	26530008 	addiu	s3,s2,8
    182c:	02602021 	move	a0,s3
    1830:	3c020000 	lui	v0,0x0
    1834:	24420000 	addiu	v0,v0,0
    1838:	0040f809 	jalr	v0
    183c:	ae400064 	sw	zero,100(s2)
    adapter->shared.adapter_stopped = 0;
    1840:	ae400064 	sw	zero,100(s2)

    /* make sure the EEPROM is good */

    E1000_DBG("about to validate eeprom\n");
    if(!e1000_validate_eeprom_checksum(&adapter->shared)) {
    1844:	3c020000 	lui	v0,0x0
    1848:	24420000 	addiu	v0,v0,0
    184c:	0040f809 	jalr	v0
    1850:	02602021 	move	a0,s3
    1854:	14400005 	bnez	v0,186c <e1000_hw_init+0xa8>
    1858:	265000a8 	addiu	s0,s2,168
        E1000_ERR("The EEPROM Checksum Is Not Valid\n");
    185c:	3c040000 	lui	a0,0x0
    1860:	24840ca8 	addiu	a0,a0,3240
        return -1;
    1864:	08000638 	j	18e0 <e1000_hw_init+0x11c>
    1868:	00000000 	nop
    }

    /* copy the MAC address out of the EEPROM */

    E1000_DBG("about to get mac address\n");
    e1000_read_address(adapter, adapter->perm_net_addr);
    186c:	3c020000 	lui	v0,0x0
    1870:	244219d4 	addiu	v0,v0,6612
    1874:	02002821 	move	a1,s0
    1878:	0040f809 	jalr	v0
    187c:	02402021 	move	a0,s2
    memcpy(netdev->dev_addr, adapter->perm_net_addr, netdev->addr_len);
    1880:	9286007c 	lbu	a2,124(s4)
    1884:	26910074 	addiu	s1,s4,116
    1888:	02002821 	move	a1,s0
    188c:	3c100000 	lui	s0,0x0
    1890:	26100000 	addiu	s0,s0,0
    1894:	0200f809 	jalr	s0
    1898:	02202021 	move	a0,s1
    memcpy(adapter->shared.mac_addr, netdev->dev_addr, netdev->addr_len);
    189c:	9286007c 	lbu	a2,124(s4)
    18a0:	2644007d 	addiu	a0,s2,125
    18a4:	0200f809 	jalr	s0
    18a8:	02202821 	move	a1,s1

    E1000_DBG("about to read part number\n");
    e1000_read_part_num(&adapter->shared, &(adapter->part_num));
    18ac:	02602021 	move	a0,s3
    18b0:	3c020000 	lui	v0,0x0
    18b4:	24420000 	addiu	v0,v0,0
    18b8:	0040f809 	jalr	v0
    18bc:	264500c8 	addiu	a1,s2,200

    if(!e1000_init_hw(&adapter->shared)) {
    18c0:	3c020000 	lui	v0,0x0
    18c4:	24420000 	addiu	v0,v0,0
    18c8:	0040f809 	jalr	v0
    18cc:	02602021 	move	a0,s3
    18d0:	14400009 	bnez	v0,18f8 <e1000_hw_init+0x134>
    18d4:	00000000 	nop
        E1000_ERR("Hardware Initialization Failed\n");
    18d8:	3c040000 	lui	a0,0x0
    18dc:	24840cd4 	addiu	a0,a0,3284
    18e0:	3c020000 	lui	v0,0x0
    18e4:	24420000 	addiu	v0,v0,0
    18e8:	0040f809 	jalr	v0
    18ec:	00000000 	nop
        return -1;
    18f0:	0800066d 	j	19b4 <e1000_hw_init+0x1f0>
    18f4:	2402ffff 	li	v0,-1
    }

    E1000_DBG("about to enable WOL\n");
    e1000_enable_WOL(adapter);
    18f8:	3c020000 	lui	v0,0x0
    18fc:	244273ec 	addiu	v0,v0,29676
    1900:	0040f809 	jalr	v0
    1904:	02402021 	move	a0,s2

    E1000_DBG("about to check for link\n");
    adapter->shared.get_link_status = 1;
    1908:	24030001 	li	v1,1
    190c:	ae430058 	sw	v1,88(s2)
    e1000_check_for_link(&adapter->shared);
    1910:	3c030000 	lui	v1,0x0
    1914:	24630000 	addiu	v1,v1,0
    1918:	0060f809 	jalr	v1
    191c:	02602021 	move	a0,s3
    1920:	8e42000c 	lw	v0,12(s2)
    1924:	2c420002 	sltiu	v0,v0,2
    1928:	14400008 	bnez	v0,194c <e1000_hw_init+0x188>
    192c:	8e630000 	lw	v1,0(s3)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    1930:	8c620008 	lw	v0,8(v1)
	return __arch__swab32(x);
    1934:	00021602 	srl	v0,v0,0x18

    if(E1000_READ_REG(&adapter->shared, STATUS) & E1000_STATUS_LU)
    1938:	30420002 	andi	v0,v0,0x2
    193c:	14400008 	bnez	v0,1960 <e1000_hw_init+0x19c>
    1940:	24020001 	li	v0,1
    1944:	0800065b 	j	196c <e1000_hw_init+0x1a8>
    1948:	ae4000b0 	sw	zero,176(s2)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    194c:	8c620008 	lw	v0,8(v1)
	return __arch__swab32(x);
    1950:	00021602 	srl	v0,v0,0x18
    1954:	30420002 	andi	v0,v0,0x2
    1958:	10400003 	beqz	v0,1968 <e1000_hw_init+0x1a4>
    195c:	24020001 	li	v0,1
        adapter->link_active = TRUE;
    1960:	0800065b 	j	196c <e1000_hw_init+0x1a8>
    1964:	ae4200b0 	sw	v0,176(s2)
    else
        adapter->link_active = FALSE;
    1968:	ae4000b0 	sw	zero,176(s2)

    if(adapter->link_active == TRUE) {
    196c:	8e4300b0 	lw	v1,176(s2)
    1970:	24020001 	li	v0,1
    1974:	54620009 	bnel	v1,v0,199c <e1000_hw_init+0x1d8>
    1978:	a64000b6 	sh	zero,182(s2)
        e1000_get_speed_and_duplex(&adapter->shared, &adapter->link_speed,
    197c:	264600b6 	addiu	a2,s2,182
    1980:	264500b4 	addiu	a1,s2,180
    1984:	3c020000 	lui	v0,0x0
    1988:	24420000 	addiu	v0,v0,0
    198c:	0040f809 	jalr	v0
    1990:	02602021 	move	a0,s3
                                   &adapter->link_duplex);
    } else {
    1994:	08000668 	j	19a0 <e1000_hw_init+0x1dc>
    1998:	00000000 	nop
        adapter->link_speed = 0;
    199c:	a64000b4 	sh	zero,180(s2)
        adapter->link_duplex = 0;
    }

    E1000_DBG("about to get bus info\n");
    e1000_get_bus_info(&adapter->shared);
    19a0:	3c020000 	lui	v0,0x0
    19a4:	24420000 	addiu	v0,v0,0
    19a8:	0040f809 	jalr	v0
    19ac:	02602021 	move	a0,s3

    E1000_DBG("e1000_hw_init done\n");
    return 0;
    19b0:	00001021 	move	v0,zero
}
    19b4:	8fbf0024 	lw	ra,36(sp)
    19b8:	8fb40020 	lw	s4,32(sp)
    19bc:	8fb3001c 	lw	s3,28(sp)
    19c0:	8fb20018 	lw	s2,24(sp)
    19c4:	8fb10014 	lw	s1,20(sp)
    19c8:	8fb00010 	lw	s0,16(sp)
    19cc:	03e00008 	jr	ra
    19d0:	27bd0028 	addiu	sp,sp,40

000019d4 <e1000_read_address>:
    19d4:	27bdffd8 	addiu	sp,sp,-40
    19d8:	afb3001c 	sw	s3,28(sp)
    19dc:	afb20018 	sw	s2,24(sp)
    19e0:	afb10014 	sw	s1,20(sp)
    19e4:	afb00010 	sw	s0,16(sp)
    19e8:	afbf0020 	sw	ra,32(sp)

/**
 * e1000_read_address - Reads the MAC address from the EEPROM
 * @adapter: board private structure
 * @addr: pointer to an array of bytes
 **/

static void
e1000_read_address(struct e1000_adapter *adapter,
                   uint8_t *addr)
{
    uint16_t eeprom_word;
    int i;

    E1000_DBG("e1000_read_address\n");

    for(i = 0; i < NODE_ADDRESS_SIZE; i += 2) {
    19ec:	24920008 	addiu	s2,a0,8
    19f0:	00a08021 	move	s0,a1
    19f4:	00008821 	move	s1,zero
    19f8:	3c130000 	lui	s3,0x0
    19fc:	26730000 	addiu	s3,s3,0
        eeprom_word =
    1a00:	00112fc2 	srl	a1,s1,0x1f
    1a04:	02252821 	addu	a1,s1,a1
    1a08:	00052843 	sra	a1,a1,0x1
    1a0c:	02402021 	move	a0,s2
    1a10:	0260f809 	jalr	s3
    1a14:	30a5ffff 	andi	a1,a1,0xffff
    1a18:	26310002 	addiu	s1,s1,2
            e1000_read_eeprom(&adapter->shared,
                              EEPROM_NODE_ADDRESS_BYTE_0 + (i / 2));
        addr[i] = (uint8_t) (eeprom_word & 0x00FF);
        addr[i + 1] = (uint8_t) (eeprom_word >> 8);
    1a1c:	00021a02 	srl	v1,v0,0x8
    1a20:	2a240006 	slti	a0,s1,6
    1a24:	a2030001 	sb	v1,1(s0)
    1a28:	a2020000 	sb	v0,0(s0)
    1a2c:	1480fff4 	bnez	a0,1a00 <e1000_read_address+0x2c>
    1a30:	26100002 	addiu	s0,s0,2
    }

    return;
}
    1a34:	8fbf0020 	lw	ra,32(sp)
    1a38:	8fb3001c 	lw	s3,28(sp)
    1a3c:	8fb20018 	lw	s2,24(sp)
    1a40:	8fb10014 	lw	s1,20(sp)
    1a44:	8fb00010 	lw	s0,16(sp)
    1a48:	03e00008 	jr	ra
    1a4c:	27bd0028 	addiu	sp,sp,40

00001a50 <e1000_open>:
    1a50:	27bdffd0 	addiu	sp,sp,-48
    1a54:	afb30024 	sw	s3,36(sp)
    1a58:	afb20020 	sw	s2,32(sp)
    1a5c:	afb00018 	sw	s0,24(sp)
    1a60:	afbf0028 	sw	ra,40(sp)
    1a64:	afb1001c 	sw	s1,28(sp)
    1a68:	00809821 	move	s3,a0

/**
 * e1000_open - Called when a network interface is made active
 * @netdev: network interface device structure
 *
 * Returns 0 on success, negative value on failure
 *
 * The open entry point is called when a network interface is made
 * active by the system (IFF_UP).  At this point all resources needed
 * for transmit and receive operations are allocated, the interrupt
 * handler is registered with the OS, the watchdog timer is started,
 * and the stack is notified that the interface is ready.
 **/

int
e1000_open(struct net_device *netdev)
{
    struct e1000_adapter *adapter = netdev->priv;
    1a6c:	8e710064 	lw	s1,100(s3)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    1a70:	24120001 	li	s2,1
    1a74:	2630008c 	addiu	s0,s1,140
    1a78:	c2020000 	ll	v0,0(s0)
    1a7c:	00521825 	or	v1,v0,s2
    1a80:	e2030000 	sc	v1,0(s0)
    1a84:	1060fffc 	beqz	v1,1a78 <e1000_open+0x28>
    1a88:	00521824 	and	v1,v0,s2

    E1000_DBG("e1000_open\n");

    /* prevent multiple opens when dealing with iANS */

    if(test_and_set_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    1a8c:	1460009f 	bnez	v1,1d0c <e1000_open+0x2bc>
    1a90:	2402fff0 	li	v0,-16
        return -EBUSY;
    }

    adapter->shared.fc = adapter->shared.original_fc;
    1a94:	8e230030 	lw	v1,48(s1)

    /* e1000_close issues a global reset (e1000_adapter_stop)
     * so e1000_hw_init must be called again or the hardware
     * will resume in it's default state
     */
    if(e1000_hw_init(adapter) < 0) {
    1a98:	02202021 	move	a0,s1
    1a9c:	3c020000 	lui	v0,0x0
    1aa0:	244217c4 	addiu	v0,v0,6084
    1aa4:	0040f809 	jalr	v0
    1aa8:	ae230018 	sw	v1,24(s1)
    1aac:	04430009 	bgezl	v0,1ad4 <e1000_open+0x84>
    1ab0:	ae200064 	sw	zero,100(s1)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    1ab4:	c2020000 	ll	v0,0(s0)
    1ab8:	2401fffe 	li	at,-2
    1abc:	00411024 	and	v0,v0,at
    1ac0:	e2020000 	sc	v0,0(s0)
    1ac4:	1040fffb 	beqz	v0,1ab4 <e1000_open+0x64>
    1ac8:	00000000 	nop
        clear_bit(E1000_BOARD_OPEN, &adapter->flags);
        return -EBUSY;
    1acc:	08000743 	j	1d0c <e1000_open+0x2bc>
    1ad0:	2402fff0 	li	v0,-16
    }
#ifdef IANS
    /* restore VLAN settings */
    if((IANS_BD_TAGGING_MODE) (ANS_PRIVATE_DATA_FIELD(adapter)->tag_mode) !=
       IANS_BD_TAGGING_NONE)
        bd_ans_hw_EnableVLAN(adapter);
#endif

    adapter->shared.adapter_stopped = 0;

    /* allocate transmit descriptors */

    if(e1000_setup_tx_resources(adapter) != 0) {
    1ad4:	3c020000 	lui	v0,0x0
    1ad8:	24421e60 	addiu	v0,v0,7776
    1adc:	0040f809 	jalr	v0
    1ae0:	02202021 	move	a0,s1
    1ae4:	10400005 	beqz	v0,1afc <e1000_open+0xac>
    1ae8:	00000000 	nop
        e1000_adapter_stop(&adapter->shared);
    1aec:	3c020000 	lui	v0,0x0
    1af0:	24420000 	addiu	v0,v0,0
        clear_bit(E1000_BOARD_OPEN, &adapter->flags);
        return -ENOMEM;
    1af4:	080006d0 	j	1b40 <e1000_open+0xf0>
    1af8:	26240008 	addiu	a0,s1,8
    }
    e1000_configure_tx(adapter);
    1afc:	3c020000 	lui	v0,0x0
    1b00:	24421f60 	addiu	v0,v0,8032
    1b04:	0040f809 	jalr	v0
    1b08:	02202021 	move	a0,s1

    /* allocate receive descriptors and buffers */

    if(e1000_setup_rx_resources(adapter) != 0) {
    1b0c:	3c020000 	lui	v0,0x0
    1b10:	24422208 	addiu	v0,v0,8712
    1b14:	0040f809 	jalr	v0
    1b18:	02202021 	move	a0,s1
    1b1c:	10400012 	beqz	v0,1b68 <e1000_open+0x118>
    1b20:	00000000 	nop
        e1000_adapter_stop(&adapter->shared);
    1b24:	3c020000 	lui	v0,0x0
    1b28:	24420000 	addiu	v0,v0,0
    1b2c:	0040f809 	jalr	v0
    1b30:	26240008 	addiu	a0,s1,8
        e1000_free_tx_resources(adapter);
    1b34:	02202021 	move	a0,s1
    1b38:	3c020000 	lui	v0,0x0
    1b3c:	244226b4 	addiu	v0,v0,9908
    1b40:	0040f809 	jalr	v0
    1b44:	00000000 	nop
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    1b48:	c2030000 	ll	v1,0(s0)
    1b4c:	2401fffe 	li	at,-2
    1b50:	00611824 	and	v1,v1,at
    1b54:	e2030000 	sc	v1,0(s0)
    1b58:	1060fffb 	beqz	v1,1b48 <e1000_open+0xf8>
    1b5c:	00000000 	nop
        clear_bit(E1000_BOARD_OPEN, &adapter->flags);
        return -ENOMEM;
    1b60:	08000743 	j	1d0c <e1000_open+0x2bc>
    1b64:	2402fff4 	li	v0,-12
    }
    e1000_setup_rctl(adapter);
    1b68:	3c020000 	lui	v0,0x0
    1b6c:	24422308 	addiu	v0,v0,8968
    1b70:	0040f809 	jalr	v0
    1b74:	02202021 	move	a0,s1
    e1000_configure_rx(adapter);
    1b78:	3c020000 	lui	v0,0x0
    1b7c:	244223a8 	addiu	v0,v0,9128
    1b80:	0040f809 	jalr	v0
    1b84:	02202021 	move	a0,s1

    /* hook the interrupt */

    if(request_irq(netdev->irq, &e1000_intr,
    1b88:	8e640024 	lw	a0,36(s3)
    1b8c:	3c050000 	lui	a1,0x0
    1b90:	24a50000 	addiu	a1,a1,0
    1b94:	3c070000 	lui	a3,0x0
    1b98:	24e70000 	addiu	a3,a3,0
    1b9c:	3c060200 	lui	a2,0x200
    1ba0:	3c020000 	lui	v0,0x0
    1ba4:	24420000 	addiu	v0,v0,0
    1ba8:	0040f809 	jalr	v0
    1bac:	afb30010 	sw	s3,16(sp)
    1bb0:	5040001b 	beqzl	v0,1c20 <e1000_open+0x1d0>
    1bb4:	263000d0 	addiu	s0,s1,208
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    1bb8:	c2020000 	ll	v0,0(s0)
    1bbc:	2401fffe 	li	at,-2
    1bc0:	00411024 	and	v0,v0,at
    1bc4:	e2020000 	sc	v0,0(s0)
    1bc8:	1040fffb 	beqz	v0,1bb8 <e1000_open+0x168>
    1bcc:	00000000 	nop
                   SA_SHIRQ, e1000_driver_name, netdev) != 0) {
        clear_bit(E1000_BOARD_OPEN, &adapter->flags);
        e1000_adapter_stop(&adapter->shared);
    1bd0:	3c020000 	lui	v0,0x0
    1bd4:	24420000 	addiu	v0,v0,0
    1bd8:	0040f809 	jalr	v0
    1bdc:	26240008 	addiu	a0,s1,8
        e1000_free_tx_resources(adapter);
    1be0:	3c020000 	lui	v0,0x0
    1be4:	244226b4 	addiu	v0,v0,9908
    1be8:	0040f809 	jalr	v0
    1bec:	02202021 	move	a0,s1
        e1000_free_rx_resources(adapter);
    1bf0:	3c020000 	lui	v0,0x0
    1bf4:	2442284c 	addiu	v0,v0,10316
    1bf8:	0040f809 	jalr	v0
    1bfc:	02202021 	move	a0,s1
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    1c00:	c2030000 	ll	v1,0(s0)
    1c04:	2401fffe 	li	at,-2
    1c08:	00611824 	and	v1,v1,at
    1c0c:	e2030000 	sc	v1,0(s0)
    1c10:	1060fffb 	beqz	v1,1c00 <e1000_open+0x1b0>
    1c14:	00000000 	nop
        clear_bit(E1000_BOARD_OPEN, &adapter->flags);
        return -EBUSY;
    1c18:	08000743 	j	1d0c <e1000_open+0x2bc>
    1c1c:	2402fff0 	li	v0,-16
    }

    /* fill Rx ring with sk_buffs */

    tasklet_init(&adapter->rx_fill_tasklet, e1000_alloc_rx_buffers,
    1c20:	3c050000 	lui	a1,0x0
    1c24:	24a55e30 	addiu	a1,a1,24112
    1c28:	02002021 	move	a0,s0
    1c2c:	3c020000 	lui	v0,0x0
    1c30:	24420000 	addiu	v0,v0,0
    1c34:	0040f809 	jalr	v0
    1c38:	02203021 	move	a2,s1
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    1c3c:	c22400d4 	ll	a0,212(s1)
    1c40:	00921825 	or	v1,a0,s2
    1c44:	e22300d4 	sc	v1,212(s1)
    1c48:	1060fffc 	beqz	v1,1c3c <e1000_open+0x1ec>
    1c4c:	00921824 	and	v1,a0,s2
extern void FASTCALL(__tasklet_schedule(struct tasklet_struct *t));

static inline void tasklet_schedule(struct tasklet_struct *t)
{
	if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
    1c50:	54600006 	bnezl	v1,1c6c <e1000_open+0x21c>
    1c54:	26240094 	addiu	a0,s1,148
		__tasklet_schedule(t);
    1c58:	3c020000 	lui	v0,0x0
    1c5c:	24420000 	addiu	v0,v0,0
    1c60:	0040f809 	jalr	v0
    1c64:	02002021 	move	a0,s0

extern void it_real_fn(unsigned long);

static inline void init_timer(struct timer_list * timer)
{
    1c68:	26240094 	addiu	a0,s1,148
                 (unsigned long) adapter);

    tasklet_schedule(&adapter->rx_fill_tasklet);

    /* Set the watchdog timer for 2 seconds */

    init_timer(&adapter->timer_id);
    adapter->timer_id.function = &e1000_watchdog;
    1c6c:	3c020000 	lui	v0,0x0
    1c70:	24420000 	addiu	v0,v0,0
extern void it_real_fn(unsigned long);

static inline void init_timer(struct timer_list * timer)
{
	timer->list.next = timer->list.prev = NULL;
    1c74:	ac800004 	sw	zero,4(a0)
    1c78:	ac800000 	sw	zero,0(a0)
    1c7c:	ae2200a4 	sw	v0,164(s1)
    adapter->timer_id.data = (unsigned long) netdev;
    1c80:	ae3300a0 	sw	s3,160(s1)
    mod_timer(&adapter->timer_id, (jiffies + 2 * HZ));
    1c84:	3c050000 	lui	a1,0x0
    1c88:	8ca50000 	lw	a1,0(a1)
    1c8c:	3c020000 	lui	v0,0x0
    1c90:	24420000 	addiu	v0,v0,0
    1c94:	0040f809 	jalr	v0
    1c98:	24a500c8 	addiu	a1,a1,200

    /* stats accumulated while down are dropped
     * this does not clear the running total
     */

    e1000_clear_hw_cntrs(&adapter->shared);
    1c9c:	3c020000 	lui	v0,0x0
    1ca0:	24420000 	addiu	v0,v0,0
    1ca4:	0040f809 	jalr	v0
    1ca8:	26240008 	addiu	a0,s1,8

    adapter->int_mask = IMS_ENABLE_MASK;
    1cac:	2403009d 	li	v1,157
    1cb0:	ae2300cc 	sw	v1,204(s1)
    e1000_irq_enable(adapter);
    1cb4:	3c020000 	lui	v0,0x0
    1cb8:	244274ac 	addiu	v0,v0,29868
    1cbc:	0040f809 	jalr	v0
    1cc0:	02202021 	move	a0,s1
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    1cc4:	c264002c 	ll	a0,44(s3)
    1cc8:	2401fffe 	li	at,-2
    1ccc:	00812024 	and	a0,a0,at
    1cd0:	e264002c 	sc	a0,44(s3)
    1cd4:	1080fffb 	beqz	a0,1cc4 <e1000_open+0x274>
    1cd8:	00000000 	nop
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    1cdc:	3c030000 	lui	v1,0x0
    1ce0:	24630010 	addiu	v1,v1,16
	unsigned long temp;

	__asm__ __volatile__(
    1ce4:	c0620000 	ll	v0,0(v1)
    1ce8:	00521021 	addu	v0,v0,s2
    1cec:	e0620000 	sc	v0,0(v1)
    1cf0:	1040fffc 	beqz	v0,1ce4 <e1000_open+0x294>
    1cf4:	00000000 	nop
    netif_start_queue(netdev);

#ifdef MODULE

    /* Incrementing the module use count prevents a driver from being
     * unloaded while an active network interface is using it.
     */
    MOD_INC_USE_COUNT;
    1cf8:	24630004 	addiu	v1,v1,4
    1cfc:	8c640000 	lw	a0,0(v1)

#endif

    return 0;
    1d00:	00001021 	move	v0,zero
    1d04:	34840018 	ori	a0,a0,0x18
    1d08:	ac640000 	sw	a0,0(v1)
}
    1d0c:	8fbf0028 	lw	ra,40(sp)
    1d10:	8fb30024 	lw	s3,36(sp)
    1d14:	8fb20020 	lw	s2,32(sp)
    1d18:	8fb1001c 	lw	s1,28(sp)
    1d1c:	8fb00018 	lw	s0,24(sp)
    1d20:	03e00008 	jr	ra
    1d24:	27bd0030 	addiu	sp,sp,48

00001d28 <e1000_close>:
    1d28:	27bdffd8 	addiu	sp,sp,-40
    1d2c:	afb3001c 	sw	s3,28(sp)
    1d30:	afb20018 	sw	s2,24(sp)
    1d34:	afb10014 	sw	s1,20(sp)
    1d38:	afbf0020 	sw	ra,32(sp)
    1d3c:	afb00010 	sw	s0,16(sp)
    1d40:	00808821 	move	s1,a0

/**
 * e1000_close - Disables a network interface
 * @netdev: network interface device structure
 *
 * Returns 0, this is not allowed to fail
 *
 * The close entry point is called when an interface is de-activated
 * by the OS.  The hardware is still under the drivers control, but
 * needs to be disabled.  A global MAC reset is issued to stop the
 * hardware, and all transmit and receive resources are freed.
 **/

int
e1000_close(struct net_device *netdev)
{
    struct e1000_adapter *adapter = netdev->priv;
    1d44:	8e300064 	lw	s0,100(s1)

    E1000_DBG("e1000_close\n");

    if(!test_bit(E1000_BOARD_OPEN, &adapter->flags))
        return 0;

    /* Issue a global reset */

    e1000_adapter_stop((&adapter->shared));
    1d48:	3c050000 	lui	a1,0x0
    1d4c:	24a50000 	addiu	a1,a1,0
    1d50:	00001021 	move	v0,zero
 * @nr: bit number to test
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
    1d54:	2613008c 	addiu	s3,s0,140
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    1d58:	8e630000 	lw	v1,0(s3)
    1d5c:	26120008 	addiu	s2,s0,8
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    1d60:	30630001 	andi	v1,v1,0x1
    1d64:	10600037 	beqz	v1,1e44 <e1000_close+0x11c>
    1d68:	02402021 	move	a0,s2
    1d6c:	00a0f809 	jalr	a1
    1d70:	00000000 	nop

    /* Enable receiver unit after Global reset
     * for WOL, so that receiver can still recive
     * wake up packet and will not drop it.
     */
    if(adapter->shared.mac_type > e1000_82543)
    1d74:	8e02000c 	lw	v0,12(s0)
    1d78:	2c430002 	sltiu	v1,v0,2
    1d7c:	2c420003 	sltiu	v0,v0,3
    1d80:	14400003 	bnez	v0,1d90 <e1000_close+0x68>
    1d84:	3c020200 	lui	v0,0x200
        E1000_WRITE_REG(&adapter->shared, RCTL, E1000_RCTL_EN);
    1d88:	8e430000 	lw	v1,0(s2)
    1d8c:	ac620100 	sw	v0,256(v1)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    1d90:	c222002c 	ll	v0,44(s1)
    1d94:	34420001 	ori	v0,v0,0x1
    1d98:	e222002c 	sc	v0,44(s1)
    1d9c:	1040fffc 	beqz	v0,1d90 <e1000_close+0x68>
    1da0:	00000000 	nop

    /* free OS resources */

    netif_stop_queue(netdev);
    free_irq(netdev->irq, netdev);
    1da4:	8e240024 	lw	a0,36(s1)
    1da8:	3c020000 	lui	v0,0x0
    1dac:	24420000 	addiu	v0,v0,0
    1db0:	0040f809 	jalr	v0
    1db4:	02202821 	move	a1,s1
    del_timer_sync(&adapter->timer_id);
    1db8:	3c020000 	lui	v0,0x0
    1dbc:	24420000 	addiu	v0,v0,0
    1dc0:	0040f809 	jalr	v0
    1dc4:	26040094 	addiu	a0,s0,148

    /* Make sure the tasklet won't be left after ifconfig down */

    /*
     * Assumption: tasklet is ALREADY enabled, ie, t->count == 0.
     * Otherwise, tasklet is still left in the tasklet list, and,
     * tasklet_kill will not be able to return (hang).
     */
    tasklet_kill(&adapter->rx_fill_tasklet);
    1dc8:	3c020000 	lui	v0,0x0
    1dcc:	24420000 	addiu	v0,v0,0
    1dd0:	0040f809 	jalr	v0
    1dd4:	260400d0 	addiu	a0,s0,208

    /* free software resources */

    e1000_free_tx_resources(adapter);
    1dd8:	3c020000 	lui	v0,0x0
    1ddc:	244226b4 	addiu	v0,v0,9908
    1de0:	0040f809 	jalr	v0
    1de4:	02002021 	move	a0,s0
    e1000_free_rx_resources(adapter);
    1de8:	3c020000 	lui	v0,0x0
    1dec:	2442284c 	addiu	v0,v0,10316
    1df0:	0040f809 	jalr	v0
    1df4:	02002021 	move	a0,s0
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    1df8:	24030001 	li	v1,1
    1dfc:	3c020000 	lui	v0,0x0
    1e00:	24420010 	addiu	v0,v0,16
	unsigned long temp;

	__asm__ __volatile__(
    1e04:	c0440000 	ll	a0,0(v0)
    1e08:	00832023 	subu	a0,a0,v1
    1e0c:	e0440000 	sc	a0,0(v0)
    1e10:	1080fffc 	beqz	a0,1e04 <e1000_close+0xdc>
    1e14:	00000000 	nop

#ifdef MODULE

    /* decrement the module usage count
     * so that the driver can be unloaded
     */
    MOD_DEC_USE_COUNT;
    1e18:	24420004 	addiu	v0,v0,4
    1e1c:	8c430000 	lw	v1,0(v0)
    1e20:	34630008 	ori	v1,v1,0x8
    1e24:	ac430000 	sw	v1,0(v0)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    1e28:	c2640000 	ll	a0,0(s3)
    1e2c:	2401fffe 	li	at,-2
    1e30:	00812024 	and	a0,a0,at
    1e34:	e2640000 	sc	a0,0(s3)
    1e38:	1080fffb 	beqz	a0,1e28 <e1000_close+0x100>
    1e3c:	00000000 	nop

#endif

    clear_bit(E1000_BOARD_OPEN, &adapter->flags);
    return 0;
    1e40:	00001021 	move	v0,zero
}
    1e44:	8fbf0020 	lw	ra,32(sp)
    1e48:	8fb3001c 	lw	s3,28(sp)
    1e4c:	8fb20018 	lw	s2,24(sp)
    1e50:	8fb10014 	lw	s1,20(sp)
    1e54:	8fb00010 	lw	s0,16(sp)
    1e58:	03e00008 	jr	ra
    1e5c:	27bd0028 	addiu	sp,sp,40

00001e60 <e1000_setup_tx_resources>:
    1e60:	27bdffd8 	addiu	sp,sp,-40
    1e64:	afb3001c 	sw	s3,28(sp)
    1e68:	afb10014 	sw	s1,20(sp)
    1e6c:	afb00010 	sw	s0,16(sp)
    1e70:	00808821 	move	s1,a0
    1e74:	afbf0020 	sw	ra,32(sp)
    1e78:	afb20018 	sw	s2,24(sp)

/**
 * e1000_setup_tx_resources - allocate Tx resources (Descriptors)
 * @adapter: board private structure
 *
 * Return 0 on success, negative on failure
 *
 * e1000_setup_tx_resources allocates all software transmit resources
 * and enabled the Tx unit of the MAC.
 **/

static int
e1000_setup_tx_resources(struct e1000_adapter *adapter)
{
    struct pci_dev *pdev = adapter->pdev;
    int size;

    E1000_DBG("e1000_setup_tx_resources\n");

    size = sizeof(struct e1000_buffer) * adapter->tx_ring.count;
    1e7c:	8e2300f0 	lw	v1,240(s1)
    adapter->tx_ring.buffer_info = kmalloc(size, GFP_KERNEL);
    1e80:	240501f0 	li	a1,496
    1e84:	3c020000 	lui	v0,0x0
    1e88:	24420000 	addiu	v0,v0,0
    1e8c:	00038040 	sll	s0,v1,0x1
    1e90:	02038021 	addu	s0,s0,v1
    1e94:	001080c0 	sll	s0,s0,0x3
    1e98:	02002021 	move	a0,s0
    1e9c:	0040f809 	jalr	v0
    1ea0:	8e32014c 	lw	s2,332(s1)
    1ea4:	00401821 	move	v1,v0
    if(adapter->tx_ring.buffer_info == NULL) {
        return -ENOMEM;
    }
    memset(adapter->tx_ring.buffer_info, 0, size);
    1ea8:	3c130000 	lui	s3,0x0
    1eac:	26730000 	addiu	s3,s3,0
    1eb0:	00602021 	move	a0,v1
    1eb4:	02003021 	move	a2,s0
    1eb8:	00002821 	move	a1,zero
    1ebc:	ae230100 	sw	v1,256(s1)
    1ec0:	10600020 	beqz	v1,1f44 <e1000_setup_tx_resources+0xe4>
    1ec4:	2402fff4 	li	v0,-12
    1ec8:	0260f809 	jalr	s3
    1ecc:	00000000 	nop

    /* round up to nearest 4K */

    adapter->tx_ring.size = E1000_ROUNDUP2(adapter->tx_ring.count *
    1ed0:	8e2300f0 	lw	v1,240(s1)
    1ed4:	2405f000 	li	a1,-4096
                                           sizeof(struct e1000_tx_desc),
                                           4096);

    adapter->tx_ring.desc = pci_alloc_consistent(pdev, adapter->tx_ring.size,
    1ed8:	02402021 	move	a0,s2
    1edc:	00031900 	sll	v1,v1,0x4
    1ee0:	24630fff 	addiu	v1,v1,4095
    1ee4:	00651824 	and	v1,v1,a1
    1ee8:	00602821 	move	a1,v1
    1eec:	ae2300ec 	sw	v1,236(s1)
    1ef0:	3c020000 	lui	v0,0x0
    1ef4:	24420000 	addiu	v0,v0,0
    1ef8:	0040f809 	jalr	v0
    1efc:	262600e8 	addiu	a2,s1,232
                                                 &adapter->tx_ring.dma);
    if(adapter->tx_ring.desc == NULL) {
        kfree(adapter->tx_ring.buffer_info);
        return -ENOMEM;
    }
    memset(adapter->tx_ring.desc, 0, adapter->tx_ring.size);
    1f00:	00402021 	move	a0,v0
    1f04:	00002821 	move	a1,zero
    1f08:	3c030000 	lui	v1,0x0
    1f0c:	24630000 	addiu	v1,v1,0
    1f10:	14400005 	bnez	v0,1f28 <e1000_setup_tx_resources+0xc8>
    1f14:	ae2200e4 	sw	v0,228(s1)
    1f18:	0060f809 	jalr	v1
    1f1c:	8e240100 	lw	a0,256(s1)
    1f20:	080007d1 	j	1f44 <e1000_setup_tx_resources+0xe4>
    1f24:	2402fff4 	li	v0,-12
    1f28:	0260f809 	jalr	s3
    1f2c:	8e2600ec 	lw	a2,236(s1)

    atomic_set(&adapter->tx_ring.unused, adapter->tx_ring.count);
    1f30:	8e2300f0 	lw	v1,240(s1)
    adapter->tx_ring.next_to_use = 0;
    adapter->tx_ring.next_to_clean = 0;
    1f34:	ae2000fc 	sw	zero,252(s1)
    1f38:	ae2000f8 	sw	zero,248(s1)
    1f3c:	ae2300f4 	sw	v1,244(s1)

    return 0;
    1f40:	00001021 	move	v0,zero
}
    1f44:	8fbf0020 	lw	ra,32(sp)
    1f48:	8fb3001c 	lw	s3,28(sp)
    1f4c:	8fb20018 	lw	s2,24(sp)
    1f50:	8fb10014 	lw	s1,20(sp)
    1f54:	8fb00010 	lw	s0,16(sp)
    1f58:	03e00008 	jr	ra
    1f5c:	27bd0028 	addiu	sp,sp,40

00001f60 <e1000_configure_tx>:
    1f60:	00803821 	move	a3,a0

/**
 * e1000_configure_tx - Configure 8254x Transmit Unit after Reset
 * @adapter: board private structure
 *
 * Configure the Tx unit of the MAC after a reset.
 **/

static void
e1000_configure_tx(struct e1000_adapter *adapter)
{
    uint32_t tctl, tipg;
    1f64:	8ce2000c 	lw	v0,12(a3)
    1f68:	2c420002 	sltiu	v0,v0,2
    1f6c:	1440000e 	bnez	v0,1fa8 <e1000_configure_tx+0x48>
    1f70:	8ce500e8 	lw	a1,232(a3)
    1f74:	8ce60008 	lw	a2,8(a3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    1f78:	30a4ff00 	andi	a0,a1,0xff00
    1f7c:	00051600 	sll	v0,a1,0x18
    1f80:	00051a02 	srl	v1,a1,0x8
    1f84:	00042200 	sll	a0,a0,0x8
    1f88:	00441025 	or	v0,v0,a0
    1f8c:	3063ff00 	andi	v1,v1,0xff00
    1f90:	00431025 	or	v0,v0,v1
    1f94:	00052e02 	srl	a1,a1,0x18
    1f98:	00451025 	or	v0,v0,a1

    /* Setup the Base and Length of the Rx Descriptor Ring */
    /* tx_ring.dma can be either a 32 or 64 bit value */

#if (BITS_PER_LONG == 32)
    E1000_WRITE_REG(&adapter->shared, TDBAL, adapter->tx_ring.dma);
    1f9c:	acc23800 	sw	v0,14336(a2)
    1fa0:	080007f6 	j	1fd8 <e1000_configure_tx+0x78>
    1fa4:	8ce2000c 	lw	v0,12(a3)
    1fa8:	8ce60008 	lw	a2,8(a3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    1fac:	30a4ff00 	andi	a0,a1,0xff00
    1fb0:	00051600 	sll	v0,a1,0x18
    1fb4:	00051a02 	srl	v1,a1,0x8
    1fb8:	00042200 	sll	a0,a0,0x8
    1fbc:	00441025 	or	v0,v0,a0
    1fc0:	3063ff00 	andi	v1,v1,0xff00
    1fc4:	00431025 	or	v0,v0,v1
    1fc8:	00052e02 	srl	a1,a1,0x18
    1fcc:	00451025 	or	v0,v0,a1
    1fd0:	acc20420 	sw	v0,1056(a2)
    1fd4:	8ce2000c 	lw	v0,12(a3)
    1fd8:	2c420002 	sltiu	v0,v0,2
    1fdc:	14400004 	bnez	v0,1ff0 <e1000_configure_tx+0x90>
    1fe0:	8ce20008 	lw	v0,8(a3)
    E1000_WRITE_REG(&adapter->shared, TDBAH, 0);
    1fe4:	ac403804 	sw	zero,14340(v0)
    1fe8:	080007fe 	j	1ff8 <e1000_configure_tx+0x98>
    1fec:	8ce2000c 	lw	v0,12(a3)
    1ff0:	ac400424 	sw	zero,1060(v0)
    1ff4:	8ce2000c 	lw	v0,12(a3)
    1ff8:	2c420002 	sltiu	v0,v0,2
    1ffc:	1440000f 	bnez	v0,203c <e1000_configure_tx+0xdc>
    2000:	8ce400f0 	lw	a0,240(a3)
    2004:	8ce60008 	lw	a2,8(a3)
    2008:	00042100 	sll	a0,a0,0x4
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    200c:	3085ff00 	andi	a1,a0,0xff00
    2010:	00041600 	sll	v0,a0,0x18
    2014:	00041a02 	srl	v1,a0,0x8
    2018:	00052a00 	sll	a1,a1,0x8
    201c:	00451025 	or	v0,v0,a1
    2020:	3063ff00 	andi	v1,v1,0xff00
    2024:	00431025 	or	v0,v0,v1
    2028:	00042602 	srl	a0,a0,0x18
    202c:	00441025 	or	v0,v0,a0
#elif ( BITS_PER_LONG == 64)
    E1000_WRITE_REG(&adapter->shared, TDBAL,
                    (uint32_t) (adapter->tx_ring.dma & 0x00000000FFFFFFFF));
    E1000_WRITE_REG(&adapter->shared, TDBAH,
                    (uint32_t) (adapter->tx_ring.dma >> 32));
#else
#error "Unsupported System - does not use 32 or 64 bit pointers!"
#endif

    E1000_WRITE_REG(&adapter->shared, TDLEN,
    2030:	acc23808 	sw	v0,14344(a2)
    2034:	0800081c 	j	2070 <e1000_configure_tx+0x110>
    2038:	8ce2000c 	lw	v0,12(a3)
    203c:	8ce60008 	lw	a2,8(a3)
    2040:	00042100 	sll	a0,a0,0x4
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2044:	3085ff00 	andi	a1,a0,0xff00
    2048:	00041600 	sll	v0,a0,0x18
    204c:	00041a02 	srl	v1,a0,0x8
    2050:	00052a00 	sll	a1,a1,0x8
    2054:	00451025 	or	v0,v0,a1
    2058:	3063ff00 	andi	v1,v1,0xff00
    205c:	00431025 	or	v0,v0,v1
    2060:	00042602 	srl	a0,a0,0x18
    2064:	00441025 	or	v0,v0,a0
    2068:	acc20428 	sw	v0,1064(a2)
    206c:	8ce2000c 	lw	v0,12(a3)
    2070:	2c420002 	sltiu	v0,v0,2
    2074:	14400004 	bnez	v0,2088 <e1000_configure_tx+0x128>
    2078:	8ce20008 	lw	v0,8(a3)
                    adapter->tx_ring.count * sizeof(struct e1000_tx_desc));

    /* Setup the HW Tx Head and Tail descriptor pointers */

    E1000_WRITE_REG(&adapter->shared, TDH, 0);
    207c:	ac403810 	sw	zero,14352(v0)
    2080:	08000824 	j	2090 <e1000_configure_tx+0x130>
    2084:	8ce2000c 	lw	v0,12(a3)
    2088:	ac400430 	sw	zero,1072(v0)
    208c:	8ce2000c 	lw	v0,12(a3)
    2090:	2c420002 	sltiu	v0,v0,2
    2094:	14400004 	bnez	v0,20a8 <e1000_configure_tx+0x148>
    2098:	8ce20008 	lw	v0,8(a3)
    E1000_WRITE_REG(&adapter->shared, TDT, 0);
    209c:	ac403818 	sw	zero,14360(v0)
    20a0:	0800082c 	j	20b0 <e1000_configure_tx+0x150>
    20a4:	8ce4000c 	lw	a0,12(a3)
    20a8:	ac400438 	sw	zero,1080(v0)

    /* Set the default values for the Tx Inter Packet Gap timer */

    switch (adapter->shared.mac_type) {
    20ac:	8ce4000c 	lw	a0,12(a3)
    20b0:	2c820002 	sltiu	v0,a0,2
    20b4:	1440000d 	bnez	v0,20ec <e1000_configure_tx+0x18c>
    20b8:	3c0600a0 	lui	a2,0xa0
    20bc:	2c820004 	sltiu	v0,a0,4
    20c0:	5040000b 	beqzl	v0,20f0 <e1000_configure_tx+0x190>
    20c4:	34c6080a 	ori	a2,a2,0x80a
    case e1000_82543:
    case e1000_82544:
        if(adapter->shared.media_type == e1000_media_type_fiber)
    20c8:	8ce30010 	lw	v1,16(a3)
    20cc:	24020001 	li	v0,1
    20d0:	10620002 	beq	v1,v0,20dc <e1000_configure_tx+0x17c>
    20d4:	24060006 	li	a2,6
            tipg = DEFAULT_82543_TIPG_IPGT_FIBER;
        else
            tipg = DEFAULT_82543_TIPG_IPGT_COPPER;
    20d8:	24060008 	li	a2,8
        tipg |= DEFAULT_82543_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
        tipg |= DEFAULT_82543_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
    20dc:	3c020060 	lui	v0,0x60
    20e0:	34422000 	ori	v0,v0,0x2000
        break;
    20e4:	0800083c 	j	20f0 <e1000_configure_tx+0x190>
    20e8:	00c23025 	or	a2,a2,v0
    case e1000_82542_rev2_0:
    case e1000_82542_rev2_1:
    default:
        tipg = DEFAULT_82542_TIPG_IPGT;
        tipg |= DEFAULT_82542_TIPG_IPGR1 << E1000_TIPG_IPGR1_SHIFT;
        tipg |= DEFAULT_82542_TIPG_IPGR2 << E1000_TIPG_IPGR2_SHIFT;
    20ec:	34c6080a 	ori	a2,a2,0x80a
        break;
    }
    20f0:	2c820002 	sltiu	v0,a0,2
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    20f4:	30c3ff00 	andi	v1,a2,0xff00
    20f8:	00031a00 	sll	v1,v1,0x8
    20fc:	00061600 	sll	v0,a2,0x18
    2100:	00062202 	srl	a0,a2,0x8
    2104:	00431025 	or	v0,v0,v1
    2108:	3084ff00 	andi	a0,a0,0xff00
    E1000_WRITE_REG(&adapter->shared, TIPG, tipg);
    210c:	8ce50008 	lw	a1,8(a3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2110:	00441025 	or	v0,v0,a0
    2114:	00061e02 	srl	v1,a2,0x18
    2118:	00431025 	or	v0,v0,v1
    211c:	aca20410 	sw	v0,1040(a1)
    2120:	8ce2000c 	lw	v0,12(a3)
    2124:	2c420002 	sltiu	v0,v0,2
    2128:	1440000e 	bnez	v0,2164 <e1000_configure_tx+0x204>
    212c:	8ce50104 	lw	a1,260(a3)
    2130:	8ce60008 	lw	a2,8(a3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2134:	30a4ff00 	andi	a0,a1,0xff00
    2138:	00051600 	sll	v0,a1,0x18
    213c:	00051a02 	srl	v1,a1,0x8
    2140:	00042200 	sll	a0,a0,0x8
    2144:	00441025 	or	v0,v0,a0
    2148:	3063ff00 	andi	v1,v1,0xff00
    214c:	00431025 	or	v0,v0,v1
    2150:	00052e02 	srl	a1,a1,0x18
    2154:	00451025 	or	v0,v0,a1

    /* Set the Tx Interrupt Delay register */

    E1000_WRITE_REG(&adapter->shared, TIDV, adapter->tx_int_delay);
    2158:	acc23820 	sw	v0,14368(a2)
    215c:	08000865 	j	2194 <e1000_configure_tx+0x234>
    2160:	8ce2000c 	lw	v0,12(a3)
    2164:	8ce60008 	lw	a2,8(a3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2168:	30a4ff00 	andi	a0,a1,0xff00
    216c:	00051600 	sll	v0,a1,0x18
    2170:	00051a02 	srl	v1,a1,0x8
    2174:	00042200 	sll	a0,a0,0x8
    2178:	00441025 	or	v0,v0,a0
    217c:	3063ff00 	andi	v1,v1,0xff00
    2180:	00431025 	or	v0,v0,v1
    2184:	00052e02 	srl	a1,a1,0x18
    2188:	00451025 	or	v0,v0,a1
    218c:	acc20440 	sw	v0,1088(a2)

    /* Program the Transmit Control Register */

    tctl =
        E1000_TCTL_PSP | E1000_TCTL_EN | (E1000_COLLISION_THRESHOLD <<
                                          E1000_CT_SHIFT);
    if(adapter->link_duplex == FULL_DUPLEX) {
        tctl |= E1000_FDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
    } else {
        tctl |= E1000_HDX_COLLISION_DISTANCE << E1000_COLD_SHIFT;
    }
    2190:	8ce2000c 	lw	v0,12(a3)
    2194:	2c420002 	sltiu	v0,v0,2
    E1000_WRITE_REG(&adapter->shared, TCTL, tctl);
    2198:	8ce30008 	lw	v1,8(a3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    219c:	3c020a01 	lui	v0,0xa01
    21a0:	34420400 	ori	v0,v0,0x400
    21a4:	ac620400 	sw	v0,1024(v1)

#if defined(CONFIG_PPC) || defined(CONFIG_MIPS)
    if(adapter->shared.mac_type >= e1000_82543) {
    21a8:	8ce2000c 	lw	v0,12(a3)
    21ac:	2c420002 	sltiu	v0,v0,2
    21b0:	54400005 	bnezl	v0,21c8 <e1000_configure_tx+0x268>
    21b4:	8ce30104 	lw	v1,260(a3)
        E1000_WRITE_REG(&adapter->shared, TXDCTL, 0x00020000);
    21b8:	8ce30008 	lw	v1,8(a3)
    21bc:	24020200 	li	v0,512
    21c0:	ac623828 	sw	v0,14376(v1)
    }
#endif

    /* Setup Transmit Descriptor Settings for this adapter */
    adapter->TxdCmd = E1000_TXD_CMD_IFCS;

    if(adapter->tx_int_delay > 0)
    21c4:	8ce30104 	lw	v1,260(a3)
    21c8:	3c020200 	lui	v0,0x200
    21cc:	10600003 	beqz	v1,21dc <e1000_configure_tx+0x27c>
    21d0:	ace20108 	sw	v0,264(a3)
        adapter->TxdCmd |= E1000_TXD_CMD_IDE;
    21d4:	3c028200 	lui	v0,0x8200
    21d8:	ace20108 	sw	v0,264(a3)
    if(adapter->shared.report_tx_early == 1)
    21dc:	8ce3006c 	lw	v1,108(a3)
    21e0:	24020001 	li	v0,1
    21e4:	14620003 	bne	v1,v0,21f4 <e1000_configure_tx+0x294>
    21e8:	8ce20108 	lw	v0,264(a3)
        adapter->TxdCmd |= E1000_TXD_CMD_RS;
    21ec:	0800087e 	j	21f8 <e1000_configure_tx+0x298>
    21f0:	3c030800 	lui	v1,0x800
    else
        adapter->TxdCmd |= E1000_TXD_CMD_RPS;
    21f4:	3c031000 	lui	v1,0x1000
    21f8:	00431025 	or	v0,v0,v1
    21fc:	ace20108 	sw	v0,264(a3)

    adapter->ActiveChecksumContext = OFFLOAD_NONE;

    return;
}
    2200:	03e00008 	jr	ra
    2204:	ace001b4 	sw	zero,436(a3)

00002208 <e1000_setup_rx_resources>:
    2208:	27bdffd8 	addiu	sp,sp,-40
    220c:	afb3001c 	sw	s3,28(sp)
    2210:	afb10014 	sw	s1,20(sp)
    2214:	afb00010 	sw	s0,16(sp)
    2218:	00808821 	move	s1,a0
    221c:	afbf0020 	sw	ra,32(sp)
    2220:	afb20018 	sw	s2,24(sp)

/**
 * e1000_setup_rx_resources - allocate Rx resources (Descriptors, receive SKBs)
 * @adapter: board private structure
 * 
 * Returns 0 on success, negative on failure
 *
 * e1000_setup_rx_resources allocates all software receive resources
 * and network buffers, and enables the Rx unit of the MAC.
 **/

static int
e1000_setup_rx_resources(struct e1000_adapter *adapter)
{
    struct pci_dev *pdev = adapter->pdev;
    int size;

    E1000_DBG("e1000_setup_rx_resources\n");

    size = sizeof(struct e1000_buffer) * adapter->rx_ring.count;
    2224:	8e23011c 	lw	v1,284(s1)
    adapter->rx_ring.buffer_info = kmalloc(size, GFP_KERNEL);
    2228:	240501f0 	li	a1,496
    222c:	3c020000 	lui	v0,0x0
    2230:	24420000 	addiu	v0,v0,0
    2234:	00038040 	sll	s0,v1,0x1
    2238:	02038021 	addu	s0,s0,v1
    223c:	001080c0 	sll	s0,s0,0x3
    2240:	02002021 	move	a0,s0
    2244:	0040f809 	jalr	v0
    2248:	8e32014c 	lw	s2,332(s1)
    224c:	00401821 	move	v1,v0
    if(adapter->rx_ring.buffer_info == NULL) {
        return -ENOMEM;
    }
    memset(adapter->rx_ring.buffer_info, 0, size);
    2250:	3c130000 	lui	s3,0x0
    2254:	26730000 	addiu	s3,s3,0
    2258:	00602021 	move	a0,v1
    225c:	02003021 	move	a2,s0
    2260:	00002821 	move	a1,zero
    2264:	ae23012c 	sw	v1,300(s1)
    2268:	10600020 	beqz	v1,22ec <e1000_setup_rx_resources+0xe4>
    226c:	2402fff4 	li	v0,-12
    2270:	0260f809 	jalr	s3
    2274:	00000000 	nop

    /* Round up to nearest 4K */

    adapter->rx_ring.size = E1000_ROUNDUP2(adapter->rx_ring.count *
    2278:	8e23011c 	lw	v1,284(s1)
    227c:	2405f000 	li	a1,-4096
                                           sizeof(struct e1000_rx_desc),
                                           4096);

    adapter->rx_ring.desc = pci_alloc_consistent(pdev, adapter->rx_ring.size, 
    2280:	02402021 	move	a0,s2
    2284:	00031900 	sll	v1,v1,0x4
    2288:	24630fff 	addiu	v1,v1,4095
    228c:	00651824 	and	v1,v1,a1
    2290:	00602821 	move	a1,v1
    2294:	ae230118 	sw	v1,280(s1)
    2298:	3c020000 	lui	v0,0x0
    229c:	24420000 	addiu	v0,v0,0
    22a0:	0040f809 	jalr	v0
    22a4:	26260114 	addiu	a2,s1,276
                                                 &adapter->rx_ring.dma);

    if(adapter->rx_ring.desc == NULL) {
        kfree(adapter->rx_ring.buffer_info);
        return -ENOMEM;
    }
    memset(adapter->rx_ring.desc, 0, adapter->rx_ring.size);
    22a8:	00402021 	move	a0,v0
    22ac:	00002821 	move	a1,zero
    22b0:	3c030000 	lui	v1,0x0
    22b4:	24630000 	addiu	v1,v1,0
    22b8:	14400005 	bnez	v0,22d0 <e1000_setup_rx_resources+0xc8>
    22bc:	ae220110 	sw	v0,272(s1)
    22c0:	0060f809 	jalr	v1
    22c4:	8e24012c 	lw	a0,300(s1)
    22c8:	080008bb 	j	22ec <e1000_setup_rx_resources+0xe4>
    22cc:	2402fff4 	li	v0,-12
    22d0:	0260f809 	jalr	s3
    22d4:	8e260118 	lw	a2,280(s1)

    adapter->rx_ring.next_to_clean = 0;
    atomic_set(&adapter->rx_ring.unused, adapter->rx_ring.count);
    22d8:	8e23011c 	lw	v1,284(s1)

    adapter->rx_ring.next_to_use = 0;
    22dc:	ae200124 	sw	zero,292(s1)
    22e0:	ae200128 	sw	zero,296(s1)
    22e4:	ae230120 	sw	v1,288(s1)

    return 0;
    22e8:	00001021 	move	v0,zero
}
    22ec:	8fbf0020 	lw	ra,32(sp)
    22f0:	8fb3001c 	lw	s3,28(sp)
    22f4:	8fb20018 	lw	s2,24(sp)
    22f8:	8fb10014 	lw	s1,20(sp)
    22fc:	8fb00010 	lw	s0,16(sp)
    2300:	03e00008 	jr	ra
    2304:	27bd0028 	addiu	sp,sp,40

00002308 <e1000_setup_rctl>:
    2308:	00802821 	move	a1,a0

/**
 * e1000_setup_rctl - configure the receive control register
 * @adapter: Board private structure
 **/

static void
e1000_setup_rctl(struct e1000_adapter *adapter)
{
    uint32_t rctl;

    /* Setup the Receive Control Register */
    rctl =
    230c:	8ca20040 	lw	v0,64(a1)
        E1000_RCTL_EN | E1000_RCTL_BAM | E1000_RCTL_LBM_NO |
        E1000_RCTL_RDMTS_HALF | (adapter->shared.
                                 mc_filter_type << E1000_RCTL_MO_SHIFT);

    if(adapter->shared.tbi_compatibility_on == 1)
    2310:	8ca40060 	lw	a0,96(a1)
    2314:	24030001 	li	v1,1
    2318:	00021300 	sll	v0,v0,0xc
    231c:	14830002 	bne	a0,v1,2328 <e1000_setup_rctl+0x20>
    2320:	34468002 	ori	a2,v0,0x8002
        rctl |= E1000_RCTL_SBP;
    2324:	34468006 	ori	a2,v0,0x8006

    switch (adapter->rx_buffer_len) {
    2328:	8ca300b8 	lw	v1,184(a1)
    232c:	24021000 	li	v0,4096
    2330:	1062000c 	beq	v1,v0,2364 <e1000_setup_rctl+0x5c>
    2334:	3c020203 	lui	v0,0x203
    2338:	2c621001 	sltiu	v0,v1,4097
    233c:	5440000c 	bnezl	v0,2370 <e1000_setup_rctl+0x68>
    2340:	8ca2000c 	lw	v0,12(a1)
    2344:	24022000 	li	v0,8192
    2348:	10620006 	beq	v1,v0,2364 <e1000_setup_rctl+0x5c>
    234c:	3c020202 	lui	v0,0x202
    2350:	24024000 	li	v0,16384
    2354:	50620003 	beql	v1,v0,2364 <e1000_setup_rctl+0x5c>
    2358:	3c020201 	lui	v0,0x201
    235c:	080008dc 	j	2370 <e1000_setup_rctl+0x68>
    2360:	8ca2000c 	lw	v0,12(a1)
    case E1000_RXBUFFER_2048:
    default:
        rctl |= E1000_RCTL_SZ_2048;
        break;
    case E1000_RXBUFFER_4096:
        rctl |= E1000_RCTL_SZ_4096 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
        break;
    case E1000_RXBUFFER_8192:
        rctl |= E1000_RCTL_SZ_8192 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
        break;
    case E1000_RXBUFFER_16384:
        rctl |= E1000_RCTL_SZ_16384 | E1000_RCTL_BSEX | E1000_RCTL_LPE;
    2364:	34420020 	ori	v0,v0,0x20
    2368:	00c23025 	or	a2,a2,v0
        break;
    }
    236c:	8ca2000c 	lw	v0,12(a1)
    2370:	2c420002 	sltiu	v0,v0,2
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2374:	30c3ff00 	andi	v1,a2,0xff00
    2378:	00031a00 	sll	v1,v1,0x8
    237c:	00061600 	sll	v0,a2,0x18
    2380:	00062202 	srl	a0,a2,0x8
    2384:	00431025 	or	v0,v0,v1

    E1000_WRITE_REG(&adapter->shared, RCTL, rctl);
    2388:	8ca50008 	lw	a1,8(a1)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    238c:	3084ff00 	andi	a0,a0,0xff00
    2390:	00441025 	or	v0,v0,a0
    2394:	00061e02 	srl	v1,a2,0x18
    2398:	00431025 	or	v0,v0,v1
    239c:	aca20100 	sw	v0,256(a1)
}
    23a0:	03e00008 	jr	ra
    23a4:	00000000 	nop

000023a8 <e1000_configure_rx>:
    23a8:	00804021 	move	t0,a0

/**
 * e1000_configure_rx - Configure 8254x Receive Unit after Reset
 * @adapter: board private structure
 *
 * Configure the Rx unit of the MAC after a reset.
 **/

static void
e1000_configure_rx(struct e1000_adapter *adapter)
{
    uint32_t rctl;
    23ac:	8d04000c 	lw	a0,12(t0)
    23b0:	00803821 	move	a3,a0
    23b4:	2ce20002 	sltiu	v0,a3,2
    uint32_t rxcsum;

    /* make sure receives are disabled while setting up the descriptor ring */
    rctl = E1000_READ_REG(&adapter->shared, RCTL);
    23b8:	8d060008 	lw	a2,8(t0)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    23bc:	8cc50100 	lw	a1,256(a2)
	return __arch__swab32(x);
    23c0:	30a3ff00 	andi	v1,a1,0xff00
    23c4:	00052600 	sll	a0,a1,0x18
    23c8:	00051202 	srl	v0,a1,0x8
    23cc:	00031a00 	sll	v1,v1,0x8
    23d0:	00832025 	or	a0,a0,v1
    23d4:	3042ff00 	andi	v0,v0,0xff00
    23d8:	00822025 	or	a0,a0,v0
    23dc:	00052e02 	srl	a1,a1,0x18
    23e0:	00854825 	or	t1,a0,a1
    23e4:	2ce20002 	sltiu	v0,a3,2
    E1000_WRITE_REG(&adapter->shared, RCTL, rctl & ~E1000_RCTL_EN);
    23e8:	2404fffd 	li	a0,-3
    23ec:	01242024 	and	a0,t1,a0
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    23f0:	312200fd 	andi	v0,t1,0xfd
    23f4:	312aff00 	andi	t2,t1,0xff00
    23f8:	00041a02 	srl	v1,a0,0x8
    23fc:	00021600 	sll	v0,v0,0x18
    2400:	000a2a00 	sll	a1,t2,0x8
    2404:	00451025 	or	v0,v0,a1
    2408:	3063ff00 	andi	v1,v1,0xff00
    240c:	00431025 	or	v0,v0,v1
    2410:	00042602 	srl	a0,a0,0x18
    2414:	00441025 	or	v0,v0,a0
    2418:	acc20100 	sw	v0,256(a2)
    241c:	8d02000c 	lw	v0,12(t0)
    2420:	2c420002 	sltiu	v0,v0,2
    2424:	14400010 	bnez	v0,2468 <e1000_configure_rx+0xc0>
    2428:	8d040130 	lw	a0,304(t0)
    242c:	3c028000 	lui	v0,0x8000
    2430:	8d060008 	lw	a2,8(t0)
    2434:	00822025 	or	a0,a0,v0
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2438:	3085ff00 	andi	a1,a0,0xff00
    243c:	00041600 	sll	v0,a0,0x18
    2440:	00041a02 	srl	v1,a0,0x8
    2444:	00052a00 	sll	a1,a1,0x8
    2448:	00451025 	or	v0,v0,a1
    244c:	3063ff00 	andi	v1,v1,0xff00
    2450:	00431025 	or	v0,v0,v1
    2454:	00042602 	srl	a0,a0,0x18
    2458:	00441025 	or	v0,v0,a0

    /* set the Receive Delay Timer Register */
    E1000_WRITE_REG(&adapter->shared, RDTR,
    245c:	acc22820 	sw	v0,10272(a2)
    2460:	08000928 	j	24a0 <e1000_configure_rx+0xf8>
    2464:	8d02000c 	lw	v0,12(t0)
    2468:	3c028000 	lui	v0,0x8000
    246c:	8d060008 	lw	a2,8(t0)
    2470:	00822025 	or	a0,a0,v0
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2474:	3085ff00 	andi	a1,a0,0xff00
    2478:	00041600 	sll	v0,a0,0x18
    247c:	00041a02 	srl	v1,a0,0x8
    2480:	00052a00 	sll	a1,a1,0x8
    2484:	00451025 	or	v0,v0,a1
    2488:	3063ff00 	andi	v1,v1,0xff00
    248c:	00431025 	or	v0,v0,v1
    2490:	00042602 	srl	a0,a0,0x18
    2494:	00441025 	or	v0,v0,a0
    2498:	acc20108 	sw	v0,264(a2)
    249c:	8d02000c 	lw	v0,12(t0)
    24a0:	2c420002 	sltiu	v0,v0,2
    24a4:	1440000e 	bnez	v0,24e0 <e1000_configure_rx+0x138>
    24a8:	8d050114 	lw	a1,276(t0)
    24ac:	8d060008 	lw	a2,8(t0)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    24b0:	30a4ff00 	andi	a0,a1,0xff00
    24b4:	00051600 	sll	v0,a1,0x18
    24b8:	00051a02 	srl	v1,a1,0x8
    24bc:	00042200 	sll	a0,a0,0x8
    24c0:	00441025 	or	v0,v0,a0
    24c4:	3063ff00 	andi	v1,v1,0xff00
    24c8:	00431025 	or	v0,v0,v1
    24cc:	00052e02 	srl	a1,a1,0x18
    24d0:	00451025 	or	v0,v0,a1
                    adapter->rx_int_delay | E1000_RDT_FPDB);

    /* Setup the Base and Length of the Rx Descriptor Ring */
    /* rx_ring.dma can be either a 32 or 64 bit value */

#if (BITS_PER_LONG == 32)
    E1000_WRITE_REG(&adapter->shared, RDBAL, adapter->rx_ring.dma);
    24d4:	acc22800 	sw	v0,10240(a2)
    24d8:	08000944 	j	2510 <e1000_configure_rx+0x168>
    24dc:	8d02000c 	lw	v0,12(t0)
    24e0:	8d060008 	lw	a2,8(t0)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    24e4:	30a4ff00 	andi	a0,a1,0xff00
    24e8:	00051600 	sll	v0,a1,0x18
    24ec:	00051a02 	srl	v1,a1,0x8
    24f0:	00042200 	sll	a0,a0,0x8
    24f4:	00441025 	or	v0,v0,a0
    24f8:	3063ff00 	andi	v1,v1,0xff00
    24fc:	00431025 	or	v0,v0,v1
    2500:	00052e02 	srl	a1,a1,0x18
    2504:	00451025 	or	v0,v0,a1
    2508:	acc20110 	sw	v0,272(a2)
    250c:	8d02000c 	lw	v0,12(t0)
    2510:	2c420002 	sltiu	v0,v0,2
    2514:	14400004 	bnez	v0,2528 <e1000_configure_rx+0x180>
    2518:	8d020008 	lw	v0,8(t0)
    E1000_WRITE_REG(&adapter->shared, RDBAH, 0);
    251c:	ac402804 	sw	zero,10244(v0)
    2520:	0800094c 	j	2530 <e1000_configure_rx+0x188>
    2524:	8d02000c 	lw	v0,12(t0)
    2528:	ac400114 	sw	zero,276(v0)
    252c:	8d02000c 	lw	v0,12(t0)
    2530:	2c420002 	sltiu	v0,v0,2
    2534:	1440000f 	bnez	v0,2574 <e1000_configure_rx+0x1cc>
    2538:	8d04011c 	lw	a0,284(t0)
    253c:	8d060008 	lw	a2,8(t0)
    2540:	00042100 	sll	a0,a0,0x4
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2544:	3085ff00 	andi	a1,a0,0xff00
    2548:	00041600 	sll	v0,a0,0x18
    254c:	00041a02 	srl	v1,a0,0x8
    2550:	00052a00 	sll	a1,a1,0x8
    2554:	00451025 	or	v0,v0,a1
    2558:	3063ff00 	andi	v1,v1,0xff00
    255c:	00431025 	or	v0,v0,v1
    2560:	00042602 	srl	a0,a0,0x18
    2564:	00441025 	or	v0,v0,a0
#elif ( BITS_PER_LONG == 64)
    E1000_WRITE_REG(&adapter->shared, RDBAL,
                    (uint32_t) (adapter->rx_ring.dma & 0x00000000FFFFFFFF));
    E1000_WRITE_REG(&adapter->shared, RDBAH,
                    (uint32_t) (adapter->rx_ring.dma >> 32));
#else
#error "Unsupported System - does not use 32 or 64 bit pointers!"
#endif

    E1000_WRITE_REG(&adapter->shared, RDLEN,
    2568:	acc22808 	sw	v0,10248(a2)
    256c:	0800096a 	j	25a8 <e1000_configure_rx+0x200>
    2570:	8d02000c 	lw	v0,12(t0)
    2574:	8d060008 	lw	a2,8(t0)
    2578:	00042100 	sll	a0,a0,0x4
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    257c:	3085ff00 	andi	a1,a0,0xff00
    2580:	00041600 	sll	v0,a0,0x18
    2584:	00041a02 	srl	v1,a0,0x8
    2588:	00052a00 	sll	a1,a1,0x8
    258c:	00451025 	or	v0,v0,a1
    2590:	3063ff00 	andi	v1,v1,0xff00
    2594:	00431025 	or	v0,v0,v1
    2598:	00042602 	srl	a0,a0,0x18
    259c:	00441025 	or	v0,v0,a0
    25a0:	acc20118 	sw	v0,280(a2)
    25a4:	8d02000c 	lw	v0,12(t0)
    25a8:	2c420002 	sltiu	v0,v0,2
    25ac:	14400004 	bnez	v0,25c0 <e1000_configure_rx+0x218>
    25b0:	8d020008 	lw	v0,8(t0)
                    adapter->rx_ring.count * sizeof(struct e1000_rx_desc));

    /* Setup the HW Rx Head and Tail Descriptor Pointers */
    E1000_WRITE_REG(&adapter->shared, RDH, 0);
    25b4:	ac402810 	sw	zero,10256(v0)
    25b8:	08000972 	j	25c8 <e1000_configure_rx+0x220>
    25bc:	8d02000c 	lw	v0,12(t0)
    25c0:	ac400120 	sw	zero,288(v0)
    25c4:	8d02000c 	lw	v0,12(t0)
    25c8:	2c420002 	sltiu	v0,v0,2
    25cc:	14400004 	bnez	v0,25e0 <e1000_configure_rx+0x238>
    25d0:	8d020008 	lw	v0,8(t0)
    E1000_WRITE_REG(&adapter->shared, RDT, 0);
    25d4:	ac402818 	sw	zero,10264(v0)
    25d8:	0800097a 	j	25e8 <e1000_configure_rx+0x240>
    25dc:	8d04000c 	lw	a0,12(t0)
    25e0:	ac400128 	sw	zero,296(v0)

    /* Enable 82543 Receive Checksum Offload for TCP and UDP */
    if((adapter->shared.mac_type >= e1000_82543) &&
    25e4:	8d04000c 	lw	a0,12(t0)
    25e8:	2c820002 	sltiu	v0,a0,2
    25ec:	54400026 	bnezl	v0,2688 <e1000_configure_rx+0x2e0>
    25f0:	000a2200 	sll	a0,t2,0x8
    25f4:	8d0301b0 	lw	v1,432(t0)
    25f8:	24020001 	li	v0,1
    25fc:	1462001a 	bne	v1,v0,2668 <e1000_configure_rx+0x2c0>
    2600:	2c820002 	sltiu	v0,a0,2
       (adapter->RxChecksum == TRUE)) {
        rxcsum = E1000_READ_REG(&adapter->shared, RXCSUM);
    2604:	8d070008 	lw	a3,8(t0)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2608:	3c0600ff 	lui	a2,0xff
    260c:	8ce55000 	lw	a1,20480(a3)
    2610:	30a4ff00 	andi	a0,a1,0xff00
    2614:	00a61024 	and	v0,a1,a2
    2618:	00042200 	sll	a0,a0,0x8
    261c:	00051e00 	sll	v1,a1,0x18
    2620:	00641825 	or	v1,v1,a0
    2624:	00021202 	srl	v0,v0,0x8
    2628:	00621825 	or	v1,v1,v0
    262c:	00052e02 	srl	a1,a1,0x18
    2630:	00651825 	or	v1,v1,a1
        rxcsum |= E1000_RXCSUM_TUOFL;
    2634:	34630200 	ori	v1,v1,0x200
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2638:	3064ff00 	andi	a0,v1,0xff00
    263c:	00042200 	sll	a0,a0,0x8
    2640:	00663024 	and	a2,v1,a2
    2644:	00031600 	sll	v0,v1,0x18
    2648:	00441025 	or	v0,v0,a0
    264c:	00063202 	srl	a2,a2,0x8
    2650:	00461025 	or	v0,v0,a2
    2654:	00031e02 	srl	v1,v1,0x18
    2658:	00431025 	or	v0,v0,v1
        E1000_WRITE_REG(&adapter->shared, RXCSUM, rxcsum);
    265c:	ace25000 	sw	v0,20480(a3)
    2660:	8d04000c 	lw	a0,12(t0)
    }
#if defined(CONFIG_PPC) || defined(CONFIG_MIPS)
    if(adapter->shared.mac_type >= e1000_82543) {
    2664:	2c820002 	sltiu	v0,a0,2
    2668:	14400007 	bnez	v0,2688 <e1000_configure_rx+0x2e0>
    266c:	000a2200 	sll	a0,t2,0x8
        E1000_WRITE_REG(&adapter->shared, RXDCTL, 0x00020000);
    2670:	8d040008 	lw	a0,8(t0)
    2674:	24030200 	li	v1,512
    2678:	ac832828 	sw	v1,10280(a0)
    }
    267c:	8d02000c 	lw	v0,12(t0)
    2680:	2c420002 	sltiu	v0,v0,2
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2684:	000a2200 	sll	a0,t2,0x8
    2688:	00091600 	sll	v0,t1,0x18
    268c:	00091a02 	srl	v1,t1,0x8
    2690:	00441025 	or	v0,v0,a0
#endif

    /* Enable Receives */
    E1000_WRITE_REG(&adapter->shared, RCTL, rctl);
    2694:	8d050008 	lw	a1,8(t0)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2698:	3063ff00 	andi	v1,v1,0xff00
    269c:	00431025 	or	v0,v0,v1
    26a0:	00092602 	srl	a0,t1,0x18
    26a4:	00441025 	or	v0,v0,a0
    26a8:	aca20100 	sw	v0,256(a1)

    return;
}
    26ac:	03e00008 	jr	ra
    26b0:	00000000 	nop

000026b4 <e1000_free_tx_resources>:
    26b4:	27bdffe0 	addiu	sp,sp,-32
    26b8:	afbf0018 	sw	ra,24(sp)
    26bc:	afb00010 	sw	s0,16(sp)
    26c0:	afb10014 	sw	s1,20(sp)
    26c4:	00808021 	move	s0,a0

/**
 * e1000_free_tx_resources - Free Tx Resources
 * @adapter: board private structure
 *
 * Free all transmit software resources
 **/

static void
e1000_free_tx_resources(struct e1000_adapter *adapter)
{
    struct pci_dev *pdev = adapter->pdev;

    E1000_DBG("e1000_free_tx_resources\n");

    e1000_clean_tx_ring(adapter);
    26c8:	3c020000 	lui	v0,0x0
    26cc:	24422720 	addiu	v0,v0,10016
    26d0:	0040f809 	jalr	v0
    26d4:	8e11014c 	lw	s1,332(s0)

    kfree(adapter->tx_ring.buffer_info);
    26d8:	3c020000 	lui	v0,0x0
    26dc:	24420000 	addiu	v0,v0,0
    26e0:	0040f809 	jalr	v0
    26e4:	8e040100 	lw	a0,256(s0)
    adapter->tx_ring.buffer_info = NULL;

    pci_free_consistent(pdev, adapter->tx_ring.size, adapter->tx_ring.desc,
    26e8:	8e0500ec 	lw	a1,236(s0)
    26ec:	8e0600e4 	lw	a2,228(s0)
    26f0:	8e0700e8 	lw	a3,232(s0)
    26f4:	02202021 	move	a0,s1
    26f8:	3c020000 	lui	v0,0x0
    26fc:	24420000 	addiu	v0,v0,0
    2700:	0040f809 	jalr	v0
    2704:	ae000100 	sw	zero,256(s0)
                        adapter->tx_ring.dma);

    adapter->tx_ring.desc = NULL;

    return;
}
    2708:	8fbf0018 	lw	ra,24(sp)
    270c:	ae0000e4 	sw	zero,228(s0)
    2710:	8fb10014 	lw	s1,20(sp)
    2714:	8fb00010 	lw	s0,16(sp)
    2718:	03e00008 	jr	ra
    271c:	27bd0020 	addiu	sp,sp,32

00002720 <e1000_clean_tx_ring>:
    2720:	27bdffd0 	addiu	sp,sp,-48
    2724:	afb10014 	sw	s1,20(sp)
    2728:	afb00010 	sw	s0,16(sp)
    272c:	afbf0028 	sw	ra,40(sp)
    2730:	afb50024 	sw	s5,36(sp)
    2734:	afb40020 	sw	s4,32(sp)
    2738:	afb3001c 	sw	s3,28(sp)
    273c:	afb20018 	sw	s2,24(sp)
    2740:	00808821 	move	s1,a0

/**
 * e1000_clean_tx_ring - Free Tx Buffers
 * @adapter: board private structure
 **/

static void
e1000_clean_tx_ring(struct e1000_adapter *adapter)
{
    struct pci_dev *pdev = adapter->pdev;
    unsigned long size;
    int i;

    /* Free all the Tx ring sk_buffs */

    for(i = 0; i < adapter->tx_ring.count; i++) {
    2744:	8e2700f0 	lw	a3,240(s1)
    2748:	10e00026 	beqz	a3,27e4 <e1000_clean_tx_ring+0xc4>
    274c:	00008021 	move	s0,zero
    2750:	8e250100 	lw	a1,256(s1)
    2754:	3c150000 	lui	s5,0x0
    2758:	26b50000 	addiu	s5,s5,0
    275c:	0000a021 	move	s4,zero
    2760:	00009821 	move	s3,zero
    2764:	00009021 	move	s2,zero
        if(adapter->tx_ring.buffer_info[i].skb != NULL) {
    2768:	02451021 	addu	v0,s2,a1
    276c:	8c430000 	lw	v1,0(v0)

            pci_unmap_page(pdev, adapter->tx_ring.buffer_info[i].dma,
                           adapter->tx_ring.buffer_info[i].length,
                           PCI_DMA_TODEVICE);

            dev_kfree_skb(adapter->tx_ring.buffer_info[i].skb);
    2770:	02652021 	addu	a0,s3,a1
    2774:	10600013 	beqz	v1,27c4 <e1000_clean_tx_ring+0xa4>
    2778:	24060001 	li	a2,1
 *	hit zero.
 */
 
static inline void kfree_skb(struct sk_buff *skb)
{
    277c:	8c840000 	lw	a0,0(a0)
	if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
    2780:	8c820070 	lw	v0,112(a0)
    2784:	10460008 	beq	v0,a2,27a8 <e1000_clean_tx_ring+0x88>
    2788:	24850070 	addiu	a1,a0,112
extern __inline__ int atomic_sub_return(int i, atomic_t * v)
{
	unsigned long temp, result;

	__asm__ __volatile__(
    278c:	c0a30000 	ll	v1,0(a1)
    2790:	00661023 	subu	v0,v1,a2
    2794:	e0a20000 	sc	v0,0(a1)
    2798:	1040fffc 	beqz	v0,278c <e1000_clean_tx_ring+0x6c>
    279c:	00661023 	subu	v0,v1,a2
 */
 
static inline void kfree_skb(struct sk_buff *skb)
{
	if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
    27a0:	54400004 	bnezl	v0,27b4 <e1000_clean_tx_ring+0x94>
    27a4:	8e220100 	lw	v0,256(s1)
		__kfree_skb(skb);
    27a8:	02a0f809 	jalr	s5
    27ac:	00000000 	nop

            adapter->tx_ring.buffer_info[i].skb = NULL;
    27b0:	8e220100 	lw	v0,256(s1)
    27b4:	02821021 	addu	v0,s4,v0
    27b8:	ac400000 	sw	zero,0(v0)
    27bc:	8e250100 	lw	a1,256(s1)
    27c0:	8e2700f0 	lw	a3,240(s1)
    27c4:	26100001 	addiu	s0,s0,1
    27c8:	0207102b 	sltu	v0,s0,a3
    27cc:	26940018 	addiu	s4,s4,24
    27d0:	26730018 	addiu	s3,s3,24
    27d4:	1440ffe4 	bnez	v0,2768 <e1000_clean_tx_ring+0x48>
    27d8:	26520018 	addiu	s2,s2,24
    27dc:	080009fb 	j	27ec <e1000_clean_tx_ring+0xcc>
    27e0:	00073040 	sll	a2,a3,0x1
    27e4:	8e250100 	lw	a1,256(s1)
        }
    }

    size = sizeof(struct e1000_buffer) * adapter->tx_ring.count;
    27e8:	00073040 	sll	a2,a3,0x1
    27ec:	00c73021 	addu	a2,a2,a3
    memset(adapter->tx_ring.buffer_info, 0, size);
    27f0:	00a02021 	move	a0,a1
    27f4:	3c100000 	lui	s0,0x0
    27f8:	26100000 	addiu	s0,s0,0
    27fc:	000630c0 	sll	a2,a2,0x3
    2800:	0200f809 	jalr	s0
    2804:	00002821 	move	a1,zero

    /* Zero out the descriptor ring */

    memset(adapter->tx_ring.desc, 0, adapter->tx_ring.size);
    2808:	8e2400e4 	lw	a0,228(s1)
    280c:	8e2600ec 	lw	a2,236(s1)
    2810:	0200f809 	jalr	s0
    2814:	00002821 	move	a1,zero

    atomic_set(&adapter->tx_ring.unused, adapter->tx_ring.count);
    2818:	8e2300f0 	lw	v1,240(s1)
    adapter->tx_ring.next_to_use = 0;
    adapter->tx_ring.next_to_clean = 0;
    281c:	ae2000fc 	sw	zero,252(s1)
    2820:	ae2000f8 	sw	zero,248(s1)
    2824:	ae2300f4 	sw	v1,244(s1)

    return;
}
    2828:	8fbf0028 	lw	ra,40(sp)
    282c:	8fb50024 	lw	s5,36(sp)
    2830:	8fb40020 	lw	s4,32(sp)
    2834:	8fb3001c 	lw	s3,28(sp)
    2838:	8fb20018 	lw	s2,24(sp)
    283c:	8fb10014 	lw	s1,20(sp)
    2840:	8fb00010 	lw	s0,16(sp)
    2844:	03e00008 	jr	ra
    2848:	27bd0030 	addiu	sp,sp,48

0000284c <e1000_free_rx_resources>:
    284c:	27bdffe0 	addiu	sp,sp,-32
    2850:	afb00010 	sw	s0,16(sp)
    2854:	afbf0018 	sw	ra,24(sp)
    2858:	00808021 	move	s0,a0
    285c:	afb10014 	sw	s1,20(sp)

/**
 * e1000_free_rx_resources - Free Rx Resources
 * @adapter: board private structure
 *
 * Free all receive software resources
 **/

static void
e1000_free_rx_resources(struct e1000_adapter *adapter)
{
    struct pci_dev *pdev = adapter->pdev;
    2860:	8e11014c 	lw	s1,332(s0)
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    2864:	24030001 	li	v1,1
    2868:	260200d8 	addiu	v0,s0,216
	unsigned long temp;

	__asm__ __volatile__(
    286c:	c0440000 	ll	a0,0(v0)
    2870:	00832021 	addu	a0,a0,v1
    2874:	e0440000 	sc	a0,0(v0)
    2878:	1080fffc 	beqz	a0,286c <e1000_free_rx_resources+0x20>
    287c:	00000000 	nop

    E1000_DBG("e1000_free_rx_resources\n");

    tasklet_disable(&adapter->rx_fill_tasklet);

    e1000_clean_rx_ring(adapter);
    2880:	3c020000 	lui	v0,0x0
    2884:	244228d8 	addiu	v0,v0,10456
    2888:	0040f809 	jalr	v0
    288c:	02002021 	move	a0,s0

    kfree(adapter->rx_ring.buffer_info);
    2890:	3c020000 	lui	v0,0x0
    2894:	24420000 	addiu	v0,v0,0
    2898:	0040f809 	jalr	v0
    289c:	8e04012c 	lw	a0,300(s0)
    adapter->rx_ring.buffer_info = NULL;

    pci_free_consistent(pdev, adapter->rx_ring.size, adapter->rx_ring.desc,
    28a0:	8e050118 	lw	a1,280(s0)
    28a4:	8e060110 	lw	a2,272(s0)
    28a8:	8e070114 	lw	a3,276(s0)
    28ac:	02202021 	move	a0,s1
    28b0:	3c020000 	lui	v0,0x0
    28b4:	24420000 	addiu	v0,v0,0
    28b8:	0040f809 	jalr	v0
    28bc:	ae00012c 	sw	zero,300(s0)
                        adapter->rx_ring.dma);

    adapter->rx_ring.desc = NULL;

    return;
}
    28c0:	8fbf0018 	lw	ra,24(sp)
    28c4:	ae000110 	sw	zero,272(s0)
    28c8:	8fb10014 	lw	s1,20(sp)
    28cc:	8fb00010 	lw	s0,16(sp)
    28d0:	03e00008 	jr	ra
    28d4:	27bd0020 	addiu	sp,sp,32

000028d8 <e1000_clean_rx_ring>:
    28d8:	27bdffd0 	addiu	sp,sp,-48
    28dc:	afb10014 	sw	s1,20(sp)
    28e0:	afb00010 	sw	s0,16(sp)
    28e4:	afbf0028 	sw	ra,40(sp)
    28e8:	afb50024 	sw	s5,36(sp)
    28ec:	afb40020 	sw	s4,32(sp)
    28f0:	afb3001c 	sw	s3,28(sp)
    28f4:	afb20018 	sw	s2,24(sp)
    28f8:	00808821 	move	s1,a0

/**
 * e1000_clean_rx_ring - Free Rx Buffers
 * @adapter: board private structure
 **/

static void
e1000_clean_rx_ring(struct e1000_adapter *adapter)
{
    struct pci_dev *pdev = adapter->pdev;
    unsigned long size;
    int i;

    /* Free all the Rx ring sk_buffs */

    for(i = 0; i < adapter->rx_ring.count; i++) {
    28fc:	8e27011c 	lw	a3,284(s1)
    2900:	10e00026 	beqz	a3,299c <e1000_clean_rx_ring+0xc4>
    2904:	00008021 	move	s0,zero
    2908:	8e25012c 	lw	a1,300(s1)
    290c:	3c150000 	lui	s5,0x0
    2910:	26b50000 	addiu	s5,s5,0
    2914:	0000a021 	move	s4,zero
    2918:	00009821 	move	s3,zero
    291c:	00009021 	move	s2,zero
        if(adapter->rx_ring.buffer_info[i].skb != NULL) {
    2920:	02451021 	addu	v0,s2,a1
    2924:	8c430000 	lw	v1,0(v0)

            pci_unmap_single(pdev, adapter->rx_ring.buffer_info[i].dma,
                             adapter->rx_ring.buffer_info[i].length,
                             PCI_DMA_FROMDEVICE);

            dev_kfree_skb(adapter->rx_ring.buffer_info[i].skb);
    2928:	02652021 	addu	a0,s3,a1
    292c:	10600013 	beqz	v1,297c <e1000_clean_rx_ring+0xa4>
    2930:	24060001 	li	a2,1
 *	hit zero.
 */
 
static inline void kfree_skb(struct sk_buff *skb)
{
    2934:	8c840000 	lw	a0,0(a0)
	if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
    2938:	8c820070 	lw	v0,112(a0)
    293c:	10460008 	beq	v0,a2,2960 <e1000_clean_rx_ring+0x88>
    2940:	24850070 	addiu	a1,a0,112
extern __inline__ int atomic_sub_return(int i, atomic_t * v)
{
	unsigned long temp, result;

	__asm__ __volatile__(
    2944:	c0a30000 	ll	v1,0(a1)
    2948:	00661023 	subu	v0,v1,a2
    294c:	e0a20000 	sc	v0,0(a1)
    2950:	1040fffc 	beqz	v0,2944 <e1000_clean_rx_ring+0x6c>
    2954:	00661023 	subu	v0,v1,a2
 */
 
static inline void kfree_skb(struct sk_buff *skb)
{
	if (atomic_read(&skb->users) == 1 || atomic_dec_and_test(&skb->users))
    2958:	54400004 	bnezl	v0,296c <e1000_clean_rx_ring+0x94>
    295c:	8e22012c 	lw	v0,300(s1)
		__kfree_skb(skb);
    2960:	02a0f809 	jalr	s5
    2964:	00000000 	nop

            adapter->rx_ring.buffer_info[i].skb = NULL;
    2968:	8e22012c 	lw	v0,300(s1)
    296c:	02821021 	addu	v0,s4,v0
    2970:	ac400000 	sw	zero,0(v0)
    2974:	8e25012c 	lw	a1,300(s1)
    2978:	8e27011c 	lw	a3,284(s1)
    297c:	26100001 	addiu	s0,s0,1
    2980:	0207102b 	sltu	v0,s0,a3
    2984:	26940018 	addiu	s4,s4,24
    2988:	26730018 	addiu	s3,s3,24
    298c:	1440ffe4 	bnez	v0,2920 <e1000_clean_rx_ring+0x48>
    2990:	26520018 	addiu	s2,s2,24
    2994:	08000a69 	j	29a4 <e1000_clean_rx_ring+0xcc>
    2998:	00073040 	sll	a2,a3,0x1
    299c:	8e25012c 	lw	a1,300(s1)
        }
    }

    size = sizeof(struct e1000_buffer) * adapter->rx_ring.count;
    29a0:	00073040 	sll	a2,a3,0x1
    29a4:	00c73021 	addu	a2,a2,a3
    memset(adapter->rx_ring.buffer_info, 0, size);
    29a8:	00a02021 	move	a0,a1
    29ac:	3c100000 	lui	s0,0x0
    29b0:	26100000 	addiu	s0,s0,0
    29b4:	000630c0 	sll	a2,a2,0x3
    29b8:	0200f809 	jalr	s0
    29bc:	00002821 	move	a1,zero

    /* Zero out the descriptor ring */

    memset(adapter->rx_ring.desc, 0, adapter->rx_ring.size);
    29c0:	8e240110 	lw	a0,272(s1)
    29c4:	8e260118 	lw	a2,280(s1)
    29c8:	0200f809 	jalr	s0
    29cc:	00002821 	move	a1,zero

    atomic_set(&adapter->rx_ring.unused, adapter->rx_ring.count);
    29d0:	8e23011c 	lw	v1,284(s1)
    adapter->rx_ring.next_to_clean = 0;
    adapter->rx_ring.next_to_use = 0;
    29d4:	ae200124 	sw	zero,292(s1)
    29d8:	ae200128 	sw	zero,296(s1)
    29dc:	ae230120 	sw	v1,288(s1)

    return;
}
    29e0:	8fbf0028 	lw	ra,40(sp)
    29e4:	8fb50024 	lw	s5,36(sp)
    29e8:	8fb40020 	lw	s4,32(sp)
    29ec:	8fb3001c 	lw	s3,28(sp)
    29f0:	8fb20018 	lw	s2,24(sp)
    29f4:	8fb10014 	lw	s1,20(sp)
    29f8:	8fb00010 	lw	s0,16(sp)
    29fc:	03e00008 	jr	ra
    2a00:	27bd0030 	addiu	sp,sp,48

00002a04 <e1000_set_multi>:
    2a04:	27bdfcd0 	addiu	sp,sp,-816
    2a08:	afb40320 	sw	s4,800(sp)
    2a0c:	afbf032c 	sw	ra,812(sp)
    2a10:	afb60328 	sw	s6,808(sp)
    2a14:	afb50324 	sw	s5,804(sp)
    2a18:	afb3031c 	sw	s3,796(sp)
    2a1c:	afb20318 	sw	s2,792(sp)
    2a20:	afb10314 	sw	s1,788(sp)
    2a24:	afb00310 	sw	s0,784(sp)
    2a28:	0080a021 	move	s4,a0

/**
 * e1000_set_multi - Multicast and Promiscuous mode set
 * @netdev: network interface device structure
 *
 * The set_multi entry point is called whenever the multicast address
 * list or the network interface flags are updated.  This routine is
 * resposible for configuring the hardware for proper multicast,
 * promiscuous mode, and all-multi behavior.
 **/

void
e1000_set_multi(struct net_device *netdev)
{
    struct e1000_adapter *adapter = netdev->priv;
    2a2c:	8e910064 	lw	s1,100(s4)
    struct pci_dev *pdev = adapter->pdev;
    2a30:	8e33000c 	lw	s3,12(s1)
    2a34:	8e35014c 	lw	s5,332(s1)
    2a38:	2e620002 	sltiu	v0,s3,2
    uint32_t rctl;
    uint8_t mta[MAX_NUM_MULTICAST_ADDRESSES * ETH_LENGTH_OF_ADDRESS];
    uint16_t pci_command_word;
    struct dev_mc_list *mc_ptr;
    int i;

    E1000_DBG("e1000_set_multi\n");

    rctl = E1000_READ_REG(&adapter->shared, RCTL);
    2a3c:	8e320008 	lw	s2,8(s1)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    2a40:	8e450100 	lw	a1,256(s2)
	return __arch__swab32(x);
    2a44:	30a3ff00 	andi	v1,a1,0xff00
    2a48:	00052600 	sll	a0,a1,0x18
    2a4c:	00051202 	srl	v0,a1,0x8
    2a50:	00031a00 	sll	v1,v1,0x8
    2a54:	00832025 	or	a0,a0,v1
    2a58:	3042ff00 	andi	v0,v0,0xff00
    2a5c:	00822025 	or	a0,a0,v0
    2a60:	00052e02 	srl	a1,a1,0x18

    if(adapter->shared.mac_type == e1000_82542_rev2_0) {
    2a64:	1660002d 	bnez	s3,2b1c <e1000_set_multi+0x118>
    2a68:	00858025 	or	s0,a0,a1
        if(adapter->shared.pci_cmd_word & PCI_COMMAND_INVALIDATE) {
    2a6c:	9626004a 	lhu	a2,74(s1)
    2a70:	30c20010 	andi	v0,a2,0x10
    2a74:	10400006 	beqz	v0,2a90 <e1000_set_multi+0x8c>
    2a78:	30c6ffef 	andi	a2,a2,0xffef
            pci_command_word =
                adapter->shared.pci_cmd_word & ~PCI_COMMAND_INVALIDATE;
            pci_write_config_word(pdev, PCI_COMMAND, pci_command_word);
    2a7c:	02a02021 	move	a0,s5
    2a80:	3c020000 	lui	v0,0x0
    2a84:	24420000 	addiu	v0,v0,0
    2a88:	0040f809 	jalr	v0
    2a8c:	24050004 	li	a1,4
        }
        rctl |= E1000_RCTL_RST;
    2a90:	36100001 	ori	s0,s0,0x1
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2a94:	3204ff00 	andi	a0,s0,0xff00
    2a98:	00042200 	sll	a0,a0,0x8
    2a9c:	00101e00 	sll	v1,s0,0x18
    2aa0:	00101202 	srl	v0,s0,0x8
    2aa4:	00641825 	or	v1,v1,a0
    2aa8:	3042ff00 	andi	v0,v0,0xff00
    2aac:	00621825 	or	v1,v1,v0
    2ab0:	00102602 	srl	a0,s0,0x18
    2ab4:	00641825 	or	v1,v1,a0
        E1000_WRITE_REG(&adapter->shared, RCTL, rctl);
    2ab8:	ae430100 	sw	v1,256(s2)
extern __inline__ void __udelay(unsigned long usecs, unsigned long lpj)
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
    2abc:	3c027fff 	lui	v0,0x7fff
    2ac0:	3c030000 	lui	v1,0x0
    2ac4:	8c630000 	lw	v1,0(v1)
    2ac8:	3442f1c0 	ori	v0,v0,0xf1c0
	__asm__("multu\t%2,%3"
    2acc:	00430019 	multu	v0,v1
    2ad0:	00001010 	mfhi	v0
	...
    2adc:	1440ffff 	bnez	v0,2adc <e1000_set_multi+0xd8>
    2ae0:	2442ffff 	addiu	v0,v0,-1
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    2ae4:	8e23008c 	lw	v1,140(s1)
    2ae8:	30630001 	andi	v1,v1,0x1
        mdelay(5);
        if(test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    2aec:	1060000b 	beqz	v1,2b1c <e1000_set_multi+0x118>
    2af0:	24030001 	li	v1,1
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    2af4:	262200d8 	addiu	v0,s1,216
	unsigned long temp;

	__asm__ __volatile__(
    2af8:	c0440000 	ll	a0,0(v0)
    2afc:	00832021 	addu	a0,a0,v1
    2b00:	e0440000 	sc	a0,0(v0)
    2b04:	1080fffc 	beqz	a0,2af8 <e1000_set_multi+0xf4>
    2b08:	00000000 	nop
            tasklet_disable(&adapter->rx_fill_tasklet);
            e1000_clean_rx_ring(adapter);
    2b0c:	3c020000 	lui	v0,0x0
    2b10:	244228d8 	addiu	v0,v0,10456
    2b14:	0040f809 	jalr	v0
    2b18:	02202021 	move	a0,s1
        }
    }

    /* Check for Promiscuous and All Multicast modes */

    if(netdev->flags & IFF_PROMISC) {
    2b1c:	96830054 	lhu	v1,84(s4)
    2b20:	30620100 	andi	v0,v1,0x100
    2b24:	10400003 	beqz	v0,2b34 <e1000_set_multi+0x130>
    2b28:	30620200 	andi	v0,v1,0x200
        rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
    } else if(netdev->flags & IFF_ALLMULTI) {
    2b2c:	08000ad3 	j	2b4c <e1000_set_multi+0x148>
    2b30:	36100018 	ori	s0,s0,0x18
    2b34:	10400003 	beqz	v0,2b44 <e1000_set_multi+0x140>
    2b38:	2402fff7 	li	v0,-9
        rctl |= E1000_RCTL_MPE;
        rctl &= ~E1000_RCTL_UPE;
    } else {
    2b3c:	08000ad2 	j	2b48 <e1000_set_multi+0x144>
    2b40:	36100010 	ori	s0,s0,0x10
        rctl &= ~(E1000_RCTL_UPE | E1000_RCTL_MPE);
    2b44:	2402ffe7 	li	v0,-25
    2b48:	02028024 	and	s0,s0,v0
    }

    if(netdev->mc_count > MAX_NUM_MULTICAST_ADDRESSES) {
    2b4c:	8e820084 	lw	v0,132(s4)
    2b50:	28420081 	slti	v0,v0,129
    2b54:	1440000e 	bnez	v0,2b90 <e1000_set_multi+0x18c>
    2b58:	2e620002 	sltiu	v0,s3,2
        rctl |= E1000_RCTL_MPE;
    2b5c:	36100010 	ori	s0,s0,0x10
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2b60:	3204ff00 	andi	a0,s0,0xff00
    2b64:	00042200 	sll	a0,a0,0x8
    2b68:	00101600 	sll	v0,s0,0x18
    2b6c:	00101a02 	srl	v1,s0,0x8
    2b70:	00441025 	or	v0,v0,a0
    2b74:	3063ff00 	andi	v1,v1,0xff00
    2b78:	00431025 	or	v0,v0,v1
    2b7c:	00102602 	srl	a0,s0,0x18
    2b80:	00441025 	or	v0,v0,a0
        E1000_WRITE_REG(&adapter->shared, RCTL, rctl);
    2b84:	ae420100 	sw	v0,256(s2)
    } else {
    2b88:	08000b05 	j	2c14 <e1000_set_multi+0x210>
    2b8c:	8e22000c 	lw	v0,12(s1)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2b90:	3204ff00 	andi	a0,s0,0xff00
    2b94:	00042200 	sll	a0,a0,0x8
    2b98:	00101600 	sll	v0,s0,0x18
    2b9c:	00101a02 	srl	v1,s0,0x8
    2ba0:	00441025 	or	v0,v0,a0
    2ba4:	3063ff00 	andi	v1,v1,0xff00
    2ba8:	00431025 	or	v0,v0,v1
    2bac:	00102602 	srl	a0,s0,0x18
    2bb0:	00441025 	or	v0,v0,a0
        E1000_WRITE_REG(&adapter->shared, RCTL, rctl);
    2bb4:	ae420100 	sw	v0,256(s2)
        for(i = 0, mc_ptr = netdev->mc_list; mc_ptr; i++, mc_ptr = mc_ptr->next)
    2bb8:	8e820080 	lw	v0,128(s4)
    2bbc:	5040000e 	beqzl	v0,2bf8 <e1000_set_multi+0x1f4>
    2bc0:	8e860084 	lw	a2,132(s4)
    2bc4:	02c01821 	move	v1,s6
            memcpy(&mta[i * ETH_LENGTH_OF_ADDRESS], mc_ptr->dmi_addr,
    2bc8:	88440004 	lwl	a0,4(v0)
    2bcc:	98440007 	lwr	a0,7(v0)
    2bd0:	80450008 	lb	a1,8(v0)
    2bd4:	80460009 	lb	a2,9(v0)
    2bd8:	a8640000 	swl	a0,0(v1)
    2bdc:	b8640003 	swr	a0,3(v1)
    2be0:	a0650004 	sb	a1,4(v1)
    2be4:	a0660005 	sb	a2,5(v1)
    2be8:	8c420000 	lw	v0,0(v0)
    2bec:	1440fff6 	bnez	v0,2bc8 <e1000_set_multi+0x1c4>
    2bf0:	24630006 	addiu	v1,v1,6
                   ETH_LENGTH_OF_ADDRESS);
        e1000_mc_addr_list_update(&adapter->shared, mta, netdev->mc_count, 0);
    2bf4:	8e860084 	lw	a2,132(s4)
    2bf8:	26240008 	addiu	a0,s1,8
    2bfc:	27a50010 	addiu	a1,sp,16
    2c00:	3c020000 	lui	v0,0x0
    2c04:	24420000 	addiu	v0,v0,0
    2c08:	0040f809 	jalr	v0
    2c0c:	00003821 	move	a3,zero
    }

    if(adapter->shared.mac_type == e1000_82542_rev2_0) {
    2c10:	8e22000c 	lw	v0,12(s1)
    2c14:	1440003b 	bnez	v0,2d04 <e1000_set_multi+0x300>
    2c18:	8fbf032c 	lw	ra,812(sp)
        rctl = E1000_READ_REG(&adapter->shared, RCTL);
    2c1c:	8e280008 	lw	t0,8(s1)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2c20:	3c0700ff 	lui	a3,0xff
extern __inline__ void __udelay(unsigned long usecs, unsigned long lpj)
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
    2c24:	3c067fff 	lui	a2,0x7fff
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    2c28:	8d020100 	lw	v0,256(t0)
extern __inline__ void __udelay(unsigned long usecs, unsigned long lpj)
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
    2c2c:	34c6f1c0 	ori	a2,a2,0xf1c0
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2c30:	3043ff00 	andi	v1,v0,0xff00
    2c34:	00472024 	and	a0,v0,a3
    2c38:	00031a00 	sll	v1,v1,0x8
    2c3c:	00022e00 	sll	a1,v0,0x18
    2c40:	00a32825 	or	a1,a1,v1
    2c44:	00042202 	srl	a0,a0,0x8
    2c48:	00021602 	srl	v0,v0,0x18
    2c4c:	00a42825 	or	a1,a1,a0
        rctl &= ~E1000_RCTL_RST;
    2c50:	304200fe 	andi	v0,v0,0xfe
    2c54:	00458025 	or	s0,v0,a1
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    2c58:	3204ff00 	andi	a0,s0,0xff00
    2c5c:	00042200 	sll	a0,a0,0x8
    2c60:	02073824 	and	a3,s0,a3
    2c64:	00101e00 	sll	v1,s0,0x18
    2c68:	00641825 	or	v1,v1,a0
    2c6c:	00073a02 	srl	a3,a3,0x8
    2c70:	00101602 	srl	v0,s0,0x18
    2c74:	00671825 	or	v1,v1,a3
    2c78:	00621825 	or	v1,v1,v0
        E1000_WRITE_REG(&adapter->shared, RCTL, rctl);
    2c7c:	ad030100 	sw	v1,256(t0)
 * first constant multiplications gets optimized away if the delay is
 * a constant)
 */
extern __inline__ void __udelay(unsigned long usecs, unsigned long lpj)
{
    2c80:	3c020000 	lui	v0,0x0
    2c84:	8c420000 	lw	v0,0(v0)
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
	__asm__("multu\t%2,%3"
    2c88:	00c20019 	multu	a2,v0
    2c8c:	00003010 	mfhi	a2
	...
    2c98:	14c0ffff 	bnez	a2,2c98 <e1000_set_multi+0x294>
    2c9c:	24c6ffff 	addiu	a2,a2,-1
        mdelay(5);
        if(adapter->shared.pci_cmd_word & PCI_COMMAND_INVALIDATE) {
    2ca0:	9622004a 	lhu	v0,74(s1)
    2ca4:	30420010 	andi	v0,v0,0x10
    2ca8:	10400006 	beqz	v0,2cc4 <e1000_set_multi+0x2c0>
    2cac:	02a02021 	move	a0,s5
            pci_write_config_word(pdev, PCI_COMMAND,
    2cb0:	9626004a 	lhu	a2,74(s1)
    2cb4:	3c020000 	lui	v0,0x0
    2cb8:	24420000 	addiu	v0,v0,0
    2cbc:	0040f809 	jalr	v0
    2cc0:	24050004 	li	a1,4
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    2cc4:	8e22008c 	lw	v0,140(s1)
    2cc8:	30420001 	andi	v0,v0,0x1
                                  adapter->shared.pci_cmd_word);
        }
        if(test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    2ccc:	1040000d 	beqz	v0,2d04 <e1000_set_multi+0x300>
    2cd0:	8fbf032c 	lw	ra,812(sp)
            e1000_configure_rx(adapter);
    2cd4:	3c020000 	lui	v0,0x0
    2cd8:	244223a8 	addiu	v0,v0,9128
    2cdc:	0040f809 	jalr	v0
    2ce0:	02202021 	move	a0,s1
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    2ce4:	262300d8 	addiu	v1,s1,216
    2ce8:	24020001 	li	v0,1
	unsigned long temp;

	__asm__ __volatile__(
    2cec:	c0640000 	ll	a0,0(v1)
    2cf0:	00822023 	subu	a0,a0,v0
    2cf4:	e0640000 	sc	a0,0(v1)
    2cf8:	1080fffc 	beqz	a0,2cec <e1000_set_multi+0x2e8>
    2cfc:	00000000 	nop
            tasklet_enable(&adapter->rx_fill_tasklet);
        }
    }

    return;
}
    2d00:	8fbf032c 	lw	ra,812(sp)
    2d04:	8fb60328 	lw	s6,808(sp)
    2d08:	8fb50324 	lw	s5,804(sp)
    2d0c:	8fb40320 	lw	s4,800(sp)
    2d10:	8fb3031c 	lw	s3,796(sp)
    2d14:	8fb20318 	lw	s2,792(sp)
    2d18:	8fb10314 	lw	s1,788(sp)
    2d1c:	8fb00310 	lw	s0,784(sp)
    2d20:	03e00008 	jr	ra
    2d24:	27bd0330 	addiu	sp,sp,816

00002d28 <e1000_watchdog>:
    2d28:	27bdffd0 	addiu	sp,sp,-48
    2d2c:	afb50024 	sw	s5,36(sp)
    2d30:	afb40020 	sw	s4,32(sp)
    2d34:	afb3001c 	sw	s3,28(sp)
    2d38:	afbf0028 	sw	ra,40(sp)
    2d3c:	afb20018 	sw	s2,24(sp)
    2d40:	afb10014 	sw	s1,20(sp)
    2d44:	afb00010 	sw	s0,16(sp)
    2d48:	0080a821 	move	s5,a0

#ifdef IANS

/* flush Tx queue without link */
static void
e1000_tx_flush(struct e1000_adapter *adapter)
{
    uint32_t ctrl, txcw, icr;

    adapter->int_mask = 0;
    e1000_irq_disable(adapter);
    synchronize_irq();

    if(adapter->shared.mac_type < e1000_82543) {
        /* Transmit Unit Reset */
        E1000_WRITE_REG(&adapter->shared, TCTL, E1000_TCTL_RST);
        E1000_WRITE_REG(&adapter->shared, TCTL, 0);
        e1000_clean_tx_ring(adapter);
        e1000_configure_tx(adapter);
    } else {
        /* turn off autoneg, set link up, and invert loss of signal */
        txcw = E1000_READ_REG(&adapter->shared, TXCW);
        ctrl = E1000_READ_REG(&adapter->shared, CTRL);
        E1000_WRITE_REG(&adapter->shared, TXCW, txcw & ~E1000_TXCW_ANE);
        E1000_WRITE_REG(&adapter->shared, CTRL,
                        (ctrl | E1000_CTRL_SLU | E1000_CTRL_ILOS));
        /* delay to flush queue, then clean up */
        mdelay(20);
        e1000_clean_tx_irq(adapter);
        E1000_WRITE_REG(&adapter->shared, CTRL, ctrl);
        E1000_WRITE_REG(&adapter->shared, TXCW, txcw);
        /* clear the link status change interrupts this caused */
        icr = E1000_READ_REG(&adapter->shared, ICR);
    }

    adapter->int_mask = IMS_ENABLE_MASK;
    e1000_irq_enable(adapter);
    return;
}
#endif

/**
 * e1000_watchdog - Timer Call-back
 * @data: pointer to netdev cast into an unsigned long
 **/

void
e1000_watchdog(unsigned long data)
{
    struct net_device *netdev = (struct net_device *) data;
    struct e1000_adapter *adapter = netdev->priv;
    2d4c:	8eb20064 	lw	s2,100(s5)

#ifdef IANS
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0))
    int flags;
#endif
#endif

    e1000_check_for_link(&adapter->shared);
    2d50:	3c020000 	lui	v0,0x0
    2d54:	24420000 	addiu	v0,v0,0
    2d58:	26540008 	addiu	s4,s2,8
    2d5c:	0040f809 	jalr	v0
    2d60:	02802021 	move	a0,s4
 * It also implies a memory barrier.
 */
extern __inline__ int
test_and_clear_bit(int nr, volatile void *addr)
{
    2d64:	2653008c 	addiu	s3,s2,140
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    2d68:	24020008 	li	v0,8
    2d6c:	c2640000 	ll	a0,0(s3)
    2d70:	00821825 	or	v1,a0,v0
    2d74:	00621826 	xor	v1,v1,v0
    2d78:	e2630000 	sc	v1,0(s3)
    2d7c:	1060fffb 	beqz	v1,2d6c <e1000_watchdog+0x44>
    2d80:	00821824 	and	v1,a0,v0

    if (test_and_clear_bit(E1000_LINK_STATUS_CHANGED, &adapter->flags))
    2d84:	50600007 	beqzl	v1,2da4 <e1000_watchdog+0x7c>
    2d88:	8e42000c 	lw	v0,12(s2)
        e1000_phy_get_info(&adapter->shared, &adapter->phy_info);
    2d8c:	264501b8 	addiu	a1,s2,440
    2d90:	3c020000 	lui	v0,0x0
    2d94:	24420000 	addiu	v0,v0,0
    2d98:	0040f809 	jalr	v0
    2d9c:	02802021 	move	a0,s4
    2da0:	8e42000c 	lw	v0,12(s2)
    2da4:	2c420002 	sltiu	v0,v0,2
    2da8:	14400008 	bnez	v0,2dcc <e1000_watchdog+0xa4>
    2dac:	8e830000 	lw	v1,0(s4)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    2db0:	8c620008 	lw	v0,8(v1)
	return __arch__swab32(x);
    2db4:	00021602 	srl	v0,v0,0x18

    if(E1000_READ_REG(&adapter->shared, STATUS) & E1000_STATUS_LU) {
    2db8:	30420002 	andi	v0,v0,0x2
    2dbc:	14400008 	bnez	v0,2de0 <e1000_watchdog+0xb8>
    2dc0:	8e4200b0 	lw	v0,176(s2)
    2dc4:	08000bc6 	j	2f18 <e1000_watchdog+0x1f0>
    2dc8:	00000000 	nop
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    2dcc:	8c620008 	lw	v0,8(v1)
	return __arch__swab32(x);
    2dd0:	00021602 	srl	v0,v0,0x18
    2dd4:	30420002 	andi	v0,v0,0x2
    2dd8:	1040004f 	beqz	v0,2f18 <e1000_watchdog+0x1f0>
    2ddc:	8e4200b0 	lw	v0,176(s2)
        if(adapter->link_active != TRUE) {
    2de0:	24030001 	li	v1,1
    2de4:	10430058 	beq	v0,v1,2f48 <e1000_watchdog+0x220>
    2de8:	00000000 	nop
 * It also implies a memory barrier.
 */
extern __inline__ int
test_and_clear_bit(int nr, volatile void *addr)
{
    2dec:	26a5002c 	addiu	a1,s5,44
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    2df0:	c0a40000 	ll	a0,0(a1)
    2df4:	00831025 	or	v0,a0,v1
    2df8:	00431026 	xor	v0,v0,v1
    2dfc:	e0a20000 	sc	v0,0(a1)
    2e00:	1040fffb 	beqz	v0,2df0 <e1000_watchdog+0xc8>
    2e04:	00831024 	and	v0,a0,v1
}

static inline void netif_wake_queue(struct net_device *dev)
{
	if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
    2e08:	10400025 	beqz	v0,2ea0 <e1000_watchdog+0x178>
    2e0c:	265100b4 	addiu	s1,s2,180
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    2e10:	24020008 	li	v0,8
    2e14:	c0a40000 	ll	a0,0(a1)
    2e18:	00821825 	or	v1,a0,v0
    2e1c:	e0a30000 	sc	v1,0(a1)
    2e20:	1060fffc 	beqz	v1,2e14 <e1000_watchdog+0xec>
    2e24:	00821824 	and	v1,a0,v0
#define HAVE_NETIF_QUEUE

static inline void __netif_schedule(struct net_device *dev)
{
	if (!test_and_set_bit(__LINK_STATE_SCHED, &dev->state)) {
    2e28:	1460001d 	bnez	v1,2ea0 <e1000_watchdog+0x178>
    2e2c:	265100b4 	addiu	s1,s2,180
		unsigned long flags;
		int cpu = smp_processor_id();

		local_irq_save(flags);
    2e30:	40106000 	mfc0	s0,$12
    2e34:	00000000 	nop
    2e38:	36010001 	ori	at,s0,0x1
    2e3c:	38210001 	xori	at,at,0x1
    2e40:	40816000 	mtc0	at,$12
    2e44:	00000040 	sll	zero,zero,0x1
    2e48:	00000040 	sll	zero,zero,0x1
    2e4c:	00000040 	sll	zero,zero,0x1
		dev->next_sched = softnet_data[cpu].output_queue;
    2e50:	3c030000 	lui	v1,0x0
    2e54:	8c63001c 	lw	v1,28(v1)
		softnet_data[cpu].output_queue = dev;
		cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
    2e58:	00002021 	move	a0,zero
    2e5c:	aea30038 	sw	v1,56(s5)
    2e60:	3c020000 	lui	v0,0x0
    2e64:	24420000 	addiu	v0,v0,0
    2e68:	3c010000 	lui	at,0x0
    2e6c:	ac35001c 	sw	s5,28(at)
    2e70:	0040f809 	jalr	v0
    2e74:	24050001 	li	a1,1
		local_irq_restore(flags);
    2e78:	40016000 	mfc0	at,$12
    2e7c:	32100001 	andi	s0,s0,0x1
    2e80:	34210001 	ori	at,at,0x1
    2e84:	38210001 	xori	at,at,0x1
    2e88:	02018025 	or	s0,s0,at
    2e8c:	40906000 	mtc0	s0,$12
	...

#ifdef IANS
            if((adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) &&
               (adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON))
                if(ans_notify)
                    ans_notify(netdev, IANS_IND_XMIT_QUEUE_READY);
#endif
            netif_wake_queue(netdev);

            e1000_get_speed_and_duplex(&adapter->shared, &adapter->link_speed,
    2e9c:	265100b4 	addiu	s1,s2,180
    2ea0:	265000b6 	addiu	s0,s2,182
    2ea4:	02003021 	move	a2,s0
    2ea8:	3c020000 	lui	v0,0x0
    2eac:	24420000 	addiu	v0,v0,0
    2eb0:	02802021 	move	a0,s4
    2eb4:	0040f809 	jalr	v0
    2eb8:	02202821 	move	a1,s1
                                       &adapter->link_duplex);
            printk(KERN_ERR "e1000: %s NIC Link is Up %d Mbps %s\n",
    2ebc:	96030000 	lhu	v1,0(s0)
    2ec0:	24020002 	li	v0,2
    2ec4:	3c070000 	lui	a3,0x0
    2ec8:	24e70d28 	addiu	a3,a3,3368
    2ecc:	10620003 	beq	v1,v0,2edc <e1000_watchdog+0x1b4>
    2ed0:	96260000 	lhu	a2,0(s1)
    2ed4:	3c070000 	lui	a3,0x0
    2ed8:	24e70d34 	addiu	a3,a3,3380
    2edc:	3c040000 	lui	a0,0x0
    2ee0:	24840d00 	addiu	a0,a0,3328
    2ee4:	3c020000 	lui	v0,0x0
    2ee8:	24420000 	addiu	v0,v0,0
    2eec:	0040f809 	jalr	v0
    2ef0:	02a02821 	move	a1,s5
                   netdev->name, adapter->link_speed,
                   adapter->link_duplex ==
                   FULL_DUPLEX ? "Full Duplex" : "Half Duplex");

            adapter->link_active = TRUE;
    2ef4:	24030001 	li	v1,1
    2ef8:	ae4300b0 	sw	v1,176(s2)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    2efc:	c2620000 	ll	v0,0(s3)
    2f00:	34420008 	ori	v0,v0,0x8
    2f04:	e2620000 	sc	v0,0(s3)
    2f08:	1040fffc 	beqz	v0,2efc <e1000_watchdog+0x1d4>
    2f0c:	00000000 	nop
            set_bit(E1000_LINK_STATUS_CHANGED, &adapter->flags);
        }
    } else {
    2f10:	08000bd2 	j	2f48 <e1000_watchdog+0x220>
    2f14:	00000000 	nop
        if(adapter->link_active != FALSE) {
    2f18:	1040000b 	beqz	v0,2f48 <e1000_watchdog+0x220>
    2f1c:	00000000 	nop
            adapter->link_speed = 0;
            adapter->link_duplex = 0;
            printk(KERN_ERR "e1000: %s NIC Link is Down\n", netdev->name);
    2f20:	3c040000 	lui	a0,0x0
    2f24:	24840d40 	addiu	a0,a0,3392
    2f28:	a64000b4 	sh	zero,180(s2)
    2f2c:	a64000b6 	sh	zero,182(s2)
    2f30:	3c020000 	lui	v0,0x0
    2f34:	24420000 	addiu	v0,v0,0
    2f38:	0040f809 	jalr	v0
    2f3c:	02a02821 	move	a1,s5
            adapter->link_active = FALSE;
    2f40:	ae4000b0 	sw	zero,176(s2)
            atomic_set(&adapter->tx_timeout, 0);
    2f44:	ae40010c 	sw	zero,268(s2)
        }
    }

    e1000_update_stats(adapter);
    2f48:	3c030000 	lui	v1,0x0
    2f4c:	24634044 	addiu	v1,v1,16452
    2f50:	0060f809 	jalr	v1
    2f54:	02402021 	move	a0,s2

    if(atomic_read(&adapter->tx_timeout) > 1)
    2f58:	8e42010c 	lw	v0,268(s2)
    2f5c:	28420002 	slti	v0,v0,2
    2f60:	54400009 	bnezl	v0,2f88 <e1000_watchdog+0x260>
    2f64:	8e4300b0 	lw	v1,176(s2)
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    2f68:	24020001 	li	v0,1
    2f6c:	2643010c 	addiu	v1,s2,268
	unsigned long temp;

	__asm__ __volatile__(
    2f70:	c0640000 	ll	a0,0(v1)
    2f74:	00822023 	subu	a0,a0,v0
    2f78:	e0640000 	sc	a0,0(v1)
    2f7c:	1080fffc 	beqz	a0,2f70 <e1000_watchdog+0x248>
    2f80:	00000000 	nop
        atomic_dec(&adapter->tx_timeout);

    if((adapter->link_active == TRUE) && 
    2f84:	8e4300b0 	lw	v1,176(s2)
    2f88:	24020001 	li	v0,1
    2f8c:	54620021 	bnel	v1,v0,3014 <e1000_watchdog+0x2ec>
    2f90:	8e620000 	lw	v0,0(s3)
    2f94:	8e42010c 	lw	v0,268(s2)
    2f98:	5443001e 	bnel	v0,v1,3014 <e1000_watchdog+0x2ec>
    2f9c:	8e620000 	lw	v0,0(s3)
       (atomic_read(&adapter->tx_timeout) == 1)) {

        if(E1000_READ_REG(&adapter->shared, STATUS) & E1000_STATUS_TXOFF) {
    2fa0:	8e42000c 	lw	v0,12(s2)
    2fa4:	2c420002 	sltiu	v0,v0,2
    2fa8:	14400008 	bnez	v0,2fcc <e1000_watchdog+0x2a4>
    2fac:	8e430008 	lw	v1,8(s2)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    2fb0:	8c620008 	lw	v0,8(v1)
	return __arch__swab32(x);
    2fb4:	00021602 	srl	v0,v0,0x18
    2fb8:	30420010 	andi	v0,v0,0x10
    2fbc:	14400008 	bnez	v0,2fe0 <e1000_watchdog+0x2b8>
    2fc0:	24020003 	li	v0,3
    2fc4:	08000bfb 	j	2fec <e1000_watchdog+0x2c4>
    2fc8:	00000000 	nop
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    2fcc:	8c620008 	lw	v0,8(v1)
	return __arch__swab32(x);
    2fd0:	00021602 	srl	v0,v0,0x18
    2fd4:	30420010 	andi	v0,v0,0x10
    2fd8:	10400004 	beqz	v0,2fec <e1000_watchdog+0x2c4>
    2fdc:	24020003 	li	v0,3
            atomic_set(&adapter->tx_timeout, 3);
    2fe0:	ae42010c 	sw	v0,268(s2)
        } else {
    2fe4:	08000c05 	j	3014 <e1000_watchdog+0x2ec>
    2fe8:	8e620000 	lw	v0,0(s3)

            e1000_hibernate_adapter(netdev);
    2fec:	3c020000 	lui	v0,0x0
    2ff0:	24420000 	addiu	v0,v0,0
    2ff4:	0040f809 	jalr	v0
    2ff8:	02a02021 	move	a0,s5

#ifdef IANS
        if((adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) &&
           (adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON)) {
                adapter->link_active = FALSE;
                bd_ans_os_Watchdog(netdev, adapter);
                adapter->link_active = TRUE;
            }
#endif
            atomic_set(&adapter->tx_timeout, 0);
    2ffc:	ae40010c 	sw	zero,268(s2)
            e1000_wakeup_adapter(netdev);
    3000:	3c020000 	lui	v0,0x0
    3004:	24420000 	addiu	v0,v0,0
    3008:	0040f809 	jalr	v0
    300c:	02a02021 	move	a0,s5
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    3010:	8e620000 	lw	v0,0(s3)
    3014:	00021042 	srl	v0,v0,0x1
    3018:	30420001 	andi	v0,v0,0x1
        }
    }
#ifdef IANS
    if(adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) {

        if(adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON)
            bd_ans_os_Watchdog(netdev, adapter);

        if(adapter->link_active == FALSE) {
            /* don't sit on SKBs while link is down */

            if(atomic_read(&adapter->tx_ring.unused) < adapter->tx_ring.count) {

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0))
                spin_lock_irqsave(&netdev->xmit_lock, flags);
                e1000_tx_flush(adapter);
                spin_unlock_irqrestore(&netdev->xmit_lock, flags);
#else
                e1000_tx_flush(adapter);
#endif
            }
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,0))
            spin_lock_irqsave(&netdev->queue_lock, flags);
            qdisc_reset(netdev->qdisc);
            spin_unlock_irqrestore(&netdev->queue_lock, flags);
#else
            qdisc_reset(netdev->qdisc);
#endif
        }
    }
#endif

    if(test_bit(E1000_RX_REFILL, &adapter->flags)) {
    301c:	1040000d 	beqz	v0,3054 <e1000_watchdog+0x32c>
    3020:	24020001 	li	v0,1

extern void FASTCALL(__tasklet_schedule(struct tasklet_struct *t));

static inline void tasklet_schedule(struct tasklet_struct *t)
{
    3024:	264500d0 	addiu	a1,s2,208
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    3028:	c24400d4 	ll	a0,212(s2)
    302c:	00821825 	or	v1,a0,v0
    3030:	e24300d4 	sc	v1,212(s2)
    3034:	1060fffc 	beqz	v1,3028 <e1000_watchdog+0x300>
    3038:	00821824 	and	v1,a0,v0
extern void FASTCALL(__tasklet_schedule(struct tasklet_struct *t));

static inline void tasklet_schedule(struct tasklet_struct *t)
{
	if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
    303c:	14600005 	bnez	v1,3054 <e1000_watchdog+0x32c>
    3040:	00000000 	nop
		__tasklet_schedule(t);
    3044:	3c020000 	lui	v0,0x0
    3048:	24420000 	addiu	v0,v0,0
    304c:	0040f809 	jalr	v0
    3050:	00a02021 	move	a0,a1
        tasklet_schedule(&adapter->rx_fill_tasklet);
    }

    /* Reset the timer */
    mod_timer(&adapter->timer_id, jiffies + 2 * HZ);
    3054:	3c050000 	lui	a1,0x0
    3058:	8ca50000 	lw	a1,0(a1)
    305c:	26440094 	addiu	a0,s2,148
    3060:	3c020000 	lui	v0,0x0
    3064:	24420000 	addiu	v0,v0,0
    3068:	0040f809 	jalr	v0
    306c:	24a500c8 	addiu	a1,a1,200

    return;
}
    3070:	8fbf0028 	lw	ra,40(sp)
    3074:	8fb50024 	lw	s5,36(sp)
    3078:	8fb40020 	lw	s4,32(sp)
    307c:	8fb3001c 	lw	s3,28(sp)
    3080:	8fb20018 	lw	s2,24(sp)
    3084:	8fb10014 	lw	s1,20(sp)
    3088:	8fb00010 	lw	s0,16(sp)
    308c:	03e00008 	jr	ra
    3090:	27bd0030 	addiu	sp,sp,48

00003094 <e1000_xmit_frame>:
    3094:	27bdff80 	addiu	sp,sp,-128
    3098:	afbf007c 	sw	ra,124(sp)
    309c:	afbe0078 	sw	s8,120(sp)
    30a0:	afb70074 	sw	s7,116(sp)
    30a4:	afb60070 	sw	s6,112(sp)
    30a8:	afb5006c 	sw	s5,108(sp)
    30ac:	afb40068 	sw	s4,104(sp)
    30b0:	afb30064 	sw	s3,100(sp)
    30b4:	afb20060 	sw	s2,96(sp)
    30b8:	afb1005c 	sw	s1,92(sp)
    30bc:	afb00058 	sw	s0,88(sp)
    30c0:	afa50084 	sw	a1,132(sp)

/**
 * e1000_tx_checksum_setup
 * @adapter:
 * @skb:
 * @txd_upper:
 * @txd_lower:
 **/

static inline void
e1000_tx_checksum_setup(struct e1000_adapter *adapter,
                        struct sk_buff *skb,
                        uint32_t *txd_upper,
                        uint32_t *txd_lower)
{

    struct e1000_context_desc *desc;
    int i;

    if(skb->protocol != __constant_htons(ETH_P_IP)) {
        *txd_upper = 0;
        *txd_lower = adapter->TxdCmd;
        return;
    }

    switch (skb->nh.iph->protocol) {
    case IPPROTO_TCP:
        /* Offload TCP checksum */
        *txd_upper = E1000_TXD_POPTS_TXSM << 8;
        *txd_lower = adapter->TxdCmd | E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
        if(adapter->ActiveChecksumContext == OFFLOAD_TCP_IP)
            return;
        else
            adapter->ActiveChecksumContext = OFFLOAD_TCP_IP;
        break;
    case IPPROTO_UDP:
        /* Offload UDP checksum */
        *txd_upper = E1000_TXD_POPTS_TXSM << 8;
        *txd_lower = adapter->TxdCmd | E1000_TXD_CMD_DEXT | E1000_TXD_DTYP_D;
        if(adapter->ActiveChecksumContext == OFFLOAD_UDP_IP)
            return;
        else
            adapter->ActiveChecksumContext = OFFLOAD_UDP_IP;
        break;
    default:
        /* no checksum to offload */
        *txd_upper = 0;
        *txd_lower = adapter->TxdCmd;
        return;
    }

    /* If we reach this point, the checksum offload context
     * needs to be reset
     */

    i = adapter->tx_ring.next_to_use;
    desc = E1000_CONTEXT_DESC(adapter->tx_ring, i);

    desc->lower_setup.ip_fields.ipcss = skb->nh.raw - skb->data;
    desc->lower_setup.ip_fields.ipcso =
        ((skb->nh.raw + offsetof(struct iphdr, check)) - skb->data);
    desc->lower_setup.ip_fields.ipcse = cpu_to_le16(skb->h.raw - skb->data - 1);

    desc->upper_setup.tcp_fields.tucss = (skb->h.raw - skb->data);
    desc->upper_setup.tcp_fields.tucso = ((skb->h.raw + skb->csum) - skb->data);
    desc->upper_setup.tcp_fields.tucse = 0;

    desc->tcp_seg_setup.data = 0;
    desc->cmd_and_length = cpu_to_le32(E1000_TXD_CMD_DEXT) | adapter->TxdCmd;

    i = (i + 1) % adapter->tx_ring.count;
    atomic_dec(&adapter->tx_ring.unused);
    adapter->tx_ring.next_to_use = i;
    E1000_WRITE_REG(&adapter->shared, TDT, adapter->tx_ring.next_to_use);
    return;
}

/**
 * e1000_xmit_frame - Transmit entry point
 * @skb: buffer with frame data to transmit
 * @netdev: network interface device structure
 *
 * Returns 0 on success, negative on error
 *
 * e1000_xmit_frame is called by the stack to initiate a transmit.
 * The out of resource condition is checked after each successful Tx
 * so that the stack can be notified, preventing the driver from
 * ever needing to drop a frame.  The atomic operations on
 * tx_ring.unused are used to syncronize with the transmit
 * interrupt processing code without the need for a spinlock.
 **/

int
e1000_xmit_frame(struct sk_buff *skb,
                 struct net_device *netdev)
{
    struct e1000_adapter *adapter = netdev->priv;
    30c4:	8cb30064 	lw	s3,100(a1)
    30c8:	afa40080 	sw	a0,128(sp)
    struct pci_dev *pdev = adapter->pdev;
    struct e1000_tx_desc *tx_desc;
    int i, len, offset, txd_needed;
    uint32_t txd_upper, txd_lower;

#define TXD_USE_COUNT(x) (((x) >> 12) + ((x) & 0x0fff ? 1 : 0))

#ifdef MAX_SKB_FRAGS
    int f;
    skb_frag_t *frag;
#endif

    E1000_DBG("e1000_xmit_frame\n");

    if(adapter->link_active == FALSE) {
    30cc:	8e6200b0 	lw	v0,176(s3)
    30d0:	54400008 	bnezl	v0,30f4 <e1000_xmit_frame+0x60>
    30d4:	8fa20080 	lw	v0,128(sp)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    30d8:	c0a2002c 	ll	v0,44(a1)
    30dc:	34420001 	ori	v0,v0,0x1
    30e0:	e0a2002c 	sc	v0,44(a1)
    30e4:	1040fffc 	beqz	v0,30d8 <e1000_xmit_frame+0x44>
    30e8:	00000000 	nop
#ifdef IANS
        if((adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) &&
           (adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON))
            if(ans_notify)
                ans_notify(netdev, IANS_IND_XMIT_QUEUE_FULL);
#endif
        netif_stop_queue(netdev);
        return 1;
    30ec:	08000ee6 	j	3b98 <e1000_xmit_frame+0xb04>
    30f0:	24020001 	li	v0,1
    }

#ifdef MAX_SKB_FRAGS
    txd_needed = TXD_USE_COUNT(skb->len - skb->data_len);
    for(f = 0; f < skb_shinfo(skb)->nr_frags; f++) {
    30f4:	00006821 	move	t5,zero
    30f8:	8c470088 	lw	a3,136(v0)
    30fc:	8c48005c 	lw	t0,92(v0)
    3100:	8c450060 	lw	a1,96(v0)
    3104:	8ce40004 	lw	a0,4(a3)
    3108:	01051023 	subu	v0,t0,a1
    310c:	30430fff 	andi	v1,v0,0xfff
    3110:	0003182b 	sltu	v1,zero,v1
    3114:	00021302 	srl	v0,v0,0xc
    3118:	1080000d 	beqz	a0,3150 <e1000_xmit_frame+0xbc>
    311c:	00433021 	addu	a2,v0,v1
        frag = &skb_shinfo(skb)->frags[f];
    3120:	000d10c0 	sll	v0,t5,0x3
    3124:	00e21021 	addu	v0,a3,v0
        txd_needed += TXD_USE_COUNT(frag->size);
    3128:	94430012 	lhu	v1,18(v0)
    312c:	8ce40004 	lw	a0,4(a3)
    3130:	25ad0001 	addiu	t5,t5,1
    3134:	30620fff 	andi	v0,v1,0xfff
    3138:	00031b02 	srl	v1,v1,0xc
    313c:	00c31821 	addu	v1,a2,v1
    3140:	0002102b 	sltu	v0,zero,v0
    3144:	01a4202b 	sltu	a0,t5,a0
    3148:	1480fff5 	bnez	a0,3120 <e1000_xmit_frame+0x8c>
    314c:	00623021 	addu	a2,v1,v0
    }
#else
    txd_needed = TXD_USE_COUNT(skb->len);
#endif

    /* make sure there are enough Tx descriptors available in the ring */
    if(atomic_read(&adapter->tx_ring.unused) <= (txd_needed + 1)) {
    3150:	8e6300f4 	lw	v1,244(s3)
    3154:	24c20001 	addiu	v0,a2,1
    3158:	0043102a 	slt	v0,v0,v1
    315c:	5440000c 	bnezl	v0,3190 <e1000_xmit_frame+0xfc>
    3160:	8fa70080 	lw	a3,128(sp)
        adapter->net_stats.tx_dropped++;
    3164:	8e62016c 	lw	v0,364(s3)
    3168:	24420001 	addiu	v0,v0,1
    316c:	ae62016c 	sw	v0,364(s3)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    3170:	8fa40084 	lw	a0,132(sp)
    3174:	c083002c 	ll	v1,44(a0)
    3178:	34630001 	ori	v1,v1,0x1
    317c:	e083002c 	sc	v1,44(a0)
    3180:	1060fffc 	beqz	v1,3174 <e1000_xmit_frame+0xe0>
    3184:	00000000 	nop
#ifdef IANS
        if((adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) &&
           (adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON))
            if(ans_notify)
                ans_notify(netdev, IANS_IND_XMIT_QUEUE_FULL);
#endif
        netif_stop_queue(netdev);

        return 1;
    3188:	08000ee6 	j	3b98 <e1000_xmit_frame+0xb04>
    318c:	24020001 	li	v0,1
    }

    if(skb->ip_summed == CHECKSUM_HW) {
    3190:	24020001 	li	v0,1
    3194:	90e6006b 	lbu	a2,107(a3)
    3198:	54c20084 	bnel	a2,v0,33ac <e1000_xmit_frame+0x318>
    319c:	afa00010 	sw	zero,16(sp)
    31a0:	94e30074 	lhu	v1,116(a3)
    31a4:	24020800 	li	v0,2048
    31a8:	10620006 	beq	v1,v0,31c4 <e1000_xmit_frame+0x130>
    31ac:	266300f4 	addiu	v1,s3,244
    31b0:	afa00010 	sw	zero,16(sp)
    31b4:	8e620108 	lw	v0,264(s3)
    31b8:	afa30040 	sw	v1,64(sp)
    31bc:	08000cef 	j	33bc <e1000_xmit_frame+0x328>
    31c0:	afa20014 	sw	v0,20(sp)
    31c4:	8fa40080 	lw	a0,128(sp)
    31c8:	24030006 	li	v1,6
    31cc:	8c820020 	lw	v0,32(a0)
    31d0:	90440009 	lbu	a0,9(v0)
    31d4:	10830005 	beq	a0,v1,31ec <e1000_xmit_frame+0x158>
    31d8:	24020011 	li	v0,17
    31dc:	5082000d 	beql	a0,v0,3214 <e1000_xmit_frame+0x180>
    31e0:	8e620108 	lw	v0,264(s3)
    31e4:	08000ceb 	j	33ac <e1000_xmit_frame+0x318>
    31e8:	afa00010 	sw	zero,16(sp)
    31ec:	8e620108 	lw	v0,264(s3)
    31f0:	8e6401b4 	lw	a0,436(s3)
    31f4:	3c032010 	lui	v1,0x2010
    31f8:	00431025 	or	v0,v0,v1
    31fc:	266700f4 	addiu	a3,s3,244
    3200:	24030200 	li	v1,512
    3204:	afa20014 	sw	v0,20(sp)
    3208:	afa30010 	sw	v1,16(sp)
    320c:	08000c8e 	j	3238 <e1000_xmit_frame+0x1a4>
    3210:	afa70040 	sw	a3,64(sp)
    3214:	8e6401b4 	lw	a0,436(s3)
    3218:	3c032010 	lui	v1,0x2010
    321c:	00431025 	or	v0,v0,v1
    3220:	afa20014 	sw	v0,20(sp)
    3224:	266300f4 	addiu	v1,s3,244
    3228:	24020200 	li	v0,512
    322c:	24060002 	li	a2,2
    3230:	afa20010 	sw	v0,16(sp)
    3234:	afa30040 	sw	v1,64(sp)
    3238:	50860061 	beql	a0,a2,33c0 <e1000_xmit_frame+0x32c>
    323c:	8e7500f8 	lw	s5,248(s3)
    3240:	ae6601b4 	sw	a2,436(s3)
    3244:	8fa80080 	lw	t0,128(sp)
    3248:	8e6700f8 	lw	a3,248(s3)
    324c:	8e6500e4 	lw	a1,228(s3)
    3250:	91030083 	lbu	v1,131(t0)
    3254:	91040023 	lbu	a0,35(t0)
    3258:	00071100 	sll	v0,a3,0x4
    325c:	00a22821 	addu	a1,a1,v0
    3260:	00832023 	subu	a0,a0,v1
    3264:	a0a40000 	sb	a0,0(a1)
    3268:	91020083 	lbu	v0,131(t0)
    326c:	91030023 	lbu	v1,35(t0)
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    3270:	266400f4 	addiu	a0,s3,244
    3274:	24e70001 	addiu	a3,a3,1
    3278:	00621823 	subu	v1,v1,v0
    327c:	2463000a 	addiu	v1,v1,10
    3280:	a0a30001 	sb	v1,1(a1)
    3284:	95030082 	lhu	v1,130(t0)
    3288:	9502001e 	lhu	v0,30(t0)
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    328c:	afa40040 	sw	a0,64(sp)
    3290:	24060001 	li	a2,1
    3294:	00431023 	subu	v0,v0,v1
    3298:	2442ffff 	addiu	v0,v0,-1
    329c:	3042ffff 	andi	v0,v0,0xffff


static __inline__ __const__ __u16 __fswab16(__u16 x)
{
	return __arch__swab16(x);
    32a0:	304300ff 	andi	v1,v0,0xff
    32a4:	00031a00 	sll	v1,v1,0x8
    32a8:	00021202 	srl	v0,v0,0x8
    32ac:	00621825 	or	v1,v1,v0
    32b0:	a4a30002 	sh	v1,2(a1)
    32b4:	91030083 	lbu	v1,131(t0)
    32b8:	9102001f 	lbu	v0,31(t0)
    32bc:	00431023 	subu	v0,v0,v1
    32c0:	a0a20004 	sb	v0,4(a1)
    32c4:	8d020064 	lw	v0,100(t0)
    32c8:	8d03001c 	lw	v1,28(t0)
    32cc:	91040083 	lbu	a0,131(t0)
    32d0:	a4a00006 	sh	zero,6(a1)
    32d4:	00621821 	addu	v1,v1,v0
    32d8:	00641823 	subu	v1,v1,a0
    32dc:	a0a30005 	sb	v1,5(a1)
    32e0:	aca0000c 	sw	zero,12(a1)
    32e4:	8e620108 	lw	v0,264(s3)
    32e8:	34420020 	ori	v0,v0,0x20
    32ec:	aca20008 	sw	v0,8(a1)
    32f0:	8e6300f0 	lw	v1,240(s3)
    32f4:	00e3001b 	divu	zero,a3,v1
    32f8:	50600001 	beqzl	v1,3300 <e1000_xmit_frame+0x26c>
    32fc:	0007000d 	break	0x7
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    3300:	8fa20040 	lw	v0,64(sp)
    3304:	00003810 	mfhi	a3
	...
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    3310:	c0440000 	ll	a0,0(v0)
    3314:	00862023 	subu	a0,a0,a2
    3318:	e0440000 	sc	a0,0(v0)
    331c:	1080fffc 	beqz	a0,3310 <e1000_xmit_frame+0x27c>
    3320:	00000000 	nop
    3324:	8e62000c 	lw	v0,12(s3)
    3328:	2c420002 	sltiu	v0,v0,2
    332c:	14400010 	bnez	v0,3370 <e1000_xmit_frame+0x2dc>
    3330:	ae6700f8 	sw	a3,248(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3334:	30e3ff00 	andi	v1,a3,0xff00
    3338:	00031a00 	sll	v1,v1,0x8
    333c:	00071600 	sll	v0,a3,0x18
    3340:	00072202 	srl	a0,a3,0x8
    3344:	00431025 	or	v0,v0,v1
    3348:	8e650008 	lw	a1,8(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    334c:	3084ff00 	andi	a0,a0,0xff00
    3350:	00071e02 	srl	v1,a3,0x18
    3354:	00441025 	or	v0,v0,a0
    3358:	00431025 	or	v0,v0,v1
    335c:	aca23818 	sw	v0,14360(a1)
    3360:	8fa30080 	lw	v1,128(sp)
    3364:	8c68005c 	lw	t0,92(v1)
    3368:	08000cef 	j	33bc <e1000_xmit_frame+0x328>
    336c:	8c650060 	lw	a1,96(v1)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3370:	30e3ff00 	andi	v1,a3,0xff00
    3374:	00031a00 	sll	v1,v1,0x8
    3378:	00071600 	sll	v0,a3,0x18
    337c:	00072202 	srl	a0,a3,0x8
    3380:	00431025 	or	v0,v0,v1
    3384:	3084ff00 	andi	a0,a0,0xff00
    3388:	8e650008 	lw	a1,8(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    338c:	00441025 	or	v0,v0,a0
    3390:	00071e02 	srl	v1,a3,0x18
    3394:	00431025 	or	v0,v0,v1
    3398:	aca20438 	sw	v0,1080(a1)
    339c:	8fa40080 	lw	a0,128(sp)
    33a0:	8c88005c 	lw	t0,92(a0)
    33a4:	08000cef 	j	33bc <e1000_xmit_frame+0x328>
    33a8:	8c850060 	lw	a1,96(a0)
        e1000_tx_checksum_setup(adapter, skb, &txd_upper, &txd_lower);
    } else {
        txd_upper = 0;
        txd_lower = adapter->TxdCmd;
    33ac:	8e670108 	lw	a3,264(s3)
    33b0:	266200f4 	addiu	v0,s3,244
    33b4:	afa20040 	sw	v0,64(sp)
    33b8:	afa70014 	sw	a3,20(sp)
    }

    i = adapter->tx_ring.next_to_use;
    33bc:	8e7500f8 	lw	s5,248(s3)
    tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
    33c0:	8e6200e4 	lw	v0,228(s3)

#ifdef IANS
    if(adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) {
        tx_desc->lower.data = cpu_to_le32(txd_lower);
        tx_desc->upper.data = cpu_to_le32(txd_upper);
        if(bd_ans_os_Transmit(adapter, tx_desc, &skb) == BD_ANS_FAILURE) {
            return 1;
        }
        txd_lower = le32_to_cpu(tx_desc->lower.data);
        txd_upper = le32_to_cpu(tx_desc->upper.data);
    }
#endif

#ifdef MAX_SKB_FRAGS
    len = skb->len - skb->data_len;
    33c4:	0105b823 	subu	s7,t0,a1
    33c8:	00151900 	sll	v1,s5,0x4
#else
    len = skb->len;
#endif
    offset = 0;

    while(len > 4096) {
    33cc:	2ae41001 	slti	a0,s7,4097
    33d0:	0043b021 	addu	s6,v0,v1
    33d4:	14800070 	bnez	a0,3598 <e1000_xmit_frame+0x504>
    33d8:	00007821 	move	t7,zero
    33dc:	8fa30014 	lw	v1,20(sp)
    33e0:	3c0d00ff 	lui	t5,0xff
    33e4:	8fb20040 	lw	s2,64(sp)
    33e8:	34651000 	ori	a1,v1,0x1000
    33ec:	30a3ff00 	andi	v1,a1,0xff00
    33f0:	00052600 	sll	a0,a1,0x18
    33f4:	00ad1024 	and	v0,a1,t5
    33f8:	00031a00 	sll	v1,v1,0x8
    33fc:	00832025 	or	a0,a0,v1
    3400:	00021202 	srl	v0,v0,0x8
    3404:	00822025 	or	a0,a0,v0
    3408:	00052e02 	srl	a1,a1,0x18
    340c:	00852025 	or	a0,a0,a1
    3410:	afa40018 	sw	a0,24(sp)
    3414:	8fa40010 	lw	a0,16(sp)
    3418:	3c1eff00 	lui	s8,0xff00
    341c:	24140001 	li	s4,1
    3420:	00042200 	sll	a0,a0,0x8
    3424:	afa4001c 	sw	a0,28(sp)
        adapter->tx_ring.buffer_info[i].length = 4096;
    3428:	8e630100 	lw	v1,256(s3)
    342c:	00158840 	sll	s1,s5,0x1
    3430:	02358821 	addu	s1,s1,s5
    3434:	001188c0 	sll	s1,s1,0x3
    3438:	02231821 	addu	v1,s1,v1
    343c:	24021000 	li	v0,4096
    3440:	ac620010 	sw	v0,16(v1)
        adapter->tx_ring.buffer_info[i].dma =
    3444:	8fa50080 	lw	a1,128(sp)
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    3448:	3c030000 	lui	v1,0x0
    344c:	8c630000 	lw	v1,0(v1)
    3450:	8ca40080 	lw	a0,128(a1)
    3454:	008f2021 	addu	a0,a0,t7
    3458:	3c028000 	lui	v0,0x8000
    345c:	00441021 	addu	v0,v0,a0
    3460:	00021302 	srl	v0,v0,0xc
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    3464:	00021180 	sll	v0,v0,0x6
    3468:	00431021 	addu	v0,v0,v1
    346c:	30840fff 	andi	a0,a0,0xfff

	if (direction == PCI_DMA_NONE)
		BUG();

	addr = (unsigned long) page_address(page);
    3470:	8c500038 	lw	s0,56(v0)
	addr += offset;
#ifdef CONFIG_NONCOHERENT_IO
	dma_cache_wback_inv(addr, size);
    3474:	3c030000 	lui	v1,0x0
    3478:	8c630000 	lw	v1,0(v1)
    347c:	24051000 	li	a1,4096
    3480:	02048021 	addu	s0,s0,a0
    3484:	02002021 	move	a0,s0
    3488:	afad0048 	sw	t5,72(sp)
    348c:	0060f809 	jalr	v1
    3490:	afaf0050 	sw	t7,80(sp)
            pci_map_page(pdev, virt_to_page(skb->data + offset),
                         (unsigned long) (skb->data + offset) & ~~PAGE_MASK,
                         4096, PCI_DMA_TODEVICE);
    3494:	8e650100 	lw	a1,256(s3)
 * IO bus memory addresses are also 1:1 with the physical address
 */
static inline unsigned long virt_to_bus(volatile void * address)
{
	return PHYSADDR(address);
    3498:	3c041fff 	lui	a0,0x1fff
    349c:	3484ffff 	ori	a0,a0,0xffff
    34a0:	02041824 	and	v1,s0,a0
    34a4:	02252821 	addu	a1,s1,a1
    34a8:	00001021 	move	v0,zero
    34ac:	aca20008 	sw	v0,8(a1)
    34b0:	aca3000c 	sw	v1,12(a1)
    34b4:	8e640100 	lw	a0,256(s3)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    34b8:	00003021 	move	a2,zero

        tx_desc->buffer_addr = cpu_to_le64(adapter->tx_ring.buffer_info[i].dma);
        tx_desc->lower.data = cpu_to_le32(txd_lower | 4096);
        tx_desc->upper.data = cpu_to_le32(txd_upper);

        len -= 4096;
    34bc:	26f7f000 	addiu	s7,s7,-4096
    34c0:	02248821 	addu	s1,s1,a0
    34c4:	8fa4001c 	lw	a0,28(sp)
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
    34c8:	8e25000c 	lw	a1,12(s1)
    34cc:	8e280008 	lw	t0,8(s1)
    34d0:	aec4000c 	sw	a0,12(s6)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    34d4:	8fad0048 	lw	t5,72(sp)
    34d8:	30a4ff00 	andi	a0,a1,0xff00
    34dc:	00042200 	sll	a0,a0,0x8
    34e0:	00ad5024 	and	t2,a1,t5
    34e4:	00056600 	sll	t4,a1,0x18
    34e8:	310bff00 	andi	t3,t0,0xff00
    34ec:	01846025 	or	t4,t4,a0
    34f0:	000a5202 	srl	t2,t2,0x8
    34f4:	010d2024 	and	a0,t0,t5
    34f8:	00be2824 	and	a1,a1,s8
    34fc:	000b5a00 	sll	t3,t3,0x8
    3500:	00084e00 	sll	t1,t0,0x18
    3504:	018a6025 	or	t4,t4,t2
    3508:	012b4825 	or	t1,t1,t3
    350c:	00052e02 	srl	a1,a1,0x18
    3510:	00042202 	srl	a0,a0,0x8
    3514:	011e4024 	and	t0,t0,s8
}
static __inline__ __u32 __swab32p(__u32 *x)
{
	return __arch__swab32p(x);
}
static __inline__ void __swab32s(__u32 *addr)
{
	__arch__swab32s(addr);
}

#ifdef __BYTEORDER_HAS_U64__
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    3518:	01851825 	or	v1,t4,a1
    351c:	01244825 	or	t1,t1,a0
    3520:	00084602 	srl	t0,t0,0x18
    3524:	01283825 	or	a3,t1,t0
    3528:	00031000 	sll	v0,v1,0x0
    352c:	00001821 	move	v1,zero
    3530:	00461025 	or	v0,v0,a2
    3534:	00671825 	or	v1,v1,a3
    3538:	aec20000 	sw	v0,0(s6)
    353c:	aec30004 	sw	v1,4(s6)
    3540:	8fa50018 	lw	a1,24(sp)
        offset += 4096;
        i = (i + 1) % adapter->tx_ring.count;
    3544:	26a30001 	addiu	v1,s5,1
    3548:	aec50008 	sw	a1,8(s6)
    354c:	8e6200f0 	lw	v0,240(s3)
    3550:	0062001b 	divu	zero,v1,v0
    3554:	50400001 	beqzl	v0,355c <e1000_xmit_frame+0x4c8>
    3558:	0007000d 	break	0x7
    355c:	8faf0050 	lw	t7,80(sp)
    3560:	25ef1000 	addiu	t7,t7,4096
    3564:	00002010 	mfhi	a0
    3568:	0080a821 	move	s5,a0
    356c:	00000000 	nop
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    3570:	c2420000 	ll	v0,0(s2)
    3574:	00541023 	subu	v0,v0,s4
    3578:	e2420000 	sc	v0,0(s2)
    357c:	1040fffc 	beqz	v0,3570 <e1000_xmit_frame+0x4dc>
    3580:	00000000 	nop
        atomic_dec(&adapter->tx_ring.unused);
        tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
    3584:	8e6400e4 	lw	a0,228(s3)
    3588:	00151100 	sll	v0,s5,0x4
    }
    358c:	2ae31001 	slti	v1,s7,4097
    3590:	1060ffa5 	beqz	v1,3428 <e1000_xmit_frame+0x394>
    3594:	0082b021 	addu	s6,a0,v0
    adapter->tx_ring.buffer_info[i].length = len;
    3598:	8e620100 	lw	v0,256(s3)
    359c:	00159040 	sll	s2,s5,0x1
    35a0:	02558821 	addu	s1,s2,s5
    35a4:	001188c0 	sll	s1,s1,0x3
    35a8:	02221021 	addu	v0,s1,v0
    35ac:	ac570010 	sw	s7,16(v0)
    adapter->tx_ring.buffer_info[i].dma =
    35b0:	8fa20080 	lw	v0,128(sp)
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    35b4:	3c040000 	lui	a0,0x0
    35b8:	8c840000 	lw	a0,0(a0)
    35bc:	8c430080 	lw	v1,128(v0)
    35c0:	006f1821 	addu	v1,v1,t7
    35c4:	3c028000 	lui	v0,0x8000
    35c8:	00431021 	addu	v0,v0,v1
    35cc:	00021302 	srl	v0,v0,0xc
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    35d0:	00021180 	sll	v0,v0,0x6
    35d4:	00441021 	addu	v0,v0,a0
    35d8:	30630fff 	andi	v1,v1,0xfff

	if (direction == PCI_DMA_NONE)
		BUG();

	addr = (unsigned long) page_address(page);
    35dc:	8c500038 	lw	s0,56(v0)
	addr += offset;
#ifdef CONFIG_NONCOHERENT_IO
	dma_cache_wback_inv(addr, size);
    35e0:	3c060000 	lui	a2,0x0
    35e4:	8cc60000 	lw	a2,0(a2)
    35e8:	02038021 	addu	s0,s0,v1
    35ec:	02002021 	move	a0,s0
    35f0:	00c0f809 	jalr	a2
    35f4:	02e02821 	move	a1,s7
        pci_map_page(pdev, virt_to_page(skb->data + offset),
                     (unsigned long) (skb->data + offset) & ~PAGE_MASK, len,
                     PCI_DMA_TODEVICE);
    35f8:	8e650100 	lw	a1,256(s3)
 * IO bus memory addresses are also 1:1 with the physical address
 */
static inline unsigned long virt_to_bus(volatile void * address)
{
	return PHYSADDR(address);
    35fc:	3c041fff 	lui	a0,0x1fff
    3600:	3484ffff 	ori	a0,a0,0xffff
    3604:	02041824 	and	v1,s0,a0
    3608:	02252821 	addu	a1,s1,a1
    360c:	00001021 	move	v0,zero
    3610:	aca20008 	sw	v0,8(a1)
    3614:	aca3000c 	sw	v1,12(a1)
    3618:	8e640100 	lw	a0,256(s3)

    tx_desc->buffer_addr = cpu_to_le64(adapter->tx_ring.buffer_info[i].dma);
    361c:	8fa30014 	lw	v1,20(sp)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3620:	3c0700ff 	lui	a3,0xff
    3624:	02248821 	addu	s1,s1,a0
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
    3628:	8e2a000c 	lw	t2,12(s1)
    362c:	8e2b0008 	lw	t3,8(s1)
    3630:	00776025 	or	t4,v1,s7
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3634:	3142ff00 	andi	v0,t2,0xff00
    3638:	01471824 	and	v1,t2,a3
    363c:	318dff00 	andi	t5,t4,0xff00
    3640:	00021200 	sll	v0,v0,0x8
    3644:	000a4600 	sll	t0,t2,0x18
    3648:	3164ff00 	andi	a0,t3,0xff00
    364c:	01024025 	or	t0,t0,v0
    3650:	00031a02 	srl	v1,v1,0x8
    3654:	01671024 	and	v0,t3,a3
    3658:	00042200 	sll	a0,a0,0x8
    365c:	000b4e00 	sll	t1,t3,0x18
    3660:	01873824 	and	a3,t4,a3
    3664:	000c3600 	sll	a2,t4,0x18
    3668:	000d6a00 	sll	t5,t5,0x8
    366c:	01034025 	or	t0,t0,v1
    3670:	01244825 	or	t1,t1,a0
    3674:	00021202 	srl	v0,v0,0x8
    3678:	00073a02 	srl	a3,a3,0x8
    367c:	000a5602 	srl	t2,t2,0x18
    3680:	00cd3025 	or	a2,a2,t5
    3684:	01224825 	or	t1,t1,v0
}
static __inline__ __u32 __swab32p(__u32 *x)
{
	return __arch__swab32p(x);
}
static __inline__ void __swab32s(__u32 *addr)
{
	__arch__swab32s(addr);
}

#ifdef __BYTEORDER_HAS_U64__
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    3688:	010a2825 	or	a1,t0,t2
    368c:	00c73025 	or	a2,a2,a3
    3690:	000b5e02 	srl	t3,t3,0x18
    3694:	8fa70010 	lw	a3,16(sp)
    3698:	00002021 	move	a0,zero
    369c:	012b1825 	or	v1,t1,t3
    36a0:	00001021 	move	v0,zero
    36a4:	00052000 	sll	a0,a1,0x0
    36a8:	00002821 	move	a1,zero
    36ac:	00822025 	or	a0,a0,v0
    36b0:	000c6602 	srl	t4,t4,0x18
    36b4:	00a32825 	or	a1,a1,v1
    36b8:	00cc3025 	or	a2,a2,t4
    36bc:	00071200 	sll	v0,a3,0x8
    36c0:	aec40000 	sw	a0,0(s6)
    36c4:	aec50004 	sw	a1,4(s6)
    tx_desc->lower.data = cpu_to_le32(txd_lower | len);
    36c8:	aec60008 	sw	a2,8(s6)
    tx_desc->upper.data = cpu_to_le32(txd_upper);
    36cc:	aec2000c 	sw	v0,12(s6)

#ifdef MAX_SKB_FRAGS
    if(skb_shinfo(skb)->nr_frags > 0) {
    36d0:	8fa80080 	lw	t0,128(sp)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    36d4:	00003021 	move	a2,zero
    36d8:	00001821 	move	v1,zero
    36dc:	8d070088 	lw	a3,136(t0)
    36e0:	8ce20004 	lw	v0,4(a3)
    36e4:	104000eb 	beqz	v0,3a94 <e1000_xmit_frame+0xa00>
    36e8:	00002021 	move	a0,zero
        for(f = 0; f < skb_shinfo(skb)->nr_frags; f++) {
    36ec:	104000e9 	beqz	v0,3a94 <e1000_xmit_frame+0xa00>
    36f0:	00006821 	move	t5,zero
    36f4:	8fa20014 	lw	v0,20(sp)
    36f8:	afa30038 	sw	v1,56(sp)
    36fc:	8fa30010 	lw	v1,16(sp)
    3700:	34421000 	ori	v0,v0,0x1000
    3704:	8fb40040 	lw	s4,64(sp)
    3708:	afa4003c 	sw	a0,60(sp)
    370c:	00022600 	sll	a0,v0,0x18
    3710:	afa20024 	sw	v0,36(sp)
    3714:	afa60034 	sw	a2,52(sp)
    3718:	240e0001 	li	t6,1
    371c:	afa30030 	sw	v1,48(sp)
    3720:	afa40028 	sw	a0,40(sp)
            frag = &skb_shinfo(skb)->frags[f];
            i = (i + 1) % adapter->tx_ring.count;
    3724:	8e6400f0 	lw	a0,240(s3)
    3728:	26a20001 	addiu	v0,s5,1
    372c:	000d18c0 	sll	v1,t5,0x3
    3730:	0044001b 	divu	zero,v0,a0
    3734:	00e31821 	addu	v1,a3,v1
    3738:	50800001 	beqzl	a0,3740 <e1000_xmit_frame+0x6ac>
    373c:	0007000d 	break	0x7
    3740:	247e000c 	addiu	s8,v1,12
    3744:	00002810 	mfhi	a1
    3748:	00a0a821 	move	s5,a1
    374c:	00000000 	nop
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    3750:	c2820000 	ll	v0,0(s4)
    3754:	004e1023 	subu	v0,v0,t6
    3758:	e2820000 	sc	v0,0(s4)
    375c:	1040fffc 	beqz	v0,3750 <e1000_xmit_frame+0x6bc>
    3760:	00000000 	nop
            atomic_dec(&adapter->tx_ring.unused);
            tx_desc = E1000_TX_DESC(adapter->tx_ring, i);

            len = frag->size;
    3764:	97d70006 	lhu	s7,6(s8)
    3768:	8e6300e4 	lw	v1,228(s3)
    376c:	00151100 	sll	v0,s5,0x4
            offset = 0;

            while(len > 4096) {
    3770:	2ae41001 	slti	a0,s7,4097
    3774:	0062b021 	addu	s6,v1,v0
    3778:	1480006a 	bnez	a0,3924 <e1000_xmit_frame+0x890>
    377c:	00007821 	move	t7,zero
    3780:	8fa30024 	lw	v1,36(sp)
    3784:	8fa40028 	lw	a0,40(sp)
    3788:	3c1900ff 	lui	t9,0xff
    378c:	3062ff00 	andi	v0,v1,0xff00
    3790:	8fa50024 	lw	a1,36(sp)
    3794:	00021200 	sll	v0,v0,0x8
    3798:	00791824 	and	v1,v1,t9
    379c:	8fa70010 	lw	a3,16(sp)
    37a0:	00821025 	or	v0,a0,v0
    37a4:	00031a02 	srl	v1,v1,0x8
    37a8:	00431025 	or	v0,v0,v1
    37ac:	00052602 	srl	a0,a1,0x18
    37b0:	00441025 	or	v0,v0,a0
    37b4:	00073a00 	sll	a3,a3,0x8
    37b8:	afa20020 	sw	v0,32(sp)
    37bc:	3c12ff00 	lui	s2,0xff00
    37c0:	afa7002c 	sw	a3,44(sp)
                adapter->tx_ring.buffer_info[i].length = 4096;
    37c4:	8e630100 	lw	v1,256(s3)
    37c8:	00158040 	sll	s0,s5,0x1
    37cc:	02158021 	addu	s0,s0,s5
    37d0:	001080c0 	sll	s0,s0,0x3
    37d4:	02031821 	addu	v1,s0,v1
    37d8:	24021000 	li	v0,4096
    37dc:	ac620010 	sw	v0,16(v1)
                adapter->tx_ring.buffer_info[i].dma =
    37e0:	97c40004 	lhu	a0,4(s8)
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    37e4:	8fc20000 	lw	v0,0(s8)
    37e8:	008f2021 	addu	a0,a0,t7
	unsigned long addr;

	if (direction == PCI_DMA_NONE)
		BUG();

	addr = (unsigned long) page_address(page);
    37ec:	8c510038 	lw	s1,56(v0)
	addr += offset;
#ifdef CONFIG_NONCOHERENT_IO
	dma_cache_wback_inv(addr, size);
    37f0:	3c030000 	lui	v1,0x0
    37f4:	8c630000 	lw	v1,0(v1)
    37f8:	24051000 	li	a1,4096
    37fc:	02248821 	addu	s1,s1,a0
    3800:	02202021 	move	a0,s1
    3804:	afae004c 	sw	t6,76(sp)
    3808:	afaf0050 	sw	t7,80(sp)
    380c:	afb90054 	sw	t9,84(sp)
    3810:	0060f809 	jalr	v1
    3814:	afad0048 	sw	t5,72(sp)
                    pci_map_page(pdev, frag->page, frag->page_offset + offset,
                                 4096, PCI_DMA_TODEVICE);
    3818:	8e650100 	lw	a1,256(s3)
 * IO bus memory addresses are also 1:1 with the physical address
 */
static inline unsigned long virt_to_bus(volatile void * address)
{
	return PHYSADDR(address);
    381c:	3c041fff 	lui	a0,0x1fff
    3820:	3484ffff 	ori	a0,a0,0xffff
    3824:	02241824 	and	v1,s1,a0
    3828:	02052821 	addu	a1,s0,a1
    382c:	00001021 	move	v0,zero
    3830:	aca20008 	sw	v0,8(a1)
    3834:	aca3000c 	sw	v1,12(a1)

                tx_desc->buffer_addr =
    3838:	8e640100 	lw	a0,256(s3)
                    cpu_to_le64(adapter->tx_ring.buffer_info[i].dma);
                tx_desc->lower.data = cpu_to_le32(txd_lower | 4096);
                tx_desc->upper.data = cpu_to_le32(txd_upper);
    383c:	8fa8002c 	lw	t0,44(sp)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    3840:	00003021 	move	a2,zero
    3844:	02048021 	addu	s0,s0,a0
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
    3848:	8e05000c 	lw	a1,12(s0)
    384c:	8e0a0008 	lw	t2,8(s0)
    3850:	aec8000c 	sw	t0,12(s6)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3854:	8fb90054 	lw	t9,84(sp)
    3858:	30a4ff00 	andi	a0,a1,0xff00
    385c:	00042200 	sll	a0,a0,0x8
    3860:	00b95824 	and	t3,a1,t9
    3864:	00054600 	sll	t0,a1,0x18
    3868:	314cff00 	andi	t4,t2,0xff00
    386c:	01594824 	and	t1,t2,t9
    3870:	01044025 	or	t0,t0,a0
    3874:	000b5a02 	srl	t3,t3,0x8
    3878:	00b22824 	and	a1,a1,s2
    387c:	000c6200 	sll	t4,t4,0x8
    3880:	000a2600 	sll	a0,t2,0x18
    3884:	010b4025 	or	t0,t0,t3
    3888:	008c2025 	or	a0,a0,t4
    388c:	00052e02 	srl	a1,a1,0x18
    3890:	00094a02 	srl	t1,t1,0x8
    3894:	01525024 	and	t2,t2,s2
    3898:	00892025 	or	a0,a0,t1
}
static __inline__ __u32 __swab32p(__u32 *x)
{
	return __arch__swab32p(x);
}
static __inline__ void __swab32s(__u32 *addr)
{
	__arch__swab32s(addr);
}

#ifdef __BYTEORDER_HAS_U64__
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    389c:	01051825 	or	v1,t0,a1
    38a0:	000a5602 	srl	t2,t2,0x18
    38a4:	008a3825 	or	a3,a0,t2
    38a8:	00031000 	sll	v0,v1,0x0
    38ac:	00001821 	move	v1,zero
    38b0:	00461025 	or	v0,v0,a2
    38b4:	00671825 	or	v1,v1,a3
    38b8:	aec20000 	sw	v0,0(s6)
    38bc:	aec30004 	sw	v1,4(s6)
    38c0:	8fa20020 	lw	v0,32(sp)

                len -= 4096;
    38c4:	26f7f000 	addiu	s7,s7,-4096
    38c8:	aec20008 	sw	v0,8(s6)
                offset += 4096;
                i = (i + 1) % adapter->tx_ring.count;
    38cc:	8e6300f0 	lw	v1,240(s3)
    38d0:	26a20001 	addiu	v0,s5,1
    38d4:	0043001b 	divu	zero,v0,v1
    38d8:	50600001 	beqzl	v1,38e0 <e1000_xmit_frame+0x84c>
    38dc:	0007000d 	break	0x7
    38e0:	8faf0050 	lw	t7,80(sp)
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    38e4:	8fae004c 	lw	t6,76(sp)
    38e8:	25ef1000 	addiu	t7,t7,4096
    38ec:	00002010 	mfhi	a0
    38f0:	0080a821 	move	s5,a0
    38f4:	00000000 	nop
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    38f8:	c2820000 	ll	v0,0(s4)
    38fc:	004e1023 	subu	v0,v0,t6
    3900:	e2820000 	sc	v0,0(s4)
    3904:	1040fffc 	beqz	v0,38f8 <e1000_xmit_frame+0x864>
    3908:	00000000 	nop
                atomic_dec(&adapter->tx_ring.unused);
                tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
    390c:	8e6400e4 	lw	a0,228(s3)
    3910:	00151100 	sll	v0,s5,0x4
            }
    3914:	2ae31001 	slti	v1,s7,4097
    3918:	0082b021 	addu	s6,a0,v0
    391c:	1060ffa9 	beqz	v1,37c4 <e1000_xmit_frame+0x730>
    3920:	8fad0048 	lw	t5,72(sp)
            adapter->tx_ring.buffer_info[i].length = len;
    3924:	8e620100 	lw	v0,256(s3)
    3928:	00159040 	sll	s2,s5,0x1
    392c:	02558821 	addu	s1,s2,s5
    3930:	001188c0 	sll	s1,s1,0x3
    3934:	02221021 	addu	v0,s1,v0
    3938:	ac570010 	sw	s7,16(v0)
            adapter->tx_ring.buffer_info[i].dma =
    393c:	97c30004 	lhu	v1,4(s8)
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    3940:	8fc20000 	lw	v0,0(s8)
    3944:	006f1821 	addu	v1,v1,t7
	unsigned long addr;

	if (direction == PCI_DMA_NONE)
		BUG();

	addr = (unsigned long) page_address(page);
    3948:	8c500038 	lw	s0,56(v0)
	addr += offset;
#ifdef CONFIG_NONCOHERENT_IO
	dma_cache_wback_inv(addr, size);
    394c:	3c060000 	lui	a2,0x0
    3950:	8cc60000 	lw	a2,0(a2)
    3954:	02038021 	addu	s0,s0,v1
    3958:	02002021 	move	a0,s0
    395c:	02e02821 	move	a1,s7
    3960:	afad0048 	sw	t5,72(sp)
    3964:	00c0f809 	jalr	a2
    3968:	afae004c 	sw	t6,76(sp)
                pci_map_page(pdev, frag->page, frag->page_offset + offset, len,
                             PCI_DMA_TODEVICE);
    396c:	8e650100 	lw	a1,256(s3)
 * IO bus memory addresses are also 1:1 with the physical address
 */
static inline unsigned long virt_to_bus(volatile void * address)
{
	return PHYSADDR(address);
    3970:	3c041fff 	lui	a0,0x1fff
    3974:	3484ffff 	ori	a0,a0,0xffff
    3978:	02041824 	and	v1,s0,a0
    397c:	02252821 	addu	a1,s1,a1
    3980:	00001021 	move	v0,zero
    3984:	aca20008 	sw	v0,8(a1)
    3988:	aca3000c 	sw	v1,12(a1)
            tx_desc->buffer_addr =
    398c:	8e640100 	lw	a0,256(s3)
                cpu_to_le64(adapter->tx_ring.buffer_info[i].dma);
    3990:	8fa20014 	lw	v0,20(sp)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3994:	3c0500ff 	lui	a1,0xff
    3998:	02248821 	addu	s1,s1,a0
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
    399c:	8e23000c 	lw	v1,12(s1)
    39a0:	8e290008 	lw	t1,8(s1)
    39a4:	00575825 	or	t3,v0,s7
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    39a8:	3062ff00 	andi	v0,v1,0xff00
    39ac:	00652024 	and	a0,v1,a1
    39b0:	00021200 	sll	v0,v0,0x8
    39b4:	00033600 	sll	a2,v1,0x18
    39b8:	3125ff00 	andi	a1,t1,0xff00
    39bc:	3c0800ff 	lui	t0,0xff
    39c0:	00c23025 	or	a2,a2,v0
    39c4:	00052a00 	sll	a1,a1,0x8
    39c8:	01281024 	and	v0,t1,t0
    39cc:	00095600 	sll	t2,t1,0x18
    39d0:	01455025 	or	t2,t2,a1
    39d4:	00021202 	srl	v0,v0,0x8
    39d8:	3c07ff00 	lui	a3,0xff00
    39dc:	01425025 	or	t2,t2,v0
    39e0:	8fa20030 	lw	v0,48(sp)
    39e4:	00042202 	srl	a0,a0,0x8
    39e8:	00671824 	and	v1,v1,a3
    39ec:	00c43025 	or	a2,a2,a0
    39f0:	00031e02 	srl	v1,v1,0x18
}
static __inline__ __u32 __swab32p(__u32 *x)
{
	return __arch__swab32p(x);
}
static __inline__ void __swab32s(__u32 *addr)
{
	__arch__swab32s(addr);
}

#ifdef __BYTEORDER_HAS_U64__
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    39f4:	00c32825 	or	a1,a2,v1
    39f8:	00023200 	sll	a2,v0,0x8
    39fc:	8fa20034 	lw	v0,52(sp)
    3a00:	316cff00 	andi	t4,t3,0xff00
    3a04:	01274824 	and	t1,t1,a3
    3a08:	01684024 	and	t0,t3,t0
    3a0c:	000b3e00 	sll	a3,t3,0x18
    3a10:	3c03ff00 	lui	v1,0xff00
    3a14:	000c6200 	sll	t4,t4,0x8
    3a18:	00094e02 	srl	t1,t1,0x18
    3a1c:	00002021 	move	a0,zero
    3a20:	00084202 	srl	t0,t0,0x8
    3a24:	01635824 	and	t3,t3,v1
    3a28:	00463025 	or	a2,v0,a2
    3a2c:	01491825 	or	v1,t2,t1
    3a30:	00001021 	move	v0,zero
    3a34:	00ec3825 	or	a3,a3,t4
    3a38:	00052000 	sll	a0,a1,0x0
    3a3c:	00002821 	move	a1,zero
    3a40:	00822025 	or	a0,a0,v0
    3a44:	00e83825 	or	a3,a3,t0
    3a48:	8fa80038 	lw	t0,56(sp)
    3a4c:	00a32825 	or	a1,a1,v1
    3a50:	8fa2003c 	lw	v0,60(sp)
    3a54:	000b5e02 	srl	t3,t3,0x18
    3a58:	00c83025 	or	a2,a2,t0
    3a5c:	00eb3825 	or	a3,a3,t3
    3a60:	00c23025 	or	a2,a2,v0
    3a64:	aec40000 	sw	a0,0(s6)
    3a68:	aec50004 	sw	a1,4(s6)
            tx_desc->lower.data = cpu_to_le32(txd_lower | len);
    3a6c:	aec70008 	sw	a3,8(s6)
            tx_desc->upper.data = cpu_to_le32(txd_upper);
    3a70:	aec6000c 	sw	a2,12(s6)
    3a74:	8fa30080 	lw	v1,128(sp)
    3a78:	8fad0048 	lw	t5,72(sp)
    3a7c:	8c670088 	lw	a3,136(v1)
    3a80:	25ad0001 	addiu	t5,t5,1
    3a84:	8ce20004 	lw	v0,4(a3)
    3a88:	01a2102b 	sltu	v0,t5,v0
    3a8c:	1440ff25 	bnez	v0,3724 <e1000_xmit_frame+0x690>
    3a90:	8fae004c 	lw	t6,76(sp)
        }
    }
    3a94:	8ec20008 	lw	v0,8(s6)
#endif
    /* EOP and SKB pointer go with the last fragment */
    tx_desc->lower.data |= cpu_to_le32(E1000_TXD_CMD_EOP);
    adapter->tx_ring.buffer_info[i].skb = skb;
    3a98:	02552021 	addu	a0,s2,s5
    3a9c:	000420c0 	sll	a0,a0,0x3
    3aa0:	34420001 	ori	v0,v0,0x1
    3aa4:	aec20008 	sw	v0,8(s6)
    3aa8:	8e630100 	lw	v1,256(s3)
    3aac:	8fa70080 	lw	a3,128(sp)

    i = (i + 1) % adapter->tx_ring.count;
    3ab0:	26a50001 	addiu	a1,s5,1
    3ab4:	00832021 	addu	a0,a0,v1
    3ab8:	ac870000 	sw	a3,0(a0)
    3abc:	8e6300f0 	lw	v1,240(s3)
    3ac0:	3c0600ff 	lui	a2,0xff
    3ac4:	3c11ff00 	lui	s1,0xff00
    3ac8:	00a3001b 	divu	zero,a1,v1
    3acc:	50600001 	beqzl	v1,3ad4 <e1000_xmit_frame+0xa40>
    3ad0:	0007000d 	break	0x7
    3ad4:	24020001 	li	v0,1
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    3ad8:	8fa30040 	lw	v1,64(sp)
    3adc:	00008010 	mfhi	s0
	...
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    3ae8:	c0640000 	ll	a0,0(v1)
    3aec:	00822023 	subu	a0,a0,v0
    3af0:	e0640000 	sc	a0,0(v1)
    3af4:	1080fffc 	beqz	a0,3ae8 <e1000_xmit_frame+0xa54>
    3af8:	00000000 	nop
    atomic_dec(&adapter->tx_ring.unused);

    /* Move the HW Tx Tail Pointer */
    adapter->tx_ring.next_to_use = i;
    3afc:	8e63000c 	lw	v1,12(s3)
    3b00:	2c630002 	sltiu	v1,v1,2
    3b04:	1460000f 	bnez	v1,3b44 <e1000_xmit_frame+0xab0>
    3b08:	ae7000f8 	sw	s0,248(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3b0c:	3203ff00 	andi	v1,s0,0xff00
    3b10:	00031a00 	sll	v1,v1,0x8
    3b14:	02062824 	and	a1,s0,a2
    3b18:	00101600 	sll	v0,s0,0x18
    3b1c:	00431025 	or	v0,v0,v1
    3b20:	02112024 	and	a0,s0,s1
    3b24:	00052a02 	srl	a1,a1,0x8
    3b28:	8e630008 	lw	v1,8(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3b2c:	00451025 	or	v0,v0,a1
    3b30:	00042602 	srl	a0,a0,0x18
    3b34:	00441025 	or	v0,v0,a0

    E1000_WRITE_REG(&adapter->shared, TDT, adapter->tx_ring.next_to_use);
    3b38:	ac623818 	sw	v0,14360(v1)
    3b3c:	08000edd 	j	3b74 <e1000_xmit_frame+0xae0>
    3b40:	00000000 	nop
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3b44:	3203ff00 	andi	v1,s0,0xff00
    3b48:	00031a00 	sll	v1,v1,0x8
    3b4c:	02062824 	and	a1,s0,a2
    3b50:	00101600 	sll	v0,s0,0x18
    3b54:	00431025 	or	v0,v0,v1
    3b58:	02112024 	and	a0,s0,s1
    3b5c:	00052a02 	srl	a1,a1,0x8
    3b60:	8e630008 	lw	v1,8(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3b64:	00451025 	or	v0,v0,a1
    3b68:	00042602 	srl	a0,a0,0x18
    3b6c:	00441025 	or	v0,v0,a0
    3b70:	ac620438 	sw	v0,1080(v1)

    if(atomic_read(&adapter->tx_timeout) == 0)
    3b74:	8e62010c 	lw	v0,268(s3)
    3b78:	14400002 	bnez	v0,3b84 <e1000_xmit_frame+0xaf0>
    3b7c:	24020003 	li	v0,3
        atomic_set(&adapter->tx_timeout, 3);
    3b80:	ae62010c 	sw	v0,268(s3)

    netdev->trans_start = jiffies;
    3b84:	3c030000 	lui	v1,0x0
    3b88:	8c630000 	lw	v1,0(v1)
    3b8c:	8fa40084 	lw	a0,132(sp)

    return 0;
    3b90:	00001021 	move	v0,zero
    3b94:	ac83004c 	sw	v1,76(a0)
}
    3b98:	8fbf007c 	lw	ra,124(sp)
    3b9c:	8fbe0078 	lw	s8,120(sp)
    3ba0:	8fb70074 	lw	s7,116(sp)
    3ba4:	8fb60070 	lw	s6,112(sp)
    3ba8:	8fb5006c 	lw	s5,108(sp)
    3bac:	8fb40068 	lw	s4,104(sp)
    3bb0:	8fb30064 	lw	s3,100(sp)
    3bb4:	8fb20060 	lw	s2,96(sp)
    3bb8:	8fb1005c 	lw	s1,92(sp)
    3bbc:	8fb00058 	lw	s0,88(sp)
    3bc0:	03e00008 	jr	ra
    3bc4:	27bd0080 	addiu	sp,sp,128

00003bc8 <e1000_get_stats>:

/**
 * e1000_get_stats - Get System Network Statistics
 * @netdev: network interface device structure
 *
 * Returns the address of the device statistics structure.
 * The statistics are actually updated from the timer callback.
 **/

struct net_device_stats *
e1000_get_stats(struct net_device *netdev)
{
    struct e1000_adapter *adapter = netdev->priv;
    3bc8:	8c820064 	lw	v0,100(a0)

    E1000_DBG("e1000_get_stats\n");

    return &adapter->net_stats;
    3bcc:	03e00008 	jr	ra
    3bd0:	24420150 	addiu	v0,v0,336

00003bd4 <e1000_change_mtu>:
    3bd4:	27bdffd0 	addiu	sp,sp,-48
    3bd8:	afb50024 	sw	s5,36(sp)
    3bdc:	afb40020 	sw	s4,32(sp)
    3be0:	afbf0028 	sw	ra,40(sp)
    3be4:	afb3001c 	sw	s3,28(sp)
    3be8:	afb20018 	sw	s2,24(sp)
    3bec:	afb10014 	sw	s1,20(sp)
    3bf0:	afb00010 	sw	s0,16(sp)
    3bf4:	0080a821 	move	s5,a0
    3bf8:	00a0a021 	move	s4,a1
}

/**
 * e1000_change_mtu - Change the Maximum Transfer Unit
 * @netdev: network interface device structure
 * @new_mtu: new value for maximum frame size
 *
 * Returns 0 on success, negative on failure
 **/

int
e1000_change_mtu(struct net_device *netdev,
                 int new_mtu)
{
    struct e1000_adapter *adapter = netdev->priv;
    3bfc:	8eb20064 	lw	s2,100(s5)
    uint32_t old_mtu = adapter->rx_buffer_len;

    E1000_DBG("e1000_change_mtu\n");
    if((new_mtu < MINIMUM_ETHERNET_PACKET_SIZE - ENET_HEADER_SIZE) ||
    3c00:	2682ffd2 	addiu	v0,s4,-46
    3c04:	2c423ec5 	sltiu	v0,v0,16069
    3c08:	14400005 	bnez	v0,3c20 <e1000_change_mtu+0x4c>
    3c0c:	8e4300b8 	lw	v1,184(s2)
       (new_mtu > MAX_JUMBO_FRAME_SIZE - ENET_HEADER_SIZE)) {
        E1000_ERR("Invalid MTU setting\n");
    3c10:	3c040000 	lui	a0,0x0
    3c14:	24840d60 	addiu	a0,a0,3424
        return -EINVAL;
    3c18:	08000f12 	j	3c48 <e1000_change_mtu+0x74>
    3c1c:	00000000 	nop
    }

    if(new_mtu <= MAXIMUM_ETHERNET_PACKET_SIZE - ENET_HEADER_SIZE) {
    3c20:	2a8205dd 	slti	v0,s4,1501
    3c24:	50400003 	beqzl	v0,3c34 <e1000_change_mtu+0x60>
    3c28:	8e42000c 	lw	v0,12(s2)
        /* 2k buffers */
        adapter->rx_buffer_len = E1000_RXBUFFER_2048;

    } else if(adapter->shared.mac_type < e1000_82543) {
    3c2c:	08000f1f 	j	3c7c <e1000_change_mtu+0xa8>
    3c30:	24020800 	li	v0,2048
    3c34:	2c420002 	sltiu	v0,v0,2
    3c38:	10400009 	beqz	v0,3c60 <e1000_change_mtu+0x8c>
    3c3c:	2a820fef 	slti	v0,s4,4079
        E1000_ERR("Jumbo Frames not supported on 82542\n");
    3c40:	3c040000 	lui	a0,0x0
    3c44:	24840d80 	addiu	a0,a0,3456
    3c48:	3c020000 	lui	v0,0x0
    3c4c:	24420000 	addiu	v0,v0,0
    3c50:	0040f809 	jalr	v0
    3c54:	00000000 	nop
        return -EINVAL;
    3c58:	08000f70 	j	3dc0 <e1000_change_mtu+0x1ec>
    3c5c:	2402ffea 	li	v0,-22

    } else if(new_mtu <= E1000_RXBUFFER_4096 - ENET_HEADER_SIZE - CRC_LENGTH) {
    3c60:	50400003 	beqzl	v0,3c70 <e1000_change_mtu+0x9c>
    3c64:	2a821fef 	slti	v0,s4,8175
        /* 4k buffers */
        adapter->rx_buffer_len = E1000_RXBUFFER_4096;

    } else if(new_mtu <= E1000_RXBUFFER_8192 - ENET_HEADER_SIZE - CRC_LENGTH) {
    3c68:	08000f1f 	j	3c7c <e1000_change_mtu+0xa8>
    3c6c:	24021000 	li	v0,4096
    3c70:	50400002 	beqzl	v0,3c7c <e1000_change_mtu+0xa8>
    3c74:	24024000 	li	v0,16384
        /* 8k buffers */
        adapter->rx_buffer_len = E1000_RXBUFFER_8192;

    } else {
    3c78:	24022000 	li	v0,8192
        /* 16k buffers */
        adapter->rx_buffer_len = E1000_RXBUFFER_16384;
    3c7c:	ae4200b8 	sw	v0,184(s2)
    }

    if(old_mtu != adapter->rx_buffer_len &&
    3c80:	8e4200b8 	lw	v0,184(s2)
    3c84:	1062004b 	beq	v1,v0,3db4 <e1000_change_mtu+0x1e0>
    3c88:	26820012 	addiu	v0,s4,18
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    3c8c:	8e42008c 	lw	v0,140(s2)
    3c90:	30420001 	andi	v0,v0,0x1
       test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    3c94:	10400046 	beqz	v0,3db0 <e1000_change_mtu+0x1dc>
    3c98:	24100001 	li	s0,1
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    3c9c:	265100d8 	addiu	s1,s2,216
	unsigned long temp;

	__asm__ __volatile__(
    3ca0:	c2220000 	ll	v0,0(s1)
    3ca4:	00501021 	addu	v0,v0,s0
    3ca8:	e2220000 	sc	v0,0(s1)
    3cac:	1040fffc 	beqz	v0,3ca0 <e1000_change_mtu+0xcc>
    3cb0:	00000000 	nop
 * restricted to acting on a single-word quantity.
 */
extern __inline__ void
set_bit(int nr, volatile void *addr)
{
    3cb4:	26b3002c 	addiu	s3,s5,44
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    3cb8:	c2620000 	ll	v0,0(s3)
    3cbc:	34420001 	ori	v0,v0,0x1
    3cc0:	e2620000 	sc	v0,0(s3)
    3cc4:	1040fffc 	beqz	v0,3cb8 <e1000_change_mtu+0xe4>
    3cc8:	00000000 	nop

        /* stop */
        tasklet_disable(&adapter->rx_fill_tasklet);
        netif_stop_queue(netdev);
        adapter->shared.adapter_stopped = 0;
        e1000_adapter_stop(&adapter->shared);
    3ccc:	26440008 	addiu	a0,s2,8
    3cd0:	3c020000 	lui	v0,0x0
    3cd4:	24420000 	addiu	v0,v0,0
    3cd8:	0040f809 	jalr	v0
    3cdc:	ae400064 	sw	zero,100(s2)

        /* clean out old buffers */
        e1000_clean_rx_ring(adapter);
    3ce0:	3c020000 	lui	v0,0x0
    3ce4:	244228d8 	addiu	v0,v0,10456
    3ce8:	0040f809 	jalr	v0
    3cec:	02402021 	move	a0,s2
        e1000_clean_tx_ring(adapter);
    3cf0:	3c020000 	lui	v0,0x0
    3cf4:	24422720 	addiu	v0,v0,10016
    3cf8:	0040f809 	jalr	v0
    3cfc:	02402021 	move	a0,s2

        /* reset hardware */
        adapter->shared.adapter_stopped = 0;
        e1000_hw_init(adapter);
    3d00:	02402021 	move	a0,s2
    3d04:	3c020000 	lui	v0,0x0
    3d08:	244217c4 	addiu	v0,v0,6084
    3d0c:	0040f809 	jalr	v0
    3d10:	ae400064 	sw	zero,100(s2)

        /* go */
        e1000_setup_rctl(adapter);
    3d14:	3c020000 	lui	v0,0x0
    3d18:	24422308 	addiu	v0,v0,8968
    3d1c:	0040f809 	jalr	v0
    3d20:	02402021 	move	a0,s2
        e1000_configure_rx(adapter);
    3d24:	3c020000 	lui	v0,0x0
    3d28:	244223a8 	addiu	v0,v0,9128
    3d2c:	0040f809 	jalr	v0
    3d30:	02402021 	move	a0,s2
        e1000_configure_tx(adapter);
    3d34:	3c020000 	lui	v0,0x0
    3d38:	24421f60 	addiu	v0,v0,8032
    3d3c:	0040f809 	jalr	v0
    3d40:	02402021 	move	a0,s2
	smp_mb();
}

static inline void tasklet_enable(struct tasklet_struct *t)
{
    3d44:	264500d0 	addiu	a1,s2,208
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    3d48:	c2230000 	ll	v1,0(s1)
    3d4c:	00701823 	subu	v1,v1,s0
    3d50:	e2230000 	sc	v1,0(s1)
    3d54:	1060fffc 	beqz	v1,3d48 <e1000_change_mtu+0x174>
    3d58:	00000000 	nop
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    3d5c:	c24400d4 	ll	a0,212(s2)
    3d60:	00901025 	or	v0,a0,s0
    3d64:	e24200d4 	sc	v0,212(s2)
    3d68:	1040fffc 	beqz	v0,3d5c <e1000_change_mtu+0x188>
    3d6c:	00901024 	and	v0,a0,s0
extern void FASTCALL(__tasklet_schedule(struct tasklet_struct *t));

static inline void tasklet_schedule(struct tasklet_struct *t)
{
	if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
    3d70:	14400005 	bnez	v0,3d88 <e1000_change_mtu+0x1b4>
    3d74:	00000000 	nop
		__tasklet_schedule(t);
    3d78:	3c020000 	lui	v0,0x0
    3d7c:	24420000 	addiu	v0,v0,0
    3d80:	0040f809 	jalr	v0
    3d84:	00a02021 	move	a0,a1
#ifdef IANS
        /* restore VLAN settings */
        if((IANS_BD_TAGGING_MODE) (ANS_PRIVATE_DATA_FIELD(adapter)->tag_mode)
           != IANS_BD_TAGGING_NONE)
            bd_ans_hw_EnableVLAN(adapter);
#endif
        tasklet_enable(&adapter->rx_fill_tasklet);
        tasklet_schedule(&adapter->rx_fill_tasklet);
        e1000_irq_enable(adapter);
    3d88:	3c020000 	lui	v0,0x0
    3d8c:	244274ac 	addiu	v0,v0,29868
    3d90:	0040f809 	jalr	v0
    3d94:	02402021 	move	a0,s2
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    3d98:	c2630000 	ll	v1,0(s3)
    3d9c:	2401fffe 	li	at,-2
    3da0:	00611824 	and	v1,v1,at
    3da4:	e2630000 	sc	v1,0(s3)
    3da8:	1060fffb 	beqz	v1,3d98 <e1000_change_mtu+0x1c4>
    3dac:	00000000 	nop
        netif_start_queue(netdev);
    }

    netdev->mtu = new_mtu;
    adapter->shared.max_frame_size = new_mtu + ENET_HEADER_SIZE + CRC_LENGTH;
    3db0:	26820012 	addiu	v0,s4,18
    3db4:	aeb4005c 	sw	s4,92(s5)
    3db8:	ae42003c 	sw	v0,60(s2)

    return 0;
    3dbc:	00001021 	move	v0,zero
}
    3dc0:	8fbf0028 	lw	ra,40(sp)
    3dc4:	8fb50024 	lw	s5,36(sp)
    3dc8:	8fb40020 	lw	s4,32(sp)
    3dcc:	8fb3001c 	lw	s3,28(sp)
    3dd0:	8fb20018 	lw	s2,24(sp)
    3dd4:	8fb10014 	lw	s1,20(sp)
    3dd8:	8fb00010 	lw	s0,16(sp)
    3ddc:	03e00008 	jr	ra
    3de0:	27bd0030 	addiu	sp,sp,48

00003de4 <e1000_set_mac>:
    3de4:	27bdffd0 	addiu	sp,sp,-48
    3de8:	afb20018 	sw	s2,24(sp)
    3dec:	afb00010 	sw	s0,16(sp)
    3df0:	afbf0028 	sw	ra,40(sp)
    3df4:	afb50024 	sw	s5,36(sp)
    3df8:	afb40020 	sw	s4,32(sp)
    3dfc:	afb3001c 	sw	s3,28(sp)
    3e00:	afb10014 	sw	s1,20(sp)
    3e04:	00808021 	move	s0,a0

/**
 * e1000_set_mac - Change the Ethernet Address of the NIC
 * @netdev: network interface device structure
 * @p: pointer to an address structure
 * 
 * Returns 0 on success, negative on failure
 **/

int
e1000_set_mac(struct net_device *netdev,
              void *p)
{
    struct e1000_adapter *adapter = netdev->priv;
    3e08:	8e130064 	lw	s3,100(s0)
    3e0c:	00a09021 	move	s2,a1
    struct pci_dev *pdev = adapter->pdev;
    struct sockaddr *addr = (struct sockaddr *) p;
    3e10:	8e66000c 	lw	a2,12(s3)
    3e14:	8e75014c 	lw	s5,332(s3)
    3e18:	2cc20002 	sltiu	v0,a2,2
    3e1c:	00c04021 	move	t0,a2
    uint32_t pci_command;
    uint32_t rctl;

    E1000_DBG("e1000_set_mac\n");

    rctl = E1000_READ_REG(&adapter->shared, RCTL);
    3e20:	8e670008 	lw	a3,8(s3)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    3e24:	8ce50100 	lw	a1,256(a3)
	return __arch__swab32(x);
    3e28:	30a3ff00 	andi	v1,a1,0xff00
    3e2c:	00052600 	sll	a0,a1,0x18
    3e30:	00051202 	srl	v0,a1,0x8
    3e34:	00031a00 	sll	v1,v1,0x8
    3e38:	00832025 	or	a0,a0,v1
    3e3c:	3042ff00 	andi	v0,v0,0xff00
    3e40:	00822025 	or	a0,a0,v0
    3e44:	00052e02 	srl	a1,a1,0x18

    if(adapter->shared.mac_type == e1000_82542_rev2_0) {
    3e48:	15000031 	bnez	t0,3f10 <e1000_set_mac+0x12c>
    3e4c:	0085a025 	or	s4,a0,a1
        if(adapter->shared.pci_cmd_word & PCI_COMMAND_INVALIDATE) {
    3e50:	9662004a 	lhu	v0,74(s3)
    3e54:	30420010 	andi	v0,v0,0x10
    3e58:	10400009 	beqz	v0,3e80 <e1000_set_mac+0x9c>
    3e5c:	02a02021 	move	a0,s5
            pci_command =
    3e60:	9666004a 	lhu	a2,74(s3)
                adapter->shared.pci_cmd_word & ~PCI_COMMAND_INVALIDATE;
            pci_write_config_word(pdev, PCI_COMMAND, pci_command);
    3e64:	24050004 	li	a1,4
    3e68:	3c020000 	lui	v0,0x0
    3e6c:	24420000 	addiu	v0,v0,0
    3e70:	0040f809 	jalr	v0
    3e74:	30c6ffef 	andi	a2,a2,0xffef
    3e78:	8e66000c 	lw	a2,12(s3)
    3e7c:	8e670008 	lw	a3,8(s3)
        }
    3e80:	2cc20002 	sltiu	v0,a2,2
        E1000_WRITE_REG(&adapter->shared, RCTL, rctl | E1000_RCTL_RST);
    3e84:	36850001 	ori	a1,s4,0x1
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3e88:	30a4ff00 	andi	a0,a1,0xff00
    3e8c:	00051600 	sll	v0,a1,0x18
    3e90:	00051a02 	srl	v1,a1,0x8
    3e94:	00042200 	sll	a0,a0,0x8
    3e98:	00441025 	or	v0,v0,a0
    3e9c:	3063ff00 	andi	v1,v1,0xff00
    3ea0:	00431025 	or	v0,v0,v1
    3ea4:	00052e02 	srl	a1,a1,0x18
    3ea8:	00451025 	or	v0,v0,a1
    3eac:	ace20100 	sw	v0,256(a3)
extern __inline__ void __udelay(unsigned long usecs, unsigned long lpj)
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
    3eb0:	3c027fff 	lui	v0,0x7fff
    3eb4:	3c030000 	lui	v1,0x0
    3eb8:	8c630000 	lw	v1,0(v1)
    3ebc:	3442f1c0 	ori	v0,v0,0xf1c0
	__asm__("multu\t%2,%3"
    3ec0:	00430019 	multu	v0,v1
    3ec4:	00001010 	mfhi	v0
	...
    3ed0:	1440ffff 	bnez	v0,3ed0 <e1000_set_mac+0xec>
    3ed4:	2442ffff 	addiu	v0,v0,-1
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    3ed8:	8e63008c 	lw	v1,140(s3)
    3edc:	30630001 	andi	v1,v1,0x1
        mdelay(5);
        if(test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    3ee0:	1060000b 	beqz	v1,3f10 <e1000_set_mac+0x12c>
    3ee4:	24030001 	li	v1,1
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    3ee8:	266200d8 	addiu	v0,s3,216
	unsigned long temp;

	__asm__ __volatile__(
    3eec:	c0440000 	ll	a0,0(v0)
    3ef0:	00832021 	addu	a0,a0,v1
    3ef4:	e0440000 	sc	a0,0(v0)
    3ef8:	1080fffc 	beqz	a0,3eec <e1000_set_mac+0x108>
    3efc:	00000000 	nop
            tasklet_disable(&adapter->rx_fill_tasklet);
            e1000_clean_rx_ring(adapter);
    3f00:	3c020000 	lui	v0,0x0
    3f04:	244228d8 	addiu	v0,v0,10456
    3f08:	0040f809 	jalr	v0
    3f0c:	02602021 	move	a0,s3
        }
    }

    memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len);
    3f10:	9206007c 	lbu	a2,124(s0)
    3f14:	26520002 	addiu	s2,s2,2
    3f18:	26040074 	addiu	a0,s0,116
    3f1c:	3c110000 	lui	s1,0x0
    3f20:	26310000 	addiu	s1,s1,0
    3f24:	0220f809 	jalr	s1
    3f28:	02402821 	move	a1,s2
    memcpy(adapter->shared.mac_addr, addr->sa_data, netdev->addr_len);
    3f2c:	9206007c 	lbu	a2,124(s0)
    3f30:	2670007d 	addiu	s0,s3,125
    3f34:	02402821 	move	a1,s2
    3f38:	02002021 	move	a0,s0
    3f3c:	0220f809 	jalr	s1
    3f40:	26720008 	addiu	s2,s3,8

    e1000_rar_set(&adapter->shared, adapter->shared.mac_addr, 0);
    3f44:	02002821 	move	a1,s0
    3f48:	02402021 	move	a0,s2
    3f4c:	3c020000 	lui	v0,0x0
    3f50:	24420000 	addiu	v0,v0,0
    3f54:	0040f809 	jalr	v0
    3f58:	00003021 	move	a2,zero

    if(adapter->shared.mac_type == e1000_82542_rev2_0) {
    3f5c:	8e63000c 	lw	v1,12(s3)
    3f60:	1460002f 	bnez	v1,4020 <e1000_set_mac+0x23c>
    3f64:	8fbf0028 	lw	ra,40(sp)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3f68:	3282ff00 	andi	v0,s4,0xff00
    3f6c:	00021200 	sll	v0,v0,0x8
    3f70:	00141e00 	sll	v1,s4,0x18
    3f74:	00142202 	srl	a0,s4,0x8
    3f78:	00621825 	or	v1,v1,v0
        E1000_WRITE_REG(&adapter->shared, RCTL, rctl);
    3f7c:	8e450000 	lw	a1,0(s2)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    3f80:	3084ff00 	andi	a0,a0,0xff00
    3f84:	00141602 	srl	v0,s4,0x18
    3f88:	00641825 	or	v1,v1,a0
    3f8c:	00621825 	or	v1,v1,v0
    3f90:	aca30100 	sw	v1,256(a1)
extern __inline__ void __udelay(unsigned long usecs, unsigned long lpj)
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
    3f94:	3c027fff 	lui	v0,0x7fff
    3f98:	3c030000 	lui	v1,0x0
    3f9c:	8c630000 	lw	v1,0(v1)
    3fa0:	3442f1c0 	ori	v0,v0,0xf1c0
	__asm__("multu\t%2,%3"
    3fa4:	00430019 	multu	v0,v1
    3fa8:	00001010 	mfhi	v0
	...
    3fb4:	1440ffff 	bnez	v0,3fb4 <e1000_set_mac+0x1d0>
    3fb8:	2442ffff 	addiu	v0,v0,-1
        mdelay(5);
        if(adapter->shared.pci_cmd_word & PCI_COMMAND_INVALIDATE) {
    3fbc:	9663004a 	lhu	v1,74(s3)
    3fc0:	30630010 	andi	v1,v1,0x10
    3fc4:	10600006 	beqz	v1,3fe0 <e1000_set_mac+0x1fc>
    3fc8:	02a02021 	move	a0,s5
            pci_write_config_word(pdev, PCI_COMMAND,
    3fcc:	9666004a 	lhu	a2,74(s3)
    3fd0:	3c020000 	lui	v0,0x0
    3fd4:	24420000 	addiu	v0,v0,0
    3fd8:	0040f809 	jalr	v0
    3fdc:	24050004 	li	a1,4
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    3fe0:	8e62008c 	lw	v0,140(s3)
    3fe4:	30420001 	andi	v0,v0,0x1
                                  adapter->shared.pci_cmd_word);
        }
        if(test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    3fe8:	1040000d 	beqz	v0,4020 <e1000_set_mac+0x23c>
    3fec:	8fbf0028 	lw	ra,40(sp)
            e1000_configure_rx(adapter);
    3ff0:	3c020000 	lui	v0,0x0
    3ff4:	244223a8 	addiu	v0,v0,9128
    3ff8:	0040f809 	jalr	v0
    3ffc:	02602021 	move	a0,s3
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    4000:	266300d8 	addiu	v1,s3,216
    4004:	24020001 	li	v0,1
	unsigned long temp;

	__asm__ __volatile__(
    4008:	c0640000 	ll	a0,0(v1)
    400c:	00822023 	subu	a0,a0,v0
    4010:	e0640000 	sc	a0,0(v1)
    4014:	1080fffc 	beqz	a0,4008 <e1000_set_mac+0x224>
    4018:	00000000 	nop
            tasklet_enable(&adapter->rx_fill_tasklet);
        }
    }

    return 0;
    401c:	8fbf0028 	lw	ra,40(sp)
    4020:	8fb50024 	lw	s5,36(sp)
    4024:	8fb40020 	lw	s4,32(sp)
    4028:	8fb3001c 	lw	s3,28(sp)
    402c:	8fb20018 	lw	s2,24(sp)
    4030:	8fb10014 	lw	s1,20(sp)
    4034:	8fb00010 	lw	s0,16(sp)
    4038:	00001021 	move	v0,zero
    403c:	03e00008 	jr	ra
    4040:	27bd0030 	addiu	sp,sp,48

00004044 <e1000_update_stats>:
    4044:	27bdffd8 	addiu	sp,sp,-40
    4048:	afb3001c 	sw	s3,28(sp)
    404c:	afbf0024 	sw	ra,36(sp)
    4050:	afb40020 	sw	s4,32(sp)
    4054:	afb20018 	sw	s2,24(sp)
    4058:	afb10014 	sw	s1,20(sp)
    405c:	afb00010 	sw	s0,16(sp)
    4060:	00809821 	move	s3,a0
}

/**
 * e1000_update_stats - Update the board statistics counters
 * @adapter: board private structure
 **/

static void
e1000_update_stats(struct e1000_adapter *adapter)
{
    unsigned long flags;

#define PHY_IDLE_ERROR_COUNT_MASK 0x00FF

    spin_lock_irqsave(&adapter->stats_lock, flags);
    4064:	40146000 	mfc0	s4,$12
    4068:	00000000 	nop
    406c:	36810001 	ori	at,s4,0x1
    4070:	38210001 	xori	at,at,0x1
    4074:	40816000 	mtc0	at,$12
    4078:	00000040 	sll	zero,zero,0x1
    407c:	00000040 	sll	zero,zero,0x1
    4080:	00000040 	sll	zero,zero,0x1
    4084:	8e6801d8 	lw	t0,472(s3)
    4088:	8e6901dc 	lw	t1,476(s3)
    408c:	8e62000c 	lw	v0,12(s3)
    4090:	2c420002 	sltiu	v0,v0,2

    adapter->stats.crcerrs += E1000_READ_REG(&adapter->shared, CRCERRS);
    4094:	8e640008 	lw	a0,8(s3)
    4098:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    409c:	8c874000 	lw	a3,16384(a0)
	return __arch__swab32(x);
    40a0:	30e5ff00 	andi	a1,a3,0xff00
    40a4:	00073600 	sll	a2,a3,0x18
    40a8:	00072202 	srl	a0,a3,0x8
    40ac:	00052a00 	sll	a1,a1,0x8
    40b0:	3084ff00 	andi	a0,a0,0xff00
    40b4:	00c53025 	or	a2,a2,a1
    40b8:	00c43025 	or	a2,a2,a0
    40bc:	00073e02 	srl	a3,a3,0x18
    40c0:	00c71825 	or	v1,a2,a3
    40c4:	01233821 	addu	a3,t1,v1
    40c8:	00e3202b 	sltu	a0,a3,v1
    40cc:	01023021 	addu	a2,t0,v0
    40d0:	00c43021 	addu	a2,a2,a0
    40d4:	8e62000c 	lw	v0,12(s3)
    40d8:	ae6601d8 	sw	a2,472(s3)
    40dc:	ae6701dc 	sw	a3,476(s3)
    40e0:	8e6801e8 	lw	t0,488(s3)
    40e4:	8e6901ec 	lw	t1,492(s3)
    40e8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.symerrs += E1000_READ_REG(&adapter->shared, SYMERRS);
    40ec:	8e640008 	lw	a0,8(s3)
    40f0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    40f4:	8c874008 	lw	a3,16392(a0)
	return __arch__swab32(x);
    40f8:	30e5ff00 	andi	a1,a3,0xff00
    40fc:	00073600 	sll	a2,a3,0x18
    4100:	00072202 	srl	a0,a3,0x8
    4104:	00052a00 	sll	a1,a1,0x8
    4108:	3084ff00 	andi	a0,a0,0xff00
    410c:	00c53025 	or	a2,a2,a1
    4110:	00c43025 	or	a2,a2,a0
    4114:	00073e02 	srl	a3,a3,0x18
    4118:	00c71825 	or	v1,a2,a3
    411c:	01233821 	addu	a3,t1,v1
    4120:	00e3202b 	sltu	a0,a3,v1
    4124:	01023021 	addu	a2,t0,v0
    4128:	00c43021 	addu	a2,a2,a0
    412c:	8e62000c 	lw	v0,12(s3)
    4130:	ae6601e8 	sw	a2,488(s3)
    4134:	ae6701ec 	sw	a3,492(s3)
    4138:	8e6801f8 	lw	t0,504(s3)
    413c:	8e6901fc 	lw	t1,508(s3)
    4140:	2c420002 	sltiu	v0,v0,2
    adapter->stats.mpc += E1000_READ_REG(&adapter->shared, MPC);
    4144:	8e640008 	lw	a0,8(s3)
    4148:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    414c:	8c874010 	lw	a3,16400(a0)
	return __arch__swab32(x);
    4150:	30e5ff00 	andi	a1,a3,0xff00
    4154:	00073600 	sll	a2,a3,0x18
    4158:	00072202 	srl	a0,a3,0x8
    415c:	00052a00 	sll	a1,a1,0x8
    4160:	3084ff00 	andi	a0,a0,0xff00
    4164:	00c53025 	or	a2,a2,a1
    4168:	00c43025 	or	a2,a2,a0
    416c:	00073e02 	srl	a3,a3,0x18
    4170:	00c71825 	or	v1,a2,a3
    4174:	01233821 	addu	a3,t1,v1
    4178:	00e3202b 	sltu	a0,a3,v1
    417c:	01023021 	addu	a2,t0,v0
    4180:	00c43021 	addu	a2,a2,a0
    4184:	8e62000c 	lw	v0,12(s3)
    4188:	ae6601f8 	sw	a2,504(s3)
    418c:	ae6701fc 	sw	a3,508(s3)
    4190:	8e680200 	lw	t0,512(s3)
    4194:	8e690204 	lw	t1,516(s3)
    4198:	2c420002 	sltiu	v0,v0,2
    adapter->stats.scc += E1000_READ_REG(&adapter->shared, SCC);
    419c:	8e640008 	lw	a0,8(s3)
    41a0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    41a4:	8c874014 	lw	a3,16404(a0)
	return __arch__swab32(x);
    41a8:	30e5ff00 	andi	a1,a3,0xff00
    41ac:	00073600 	sll	a2,a3,0x18
    41b0:	00072202 	srl	a0,a3,0x8
    41b4:	00052a00 	sll	a1,a1,0x8
    41b8:	3084ff00 	andi	a0,a0,0xff00
    41bc:	00c53025 	or	a2,a2,a1
    41c0:	00c43025 	or	a2,a2,a0
    41c4:	00073e02 	srl	a3,a3,0x18
    41c8:	00c71825 	or	v1,a2,a3
    41cc:	01233821 	addu	a3,t1,v1
    41d0:	00e3202b 	sltu	a0,a3,v1
    41d4:	01023021 	addu	a2,t0,v0
    41d8:	00c43021 	addu	a2,a2,a0
    41dc:	8e62000c 	lw	v0,12(s3)
    41e0:	ae660200 	sw	a2,512(s3)
    41e4:	ae670204 	sw	a3,516(s3)
    41e8:	8e680208 	lw	t0,520(s3)
    41ec:	8e69020c 	lw	t1,524(s3)
    41f0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ecol += E1000_READ_REG(&adapter->shared, ECOL);
    41f4:	8e640008 	lw	a0,8(s3)
    41f8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    41fc:	8c874018 	lw	a3,16408(a0)
	return __arch__swab32(x);
    4200:	30e5ff00 	andi	a1,a3,0xff00
    4204:	00073600 	sll	a2,a3,0x18
    4208:	00072202 	srl	a0,a3,0x8
    420c:	00052a00 	sll	a1,a1,0x8
    4210:	3084ff00 	andi	a0,a0,0xff00
    4214:	00c53025 	or	a2,a2,a1
    4218:	00c43025 	or	a2,a2,a0
    421c:	00073e02 	srl	a3,a3,0x18
    4220:	00c71825 	or	v1,a2,a3
    4224:	01233821 	addu	a3,t1,v1
    4228:	00e3202b 	sltu	a0,a3,v1
    422c:	01023021 	addu	a2,t0,v0
    4230:	00c43021 	addu	a2,a2,a0
    4234:	8e62000c 	lw	v0,12(s3)
    4238:	ae660208 	sw	a2,520(s3)
    423c:	ae67020c 	sw	a3,524(s3)
    4240:	8e680210 	lw	t0,528(s3)
    4244:	8e690214 	lw	t1,532(s3)
    4248:	2c420002 	sltiu	v0,v0,2
    adapter->stats.mcc += E1000_READ_REG(&adapter->shared, MCC);
    424c:	8e640008 	lw	a0,8(s3)
    4250:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4254:	8c87401c 	lw	a3,16412(a0)
	return __arch__swab32(x);
    4258:	30e5ff00 	andi	a1,a3,0xff00
    425c:	00073600 	sll	a2,a3,0x18
    4260:	00072202 	srl	a0,a3,0x8
    4264:	00052a00 	sll	a1,a1,0x8
    4268:	3084ff00 	andi	a0,a0,0xff00
    426c:	00c53025 	or	a2,a2,a1
    4270:	00c43025 	or	a2,a2,a0
    4274:	00073e02 	srl	a3,a3,0x18
    4278:	00c71825 	or	v1,a2,a3
    427c:	01233821 	addu	a3,t1,v1
    4280:	00e3202b 	sltu	a0,a3,v1
    4284:	01023021 	addu	a2,t0,v0
    4288:	00c43021 	addu	a2,a2,a0
    428c:	8e62000c 	lw	v0,12(s3)
    4290:	ae660210 	sw	a2,528(s3)
    4294:	ae670214 	sw	a3,532(s3)
    4298:	8e680218 	lw	t0,536(s3)
    429c:	8e69021c 	lw	t1,540(s3)
    42a0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.latecol += E1000_READ_REG(&adapter->shared, LATECOL);
    42a4:	8e640008 	lw	a0,8(s3)
    42a8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    42ac:	8c874020 	lw	a3,16416(a0)
	return __arch__swab32(x);
    42b0:	30e5ff00 	andi	a1,a3,0xff00
    42b4:	00073600 	sll	a2,a3,0x18
    42b8:	00072202 	srl	a0,a3,0x8
    42bc:	00052a00 	sll	a1,a1,0x8
    42c0:	3084ff00 	andi	a0,a0,0xff00
    42c4:	00c53025 	or	a2,a2,a1
    42c8:	00c43025 	or	a2,a2,a0
    42cc:	00073e02 	srl	a3,a3,0x18
    42d0:	00c71825 	or	v1,a2,a3
    42d4:	01233821 	addu	a3,t1,v1
    42d8:	00e3202b 	sltu	a0,a3,v1
    42dc:	01023021 	addu	a2,t0,v0
    42e0:	00c43021 	addu	a2,a2,a0
    42e4:	8e62000c 	lw	v0,12(s3)
    42e8:	ae660218 	sw	a2,536(s3)
    42ec:	ae67021c 	sw	a3,540(s3)
    42f0:	8e680220 	lw	t0,544(s3)
    42f4:	8e690224 	lw	t1,548(s3)
    42f8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.colc += E1000_READ_REG(&adapter->shared, COLC);
    42fc:	8e640008 	lw	a0,8(s3)
    4300:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4304:	8c874028 	lw	a3,16424(a0)
	return __arch__swab32(x);
    4308:	30e5ff00 	andi	a1,a3,0xff00
    430c:	00073600 	sll	a2,a3,0x18
    4310:	00072202 	srl	a0,a3,0x8
    4314:	00052a00 	sll	a1,a1,0x8
    4318:	3084ff00 	andi	a0,a0,0xff00
    431c:	00c53025 	or	a2,a2,a1
    4320:	00c43025 	or	a2,a2,a0
    4324:	00073e02 	srl	a3,a3,0x18
    4328:	00c71825 	or	v1,a2,a3
    432c:	01233821 	addu	a3,t1,v1
    4330:	00e3202b 	sltu	a0,a3,v1
    4334:	01023021 	addu	a2,t0,v0
    4338:	00c43021 	addu	a2,a2,a0
    433c:	8e62000c 	lw	v0,12(s3)
    4340:	ae660220 	sw	a2,544(s3)
    4344:	ae670224 	sw	a3,548(s3)
    4348:	8e680228 	lw	t0,552(s3)
    434c:	8e69022c 	lw	t1,556(s3)
    4350:	2c420002 	sltiu	v0,v0,2
    adapter->stats.dc += E1000_READ_REG(&adapter->shared, DC);
    4354:	8e640008 	lw	a0,8(s3)
    4358:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    435c:	8c874030 	lw	a3,16432(a0)
	return __arch__swab32(x);
    4360:	30e5ff00 	andi	a1,a3,0xff00
    4364:	00073600 	sll	a2,a3,0x18
    4368:	00072202 	srl	a0,a3,0x8
    436c:	00052a00 	sll	a1,a1,0x8
    4370:	3084ff00 	andi	a0,a0,0xff00
    4374:	00c53025 	or	a2,a2,a1
    4378:	00c43025 	or	a2,a2,a0
    437c:	00073e02 	srl	a3,a3,0x18
    4380:	00c71825 	or	v1,a2,a3
    4384:	01233821 	addu	a3,t1,v1
    4388:	00e3202b 	sltu	a0,a3,v1
    438c:	01023021 	addu	a2,t0,v0
    4390:	00c43021 	addu	a2,a2,a0
    4394:	8e62000c 	lw	v0,12(s3)
    4398:	ae660228 	sw	a2,552(s3)
    439c:	ae67022c 	sw	a3,556(s3)
    43a0:	8e680238 	lw	t0,568(s3)
    43a4:	8e69023c 	lw	t1,572(s3)
    43a8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.sec += E1000_READ_REG(&adapter->shared, SEC);
    43ac:	8e640008 	lw	a0,8(s3)
    43b0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    43b4:	8c874038 	lw	a3,16440(a0)
	return __arch__swab32(x);
    43b8:	30e5ff00 	andi	a1,a3,0xff00
    43bc:	00073600 	sll	a2,a3,0x18
    43c0:	00072202 	srl	a0,a3,0x8
    43c4:	00052a00 	sll	a1,a1,0x8
    43c8:	3084ff00 	andi	a0,a0,0xff00
    43cc:	00c53025 	or	a2,a2,a1
    43d0:	00c43025 	or	a2,a2,a0
    43d4:	00073e02 	srl	a3,a3,0x18
    43d8:	00c71825 	or	v1,a2,a3
    43dc:	01233821 	addu	a3,t1,v1
    43e0:	00e3202b 	sltu	a0,a3,v1
    43e4:	01023021 	addu	a2,t0,v0
    43e8:	00c43021 	addu	a2,a2,a0
    43ec:	8e62000c 	lw	v0,12(s3)
    43f0:	ae660238 	sw	a2,568(s3)
    43f4:	ae67023c 	sw	a3,572(s3)
    43f8:	8e680248 	lw	t0,584(s3)
    43fc:	8e69024c 	lw	t1,588(s3)
    4400:	2c420002 	sltiu	v0,v0,2
    adapter->stats.rlec += E1000_READ_REG(&adapter->shared, RLEC);
    4404:	8e640008 	lw	a0,8(s3)
    4408:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    440c:	8c874040 	lw	a3,16448(a0)
	return __arch__swab32(x);
    4410:	30e5ff00 	andi	a1,a3,0xff00
    4414:	00073600 	sll	a2,a3,0x18
    4418:	00072202 	srl	a0,a3,0x8
    441c:	00052a00 	sll	a1,a1,0x8
    4420:	3084ff00 	andi	a0,a0,0xff00
    4424:	00c53025 	or	a2,a2,a1
    4428:	00c43025 	or	a2,a2,a0
    442c:	00073e02 	srl	a3,a3,0x18
    4430:	00c71825 	or	v1,a2,a3
    4434:	01233821 	addu	a3,t1,v1
    4438:	00e3202b 	sltu	a0,a3,v1
    443c:	01023021 	addu	a2,t0,v0
    4440:	00c43021 	addu	a2,a2,a0
    4444:	8e62000c 	lw	v0,12(s3)
    4448:	ae660248 	sw	a2,584(s3)
    444c:	ae67024c 	sw	a3,588(s3)
    4450:	8e680250 	lw	t0,592(s3)
    4454:	8e690254 	lw	t1,596(s3)
    4458:	2c420002 	sltiu	v0,v0,2
    adapter->stats.xonrxc += E1000_READ_REG(&adapter->shared, XONRXC);
    445c:	8e640008 	lw	a0,8(s3)
    4460:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4464:	8c874048 	lw	a3,16456(a0)
	return __arch__swab32(x);
    4468:	30e5ff00 	andi	a1,a3,0xff00
    446c:	00073600 	sll	a2,a3,0x18
    4470:	00072202 	srl	a0,a3,0x8
    4474:	00052a00 	sll	a1,a1,0x8
    4478:	3084ff00 	andi	a0,a0,0xff00
    447c:	00c53025 	or	a2,a2,a1
    4480:	00c43025 	or	a2,a2,a0
    4484:	00073e02 	srl	a3,a3,0x18
    4488:	00c71825 	or	v1,a2,a3
    448c:	01233821 	addu	a3,t1,v1
    4490:	00e3202b 	sltu	a0,a3,v1
    4494:	01023021 	addu	a2,t0,v0
    4498:	00c43021 	addu	a2,a2,a0
    449c:	8e62000c 	lw	v0,12(s3)
    44a0:	ae660250 	sw	a2,592(s3)
    44a4:	ae670254 	sw	a3,596(s3)
    44a8:	8e680258 	lw	t0,600(s3)
    44ac:	8e69025c 	lw	t1,604(s3)
    44b0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.xontxc += E1000_READ_REG(&adapter->shared, XONTXC);
    44b4:	8e640008 	lw	a0,8(s3)
    44b8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    44bc:	8c87404c 	lw	a3,16460(a0)
	return __arch__swab32(x);
    44c0:	30e5ff00 	andi	a1,a3,0xff00
    44c4:	00073600 	sll	a2,a3,0x18
    44c8:	00072202 	srl	a0,a3,0x8
    44cc:	00052a00 	sll	a1,a1,0x8
    44d0:	3084ff00 	andi	a0,a0,0xff00
    44d4:	00c53025 	or	a2,a2,a1
    44d8:	00c43025 	or	a2,a2,a0
    44dc:	00073e02 	srl	a3,a3,0x18
    44e0:	00c71825 	or	v1,a2,a3
    44e4:	01233821 	addu	a3,t1,v1
    44e8:	00e3202b 	sltu	a0,a3,v1
    44ec:	01023021 	addu	a2,t0,v0
    44f0:	00c43021 	addu	a2,a2,a0
    44f4:	8e62000c 	lw	v0,12(s3)
    44f8:	ae660258 	sw	a2,600(s3)
    44fc:	ae67025c 	sw	a3,604(s3)
    4500:	8e680260 	lw	t0,608(s3)
    4504:	8e690264 	lw	t1,612(s3)
    4508:	2c420002 	sltiu	v0,v0,2
    adapter->stats.xoffrxc += E1000_READ_REG(&adapter->shared, XOFFRXC);
    450c:	8e640008 	lw	a0,8(s3)
    4510:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4514:	8c874050 	lw	a3,16464(a0)
	return __arch__swab32(x);
    4518:	30e5ff00 	andi	a1,a3,0xff00
    451c:	00073600 	sll	a2,a3,0x18
    4520:	00072202 	srl	a0,a3,0x8
    4524:	00052a00 	sll	a1,a1,0x8
    4528:	3084ff00 	andi	a0,a0,0xff00
    452c:	00c53025 	or	a2,a2,a1
    4530:	00c43025 	or	a2,a2,a0
    4534:	00073e02 	srl	a3,a3,0x18
    4538:	00c71825 	or	v1,a2,a3
    453c:	01233821 	addu	a3,t1,v1
    4540:	00e3202b 	sltu	a0,a3,v1
    4544:	01023021 	addu	a2,t0,v0
    4548:	00c43021 	addu	a2,a2,a0
    454c:	8e62000c 	lw	v0,12(s3)
    4550:	ae660260 	sw	a2,608(s3)
    4554:	ae670264 	sw	a3,612(s3)
    4558:	8e680268 	lw	t0,616(s3)
    455c:	8e69026c 	lw	t1,620(s3)
    4560:	2c420002 	sltiu	v0,v0,2
    adapter->stats.xofftxc += E1000_READ_REG(&adapter->shared, XOFFTXC);
    4564:	8e640008 	lw	a0,8(s3)
    4568:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    456c:	8c874054 	lw	a3,16468(a0)
	return __arch__swab32(x);
    4570:	30e5ff00 	andi	a1,a3,0xff00
    4574:	00073600 	sll	a2,a3,0x18
    4578:	00072202 	srl	a0,a3,0x8
    457c:	00052a00 	sll	a1,a1,0x8
    4580:	3084ff00 	andi	a0,a0,0xff00
    4584:	00c53025 	or	a2,a2,a1
    4588:	00c43025 	or	a2,a2,a0
    458c:	00073e02 	srl	a3,a3,0x18
    4590:	00c71825 	or	v1,a2,a3
    4594:	01233821 	addu	a3,t1,v1
    4598:	00e3202b 	sltu	a0,a3,v1
    459c:	01023021 	addu	a2,t0,v0
    45a0:	00c43021 	addu	a2,a2,a0
    45a4:	8e62000c 	lw	v0,12(s3)
    45a8:	ae660268 	sw	a2,616(s3)
    45ac:	ae67026c 	sw	a3,620(s3)
    45b0:	8e680270 	lw	t0,624(s3)
    45b4:	8e690274 	lw	t1,628(s3)
    45b8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.fcruc += E1000_READ_REG(&adapter->shared, FCRUC);
    45bc:	8e640008 	lw	a0,8(s3)
    45c0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    45c4:	8c874058 	lw	a3,16472(a0)
	return __arch__swab32(x);
    45c8:	30e5ff00 	andi	a1,a3,0xff00
    45cc:	00073600 	sll	a2,a3,0x18
    45d0:	00072202 	srl	a0,a3,0x8
    45d4:	00052a00 	sll	a1,a1,0x8
    45d8:	3084ff00 	andi	a0,a0,0xff00
    45dc:	00c53025 	or	a2,a2,a1
    45e0:	00c43025 	or	a2,a2,a0
    45e4:	00073e02 	srl	a3,a3,0x18
    45e8:	00c71825 	or	v1,a2,a3
    45ec:	01233821 	addu	a3,t1,v1
    45f0:	00e3202b 	sltu	a0,a3,v1
    45f4:	01023021 	addu	a2,t0,v0
    45f8:	00c43021 	addu	a2,a2,a0
    45fc:	8e62000c 	lw	v0,12(s3)
    4600:	ae660270 	sw	a2,624(s3)
    4604:	ae670274 	sw	a3,628(s3)
    4608:	8e680278 	lw	t0,632(s3)
    460c:	8e69027c 	lw	t1,636(s3)
    4610:	2c420002 	sltiu	v0,v0,2
    adapter->stats.prc64 += E1000_READ_REG(&adapter->shared, PRC64);
    4614:	8e640008 	lw	a0,8(s3)
    4618:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    461c:	8c87405c 	lw	a3,16476(a0)
	return __arch__swab32(x);
    4620:	30e5ff00 	andi	a1,a3,0xff00
    4624:	00073600 	sll	a2,a3,0x18
    4628:	00072202 	srl	a0,a3,0x8
    462c:	00052a00 	sll	a1,a1,0x8
    4630:	3084ff00 	andi	a0,a0,0xff00
    4634:	00c53025 	or	a2,a2,a1
    4638:	00c43025 	or	a2,a2,a0
    463c:	00073e02 	srl	a3,a3,0x18
    4640:	00c71825 	or	v1,a2,a3
    4644:	01233821 	addu	a3,t1,v1
    4648:	00e3202b 	sltu	a0,a3,v1
    464c:	01023021 	addu	a2,t0,v0
    4650:	00c43021 	addu	a2,a2,a0
    4654:	8e62000c 	lw	v0,12(s3)
    4658:	ae660278 	sw	a2,632(s3)
    465c:	ae67027c 	sw	a3,636(s3)
    4660:	8e680280 	lw	t0,640(s3)
    4664:	8e690284 	lw	t1,644(s3)
    4668:	2c420002 	sltiu	v0,v0,2
    adapter->stats.prc127 += E1000_READ_REG(&adapter->shared, PRC127);
    466c:	8e640008 	lw	a0,8(s3)
    4670:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4674:	8c874060 	lw	a3,16480(a0)
	return __arch__swab32(x);
    4678:	30e5ff00 	andi	a1,a3,0xff00
    467c:	00073600 	sll	a2,a3,0x18
    4680:	00072202 	srl	a0,a3,0x8
    4684:	00052a00 	sll	a1,a1,0x8
    4688:	3084ff00 	andi	a0,a0,0xff00
    468c:	00c53025 	or	a2,a2,a1
    4690:	00c43025 	or	a2,a2,a0
    4694:	00073e02 	srl	a3,a3,0x18
    4698:	00c71825 	or	v1,a2,a3
    469c:	01233821 	addu	a3,t1,v1
    46a0:	00e3202b 	sltu	a0,a3,v1
    46a4:	01023021 	addu	a2,t0,v0
    46a8:	00c43021 	addu	a2,a2,a0
    46ac:	8e62000c 	lw	v0,12(s3)
    46b0:	ae660280 	sw	a2,640(s3)
    46b4:	ae670284 	sw	a3,644(s3)
    46b8:	8e680288 	lw	t0,648(s3)
    46bc:	8e69028c 	lw	t1,652(s3)
    46c0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.prc255 += E1000_READ_REG(&adapter->shared, PRC255);
    46c4:	8e640008 	lw	a0,8(s3)
    46c8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    46cc:	8c874064 	lw	a3,16484(a0)
	return __arch__swab32(x);
    46d0:	30e5ff00 	andi	a1,a3,0xff00
    46d4:	00073600 	sll	a2,a3,0x18
    46d8:	00072202 	srl	a0,a3,0x8
    46dc:	00052a00 	sll	a1,a1,0x8
    46e0:	3084ff00 	andi	a0,a0,0xff00
    46e4:	00c53025 	or	a2,a2,a1
    46e8:	00c43025 	or	a2,a2,a0
    46ec:	00073e02 	srl	a3,a3,0x18
    46f0:	00c71825 	or	v1,a2,a3
    46f4:	01233821 	addu	a3,t1,v1
    46f8:	00e3202b 	sltu	a0,a3,v1
    46fc:	01023021 	addu	a2,t0,v0
    4700:	00c43021 	addu	a2,a2,a0
    4704:	8e62000c 	lw	v0,12(s3)
    4708:	ae660288 	sw	a2,648(s3)
    470c:	ae67028c 	sw	a3,652(s3)
    4710:	8e680290 	lw	t0,656(s3)
    4714:	8e690294 	lw	t1,660(s3)
    4718:	2c420002 	sltiu	v0,v0,2
    adapter->stats.prc511 += E1000_READ_REG(&adapter->shared, PRC511);
    471c:	8e640008 	lw	a0,8(s3)
    4720:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4724:	8c874068 	lw	a3,16488(a0)
	return __arch__swab32(x);
    4728:	30e5ff00 	andi	a1,a3,0xff00
    472c:	00073600 	sll	a2,a3,0x18
    4730:	00072202 	srl	a0,a3,0x8
    4734:	00052a00 	sll	a1,a1,0x8
    4738:	3084ff00 	andi	a0,a0,0xff00
    473c:	00c53025 	or	a2,a2,a1
    4740:	00c43025 	or	a2,a2,a0
    4744:	00073e02 	srl	a3,a3,0x18
    4748:	00c71825 	or	v1,a2,a3
    474c:	01233821 	addu	a3,t1,v1
    4750:	00e3202b 	sltu	a0,a3,v1
    4754:	01023021 	addu	a2,t0,v0
    4758:	00c43021 	addu	a2,a2,a0
    475c:	8e62000c 	lw	v0,12(s3)
    4760:	ae660290 	sw	a2,656(s3)
    4764:	ae670294 	sw	a3,660(s3)
    4768:	8e680298 	lw	t0,664(s3)
    476c:	8e69029c 	lw	t1,668(s3)
    4770:	2c420002 	sltiu	v0,v0,2
    adapter->stats.prc1023 += E1000_READ_REG(&adapter->shared, PRC1023);
    4774:	8e640008 	lw	a0,8(s3)
    4778:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    477c:	8c87406c 	lw	a3,16492(a0)
	return __arch__swab32(x);
    4780:	30e5ff00 	andi	a1,a3,0xff00
    4784:	00073600 	sll	a2,a3,0x18
    4788:	00072202 	srl	a0,a3,0x8
    478c:	00052a00 	sll	a1,a1,0x8
    4790:	3084ff00 	andi	a0,a0,0xff00
    4794:	00c53025 	or	a2,a2,a1
    4798:	00c43025 	or	a2,a2,a0
    479c:	00073e02 	srl	a3,a3,0x18
    47a0:	00c71825 	or	v1,a2,a3
    47a4:	01233821 	addu	a3,t1,v1
    47a8:	00e3202b 	sltu	a0,a3,v1
    47ac:	01023021 	addu	a2,t0,v0
    47b0:	00c43021 	addu	a2,a2,a0
    47b4:	8e62000c 	lw	v0,12(s3)
    47b8:	ae660298 	sw	a2,664(s3)
    47bc:	ae67029c 	sw	a3,668(s3)
    47c0:	8e6802a0 	lw	t0,672(s3)
    47c4:	8e6902a4 	lw	t1,676(s3)
    47c8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.prc1522 += E1000_READ_REG(&adapter->shared, PRC1522);
    47cc:	8e640008 	lw	a0,8(s3)
    47d0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    47d4:	8c874070 	lw	a3,16496(a0)
	return __arch__swab32(x);
    47d8:	30e5ff00 	andi	a1,a3,0xff00
    47dc:	00073600 	sll	a2,a3,0x18
    47e0:	00072202 	srl	a0,a3,0x8
    47e4:	00052a00 	sll	a1,a1,0x8
    47e8:	3084ff00 	andi	a0,a0,0xff00
    47ec:	00c53025 	or	a2,a2,a1
    47f0:	00c43025 	or	a2,a2,a0
    47f4:	00073e02 	srl	a3,a3,0x18
    47f8:	00c71825 	or	v1,a2,a3
    47fc:	01233821 	addu	a3,t1,v1
    4800:	00e3202b 	sltu	a0,a3,v1
    4804:	01023021 	addu	a2,t0,v0
    4808:	00c43021 	addu	a2,a2,a0
    480c:	8e62000c 	lw	v0,12(s3)
    4810:	ae6602a0 	sw	a2,672(s3)
    4814:	ae6702a4 	sw	a3,676(s3)
    4818:	8e6802a8 	lw	t0,680(s3)
    481c:	8e6902ac 	lw	t1,684(s3)
    4820:	2c420002 	sltiu	v0,v0,2
    adapter->stats.gprc += E1000_READ_REG(&adapter->shared, GPRC);
    4824:	8e640008 	lw	a0,8(s3)
    4828:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    482c:	8c874074 	lw	a3,16500(a0)
	return __arch__swab32(x);
    4830:	30e5ff00 	andi	a1,a3,0xff00
    4834:	00073600 	sll	a2,a3,0x18
    4838:	00072202 	srl	a0,a3,0x8
    483c:	00052a00 	sll	a1,a1,0x8
    4840:	3084ff00 	andi	a0,a0,0xff00
    4844:	00c53025 	or	a2,a2,a1
    4848:	00c43025 	or	a2,a2,a0
    484c:	00073e02 	srl	a3,a3,0x18
    4850:	00c71825 	or	v1,a2,a3
    4854:	01233821 	addu	a3,t1,v1
    4858:	00e3202b 	sltu	a0,a3,v1
    485c:	01023021 	addu	a2,t0,v0
    4860:	00c43021 	addu	a2,a2,a0
    4864:	8e62000c 	lw	v0,12(s3)
    4868:	ae6602a8 	sw	a2,680(s3)
    486c:	ae6702ac 	sw	a3,684(s3)
    4870:	8e6802b0 	lw	t0,688(s3)
    4874:	8e6902b4 	lw	t1,692(s3)
    4878:	2c420002 	sltiu	v0,v0,2
    adapter->stats.bprc += E1000_READ_REG(&adapter->shared, BPRC);
    487c:	8e640008 	lw	a0,8(s3)
    4880:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4884:	8c874078 	lw	a3,16504(a0)
	return __arch__swab32(x);
    4888:	30e5ff00 	andi	a1,a3,0xff00
    488c:	00073600 	sll	a2,a3,0x18
    4890:	00072202 	srl	a0,a3,0x8
    4894:	00052a00 	sll	a1,a1,0x8
    4898:	3084ff00 	andi	a0,a0,0xff00
    489c:	00c53025 	or	a2,a2,a1
    48a0:	00c43025 	or	a2,a2,a0
    48a4:	00073e02 	srl	a3,a3,0x18
    48a8:	00c71825 	or	v1,a2,a3
    48ac:	01233821 	addu	a3,t1,v1
    48b0:	00e3202b 	sltu	a0,a3,v1
    48b4:	01023021 	addu	a2,t0,v0
    48b8:	00c43021 	addu	a2,a2,a0
    48bc:	8e62000c 	lw	v0,12(s3)
    48c0:	ae6602b0 	sw	a2,688(s3)
    48c4:	ae6702b4 	sw	a3,692(s3)
    48c8:	8e6802b8 	lw	t0,696(s3)
    48cc:	8e6902bc 	lw	t1,700(s3)
    48d0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.mprc += E1000_READ_REG(&adapter->shared, MPRC);
    48d4:	8e640008 	lw	a0,8(s3)
    48d8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    48dc:	8c87407c 	lw	a3,16508(a0)
	return __arch__swab32(x);
    48e0:	30e5ff00 	andi	a1,a3,0xff00
    48e4:	00073600 	sll	a2,a3,0x18
    48e8:	00072202 	srl	a0,a3,0x8
    48ec:	00052a00 	sll	a1,a1,0x8
    48f0:	3084ff00 	andi	a0,a0,0xff00
    48f4:	00c53025 	or	a2,a2,a1
    48f8:	00c43025 	or	a2,a2,a0
    48fc:	00073e02 	srl	a3,a3,0x18
    4900:	00c71825 	or	v1,a2,a3
    4904:	01233821 	addu	a3,t1,v1
    4908:	00e3202b 	sltu	a0,a3,v1
    490c:	01023021 	addu	a2,t0,v0
    4910:	00c43021 	addu	a2,a2,a0
    4914:	8e62000c 	lw	v0,12(s3)
    4918:	ae6602b8 	sw	a2,696(s3)
    491c:	ae6702bc 	sw	a3,700(s3)
    4920:	8e6802c0 	lw	t0,704(s3)
    4924:	8e6902c4 	lw	t1,708(s3)
    4928:	2c420002 	sltiu	v0,v0,2
    adapter->stats.gptc += E1000_READ_REG(&adapter->shared, GPTC);
    492c:	8e640008 	lw	a0,8(s3)
    4930:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4934:	8c874080 	lw	a3,16512(a0)
	return __arch__swab32(x);
    4938:	30e5ff00 	andi	a1,a3,0xff00
    493c:	00073600 	sll	a2,a3,0x18
    4940:	00072202 	srl	a0,a3,0x8
    4944:	00052a00 	sll	a1,a1,0x8
    4948:	3084ff00 	andi	a0,a0,0xff00
    494c:	00c53025 	or	a2,a2,a1
    4950:	00c43025 	or	a2,a2,a0
    4954:	00073e02 	srl	a3,a3,0x18
    4958:	00c71825 	or	v1,a2,a3
    495c:	01233821 	addu	a3,t1,v1
    4960:	00e3202b 	sltu	a0,a3,v1
    4964:	01023021 	addu	a2,t0,v0
    4968:	00c43021 	addu	a2,a2,a0
    496c:	8e62000c 	lw	v0,12(s3)
    4970:	ae6602c0 	sw	a2,704(s3)
    4974:	ae6702c4 	sw	a3,708(s3)
    4978:	8e6802c8 	lw	t0,712(s3)
    497c:	8e6902cc 	lw	t1,716(s3)
    4980:	2c420002 	sltiu	v0,v0,2

    /* for the 64-bit byte counters the low dword must be read first */
    /* both registers clear on the read of the high dword */

    adapter->stats.gorcl += E1000_READ_REG(&adapter->shared, GORCL);
    4984:	8e640008 	lw	a0,8(s3)
    4988:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    498c:	8c874088 	lw	a3,16520(a0)
	return __arch__swab32(x);
    4990:	30e5ff00 	andi	a1,a3,0xff00
    4994:	00073600 	sll	a2,a3,0x18
    4998:	00072202 	srl	a0,a3,0x8
    499c:	00052a00 	sll	a1,a1,0x8
    49a0:	3084ff00 	andi	a0,a0,0xff00
    49a4:	00c53025 	or	a2,a2,a1
    49a8:	00c43025 	or	a2,a2,a0
    49ac:	00073e02 	srl	a3,a3,0x18
    49b0:	00c71825 	or	v1,a2,a3
    49b4:	01233821 	addu	a3,t1,v1
    49b8:	00e3202b 	sltu	a0,a3,v1
    49bc:	01023021 	addu	a2,t0,v0
    49c0:	00c43021 	addu	a2,a2,a0
    49c4:	8e62000c 	lw	v0,12(s3)
    49c8:	ae6602c8 	sw	a2,712(s3)
    49cc:	ae6702cc 	sw	a3,716(s3)
    49d0:	8e6802d0 	lw	t0,720(s3)
    49d4:	8e6902d4 	lw	t1,724(s3)
    49d8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.gorch += E1000_READ_REG(&adapter->shared, GORCH);
    49dc:	8e640008 	lw	a0,8(s3)
    49e0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    49e4:	8c87408c 	lw	a3,16524(a0)
	return __arch__swab32(x);
    49e8:	30e5ff00 	andi	a1,a3,0xff00
    49ec:	00073600 	sll	a2,a3,0x18
    49f0:	00072202 	srl	a0,a3,0x8
    49f4:	00052a00 	sll	a1,a1,0x8
    49f8:	3084ff00 	andi	a0,a0,0xff00
    49fc:	00c53025 	or	a2,a2,a1
    4a00:	00c43025 	or	a2,a2,a0
    4a04:	00073e02 	srl	a3,a3,0x18
    4a08:	00c71825 	or	v1,a2,a3
    4a0c:	01233821 	addu	a3,t1,v1
    4a10:	00e3202b 	sltu	a0,a3,v1
    4a14:	01023021 	addu	a2,t0,v0
    4a18:	00c43021 	addu	a2,a2,a0
    4a1c:	8e62000c 	lw	v0,12(s3)
    4a20:	ae6602d0 	sw	a2,720(s3)
    4a24:	ae6702d4 	sw	a3,724(s3)
    4a28:	8e6802d8 	lw	t0,728(s3)
    4a2c:	8e6902dc 	lw	t1,732(s3)
    4a30:	2c420002 	sltiu	v0,v0,2
    adapter->stats.gotcl += E1000_READ_REG(&adapter->shared, GOTCL);
    4a34:	8e640008 	lw	a0,8(s3)
    4a38:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4a3c:	8c874090 	lw	a3,16528(a0)
	return __arch__swab32(x);
    4a40:	30e5ff00 	andi	a1,a3,0xff00
    4a44:	00073600 	sll	a2,a3,0x18
    4a48:	00072202 	srl	a0,a3,0x8
    4a4c:	00052a00 	sll	a1,a1,0x8
    4a50:	3084ff00 	andi	a0,a0,0xff00
    4a54:	00c53025 	or	a2,a2,a1
    4a58:	00c43025 	or	a2,a2,a0
    4a5c:	00073e02 	srl	a3,a3,0x18
    4a60:	00c71825 	or	v1,a2,a3
    4a64:	01233821 	addu	a3,t1,v1
    4a68:	00e3202b 	sltu	a0,a3,v1
    4a6c:	01023021 	addu	a2,t0,v0
    4a70:	00c43021 	addu	a2,a2,a0
    4a74:	8e62000c 	lw	v0,12(s3)
    4a78:	ae6602d8 	sw	a2,728(s3)
    4a7c:	ae6702dc 	sw	a3,732(s3)
    4a80:	8e6802e0 	lw	t0,736(s3)
    4a84:	8e6902e4 	lw	t1,740(s3)
    4a88:	2c420002 	sltiu	v0,v0,2
    adapter->stats.gotch += E1000_READ_REG(&adapter->shared, GOTCH);
    4a8c:	8e640008 	lw	a0,8(s3)
    4a90:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4a94:	8c874094 	lw	a3,16532(a0)
	return __arch__swab32(x);
    4a98:	30e5ff00 	andi	a1,a3,0xff00
    4a9c:	00073600 	sll	a2,a3,0x18
    4aa0:	00072202 	srl	a0,a3,0x8
    4aa4:	00052a00 	sll	a1,a1,0x8
    4aa8:	3084ff00 	andi	a0,a0,0xff00
    4aac:	00c53025 	or	a2,a2,a1
    4ab0:	00c43025 	or	a2,a2,a0
    4ab4:	00073e02 	srl	a3,a3,0x18
    4ab8:	00c71825 	or	v1,a2,a3
    4abc:	01233821 	addu	a3,t1,v1
    4ac0:	00e3202b 	sltu	a0,a3,v1
    4ac4:	01023021 	addu	a2,t0,v0
    4ac8:	00c43021 	addu	a2,a2,a0
    4acc:	8e62000c 	lw	v0,12(s3)
    4ad0:	ae6602e0 	sw	a2,736(s3)
    4ad4:	ae6702e4 	sw	a3,740(s3)
    4ad8:	8e6802e8 	lw	t0,744(s3)
    4adc:	8e6902ec 	lw	t1,748(s3)
    4ae0:	2c420002 	sltiu	v0,v0,2

    adapter->stats.rnbc += E1000_READ_REG(&adapter->shared, RNBC);
    4ae4:	8e640008 	lw	a0,8(s3)
    4ae8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4aec:	8c8740a0 	lw	a3,16544(a0)
	return __arch__swab32(x);
    4af0:	30e5ff00 	andi	a1,a3,0xff00
    4af4:	00073600 	sll	a2,a3,0x18
    4af8:	00072202 	srl	a0,a3,0x8
    4afc:	00052a00 	sll	a1,a1,0x8
    4b00:	3084ff00 	andi	a0,a0,0xff00
    4b04:	00c53025 	or	a2,a2,a1
    4b08:	00c43025 	or	a2,a2,a0
    4b0c:	00073e02 	srl	a3,a3,0x18
    4b10:	00c71825 	or	v1,a2,a3
    4b14:	01233821 	addu	a3,t1,v1
    4b18:	00e3202b 	sltu	a0,a3,v1
    4b1c:	01023021 	addu	a2,t0,v0
    4b20:	00c43021 	addu	a2,a2,a0
    4b24:	8e62000c 	lw	v0,12(s3)
    4b28:	ae6602e8 	sw	a2,744(s3)
    4b2c:	ae6702ec 	sw	a3,748(s3)
    4b30:	8e6802f0 	lw	t0,752(s3)
    4b34:	8e6902f4 	lw	t1,756(s3)
    4b38:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ruc += E1000_READ_REG(&adapter->shared, RUC);
    4b3c:	8e640008 	lw	a0,8(s3)
    4b40:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4b44:	8c8740a4 	lw	a3,16548(a0)
	return __arch__swab32(x);
    4b48:	30e5ff00 	andi	a1,a3,0xff00
    4b4c:	00073600 	sll	a2,a3,0x18
    4b50:	00072202 	srl	a0,a3,0x8
    4b54:	00052a00 	sll	a1,a1,0x8
    4b58:	3084ff00 	andi	a0,a0,0xff00
    4b5c:	00c53025 	or	a2,a2,a1
    4b60:	00c43025 	or	a2,a2,a0
    4b64:	00073e02 	srl	a3,a3,0x18
    4b68:	00c71825 	or	v1,a2,a3
    4b6c:	01233821 	addu	a3,t1,v1
    4b70:	00e3202b 	sltu	a0,a3,v1
    4b74:	01023021 	addu	a2,t0,v0
    4b78:	00c43021 	addu	a2,a2,a0
    4b7c:	8e62000c 	lw	v0,12(s3)
    4b80:	ae6602f0 	sw	a2,752(s3)
    4b84:	ae6702f4 	sw	a3,756(s3)
    4b88:	8e6802f8 	lw	t0,760(s3)
    4b8c:	8e6902fc 	lw	t1,764(s3)
    4b90:	2c420002 	sltiu	v0,v0,2
    adapter->stats.rfc += E1000_READ_REG(&adapter->shared, RFC);
    4b94:	8e640008 	lw	a0,8(s3)
    4b98:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4b9c:	8c8740a8 	lw	a3,16552(a0)
	return __arch__swab32(x);
    4ba0:	30e5ff00 	andi	a1,a3,0xff00
    4ba4:	00073600 	sll	a2,a3,0x18
    4ba8:	00072202 	srl	a0,a3,0x8
    4bac:	00052a00 	sll	a1,a1,0x8
    4bb0:	3084ff00 	andi	a0,a0,0xff00
    4bb4:	00c53025 	or	a2,a2,a1
    4bb8:	00c43025 	or	a2,a2,a0
    4bbc:	00073e02 	srl	a3,a3,0x18
    4bc0:	00c71825 	or	v1,a2,a3
    4bc4:	01233821 	addu	a3,t1,v1
    4bc8:	00e3202b 	sltu	a0,a3,v1
    4bcc:	01023021 	addu	a2,t0,v0
    4bd0:	00c43021 	addu	a2,a2,a0
    4bd4:	8e62000c 	lw	v0,12(s3)
    4bd8:	ae6602f8 	sw	a2,760(s3)
    4bdc:	ae6702fc 	sw	a3,764(s3)
    4be0:	8e680300 	lw	t0,768(s3)
    4be4:	8e690304 	lw	t1,772(s3)
    4be8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.roc += E1000_READ_REG(&adapter->shared, ROC);
    4bec:	8e640008 	lw	a0,8(s3)
    4bf0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4bf4:	8c8740ac 	lw	a3,16556(a0)
	return __arch__swab32(x);
    4bf8:	30e5ff00 	andi	a1,a3,0xff00
    4bfc:	00073600 	sll	a2,a3,0x18
    4c00:	00072202 	srl	a0,a3,0x8
    4c04:	00052a00 	sll	a1,a1,0x8
    4c08:	3084ff00 	andi	a0,a0,0xff00
    4c0c:	00c53025 	or	a2,a2,a1
    4c10:	00c43025 	or	a2,a2,a0
    4c14:	00073e02 	srl	a3,a3,0x18
    4c18:	00c71825 	or	v1,a2,a3
    4c1c:	01233821 	addu	a3,t1,v1
    4c20:	00e3202b 	sltu	a0,a3,v1
    4c24:	01023021 	addu	a2,t0,v0
    4c28:	00c43021 	addu	a2,a2,a0
    4c2c:	8e62000c 	lw	v0,12(s3)
    4c30:	ae660300 	sw	a2,768(s3)
    4c34:	ae670304 	sw	a3,772(s3)
    4c38:	8e680308 	lw	t0,776(s3)
    4c3c:	8e69030c 	lw	t1,780(s3)
    4c40:	2c420002 	sltiu	v0,v0,2
    adapter->stats.rjc += E1000_READ_REG(&adapter->shared, RJC);
    4c44:	8e640008 	lw	a0,8(s3)
    4c48:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4c4c:	8c8740b0 	lw	a3,16560(a0)
	return __arch__swab32(x);
    4c50:	30e5ff00 	andi	a1,a3,0xff00
    4c54:	00073600 	sll	a2,a3,0x18
    4c58:	00072202 	srl	a0,a3,0x8
    4c5c:	00052a00 	sll	a1,a1,0x8
    4c60:	3084ff00 	andi	a0,a0,0xff00
    4c64:	00c53025 	or	a2,a2,a1
    4c68:	00c43025 	or	a2,a2,a0
    4c6c:	00073e02 	srl	a3,a3,0x18
    4c70:	00c71825 	or	v1,a2,a3
    4c74:	01233821 	addu	a3,t1,v1
    4c78:	00e3202b 	sltu	a0,a3,v1
    4c7c:	01023021 	addu	a2,t0,v0
    4c80:	00c43021 	addu	a2,a2,a0
    4c84:	8e62000c 	lw	v0,12(s3)
    4c88:	ae660308 	sw	a2,776(s3)
    4c8c:	ae67030c 	sw	a3,780(s3)
    4c90:	8e680328 	lw	t0,808(s3)
    4c94:	8e69032c 	lw	t1,812(s3)
    4c98:	2c420002 	sltiu	v0,v0,2

    adapter->stats.torl += E1000_READ_REG(&adapter->shared, TORL);
    4c9c:	8e640008 	lw	a0,8(s3)
    4ca0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4ca4:	8c8740c0 	lw	a3,16576(a0)
	return __arch__swab32(x);
    4ca8:	30e5ff00 	andi	a1,a3,0xff00
    4cac:	00073600 	sll	a2,a3,0x18
    4cb0:	00072202 	srl	a0,a3,0x8
    4cb4:	00052a00 	sll	a1,a1,0x8
    4cb8:	3084ff00 	andi	a0,a0,0xff00
    4cbc:	00c53025 	or	a2,a2,a1
    4cc0:	00c43025 	or	a2,a2,a0
    4cc4:	00073e02 	srl	a3,a3,0x18
    4cc8:	00c71825 	or	v1,a2,a3
    4ccc:	01233821 	addu	a3,t1,v1
    4cd0:	00e3202b 	sltu	a0,a3,v1
    4cd4:	01023021 	addu	a2,t0,v0
    4cd8:	00c43021 	addu	a2,a2,a0
    4cdc:	8e62000c 	lw	v0,12(s3)
    4ce0:	ae660328 	sw	a2,808(s3)
    4ce4:	ae67032c 	sw	a3,812(s3)
    4ce8:	8e680330 	lw	t0,816(s3)
    4cec:	8e690334 	lw	t1,820(s3)
    4cf0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.torh += E1000_READ_REG(&adapter->shared, TORH);
    4cf4:	8e640008 	lw	a0,8(s3)
    4cf8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4cfc:	8c8740c4 	lw	a3,16580(a0)
	return __arch__swab32(x);
    4d00:	30e5ff00 	andi	a1,a3,0xff00
    4d04:	00073600 	sll	a2,a3,0x18
    4d08:	00072202 	srl	a0,a3,0x8
    4d0c:	00052a00 	sll	a1,a1,0x8
    4d10:	3084ff00 	andi	a0,a0,0xff00
    4d14:	00c53025 	or	a2,a2,a1
    4d18:	00c43025 	or	a2,a2,a0
    4d1c:	00073e02 	srl	a3,a3,0x18
    4d20:	00c71825 	or	v1,a2,a3
    4d24:	01233821 	addu	a3,t1,v1
    4d28:	00e3202b 	sltu	a0,a3,v1
    4d2c:	01023021 	addu	a2,t0,v0
    4d30:	00c43021 	addu	a2,a2,a0
    4d34:	8e62000c 	lw	v0,12(s3)
    4d38:	ae660330 	sw	a2,816(s3)
    4d3c:	ae670334 	sw	a3,820(s3)
    4d40:	8e680338 	lw	t0,824(s3)
    4d44:	8e69033c 	lw	t1,828(s3)
    4d48:	2c420002 	sltiu	v0,v0,2
    adapter->stats.totl += E1000_READ_REG(&adapter->shared, TOTL);
    4d4c:	8e640008 	lw	a0,8(s3)
    4d50:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4d54:	8c8740c8 	lw	a3,16584(a0)
	return __arch__swab32(x);
    4d58:	30e5ff00 	andi	a1,a3,0xff00
    4d5c:	00073600 	sll	a2,a3,0x18
    4d60:	00072202 	srl	a0,a3,0x8
    4d64:	00052a00 	sll	a1,a1,0x8
    4d68:	3084ff00 	andi	a0,a0,0xff00
    4d6c:	00c53025 	or	a2,a2,a1
    4d70:	00c43025 	or	a2,a2,a0
    4d74:	00073e02 	srl	a3,a3,0x18
    4d78:	00c71825 	or	v1,a2,a3
    4d7c:	01233821 	addu	a3,t1,v1
    4d80:	00e3202b 	sltu	a0,a3,v1
    4d84:	01023021 	addu	a2,t0,v0
    4d88:	00c43021 	addu	a2,a2,a0
    4d8c:	8e62000c 	lw	v0,12(s3)
    4d90:	ae660338 	sw	a2,824(s3)
    4d94:	ae67033c 	sw	a3,828(s3)
    4d98:	8e680340 	lw	t0,832(s3)
    4d9c:	8e690344 	lw	t1,836(s3)
    4da0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.toth += E1000_READ_REG(&adapter->shared, TOTH);
    4da4:	8e640008 	lw	a0,8(s3)
    4da8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4dac:	8c8740cc 	lw	a3,16588(a0)
	return __arch__swab32(x);
    4db0:	30e5ff00 	andi	a1,a3,0xff00
    4db4:	00073600 	sll	a2,a3,0x18
    4db8:	00072202 	srl	a0,a3,0x8
    4dbc:	00052a00 	sll	a1,a1,0x8
    4dc0:	3084ff00 	andi	a0,a0,0xff00
    4dc4:	00c53025 	or	a2,a2,a1
    4dc8:	00c43025 	or	a2,a2,a0
    4dcc:	00073e02 	srl	a3,a3,0x18
    4dd0:	00c71825 	or	v1,a2,a3
    4dd4:	01233821 	addu	a3,t1,v1
    4dd8:	00e3202b 	sltu	a0,a3,v1
    4ddc:	01023021 	addu	a2,t0,v0
    4de0:	00c43021 	addu	a2,a2,a0
    4de4:	8e62000c 	lw	v0,12(s3)
    4de8:	ae660340 	sw	a2,832(s3)
    4dec:	ae670344 	sw	a3,836(s3)
    4df0:	8e680348 	lw	t0,840(s3)
    4df4:	8e69034c 	lw	t1,844(s3)
    4df8:	2c420002 	sltiu	v0,v0,2

    adapter->stats.tpr += E1000_READ_REG(&adapter->shared, TPR);
    4dfc:	8e640008 	lw	a0,8(s3)
    4e00:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4e04:	8c8740d0 	lw	a3,16592(a0)
	return __arch__swab32(x);
    4e08:	30e5ff00 	andi	a1,a3,0xff00
    4e0c:	00073600 	sll	a2,a3,0x18
    4e10:	00072202 	srl	a0,a3,0x8
    4e14:	00052a00 	sll	a1,a1,0x8
    4e18:	3084ff00 	andi	a0,a0,0xff00
    4e1c:	00c53025 	or	a2,a2,a1
    4e20:	00c43025 	or	a2,a2,a0
    4e24:	00073e02 	srl	a3,a3,0x18
    4e28:	00c71825 	or	v1,a2,a3
    4e2c:	01233821 	addu	a3,t1,v1
    4e30:	00e3202b 	sltu	a0,a3,v1
    4e34:	01023021 	addu	a2,t0,v0
    4e38:	00c43021 	addu	a2,a2,a0
    4e3c:	8e62000c 	lw	v0,12(s3)
    4e40:	ae660348 	sw	a2,840(s3)
    4e44:	ae67034c 	sw	a3,844(s3)
    4e48:	8e680350 	lw	t0,848(s3)
    4e4c:	8e690354 	lw	t1,852(s3)
    4e50:	2c420002 	sltiu	v0,v0,2
    adapter->stats.tpt += E1000_READ_REG(&adapter->shared, TPT);
    4e54:	8e640008 	lw	a0,8(s3)
    4e58:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4e5c:	8c8740d4 	lw	a3,16596(a0)
	return __arch__swab32(x);
    4e60:	30e5ff00 	andi	a1,a3,0xff00
    4e64:	00073600 	sll	a2,a3,0x18
    4e68:	00072202 	srl	a0,a3,0x8
    4e6c:	00052a00 	sll	a1,a1,0x8
    4e70:	3084ff00 	andi	a0,a0,0xff00
    4e74:	00c53025 	or	a2,a2,a1
    4e78:	00c43025 	or	a2,a2,a0
    4e7c:	00073e02 	srl	a3,a3,0x18
    4e80:	00c71825 	or	v1,a2,a3
    4e84:	01233821 	addu	a3,t1,v1
    4e88:	00e3202b 	sltu	a0,a3,v1
    4e8c:	01023021 	addu	a2,t0,v0
    4e90:	00c43021 	addu	a2,a2,a0
    4e94:	8e62000c 	lw	v0,12(s3)
    4e98:	ae660350 	sw	a2,848(s3)
    4e9c:	ae670354 	sw	a3,852(s3)
    4ea0:	8e680358 	lw	t0,856(s3)
    4ea4:	8e69035c 	lw	t1,860(s3)
    4ea8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ptc64 += E1000_READ_REG(&adapter->shared, PTC64);
    4eac:	8e640008 	lw	a0,8(s3)
    4eb0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4eb4:	8c8740d8 	lw	a3,16600(a0)
	return __arch__swab32(x);
    4eb8:	30e5ff00 	andi	a1,a3,0xff00
    4ebc:	00073600 	sll	a2,a3,0x18
    4ec0:	00072202 	srl	a0,a3,0x8
    4ec4:	00052a00 	sll	a1,a1,0x8
    4ec8:	3084ff00 	andi	a0,a0,0xff00
    4ecc:	00c53025 	or	a2,a2,a1
    4ed0:	00c43025 	or	a2,a2,a0
    4ed4:	00073e02 	srl	a3,a3,0x18
    4ed8:	00c71825 	or	v1,a2,a3
    4edc:	01233821 	addu	a3,t1,v1
    4ee0:	00e3202b 	sltu	a0,a3,v1
    4ee4:	01023021 	addu	a2,t0,v0
    4ee8:	00c43021 	addu	a2,a2,a0
    4eec:	8e62000c 	lw	v0,12(s3)
    4ef0:	ae660358 	sw	a2,856(s3)
    4ef4:	ae67035c 	sw	a3,860(s3)
    4ef8:	8e680360 	lw	t0,864(s3)
    4efc:	8e690364 	lw	t1,868(s3)
    4f00:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ptc127 += E1000_READ_REG(&adapter->shared, PTC127);
    4f04:	8e640008 	lw	a0,8(s3)
    4f08:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4f0c:	8c8740dc 	lw	a3,16604(a0)
	return __arch__swab32(x);
    4f10:	30e5ff00 	andi	a1,a3,0xff00
    4f14:	00073600 	sll	a2,a3,0x18
    4f18:	00072202 	srl	a0,a3,0x8
    4f1c:	00052a00 	sll	a1,a1,0x8
    4f20:	3084ff00 	andi	a0,a0,0xff00
    4f24:	00c53025 	or	a2,a2,a1
    4f28:	00c43025 	or	a2,a2,a0
    4f2c:	00073e02 	srl	a3,a3,0x18
    4f30:	00c71825 	or	v1,a2,a3
    4f34:	01233821 	addu	a3,t1,v1
    4f38:	00e3202b 	sltu	a0,a3,v1
    4f3c:	01023021 	addu	a2,t0,v0
    4f40:	00c43021 	addu	a2,a2,a0
    4f44:	8e62000c 	lw	v0,12(s3)
    4f48:	ae660360 	sw	a2,864(s3)
    4f4c:	ae670364 	sw	a3,868(s3)
    4f50:	8e680368 	lw	t0,872(s3)
    4f54:	8e69036c 	lw	t1,876(s3)
    4f58:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ptc255 += E1000_READ_REG(&adapter->shared, PTC255);
    4f5c:	8e640008 	lw	a0,8(s3)
    4f60:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4f64:	8c8740e0 	lw	a3,16608(a0)
	return __arch__swab32(x);
    4f68:	30e5ff00 	andi	a1,a3,0xff00
    4f6c:	00073600 	sll	a2,a3,0x18
    4f70:	00072202 	srl	a0,a3,0x8
    4f74:	00052a00 	sll	a1,a1,0x8
    4f78:	3084ff00 	andi	a0,a0,0xff00
    4f7c:	00c53025 	or	a2,a2,a1
    4f80:	00c43025 	or	a2,a2,a0
    4f84:	00073e02 	srl	a3,a3,0x18
    4f88:	00c71825 	or	v1,a2,a3
    4f8c:	01233821 	addu	a3,t1,v1
    4f90:	00e3202b 	sltu	a0,a3,v1
    4f94:	01023021 	addu	a2,t0,v0
    4f98:	00c43021 	addu	a2,a2,a0
    4f9c:	8e62000c 	lw	v0,12(s3)
    4fa0:	ae660368 	sw	a2,872(s3)
    4fa4:	ae67036c 	sw	a3,876(s3)
    4fa8:	8e680370 	lw	t0,880(s3)
    4fac:	8e690374 	lw	t1,884(s3)
    4fb0:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ptc511 += E1000_READ_REG(&adapter->shared, PTC511);
    4fb4:	8e640008 	lw	a0,8(s3)
    4fb8:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    4fbc:	8c8740e4 	lw	a3,16612(a0)
	return __arch__swab32(x);
    4fc0:	30e5ff00 	andi	a1,a3,0xff00
    4fc4:	00073600 	sll	a2,a3,0x18
    4fc8:	00072202 	srl	a0,a3,0x8
    4fcc:	00052a00 	sll	a1,a1,0x8
    4fd0:	3084ff00 	andi	a0,a0,0xff00
    4fd4:	00c53025 	or	a2,a2,a1
    4fd8:	00c43025 	or	a2,a2,a0
    4fdc:	00073e02 	srl	a3,a3,0x18
    4fe0:	00c71825 	or	v1,a2,a3
    4fe4:	01233821 	addu	a3,t1,v1
    4fe8:	00e3202b 	sltu	a0,a3,v1
    4fec:	01023021 	addu	a2,t0,v0
    4ff0:	00c43021 	addu	a2,a2,a0
    4ff4:	8e62000c 	lw	v0,12(s3)
    4ff8:	ae660370 	sw	a2,880(s3)
    4ffc:	ae670374 	sw	a3,884(s3)
    5000:	8e680378 	lw	t0,888(s3)
    5004:	8e69037c 	lw	t1,892(s3)
    5008:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ptc1023 += E1000_READ_REG(&adapter->shared, PTC1023);
    500c:	8e640008 	lw	a0,8(s3)
    5010:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    5014:	8c8740e8 	lw	a3,16616(a0)
	return __arch__swab32(x);
    5018:	30e5ff00 	andi	a1,a3,0xff00
    501c:	00073600 	sll	a2,a3,0x18
    5020:	00072202 	srl	a0,a3,0x8
    5024:	00052a00 	sll	a1,a1,0x8
    5028:	3084ff00 	andi	a0,a0,0xff00
    502c:	00c53025 	or	a2,a2,a1
    5030:	00c43025 	or	a2,a2,a0
    5034:	00073e02 	srl	a3,a3,0x18
    5038:	00c71825 	or	v1,a2,a3
    503c:	01233821 	addu	a3,t1,v1
    5040:	00e3202b 	sltu	a0,a3,v1
    5044:	01023021 	addu	a2,t0,v0
    5048:	00c43021 	addu	a2,a2,a0
    504c:	8e62000c 	lw	v0,12(s3)
    5050:	ae660378 	sw	a2,888(s3)
    5054:	ae67037c 	sw	a3,892(s3)
    5058:	8e680380 	lw	t0,896(s3)
    505c:	8e690384 	lw	t1,900(s3)
    5060:	2c420002 	sltiu	v0,v0,2
    adapter->stats.ptc1522 += E1000_READ_REG(&adapter->shared, PTC1522);
    5064:	8e640008 	lw	a0,8(s3)
    5068:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    506c:	8c8740ec 	lw	a3,16620(a0)
	return __arch__swab32(x);
    5070:	30e5ff00 	andi	a1,a3,0xff00
    5074:	00073600 	sll	a2,a3,0x18
    5078:	00072202 	srl	a0,a3,0x8
    507c:	00052a00 	sll	a1,a1,0x8
    5080:	3084ff00 	andi	a0,a0,0xff00
    5084:	00c53025 	or	a2,a2,a1
    5088:	00c43025 	or	a2,a2,a0
    508c:	00073e02 	srl	a3,a3,0x18
    5090:	00c71825 	or	v1,a2,a3
    5094:	01233821 	addu	a3,t1,v1
    5098:	00e3202b 	sltu	a0,a3,v1
    509c:	01023021 	addu	a2,t0,v0
    50a0:	00c43021 	addu	a2,a2,a0
    50a4:	8e62000c 	lw	v0,12(s3)
    50a8:	ae660380 	sw	a2,896(s3)
    50ac:	ae670384 	sw	a3,900(s3)
    50b0:	8e680388 	lw	t0,904(s3)
    50b4:	8e69038c 	lw	t1,908(s3)
    50b8:	2c420002 	sltiu	v0,v0,2
    adapter->stats.mptc += E1000_READ_REG(&adapter->shared, MPTC);
    50bc:	8e640008 	lw	a0,8(s3)
    50c0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    50c4:	8c8740f0 	lw	a3,16624(a0)
	return __arch__swab32(x);
    50c8:	30e5ff00 	andi	a1,a3,0xff00
    50cc:	00073600 	sll	a2,a3,0x18
    50d0:	00072202 	srl	a0,a3,0x8
    50d4:	00052a00 	sll	a1,a1,0x8
    50d8:	3084ff00 	andi	a0,a0,0xff00
    50dc:	00c53025 	or	a2,a2,a1
    50e0:	00c43025 	or	a2,a2,a0
    50e4:	00073e02 	srl	a3,a3,0x18
    50e8:	00c71825 	or	v1,a2,a3
    50ec:	01233821 	addu	a3,t1,v1
    50f0:	00e3202b 	sltu	a0,a3,v1
    50f4:	01023021 	addu	a2,t0,v0
    50f8:	00c43021 	addu	a2,a2,a0
    50fc:	8e62000c 	lw	v0,12(s3)
    5100:	ae660388 	sw	a2,904(s3)
    5104:	ae67038c 	sw	a3,908(s3)
    5108:	8e680390 	lw	t0,912(s3)
    510c:	8e690394 	lw	t1,916(s3)
    5110:	2c420002 	sltiu	v0,v0,2
    adapter->stats.bptc += E1000_READ_REG(&adapter->shared, BPTC);
    5114:	8e640008 	lw	a0,8(s3)
    5118:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    511c:	8c8740f4 	lw	a3,16628(a0)
	return __arch__swab32(x);
    5120:	30e5ff00 	andi	a1,a3,0xff00
    5124:	00073600 	sll	a2,a3,0x18
    5128:	00072202 	srl	a0,a3,0x8
    512c:	00052a00 	sll	a1,a1,0x8
    5130:	3084ff00 	andi	a0,a0,0xff00
    5134:	00c53025 	or	a2,a2,a1
    5138:	00c43025 	or	a2,a2,a0
    513c:	00073e02 	srl	a3,a3,0x18
    5140:	00c71825 	or	v1,a2,a3
    5144:	01233821 	addu	a3,t1,v1
    5148:	00e3202b 	sltu	a0,a3,v1
    514c:	01023021 	addu	a2,t0,v0
    5150:	00c43021 	addu	a2,a2,a0

    if(adapter->shared.mac_type >= e1000_82543) {
    5154:	8e62000c 	lw	v0,12(s3)
    5158:	ae660390 	sw	a2,912(s3)
    515c:	ae670394 	sw	a3,916(s3)
    5160:	2c420002 	sltiu	v0,v0,2
    5164:	5440008c 	bnezl	v0,5398 <e1000_update_stats+0x1354>
    5168:	8e6301dc 	lw	v1,476(s3)
        adapter->stats.algnerrc += E1000_READ_REG(&adapter->shared, ALGNERRC);
    516c:	8e620008 	lw	v0,8(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    5170:	3c0c00ff 	lui	t4,0xff
    5174:	8e6801e0 	lw	t0,480(s3)
    5178:	8e6901e4 	lw	t1,484(s3)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    517c:	8c474004 	lw	a3,16388(v0)
    5180:	8e6a000c 	lw	t2,12(s3)
    5184:	00001021 	move	v0,zero
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    5188:	30e5ff00 	andi	a1,a3,0xff00
    518c:	00073600 	sll	a2,a3,0x18
    5190:	00ec2024 	and	a0,a3,t4
    5194:	00052a00 	sll	a1,a1,0x8
    5198:	00042202 	srl	a0,a0,0x8
    519c:	00c53025 	or	a2,a2,a1
    51a0:	00c43025 	or	a2,a2,a0
    51a4:	00073e02 	srl	a3,a3,0x18
    51a8:	00c71825 	or	v1,a2,a3
    51ac:	01234821 	addu	t1,t1,v1
    51b0:	0123202b 	sltu	a0,t1,v1
    51b4:	01024021 	addu	t0,t0,v0
    51b8:	01044021 	addu	t0,t0,a0
    51bc:	2d4a0002 	sltiu	t2,t2,2
    51c0:	ae6801e0 	sw	t0,480(s3)
    51c4:	ae6901e4 	sw	t1,484(s3)
    51c8:	8e6801f0 	lw	t0,496(s3)
    51cc:	8e6901f4 	lw	t1,500(s3)
    51d0:	15400003 	bnez	t2,51e0 <e1000_update_stats+0x119c>
    51d4:	3c0bff00 	lui	t3,0xff00
        adapter->stats.rxerrc += E1000_READ_REG(&adapter->shared, RXERRC);
    51d8:	0800147a 	j	51e8 <e1000_update_stats+0x11a4>
    51dc:	8e660008 	lw	a2,8(s3)
    51e0:	8e660008 	lw	a2,8(s3)
    51e4:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    51e8:	8cc4400c 	lw	a0,16396(a2)
	return __arch__swab32(x);
    51ec:	3085ff00 	andi	a1,a0,0xff00
    51f0:	008c3824 	and	a3,a0,t4
    51f4:	00043600 	sll	a2,a0,0x18
    51f8:	00052a00 	sll	a1,a1,0x8
    51fc:	00073a02 	srl	a3,a3,0x8
    5200:	00c53025 	or	a2,a2,a1
    5204:	008b2024 	and	a0,a0,t3
    5208:	00c73025 	or	a2,a2,a3
    520c:	00042602 	srl	a0,a0,0x18
    5210:	00c41825 	or	v1,a2,a0
    5214:	01233821 	addu	a3,t1,v1
    5218:	00e3202b 	sltu	a0,a3,v1
    521c:	01023021 	addu	a2,t0,v0
    5220:	00c43021 	addu	a2,a2,a0
    5224:	8e62000c 	lw	v0,12(s3)
    5228:	ae6601f0 	sw	a2,496(s3)
    522c:	ae6701f4 	sw	a3,500(s3)
    5230:	8e680230 	lw	t0,560(s3)
    5234:	8e690234 	lw	t1,564(s3)
    5238:	2c420002 	sltiu	v0,v0,2
        adapter->stats.tncrs += E1000_READ_REG(&adapter->shared, TNCRS);
    523c:	8e640008 	lw	a0,8(s3)
    5240:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    5244:	8c874034 	lw	a3,16436(a0)
	return __arch__swab32(x);
    5248:	30e5ff00 	andi	a1,a3,0xff00
    524c:	00073600 	sll	a2,a3,0x18
    5250:	00072202 	srl	a0,a3,0x8
    5254:	00052a00 	sll	a1,a1,0x8
    5258:	3084ff00 	andi	a0,a0,0xff00
    525c:	00c53025 	or	a2,a2,a1
    5260:	00c43025 	or	a2,a2,a0
    5264:	00073e02 	srl	a3,a3,0x18
    5268:	00c71825 	or	v1,a2,a3
    526c:	01233821 	addu	a3,t1,v1
    5270:	00e3202b 	sltu	a0,a3,v1
    5274:	01023021 	addu	a2,t0,v0
    5278:	00c43021 	addu	a2,a2,a0
    527c:	8e62000c 	lw	v0,12(s3)
    5280:	ae660230 	sw	a2,560(s3)
    5284:	ae670234 	sw	a3,564(s3)
    5288:	8e680240 	lw	t0,576(s3)
    528c:	8e690244 	lw	t1,580(s3)
    5290:	2c420002 	sltiu	v0,v0,2
        adapter->stats.cexterr += E1000_READ_REG(&adapter->shared, CEXTERR);
    5294:	8e640008 	lw	a0,8(s3)
    5298:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    529c:	8c87403c 	lw	a3,16444(a0)
	return __arch__swab32(x);
    52a0:	30e5ff00 	andi	a1,a3,0xff00
    52a4:	00073600 	sll	a2,a3,0x18
    52a8:	00072202 	srl	a0,a3,0x8
    52ac:	00052a00 	sll	a1,a1,0x8
    52b0:	3084ff00 	andi	a0,a0,0xff00
    52b4:	00c53025 	or	a2,a2,a1
    52b8:	00c43025 	or	a2,a2,a0
    52bc:	00073e02 	srl	a3,a3,0x18
    52c0:	00c71825 	or	v1,a2,a3
    52c4:	01233821 	addu	a3,t1,v1
    52c8:	00e3202b 	sltu	a0,a3,v1
    52cc:	01023021 	addu	a2,t0,v0
    52d0:	00c43021 	addu	a2,a2,a0
    52d4:	8e62000c 	lw	v0,12(s3)
    52d8:	ae660240 	sw	a2,576(s3)
    52dc:	ae670244 	sw	a3,580(s3)
    52e0:	8e680398 	lw	t0,920(s3)
    52e4:	8e69039c 	lw	t1,924(s3)
    52e8:	2c420002 	sltiu	v0,v0,2
        adapter->stats.tsctc += E1000_READ_REG(&adapter->shared, TSCTC);
    52ec:	8e640008 	lw	a0,8(s3)
    52f0:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    52f4:	8c8740f8 	lw	a3,16632(a0)
	return __arch__swab32(x);
    52f8:	30e5ff00 	andi	a1,a3,0xff00
    52fc:	00073600 	sll	a2,a3,0x18
    5300:	00072202 	srl	a0,a3,0x8
    5304:	00052a00 	sll	a1,a1,0x8
    5308:	3084ff00 	andi	a0,a0,0xff00
    530c:	00c53025 	or	a2,a2,a1
    5310:	00c43025 	or	a2,a2,a0
    5314:	00073e02 	srl	a3,a3,0x18
    5318:	00c71825 	or	v1,a2,a3
    531c:	01233821 	addu	a3,t1,v1
    5320:	00e3202b 	sltu	a0,a3,v1
    5324:	01023021 	addu	a2,t0,v0
    5328:	00c43021 	addu	a2,a2,a0
    532c:	8e62000c 	lw	v0,12(s3)
    5330:	ae660398 	sw	a2,920(s3)
    5334:	ae67039c 	sw	a3,924(s3)
    5338:	8e6803a0 	lw	t0,928(s3)
    533c:	8e6903a4 	lw	t1,932(s3)
    5340:	2c420002 	sltiu	v0,v0,2
        adapter->stats.tsctfc += E1000_READ_REG(&adapter->shared, TSCTFC);
    5344:	8e640008 	lw	a0,8(s3)
    5348:	00001021 	move	v0,zero
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    534c:	8c8740fc 	lw	a3,16636(a0)
	return __arch__swab32(x);
    5350:	30e5ff00 	andi	a1,a3,0xff00
    5354:	00073600 	sll	a2,a3,0x18
    5358:	00072202 	srl	a0,a3,0x8
    535c:	00052a00 	sll	a1,a1,0x8
    5360:	3084ff00 	andi	a0,a0,0xff00
    5364:	00c53025 	or	a2,a2,a1
    5368:	00c43025 	or	a2,a2,a0
    536c:	00073e02 	srl	a3,a3,0x18
    5370:	00c71825 	or	v1,a2,a3
    5374:	01233821 	addu	a3,t1,v1
    5378:	00e3202b 	sltu	a0,a3,v1
    537c:	01023021 	addu	a2,t0,v0
    5380:	00c43021 	addu	a2,a2,a0
    5384:	00c01021 	move	v0,a2
    5388:	00e01821 	move	v1,a3
    538c:	ae6203a0 	sw	v0,928(s3)
    5390:	ae6303a4 	sw	v1,932(s3)
    }

    /* Fill out the OS statistics structure */

    adapter->net_stats.rx_packets = adapter->stats.gprc;
    adapter->net_stats.tx_packets = adapter->stats.gptc;
    adapter->net_stats.rx_bytes = adapter->stats.gorcl;
    adapter->net_stats.tx_bytes = adapter->stats.gotcl;
    adapter->net_stats.multicast = adapter->stats.mprc;
    adapter->net_stats.collisions = adapter->stats.colc;

    /* Rx Errors */

    adapter->net_stats.rx_errors =
    5394:	8e6301dc 	lw	v1,476(s3)
    5398:	8e6201f4 	lw	v0,500(s3)
    539c:	8e6401e4 	lw	a0,484(s3)
    53a0:	8e65024c 	lw	a1,588(s3)
    53a4:	8e6602ec 	lw	a2,748(s3)
    53a8:	00431021 	addu	v0,v0,v1
    53ac:	8e7201fc 	lw	s2,508(s3)
    53b0:	00441021 	addu	v0,v0,a0
    53b4:	00451021 	addu	v0,v0,a1
    53b8:	8e710244 	lw	s1,580(s3)
    53bc:	8e6402ac 	lw	a0,684(s3)
    53c0:	00461021 	addu	v0,v0,a2
        adapter->stats.rxerrc + adapter->stats.crcerrs +
        adapter->stats.algnerrc + adapter->stats.rlec + adapter->stats.rnbc +
        adapter->stats.mpc + adapter->stats.cexterr;
    adapter->net_stats.rx_dropped = adapter->stats.rnbc;
    adapter->net_stats.rx_length_errors = adapter->stats.rlec;
    adapter->net_stats.rx_crc_errors = adapter->stats.crcerrs;
    adapter->net_stats.rx_frame_errors = adapter->stats.algnerrc;
    adapter->net_stats.rx_fifo_errors = adapter->stats.mpc;
    adapter->net_stats.rx_missed_errors = adapter->stats.mpc;

    /* Tx Errors */

    adapter->net_stats.tx_errors = adapter->stats.ecol + adapter->stats.latecol;
    53c4:	8e6a021c 	lw	t2,540(s3)
    53c8:	8e63020c 	lw	v1,524(s3)
    53cc:	00521021 	addu	v0,v0,s2
    53d0:	00511021 	addu	v0,v0,s1
    53d4:	8e6502c4 	lw	a1,708(s3)
    53d8:	8e6602cc 	lw	a2,716(s3)
    53dc:	8e6702dc 	lw	a3,732(s3)
    53e0:	8e6802bc 	lw	t0,700(s3)
    53e4:	8e690224 	lw	t1,548(s3)
    53e8:	8e6b02ec 	lw	t3,748(s3)
    53ec:	8e6c024c 	lw	t4,588(s3)
    53f0:	8e6d01dc 	lw	t5,476(s3)
    53f4:	8e6e01e4 	lw	t6,484(s3)
    53f8:	ae640150 	sw	a0,336(s3)
    53fc:	ae620160 	sw	v0,352(s3)
    adapter->net_stats.tx_aborted_errors = adapter->stats.ecol;
    adapter->net_stats.tx_window_errors = adapter->stats.latecol;

    /* Tx Dropped needs to be maintained elsewhere */

    if(adapter->shared.media_type == e1000_media_type_copper) {
    5400:	8e640010 	lw	a0,16(s3)
    5404:	8e62020c 	lw	v0,524(s3)
    5408:	02407821 	move	t7,s2
    540c:	006a1821 	addu	v1,v1,t2
    5410:	ae630164 	sw	v1,356(s3)
    5414:	01e08021 	move	s0,t7
    5418:	01401821 	move	v1,t2
    541c:	ae650154 	sw	a1,340(s3)
    5420:	ae660158 	sw	a2,344(s3)
    5424:	ae67015c 	sw	a3,348(s3)
    5428:	ae680170 	sw	t0,368(s3)
    542c:	ae690174 	sw	t1,372(s3)
    5430:	ae6b0168 	sw	t3,360(s3)
    5434:	ae6c0178 	sw	t4,376(s3)
    5438:	ae6d0180 	sw	t5,384(s3)
    543c:	ae6e0184 	sw	t6,388(s3)
    5440:	ae6f0188 	sw	t7,392(s3)
    5444:	ae70018c 	sw	s0,396(s3)
    5448:	ae620190 	sw	v0,400(s3)
    544c:	14800011 	bnez	a0,5494 <e1000_update_stats+0x1450>
    5450:	ae6301a0 	sw	v1,416(s3)
        adapter->idle_errors +=
    5454:	26700008 	addiu	s0,s3,8
    5458:	02002021 	move	a0,s0
    545c:	3c110000 	lui	s1,0x0
    5460:	26310000 	addiu	s1,s1,0
    5464:	0220f809 	jalr	s1
    5468:	2405000a 	li	a1,10
    546c:	8e6303ac 	lw	v1,940(s3)
    5470:	304200ff 	andi	v0,v0,0xff
            (e1000_read_phy_reg(&adapter->shared, PHY_1000T_STATUS)
             & PHY_IDLE_ERROR_COUNT_MASK);
        adapter->receive_errors +=
    5474:	02002021 	move	a0,s0
    5478:	00621821 	addu	v1,v1,v0
    547c:	ae6303ac 	sw	v1,940(s3)
    5480:	0220f809 	jalr	s1
    5484:	24050015 	li	a1,21
    5488:	8e6303a8 	lw	v1,936(s3)
    548c:	00621821 	addu	v1,v1,v0
    5490:	ae6303a8 	sw	v1,936(s3)
            e1000_read_phy_reg(&adapter->shared, M88E1000_RX_ERR_CNTR);
    }

    spin_unlock_irqrestore(&adapter->stats_lock, flags);
    5494:	40016000 	mfc0	at,$12
    5498:	32940001 	andi	s4,s4,0x1
    549c:	34210001 	ori	at,at,0x1
    54a0:	38210001 	xori	at,at,0x1
    54a4:	0281a025 	or	s4,s4,at
    54a8:	40946000 	mtc0	s4,$12
	...
    return;
}
    54b8:	8fbf0024 	lw	ra,36(sp)
    54bc:	8fb40020 	lw	s4,32(sp)
    54c0:	8fb3001c 	lw	s3,28(sp)
    54c4:	8fb20018 	lw	s2,24(sp)
    54c8:	8fb10014 	lw	s1,20(sp)
    54cc:	8fb00010 	lw	s0,16(sp)
    54d0:	03e00008 	jr	ra
    54d4:	27bd0028 	addiu	sp,sp,40

000054d8 <e1000_intr>:
    54d8:	27bdffd0 	addiu	sp,sp,-48
    54dc:	afb10014 	sw	s1,20(sp)
    54e0:	afbf002c 	sw	ra,44(sp)
    54e4:	afb60028 	sw	s6,40(sp)
    54e8:	afb50024 	sw	s5,36(sp)
    54ec:	afb40020 	sw	s4,32(sp)
    54f0:	afb3001c 	sw	s3,28(sp)
    54f4:	afb20018 	sw	s2,24(sp)
    54f8:	afb00010 	sw	s0,16(sp)

/**
 * e1000_irq_disable - Mask off interrupt generation on the NIC
 * @adapter: board private structure
 **/

static inline void
e1000_irq_disable(struct e1000_adapter *adapter)
{
    E1000_DBG("e1000_irq_disable\n");

    /* Mask off all interrupts */

    E1000_WRITE_REG(&adapter->shared, IMC, ~0);
    return;
}

/**
 * e1000_irq_enable - Enable default interrupt generation settings
 * @adapter: board private structure
 **/

static inline void
e1000_irq_enable(struct e1000_adapter *adapter)
{
    E1000_DBG("e1000_irq_enable\n");

    E1000_WRITE_REG(&adapter->shared, IMS, adapter->int_mask);
    return;
}

/**
 * e1000_intr - Interrupt Handler
 * @irq: interrupt number
 * @data: pointer to a network interface device structure
 * @pt_regs: CPU registers structure
 **/

void
e1000_intr(int irq,
           void *data,
           struct pt_regs *regs)
{
    struct net_device *netdev = (struct net_device *) data;
    struct e1000_adapter *adapter = netdev->priv;
    54fc:	8cb00064 	lw	s0,100(a1)
    uint32_t icr;
    uint loop_count = E1000_MAX_INTR;
    5500:	24110001 	li	s1,1
    5504:	8e02000c 	lw	v0,12(s0)
    5508:	2c420002 	sltiu	v0,v0,2
    550c:	8e030008 	lw	v1,8(s0)
    5510:	2402ffff 	li	v0,-1
    5514:	ac6200d8 	sw	v0,216(v1)

    E1000_DBG("e1000_intr\n");

    e1000_irq_disable(adapter);

    while(loop_count > 0 && (icr = E1000_READ_REG(&adapter->shared, ICR)) != 0) {
    5518:	3c1300ff 	lui	s3,0xff
    551c:	3c12ff00 	lui	s2,0xff00
    5520:	24160001 	li	s6,1
    5524:	3c150000 	lui	s5,0x0
    5528:	26b50000 	addiu	s5,s5,0
    552c:	3c140000 	lui	s4,0x0
    5530:	269458dc 	addiu	s4,s4,22748
    5534:	8e07000c 	lw	a3,12(s0)
    5538:	2ce20002 	sltiu	v0,a3,2
    553c:	8e060008 	lw	a2,8(s0)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    5540:	8cc200c0 	lw	v0,192(a2)
	return __arch__swab32(x);
    5544:	3043ff00 	andi	v1,v0,0xff00
    5548:	00022e00 	sll	a1,v0,0x18
    554c:	00532024 	and	a0,v0,s3
    5550:	00031a00 	sll	v1,v1,0x8
    5554:	00a32825 	or	a1,a1,v1
    5558:	00042202 	srl	a0,a0,0x8
    555c:	00521024 	and	v0,v0,s2
    5560:	00a42825 	or	a1,a1,a0
    5564:	00021602 	srl	v0,v0,0x18
    5568:	00a22825 	or	a1,a1,v0
    556c:	10a00017 	beqz	a1,55cc <e1000_intr+0xf4>
    5570:	30a2000c 	andi	v0,a1,0xc

        if(icr & (E1000_ICR_RXSEQ | E1000_ICR_LSC)) {
    5574:	1040000b 	beqz	v0,55a4 <e1000_intr+0xcc>
    5578:	00000000 	nop
            adapter->shared.get_link_status = 1;
    557c:	ae160058 	sw	s6,88(s0)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    5580:	c202008c 	ll	v0,140(s0)
    5584:	34420008 	ori	v0,v0,0x8
    5588:	e202008c 	sc	v0,140(s0)
    558c:	1040fffc 	beqz	v0,5580 <e1000_intr+0xa8>
    5590:	00000000 	nop
            set_bit(E1000_LINK_STATUS_CHANGED, &adapter->flags);
            /* run the watchdog ASAP */
            mod_timer(&adapter->timer_id, jiffies);
    5594:	3c050000 	lui	a1,0x0
    5598:	8ca50000 	lw	a1,0(a1)
    559c:	02a0f809 	jalr	s5
    55a0:	26040094 	addiu	a0,s0,148
        }

        e1000_clean_rx_irq(adapter);
    55a4:	0280f809 	jalr	s4
    55a8:	02002021 	move	a0,s0
        e1000_clean_tx_irq(adapter);
        loop_count--;
    55ac:	2631ffff 	addiu	s1,s1,-1
    55b0:	3c020000 	lui	v0,0x0
    55b4:	24425624 	addiu	v0,v0,22052
    55b8:	0040f809 	jalr	v0
    55bc:	02002021 	move	a0,s0
    }
    55c0:	1620ffdd 	bnez	s1,5538 <e1000_intr+0x60>
    55c4:	8e07000c 	lw	a3,12(s0)
    55c8:	8e060008 	lw	a2,8(s0)
    55cc:	2ce20002 	sltiu	v0,a3,2
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    55d0:	8e0500cc 	lw	a1,204(s0)
	return __arch__swab32(x);
    55d4:	30a4ff00 	andi	a0,a1,0xff00
    55d8:	00051600 	sll	v0,a1,0x18
    55dc:	00051a02 	srl	v1,a1,0x8
    55e0:	00042200 	sll	a0,a0,0x8
    55e4:	00441025 	or	v0,v0,a0
    55e8:	3063ff00 	andi	v1,v1,0xff00
    55ec:	00431025 	or	v0,v0,v1
    55f0:	00052e02 	srl	a1,a1,0x18
    55f4:	00451025 	or	v0,v0,a1
    55f8:	acc200d0 	sw	v0,208(a2)

    e1000_irq_enable(adapter);

    return;
}
    55fc:	8fbf002c 	lw	ra,44(sp)
    5600:	8fb60028 	lw	s6,40(sp)
    5604:	8fb50024 	lw	s5,36(sp)
    5608:	8fb40020 	lw	s4,32(sp)
    560c:	8fb3001c 	lw	s3,28(sp)
    5610:	8fb20018 	lw	s2,24(sp)
    5614:	8fb10014 	lw	s1,20(sp)
    5618:	8fb00010 	lw	s0,16(sp)
    561c:	03e00008 	jr	ra
    5620:	27bd0030 	addiu	sp,sp,48

00005624 <e1000_clean_tx_irq>:
    5624:	27bdffd0 	addiu	sp,sp,-48
    5628:	afb50024 	sw	s5,36(sp)
    562c:	afb40020 	sw	s4,32(sp)
    5630:	afbf002c 	sw	ra,44(sp)
    5634:	afb60028 	sw	s6,40(sp)
    5638:	afb3001c 	sw	s3,28(sp)
    563c:	afb20018 	sw	s2,24(sp)
    5640:	afb10014 	sw	s1,20(sp)
    5644:	afb00010 	sw	s0,16(sp)
    5648:	0080a021 	move	s4,a0

/**
 * e1000_clean_tx_irq - Reclaim resources after transmit completes
 * @adapter: board private structure
 **/

static void
e1000_clean_tx_irq(struct e1000_adapter *adapter)
{
    struct pci_dev *pdev = adapter->pdev;
    int i;

    struct e1000_tx_desc *tx_desc;
    struct net_device *netdev = adapter->netdev;

    E1000_DBG("e1000_clean_tx_irq\n");

    i = adapter->tx_ring.next_to_clean;
    564c:	8e9200fc 	lw	s2,252(s4)
    tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
    5650:	8e8400e4 	lw	a0,228(s4)

    while(tx_desc->upper.data & cpu_to_le32(E1000_TXD_STAT_DD)) {
    5654:	3c050100 	lui	a1,0x100
    5658:	00121900 	sll	v1,s2,0x4
    565c:	0083a821 	addu	s5,a0,v1
    5660:	8ea2000c 	lw	v0,12(s5)
    5664:	00451024 	and	v0,v0,a1
    5668:	10400051 	beqz	v0,57b0 <e1000_clean_tx_irq+0x18c>
    566c:	8e960148 	lw	s6,328(s4)
    5670:	269300f4 	addiu	s3,s4,244

        if(adapter->tx_ring.buffer_info[i].dma != 0) {
    5674:	8e860100 	lw	a2,256(s4)
    5678:	00121040 	sll	v0,s2,0x1
    567c:	00521021 	addu	v0,v0,s2
    5680:	000288c0 	sll	s1,v0,0x3
    5684:	02262021 	addu	a0,s1,a2
    5688:	8c820008 	lw	v0,8(a0)
    568c:	8c83000c 	lw	v1,12(a0)
    5690:	00431025 	or	v0,v0,v1
    5694:	10400006 	beqz	v0,56b0 <e1000_clean_tx_irq+0x8c>
    5698:	24050001 	li	a1,1
            pci_unmap_page(pdev, adapter->tx_ring.buffer_info[i].dma,
                           adapter->tx_ring.buffer_info[i].length,
                           PCI_DMA_TODEVICE);
            adapter->tx_ring.buffer_info[i].dma = 0;
    569c:	00001021 	move	v0,zero
    56a0:	00001821 	move	v1,zero
    56a4:	ac820008 	sw	v0,8(a0)
    56a8:	ac83000c 	sw	v1,12(a0)
    56ac:	8e860100 	lw	a2,256(s4)
        }

        if(adapter->tx_ring.buffer_info[i].skb != NULL) {
    56b0:	02261021 	addu	v0,s1,a2
    56b4:	8c460000 	lw	a2,0(v0)
    56b8:	10c00026 	beqz	a2,5754 <e1000_clean_tx_irq+0x130>
    56bc:	24c40070 	addiu	a0,a2,112
extern __inline__ int atomic_sub_return(int i, atomic_t * v)
{
	unsigned long temp, result;

	__asm__ __volatile__(
    56c0:	c0830000 	ll	v1,0(a0)
    56c4:	00651023 	subu	v0,v1,a1
    56c8:	e0820000 	sc	v0,0(a0)
    56cc:	1040fffc 	beqz	v0,56c0 <e1000_clean_tx_irq+0x9c>
    56d0:	00651023 	subu	v0,v1,a1
 * is executing from interrupt context.
 */
static inline void dev_kfree_skb_irq(struct sk_buff *skb)
{
	if (atomic_dec_and_test(&skb->users)) {
    56d4:	5440001d 	bnezl	v0,574c <e1000_clean_tx_irq+0x128>
    56d8:	8e820100 	lw	v0,256(s4)
		int cpu =smp_processor_id();
		unsigned long flags;

		local_irq_save(flags);
    56dc:	40106000 	mfc0	s0,$12
    56e0:	00000000 	nop
    56e4:	36010001 	ori	at,s0,0x1
    56e8:	38210001 	xori	at,at,0x1
    56ec:	40816000 	mtc0	at,$12
    56f0:	00000040 	sll	zero,zero,0x1
    56f4:	00000040 	sll	zero,zero,0x1
    56f8:	00000040 	sll	zero,zero,0x1
		skb->next = softnet_data[cpu].completion_queue;
    56fc:	3c030000 	lui	v1,0x0
    5700:	8c630020 	lw	v1,32(v1)
		softnet_data[cpu].completion_queue = skb;
		cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
    5704:	00002021 	move	a0,zero
    5708:	acc30000 	sw	v1,0(a2)
    570c:	3c020000 	lui	v0,0x0
    5710:	24420000 	addiu	v0,v0,0
    5714:	3c010000 	lui	at,0x0
    5718:	ac260020 	sw	a2,32(at)
    571c:	0040f809 	jalr	v0
    5720:	24050001 	li	a1,1
		local_irq_restore(flags);
    5724:	40016000 	mfc0	at,$12
    5728:	32100001 	andi	s0,s0,0x1
    572c:	34210001 	ori	at,at,0x1
    5730:	38210001 	xori	at,at,0x1
    5734:	02018025 	or	s0,s0,at
    5738:	40906000 	mtc0	s0,$12
	...
            dev_kfree_skb_irq(adapter->tx_ring.buffer_info[i].skb);
            adapter->tx_ring.buffer_info[i].skb = NULL;
    5748:	8e820100 	lw	v0,256(s4)
    574c:	02221021 	addu	v0,s1,v0
    5750:	ac400000 	sw	zero,0(v0)
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    5754:	24020001 	li	v0,1
	unsigned long temp;

	__asm__ __volatile__(
    5758:	c2640000 	ll	a0,0(s3)
    575c:	00822021 	addu	a0,a0,v0
    5760:	e2640000 	sc	a0,0(s3)
    5764:	1080fffc 	beqz	a0,5758 <e1000_clean_tx_irq+0x134>
    5768:	00000000 	nop
        }

        atomic_inc(&adapter->tx_ring.unused);
        i = (i + 1) % adapter->tx_ring.count;
    576c:	8e8300f0 	lw	v1,240(s4)
    5770:	26420001 	addiu	v0,s2,1

        tx_desc->upper.data = 0;
        tx_desc = E1000_TX_DESC(adapter->tx_ring, i);
    }
    5774:	3c060100 	lui	a2,0x100
    5778:	0043001b 	divu	zero,v0,v1
    577c:	50600001 	beqzl	v1,5784 <e1000_clean_tx_irq+0x160>
    5780:	0007000d 	break	0x7
    5784:	aea0000c 	sw	zero,12(s5)
    5788:	8e8400e4 	lw	a0,228(s4)
    578c:	00002810 	mfhi	a1
    5790:	00a09021 	move	s2,a1
    5794:	00000000 	nop
    5798:	00121900 	sll	v1,s2,0x4
    579c:	0083a821 	addu	s5,a0,v1
    57a0:	8ea2000c 	lw	v0,12(s5)
    57a4:	00461024 	and	v0,v0,a2
    57a8:	5440ffb3 	bnezl	v0,5678 <e1000_clean_tx_irq+0x54>
    57ac:	8e860100 	lw	a2,256(s4)

    adapter->tx_ring.next_to_clean = i;

    if(adapter->tx_ring.next_to_clean == adapter->tx_ring.next_to_use)
    57b0:	8e8200f8 	lw	v0,248(s4)
    57b4:	16420004 	bne	s2,v0,57c8 <e1000_clean_tx_irq+0x1a4>
    57b8:	ae9200fc 	sw	s2,252(s4)
        atomic_set(&adapter->tx_timeout, 0);
    57bc:	ae80010c 	sw	zero,268(s4)
    57c0:	080015f5 	j	57d4 <e1000_clean_tx_irq+0x1b0>
    57c4:	26c5002c 	addiu	a1,s6,44
    else
        atomic_set(&adapter->tx_timeout, 3);
    57c8:	24020003 	li	v0,3
    57cc:	ae82010c 	sw	v0,268(s4)
 * @nr: bit number to test
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
    57d0:	26c5002c 	addiu	a1,s6,44
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    57d4:	8ca20000 	lw	v0,0(a1)
    57d8:	30420001 	andi	v0,v0,0x1

    if(netif_queue_stopped(netdev) &&
       (atomic_read(&adapter->tx_ring.unused) >
        (adapter->tx_ring.count * 3 / 4))) {
    57dc:	10400036 	beqz	v0,58b8 <e1000_clean_tx_irq+0x294>
    57e0:	8fbf002c 	lw	ra,44(sp)
    57e4:	8e8200f0 	lw	v0,240(s4)
    57e8:	8e8400f4 	lw	a0,244(s4)
    57ec:	00021840 	sll	v1,v0,0x1
    57f0:	00621821 	addu	v1,v1,v0
    57f4:	00031882 	srl	v1,v1,0x2
    57f8:	0064182b 	sltu	v1,v1,a0
    57fc:	5060002f 	beqzl	v1,58bc <e1000_clean_tx_irq+0x298>
    5800:	8fb60028 	lw	s6,40(sp)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    5804:	24020001 	li	v0,1
    5808:	c0a40000 	ll	a0,0(a1)
    580c:	00821825 	or	v1,a0,v0
    5810:	00621826 	xor	v1,v1,v0
    5814:	e0a30000 	sc	v1,0(a1)
    5818:	1060fffb 	beqz	v1,5808 <e1000_clean_tx_irq+0x1e4>
    581c:	00821824 	and	v1,a0,v0
}

static inline void netif_wake_queue(struct net_device *dev)
{
	if (test_and_clear_bit(__LINK_STATE_XOFF, &dev->state))
    5820:	50600025 	beqzl	v1,58b8 <e1000_clean_tx_irq+0x294>
    5824:	8fbf002c 	lw	ra,44(sp)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    5828:	24020008 	li	v0,8
    582c:	c0a40000 	ll	a0,0(a1)
    5830:	00821825 	or	v1,a0,v0
    5834:	e0a30000 	sc	v1,0(a1)
    5838:	1060fffc 	beqz	v1,582c <e1000_clean_tx_irq+0x208>
    583c:	00821824 	and	v1,a0,v0
#define HAVE_NETIF_QUEUE

static inline void __netif_schedule(struct net_device *dev)
{
	if (!test_and_set_bit(__LINK_STATE_SCHED, &dev->state)) {
    5840:	5460001d 	bnezl	v1,58b8 <e1000_clean_tx_irq+0x294>
    5844:	8fbf002c 	lw	ra,44(sp)
		unsigned long flags;
		int cpu = smp_processor_id();

		local_irq_save(flags);
    5848:	40106000 	mfc0	s0,$12
    584c:	00000000 	nop
    5850:	36010001 	ori	at,s0,0x1
    5854:	38210001 	xori	at,at,0x1
    5858:	40816000 	mtc0	at,$12
    585c:	00000040 	sll	zero,zero,0x1
    5860:	00000040 	sll	zero,zero,0x1
    5864:	00000040 	sll	zero,zero,0x1
		dev->next_sched = softnet_data[cpu].output_queue;
    5868:	3c030000 	lui	v1,0x0
    586c:	8c63001c 	lw	v1,28(v1)
		softnet_data[cpu].output_queue = dev;
		cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
    5870:	00002021 	move	a0,zero
    5874:	aec30038 	sw	v1,56(s6)
    5878:	3c020000 	lui	v0,0x0
    587c:	24420000 	addiu	v0,v0,0
    5880:	3c010000 	lui	at,0x0
    5884:	ac36001c 	sw	s6,28(at)
    5888:	0040f809 	jalr	v0
    588c:	24050001 	li	a1,1
		local_irq_restore(flags);
    5890:	40016000 	mfc0	at,$12
    5894:	32100001 	andi	s0,s0,0x1
    5898:	34210001 	ori	at,at,0x1
    589c:	38210001 	xori	at,at,0x1
    58a0:	02018025 	or	s0,s0,at
    58a4:	40906000 	mtc0	s0,$12
	...

#ifdef IANS
        if((adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) &&
           (adapter->iANSdata->reporting_mode == IANS_STATUS_REPORTING_ON))
            if(ans_notify)
                ans_notify(netdev, IANS_IND_XMIT_QUEUE_READY);
#endif
        netif_wake_queue(netdev);
    }

    return;
}
    58b4:	8fbf002c 	lw	ra,44(sp)
    58b8:	8fb60028 	lw	s6,40(sp)
    58bc:	8fb50024 	lw	s5,36(sp)
    58c0:	8fb40020 	lw	s4,32(sp)
    58c4:	8fb3001c 	lw	s3,28(sp)
    58c8:	8fb20018 	lw	s2,24(sp)
    58cc:	8fb10014 	lw	s1,20(sp)
    58d0:	8fb00010 	lw	s0,16(sp)
    58d4:	03e00008 	jr	ra
    58d8:	27bd0030 	addiu	sp,sp,48

000058dc <e1000_clean_rx_irq>:
    58dc:	27bdffc0 	addiu	sp,sp,-64
    58e0:	afb60030 	sw	s6,48(sp)
    58e4:	afb30024 	sw	s3,36(sp)
    58e8:	afbf003c 	sw	ra,60(sp)
    58ec:	afbe0038 	sw	s8,56(sp)
    58f0:	afb70034 	sw	s7,52(sp)
    58f4:	afb5002c 	sw	s5,44(sp)
    58f8:	afb40028 	sw	s4,40(sp)
    58fc:	afb20020 	sw	s2,32(sp)
    5900:	afb1001c 	sw	s1,28(sp)
    5904:	afb00018 	sw	s0,24(sp)
    5908:	0080b021 	move	s6,a0

/**
 * e1000_clean_rx_irq - Send received data up the network stack,
 * @adapter: board private structure
 **/

static void
e1000_clean_rx_irq(struct e1000_adapter *adapter)
{
    struct net_device *netdev = adapter->netdev;
    struct pci_dev *pdev = adapter->pdev;
    struct e1000_rx_desc *rx_desc;
    int i;
    uint32_t length;
    struct sk_buff *skb;
    uint8_t last_byte;
    unsigned long flags;

    E1000_DBG("e1000_clean_rx_irq\n");

    i = adapter->rx_ring.next_to_clean;
    590c:	8ed50128 	lw	s5,296(s6)
    5910:	8ec30148 	lw	v1,328(s6)
    rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
    5914:	8ec20110 	lw	v0,272(s6)
    5918:	afa30010 	sw	v1,16(sp)
    591c:	00151900 	sll	v1,s5,0x4
    5920:	00439821 	addu	s3,v0,v1

    while(rx_desc->status & E1000_RXD_STAT_DD) {
    5924:	9267000c 	lbu	a3,12(s3)
    5928:	30e20001 	andi	v0,a3,0x1
    592c:	10400120 	beqz	v0,5db0 <e1000_clean_rx_irq+0x4d4>
    5930:	26d40120 	addiu	s4,s6,288
        pci_unmap_single(pdev, adapter->rx_ring.buffer_info[i].dma,
                         adapter->rx_ring.buffer_info[i].length,
                         PCI_DMA_FROMDEVICE);

        skb = adapter->rx_ring.buffer_info[i].skb;
    5934:	96640008 	lhu	a0,8(s3)
    5938:	8ec5012c 	lw	a1,300(s6)
    593c:	0015f040 	sll	s8,s5,0x1
    5940:	03d51021 	addu	v0,s8,s5
    5944:	0002b8c0 	sll	s7,v0,0x3


static __inline__ __const__ __u16 __fswab16(__u16 x)
{
	return __arch__swab16(x);
    5948:	00041a02 	srl	v1,a0,0x8
    594c:	00042200 	sll	a0,a0,0x8
    5950:	00832025 	or	a0,a0,v1
    5954:	02e52821 	addu	a1,s7,a1
        length = le16_to_cpu(rx_desc->length);

        if(!(rx_desc->status & E1000_RXD_STAT_EOP)) {
    5958:	30e20002 	andi	v0,a3,0x2
    595c:	8cb10000 	lw	s1,0(a1)
    5960:	1440003d 	bnez	v0,5a58 <e1000_clean_rx_irq+0x17c>
    5964:	3092ffff 	andi	s2,a0,0xffff
	return result;
}

extern __inline__ int atomic_sub_return(int i, atomic_t * v)
{
    5968:	24120001 	li	s2,1
    596c:	26220070 	addiu	v0,s1,112
	unsigned long temp, result;

	__asm__ __volatile__(
    5970:	c0440000 	ll	a0,0(v0)
    5974:	00921823 	subu	v1,a0,s2
    5978:	e0430000 	sc	v1,0(v0)
    597c:	1060fffc 	beqz	v1,5970 <e1000_clean_rx_irq+0x94>
    5980:	00921823 	subu	v1,a0,s2
 * is executing from interrupt context.
 */
static inline void dev_kfree_skb_irq(struct sk_buff *skb)
{
	if (atomic_dec_and_test(&skb->users)) {
    5984:	1460001d 	bnez	v1,59fc <e1000_clean_rx_irq+0x120>
    5988:	02602021 	move	a0,s3
		int cpu =smp_processor_id();
		unsigned long flags;

		local_irq_save(flags);
    598c:	40106000 	mfc0	s0,$12
    5990:	00000000 	nop
    5994:	36010001 	ori	at,s0,0x1
    5998:	38210001 	xori	at,at,0x1
    599c:	40816000 	mtc0	at,$12
    59a0:	00000040 	sll	zero,zero,0x1
    59a4:	00000040 	sll	zero,zero,0x1
    59a8:	00000040 	sll	zero,zero,0x1
		skb->next = softnet_data[cpu].completion_queue;
    59ac:	3c030000 	lui	v1,0x0
    59b0:	8c630020 	lw	v1,32(v1)
		softnet_data[cpu].completion_queue = skb;
		cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
    59b4:	00002021 	move	a0,zero
    59b8:	ae230000 	sw	v1,0(s1)
    59bc:	3c020000 	lui	v0,0x0
    59c0:	24420000 	addiu	v0,v0,0
    59c4:	3c010000 	lui	at,0x0
    59c8:	ac310020 	sw	s1,32(at)
    59cc:	0040f809 	jalr	v0
    59d0:	24050001 	li	a1,1
		local_irq_restore(flags);
    59d4:	40016000 	mfc0	at,$12
    59d8:	32100001 	andi	s0,s0,0x1
    59dc:	34210001 	ori	at,at,0x1
    59e0:	38210001 	xori	at,at,0x1
    59e4:	02018025 	or	s0,s0,at
    59e8:	40906000 	mtc0	s0,$12
	...

            /* All receives must fit into a single buffer */

            E1000_DBG("Receive packet consumed multiple buffers\n");

            dev_kfree_skb_irq(skb);
            memset(rx_desc, 0, 16);
    59f8:	02602021 	move	a0,s3
    59fc:	00002821 	move	a1,zero
    5a00:	3c020000 	lui	v0,0x0
    5a04:	24420000 	addiu	v0,v0,0
    5a08:	0040f809 	jalr	v0
    5a0c:	24060010 	li	a2,16
	...
            mb();
            adapter->rx_ring.buffer_info[i].skb = NULL;
    5a30:	8ec2012c 	lw	v0,300(s6)
    5a34:	02e21021 	addu	v0,s7,v0
    5a38:	ac400000 	sw	zero,0(v0)
extern __inline__ void atomic_add(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    5a3c:	c2830000 	ll	v1,0(s4)
    5a40:	00721821 	addu	v1,v1,s2
    5a44:	e2830000 	sc	v1,0(s4)
    5a48:	1060fffc 	beqz	v1,5a3c <e1000_clean_rx_irq+0x160>
    5a4c:	00000000 	nop

            atomic_inc(&adapter->rx_ring.unused);

            i = (i + 1) % adapter->rx_ring.count;

            rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
            continue;
    5a50:	0800175b 	j	5d6c <e1000_clean_rx_irq+0x490>
    5a54:	8ec6011c 	lw	a2,284(s6)
        }

        if(rx_desc->errors & E1000_RXD_ERR_FRAME_ERR_MASK) {
    5a58:	9262000d 	lbu	v0,13(s3)
    5a5c:	30440097 	andi	a0,v0,0x97
    5a60:	5080007b 	beqzl	a0,5c50 <e1000_clean_rx_irq+0x374>
    5a64:	8e220060 	lw	v0,96(s1)

            last_byte = *(skb->data + length - 1);
    5a68:	8e220080 	lw	v0,128(s1)

            if(TBI_ACCEPT
    5a6c:	8ec30060 	lw	v1,96(s6)
    5a70:	00521021 	addu	v0,v0,s2
    5a74:	10600037 	beqz	v1,5b54 <e1000_clean_rx_irq+0x278>
    5a78:	9042ffff 	lbu	v0,-1(v0)
    5a7c:	38830001 	xori	v1,a0,0x1
    5a80:	3842000f 	xori	v0,v0,0xf
    5a84:	2c630001 	sltiu	v1,v1,1
    5a88:	2c420001 	sltiu	v0,v0,1
    5a8c:	00621824 	and	v1,v1,v0
    5a90:	50600031 	beqzl	v1,5b58 <e1000_clean_rx_irq+0x27c>
    5a94:	24120001 	li	s2,1
    5a98:	9662000e 	lhu	v0,14(s3)
    5a9c:	1440000b 	bnez	v0,5acc <e1000_clean_rx_irq+0x1f0>
    5aa0:	8ec2003c 	lw	v0,60(s6)
    5aa4:	2e430041 	sltiu	v1,s2,65
    5aa8:	38630001 	xori	v1,v1,0x1
    5aac:	24420001 	addiu	v0,v0,1
    5ab0:	0052102b 	sltu	v0,v0,s2
    5ab4:	38420001 	xori	v0,v0,0x1
    5ab8:	00431024 	and	v0,v0,v1
    5abc:	1440000b 	bnez	v0,5aec <e1000_clean_rx_irq+0x210>
    5ac0:	00000000 	nop
    5ac4:	080016d6 	j	5b58 <e1000_clean_rx_irq+0x27c>
    5ac8:	24120001 	li	s2,1
    5acc:	2e43003d 	sltiu	v1,s2,61
    5ad0:	38630001 	xori	v1,v1,0x1
    5ad4:	2442fffd 	addiu	v0,v0,-3
    5ad8:	0052102b 	sltu	v0,v0,s2
    5adc:	38420001 	xori	v0,v0,0x1
    5ae0:	00431024 	and	v0,v0,v1
    5ae4:	5040001c 	beqzl	v0,5b58 <e1000_clean_rx_irq+0x27c>
    5ae8:	24120001 	li	s2,1
               (&adapter->shared, rx_desc->special, rx_desc->errors, length,
                last_byte)) {
                spin_lock_irqsave(&adapter->stats_lock, flags);
    5aec:	40106000 	mfc0	s0,$12
    5af0:	00000000 	nop
    5af4:	36010001 	ori	at,s0,0x1
    5af8:	38210001 	xori	at,at,0x1
    5afc:	40816000 	mtc0	at,$12
    5b00:	00000040 	sll	zero,zero,0x1
    5b04:	00000040 	sll	zero,zero,0x1
    5b08:	00000040 	sll	zero,zero,0x1
                e1000_tbi_adjust_stats(&adapter->shared, &adapter->stats,
    5b0c:	26c40008 	addiu	a0,s6,8
    5b10:	8e270080 	lw	a3,128(s1)
    5b14:	26c501d8 	addiu	a1,s6,472
    5b18:	3c020000 	lui	v0,0x0
    5b1c:	24420000 	addiu	v0,v0,0
    5b20:	0040f809 	jalr	v0
    5b24:	02403021 	move	a2,s2
                                       length, skb->data);
                spin_unlock_irqrestore(&adapter->stats_lock, flags);
    5b28:	40016000 	mfc0	at,$12
    5b2c:	32100001 	andi	s0,s0,0x1
    5b30:	34210001 	ori	at,at,0x1
    5b34:	38210001 	xori	at,at,0x1
    5b38:	02018025 	or	s0,s0,at
    5b3c:	40906000 	mtc0	s0,$12
	...
                length--;
            } else {
    5b4c:	08001713 	j	5c4c <e1000_clean_rx_irq+0x370>
    5b50:	2652ffff 	addiu	s2,s2,-1
	return result;
}

extern __inline__ int atomic_sub_return(int i, atomic_t * v)
{
    5b54:	24120001 	li	s2,1
    5b58:	26220070 	addiu	v0,s1,112
	unsigned long temp, result;

	__asm__ __volatile__(
    5b5c:	c0440000 	ll	a0,0(v0)
    5b60:	00921823 	subu	v1,a0,s2
    5b64:	e0430000 	sc	v1,0(v0)
    5b68:	1060fffc 	beqz	v1,5b5c <e1000_clean_rx_irq+0x280>
    5b6c:	00921823 	subu	v1,a0,s2
 * is executing from interrupt context.
 */
static inline void dev_kfree_skb_irq(struct sk_buff *skb)
{
	if (atomic_dec_and_test(&skb->users)) {
    5b70:	1460001d 	bnez	v1,5be8 <e1000_clean_rx_irq+0x30c>
    5b74:	02602021 	move	a0,s3
		int cpu =smp_processor_id();
		unsigned long flags;

		local_irq_save(flags);
    5b78:	40106000 	mfc0	s0,$12
    5b7c:	00000000 	nop
    5b80:	36010001 	ori	at,s0,0x1
    5b84:	38210001 	xori	at,at,0x1
    5b88:	40816000 	mtc0	at,$12
    5b8c:	00000040 	sll	zero,zero,0x1
    5b90:	00000040 	sll	zero,zero,0x1
    5b94:	00000040 	sll	zero,zero,0x1
		skb->next = softnet_data[cpu].completion_queue;
    5b98:	3c030000 	lui	v1,0x0
    5b9c:	8c630020 	lw	v1,32(v1)
		softnet_data[cpu].completion_queue = skb;
		cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
    5ba0:	00002021 	move	a0,zero
    5ba4:	ae230000 	sw	v1,0(s1)
    5ba8:	3c020000 	lui	v0,0x0
    5bac:	24420000 	addiu	v0,v0,0
    5bb0:	3c010000 	lui	at,0x0
    5bb4:	ac310020 	sw	s1,32(at)
    5bb8:	0040f809 	jalr	v0
    5bbc:	24050001 	li	a1,1
		local_irq_restore(flags);
    5bc0:	40016000 	mfc0	at,$12
    5bc4:	32100001 	andi	s0,s0,0x1
    5bc8:	34210001 	ori	at,at,0x1
    5bcc:	38210001 	xori	at,at,0x1
    5bd0:	02018025 	or	s0,s0,at
    5bd4:	40906000 	mtc0	s0,$12
	...

                E1000_DBG("Receive Errors Reported by Hardware\n");

                dev_kfree_skb_irq(skb);
                memset(rx_desc, 0, 16);
    5be4:	02602021 	move	a0,s3
    5be8:	00002821 	move	a1,zero
    5bec:	3c020000 	lui	v0,0x0
    5bf0:	24420000 	addiu	v0,v0,0
    5bf4:	0040f809 	jalr	v0
    5bf8:	24060010 	li	a2,16
	...
                mb();
                adapter->rx_ring.buffer_info[i].skb = NULL;
    5c1c:	8ec3012c 	lw	v1,300(s6)
    5c20:	03d51021 	addu	v0,s8,s5
    5c24:	000210c0 	sll	v0,v0,0x3
    5c28:	00431021 	addu	v0,v0,v1
    5c2c:	ac400000 	sw	zero,0(v0)
extern __inline__ void atomic_add(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    5c30:	c2830000 	ll	v1,0(s4)
    5c34:	00721821 	addu	v1,v1,s2
    5c38:	e2830000 	sc	v1,0(s4)
    5c3c:	1060fffc 	beqz	v1,5c30 <e1000_clean_rx_irq+0x354>
    5c40:	00000000 	nop

                atomic_inc(&adapter->rx_ring.unused);
                i = (i + 1) % adapter->rx_ring.count;

                rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
                continue;
    5c44:	0800175b 	j	5d6c <e1000_clean_rx_irq+0x490>
    5c48:	8ec6011c 	lw	a2,284(s6)
}

static inline int skb_is_nonlinear(const struct sk_buff *skb)
{
	return skb->data_len;
    5c4c:	8e220060 	lw	v0,96(s1)
}

static inline int skb_headlen(const struct sk_buff *skb)
{
	return skb->len - skb->data_len;
}

#define SKB_PAGE_ASSERT(skb) do { if (skb_shinfo(skb)->nr_frags) BUG(); } while (0)
#define SKB_FRAG_ASSERT(skb) do { if (skb_shinfo(skb)->frag_list) BUG(); } while (0)
#define SKB_LINEAR_ASSERT(skb) do { if (skb_is_nonlinear(skb)) BUG(); } while (0)

/*
 *	Add data to an sk_buff
 */
 
static inline unsigned char *__skb_put(struct sk_buff *skb, unsigned int len)
{
	unsigned char *tmp=skb->tail;
	SKB_LINEAR_ASSERT(skb);
	skb->tail+=len;
	skb->len+=len;
	return tmp;
}

/**
 *	skb_put - add data to a buffer
 *	@skb: buffer to use 
 *	@len: amount of data to add
 *
 *	This function extends the used data area of the buffer. If this would
 *	exceed the total buffer size the kernel will panic. A pointer to the
 *	first byte of the extra data is returned.
 */
 
static inline unsigned char *skb_put(struct sk_buff *skb, unsigned int len)
{
	unsigned char *tmp=skb->tail;
	SKB_LINEAR_ASSERT(skb);
    5c50:	1040000a 	beqz	v0,5c7c <e1000_clean_rx_irq+0x3a0>
    5c54:	2650fffc 	addiu	s0,s2,-4
    5c58:	3c040000 	lui	a0,0x0
    5c5c:	24840000 	addiu	a0,a0,0
    5c60:	3c050000 	lui	a1,0x0
    5c64:	24a500b4 	addiu	a1,a1,180
    5c68:	3c020000 	lui	v0,0x0
    5c6c:	24420000 	addiu	v0,v0,0
    5c70:	0040f809 	jalr	v0
    5c74:	24060315 	li	a2,789
    5c78:	ac000000 	sw	zero,0(zero)
	skb->tail+=len;
    5c7c:	8e220084 	lw	v0,132(s1)
	skb->len+=len;
    5c80:	8e23005c 	lw	v1,92(s1)
	if(skb->tail>skb->end) {
    5c84:	8e240088 	lw	a0,136(s1)
    5c88:	00501021 	addu	v0,v0,s0
    5c8c:	00701821 	addu	v1,v1,s0
    5c90:	0082202b 	sltu	a0,a0,v0
    5c94:	ae23005c 	sw	v1,92(s1)
    5c98:	10800008 	beqz	a0,5cbc <e1000_clean_rx_irq+0x3e0>
    5c9c:	ae220084 	sw	v0,132(s1)
		skb_over_panic(skb, len, current_text_addr());
    5ca0:	02002821 	move	a1,s0
    5ca4:	3c060000 	lui	a2,0x0
    5ca8:	24c65ca0 	addiu	a2,a2,23712
    5cac:	3c020000 	lui	v0,0x0
    5cb0:	24420000 	addiu	v0,v0,0
    5cb4:	0040f809 	jalr	v0
    5cb8:	02202021 	move	a0,s1
            }
        }

        /* Good Receive */
        skb_put(skb, length - CRC_LENGTH);

        /* Adjust socket buffer accounting to only cover the ethernet frame
         * Not what the stack intends, but there exist TCP problems that
         * break NFS for network interfaces that need 2k receive buffers
         */
        skb->truesize = skb->len;
    5cbc:	8e22005c 	lw	v0,92(s1)

        /* Receive Checksum Offload */
        e1000_rx_checksum(adapter, rx_desc, skb);
    5cc0:	02203021 	move	a2,s1
    5cc4:	02c02021 	move	a0,s6
    5cc8:	ae220078 	sw	v0,120(s1)
    5ccc:	3c020000 	lui	v0,0x0
    5cd0:	244274ec 	addiu	v0,v0,29932
    5cd4:	0040f809 	jalr	v0
    5cd8:	02602821 	move	a1,s3

#ifdef IANS
        if(adapter->iANSdata->iANS_status == IANS_COMMUNICATION_UP) {
            if(bd_ans_os_Receive(adapter, rx_desc, skb) == BD_ANS_FAILURE)
                dev_kfree_skb_irq(skb);
            else
                netif_rx(skb);
        } else {
            skb->protocol = eth_type_trans(skb, netdev);
            netif_rx(skb);
        }
#else
        skb->protocol = eth_type_trans(skb, netdev);
    5cdc:	8fa50010 	lw	a1,16(sp)
    5ce0:	3c020000 	lui	v0,0x0
    5ce4:	24420000 	addiu	v0,v0,0
    5ce8:	0040f809 	jalr	v0
    5cec:	02202021 	move	a0,s1
    5cf0:	a6220074 	sh	v0,116(s1)
        netif_rx(skb);
    5cf4:	3c020000 	lui	v0,0x0
    5cf8:	24420000 	addiu	v0,v0,0
    5cfc:	0040f809 	jalr	v0
    5d00:	02202021 	move	a0,s1
#endif
        memset(rx_desc, 0, 16);
    5d04:	02602021 	move	a0,s3
    5d08:	00002821 	move	a1,zero
    5d0c:	3c020000 	lui	v0,0x0
    5d10:	24420000 	addiu	v0,v0,0
    5d14:	0040f809 	jalr	v0
    5d18:	24060010 	li	a2,16
	...
        mb();
        adapter->rx_ring.buffer_info[i].skb = NULL;
    5d3c:	8ec2012c 	lw	v0,300(s6)
    5d40:	03d51821 	addu	v1,s8,s5
    5d44:	000318c0 	sll	v1,v1,0x3
    5d48:	00621821 	addu	v1,v1,v0
    5d4c:	ac600000 	sw	zero,0(v1)
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    5d50:	24020001 	li	v0,1
	unsigned long temp;

	__asm__ __volatile__(
    5d54:	c2830000 	ll	v1,0(s4)
    5d58:	00621821 	addu	v1,v1,v0
    5d5c:	e2830000 	sc	v1,0(s4)
    5d60:	1060fffc 	beqz	v1,5d54 <e1000_clean_rx_irq+0x478>
    5d64:	00000000 	nop

        atomic_inc(&adapter->rx_ring.unused);

        i = (i + 1) % adapter->rx_ring.count;
    5d68:	8ec6011c 	lw	a2,284(s6)
    5d6c:	26a20001 	addiu	v0,s5,1
    5d70:	0046001b 	divu	zero,v0,a2
    5d74:	50c00001 	beqzl	a2,5d7c <e1000_clean_rx_irq+0x4a0>
    5d78:	0007000d 	break	0x7

        rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
    5d7c:	8ec40110 	lw	a0,272(s6)
    5d80:	00001810 	mfhi	v1
    5d84:	0060a821 	move	s5,v1
    5d88:	00000000 	nop
    5d8c:	00151100 	sll	v0,s5,0x4
    5d90:	00829821 	addu	s3,a0,v0
    }
    5d94:	9262000c 	lbu	v0,12(s3)
    5d98:	00403821 	move	a3,v0
    5d9c:	30e30001 	andi	v1,a3,0x1
    5da0:	5460fee5 	bnezl	v1,5938 <e1000_clean_rx_irq+0x5c>
    5da4:	96640008 	lhu	a0,8(s3)
    5da8:	0800176d 	j	5db4 <e1000_clean_rx_irq+0x4d8>
    5dac:	00000000 	nop
    5db0:	8ec6011c 	lw	a2,284(s6)

    /* if the Rx ring is less than 3/4 full, allocate more sk_buffs */

    if(atomic_read(&adapter->rx_ring.unused) > (adapter->rx_ring.count / 4)) {
    5db4:	8ec30120 	lw	v1,288(s6)
    5db8:	00061082 	srl	v0,a2,0x2
    5dbc:	0043102b 	sltu	v0,v0,v1
    5dc0:	5040000f 	beqzl	v0,5e00 <e1000_clean_rx_irq+0x524>
    5dc4:	aed50128 	sw	s5,296(s6)

extern void FASTCALL(__tasklet_schedule(struct tasklet_struct *t));

static inline void tasklet_schedule(struct tasklet_struct *t)
{
    5dc8:	26c500d0 	addiu	a1,s6,208
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    5dcc:	24020001 	li	v0,1
    5dd0:	c2c400d4 	ll	a0,212(s6)
    5dd4:	00821825 	or	v1,a0,v0
    5dd8:	e2c300d4 	sc	v1,212(s6)
    5ddc:	1060fffc 	beqz	v1,5dd0 <e1000_clean_rx_irq+0x4f4>
    5de0:	00821824 	and	v1,a0,v0
extern void FASTCALL(__tasklet_schedule(struct tasklet_struct *t));

static inline void tasklet_schedule(struct tasklet_struct *t)
{
	if (!test_and_set_bit(TASKLET_STATE_SCHED, &t->state))
    5de4:	54600006 	bnezl	v1,5e00 <e1000_clean_rx_irq+0x524>
    5de8:	aed50128 	sw	s5,296(s6)
		__tasklet_schedule(t);
    5dec:	3c020000 	lui	v0,0x0
    5df0:	24420000 	addiu	v0,v0,0
    5df4:	0040f809 	jalr	v0
    5df8:	00a02021 	move	a0,a1
        tasklet_schedule(&adapter->rx_fill_tasklet);
    }
    adapter->rx_ring.next_to_clean = i;
    5dfc:	aed50128 	sw	s5,296(s6)

    return;
}
    5e00:	8fbf003c 	lw	ra,60(sp)
    5e04:	8fbe0038 	lw	s8,56(sp)
    5e08:	8fb70034 	lw	s7,52(sp)
    5e0c:	8fb60030 	lw	s6,48(sp)
    5e10:	8fb5002c 	lw	s5,44(sp)
    5e14:	8fb40028 	lw	s4,40(sp)
    5e18:	8fb30024 	lw	s3,36(sp)
    5e1c:	8fb20020 	lw	s2,32(sp)
    5e20:	8fb1001c 	lw	s1,28(sp)
    5e24:	8fb00018 	lw	s0,24(sp)
    5e28:	03e00008 	jr	ra
    5e2c:	27bd0040 	addiu	sp,sp,64

00005e30 <e1000_alloc_rx_buffers>:
    5e30:	27bdffb8 	addiu	sp,sp,-72
    5e34:	afb20028 	sw	s2,40(sp)
    5e38:	00809021 	move	s2,a0
    5e3c:	afb40030 	sw	s4,48(sp)
    5e40:	afbf0044 	sw	ra,68(sp)
    5e44:	afbe0040 	sw	s8,64(sp)
    5e48:	afb7003c 	sw	s7,60(sp)
    5e4c:	afb60038 	sw	s6,56(sp)
    5e50:	afb50034 	sw	s5,52(sp)
    5e54:	afb3002c 	sw	s3,44(sp)
    5e58:	afb10024 	sw	s1,36(sp)
    5e5c:	afb00020 	sw	s0,32(sp)
 * @nr: bit number to test
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
    5e60:	2654008c 	addiu	s4,s2,140
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    5e64:	8e820000 	lw	v0,0(s4)

/**
 * e1000_alloc_rx_buffers - Replace used receive buffers
 * @data: address of board private structure
 **/

static void
e1000_alloc_rx_buffers(unsigned long data)
{
    struct e1000_adapter *adapter = (struct e1000_adapter *) data;
    struct net_device *netdev = adapter->netdev;
    5e68:	8e430148 	lw	v1,328(s2)
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    5e6c:	30420001 	andi	v0,v0,0x1
    struct pci_dev *pdev = adapter->pdev;
    struct e1000_rx_desc *rx_desc;
    struct sk_buff *skb;
    int i;
    int reserve_len;

    E1000_DBG("e1000_alloc_rx_buffers\n");

    /* kernel 2.4.7 seems to be broken with respect to tasklet locking */
    if(!spin_trylock(&adapter->rx_fill_lock))
        return;

    if(!test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    5e70:	104000a9 	beqz	v0,6118 <e1000_alloc_rx_buffers+0x2e8>
    5e74:	afa30010 	sw	v1,16(sp)
        spin_unlock(&adapter->rx_fill_lock);
        return;
    }

#ifdef IANS
    reserve_len = E1000_ROUNDUP2(BD_ANS_INFO_SIZE, 16) + 2;
#else
    reserve_len = 2;
#endif

    i = adapter->rx_ring.next_to_use;
    5e78:	8e530124 	lw	s3,292(s2)

    while(adapter->rx_ring.buffer_info[i].skb == NULL) {
    5e7c:	8e42012c 	lw	v0,300(s2)
    5e80:	00131840 	sll	v1,s3,0x1
    5e84:	00731821 	addu	v1,v1,s3
    5e88:	000318c0 	sll	v1,v1,0x3
    5e8c:	00621821 	addu	v1,v1,v0
    5e90:	8c640000 	lw	a0,0(v1)
    5e94:	548000a0 	bnezl	a0,6118 <e1000_alloc_rx_buffers+0x2e8>
    5e98:	ae530124 	sw	s3,292(s2)
    5e9c:	3c0d00ff 	lui	t5,0xff
    5ea0:	3c1eff00 	lui	s8,0xff00
    5ea4:	24170001 	li	s7,1
    5ea8:	26550120 	addiu	s5,s2,288
        rx_desc = E1000_RX_DESC(adapter->rx_ring, i);

        skb = alloc_skb(adapter->rx_buffer_len + reserve_len, GFP_ATOMIC);
    5eac:	8e4400b8 	lw	a0,184(s2)
    5eb0:	8e460110 	lw	a2,272(s2)
    5eb4:	00131900 	sll	v1,s3,0x4
    5eb8:	24050020 	li	a1,32
    5ebc:	afad0018 	sw	t5,24(sp)
    5ec0:	24840002 	addiu	a0,a0,2
    5ec4:	3c020000 	lui	v0,0x0
    5ec8:	24420000 	addiu	v0,v0,0
    5ecc:	0040f809 	jalr	v0
    5ed0:	00c3b021 	addu	s6,a2,v1
    5ed4:	00402821 	move	a1,v0

        if(skb == NULL) {
    5ed8:	14a00008 	bnez	a1,5efc <e1000_alloc_rx_buffers+0xcc>
    5edc:	8fad0018 	lw	t5,24(sp)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    5ee0:	c2820000 	ll	v0,0(s4)
    5ee4:	34420002 	ori	v0,v0,0x2
    5ee8:	e2820000 	sc	v0,0(s4)
    5eec:	1040fffc 	beqz	v0,5ee0 <e1000_alloc_rx_buffers+0xb0>
    5ef0:	00000000 	nop
            /* Alloc Failed; If we could not allocate a
             *  skb during this schedule. Wait for a while before
             *  tasklet to allocate skb is called again.
             */
            set_bit(E1000_RX_REFILL, &adapter->flags);
            break;
    5ef4:	08001846 	j	6118 <e1000_alloc_rx_buffers+0x2e8>
    5ef8:	ae530124 	sw	s3,292(s2)
 */

static inline void skb_reserve(struct sk_buff *skb, unsigned int len)
{
	skb->data+=len;
    5efc:	8ca20080 	lw	v0,128(a1)
	skb->tail+=len;
    5f00:	8ca30084 	lw	v1,132(a1)
        }

        /* Make buffer alignment 2 beyond a 16 byte boundary
         * this will result in a 16 byte aligned IP header after
         * the 14 byte MAC header is removed
         */
        skb_reserve(skb, reserve_len);

        skb->dev = netdev;
    5f04:	8fa40010 	lw	a0,16(sp)
 */

static inline void skb_reserve(struct sk_buff *skb, unsigned int len)
{
	skb->data+=len;
    5f08:	24420002 	addiu	v0,v0,2
	skb->tail+=len;
    5f0c:	24630002 	addiu	v1,v1,2
    5f10:	aca20080 	sw	v0,128(a1)
    5f14:	aca40018 	sw	a0,24(a1)

static inline void skb_reserve(struct sk_buff *skb, unsigned int len)
{
	skb->data+=len;
	skb->tail+=len;
    5f18:	aca30084 	sw	v1,132(a1)

        adapter->rx_ring.buffer_info[i].skb = skb;
    5f1c:	8e44012c 	lw	a0,300(s2)
    5f20:	00138040 	sll	s0,s3,0x1
    5f24:	02138021 	addu	s0,s0,s3
    5f28:	001080c0 	sll	s0,s0,0x3
    5f2c:	02042021 	addu	a0,s0,a0
    5f30:	ac850000 	sw	a1,0(a0)
        adapter->rx_ring.buffer_info[i].length = adapter->rx_buffer_len;
    5f34:	8e42012c 	lw	v0,300(s2)
    5f38:	8e4300b8 	lw	v1,184(s2)
    5f3c:	02021021 	addu	v0,s0,v0
    5f40:	ac430010 	sw	v1,16(v0)
 * until either pci_unmap_single or pci_dma_sync_single is performed.
 */
static inline dma_addr_t pci_map_single(struct pci_dev *hwdev, void *ptr,
					size_t size, int direction)
{
    5f44:	8cb10080 	lw	s1,128(a1)
    5f48:	8e4500b8 	lw	a1,184(s2)
	if (direction == PCI_DMA_NONE)
		BUG();

#ifdef CONFIG_NONCOHERENT_IO
	dma_cache_wback_inv((unsigned long)ptr, size);
    5f4c:	3c020000 	lui	v0,0x0
    5f50:	8c420000 	lw	v0,0(v0)
    5f54:	02202021 	move	a0,s1
    5f58:	0040f809 	jalr	v0
    5f5c:	afad0018 	sw	t5,24(sp)
        adapter->rx_ring.buffer_info[i].dma =
            pci_map_single(pdev, skb->data, adapter->rx_buffer_len,
                           PCI_DMA_FROMDEVICE);
    5f60:	8e45012c 	lw	a1,300(s2)
 * IO bus memory addresses are also 1:1 with the physical address
 */
static inline unsigned long virt_to_bus(volatile void * address)
{
	return PHYSADDR(address);
    5f64:	3c041fff 	lui	a0,0x1fff
    5f68:	3484ffff 	ori	a0,a0,0xffff
    5f6c:	02241824 	and	v1,s1,a0
    5f70:	02052821 	addu	a1,s0,a1
    5f74:	00001021 	move	v0,zero
    5f78:	aca20008 	sw	v0,8(a1)
    5f7c:	aca3000c 	sw	v1,12(a1)
    5f80:	8e48012c 	lw	t0,300(s2)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    5f84:	8fad0018 	lw	t5,24(sp)
}
static __inline__ __u32 __swab32p(__u32 *x)
{
	return __arch__swab32p(x);
}
static __inline__ void __swab32s(__u32 *addr)
{
	__arch__swab32s(addr);
}

#ifdef __BYTEORDER_HAS_U64__
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    5f88:	00002021 	move	a0,zero
    5f8c:	02088021 	addu	s0,s0,t0
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
    5f90:	8e03000c 	lw	v1,12(s0)
    5f94:	8e080008 	lw	t0,8(s0)
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    5f98:	00003021 	move	a2,zero
    5f9c:	3062ff00 	andi	v0,v1,0xff00
    5fa0:	00021200 	sll	v0,v0,0x8
    5fa4:	00036600 	sll	t4,v1,0x18
    5fa8:	006d5024 	and	t2,v1,t5
    5fac:	310bff00 	andi	t3,t0,0xff00
    5fb0:	01826025 	or	t4,t4,v0
    5fb4:	00084e00 	sll	t1,t0,0x18
    5fb8:	010d1024 	and	v0,t0,t5
    5fbc:	000a5202 	srl	t2,t2,0x8
    5fc0:	007e1824 	and	v1,v1,s8
    5fc4:	000b5a00 	sll	t3,t3,0x8
    5fc8:	00021202 	srl	v0,v0,0x8
    5fcc:	018a6025 	or	t4,t4,t2
    5fd0:	012b4825 	or	t1,t1,t3
    5fd4:	00031e02 	srl	v1,v1,0x18
    5fd8:	011e4024 	and	t0,t0,s8
    5fdc:	01224825 	or	t1,t1,v0
    5fe0:	01832825 	or	a1,t4,v1
    5fe4:	00084602 	srl	t0,t0,0x18
    5fe8:	01283825 	or	a3,t1,t0
    5fec:	00052000 	sll	a0,a1,0x0
    5ff0:	00002821 	move	a1,zero
    5ff4:	00862025 	or	a0,a0,a2
    5ff8:	00a72825 	or	a1,a1,a3

        rx_desc->buffer_addr = cpu_to_le64(adapter->rx_ring.buffer_info[i].dma);
    5ffc:	aec40000 	sw	a0,0(s6)
    6000:	aec50004 	sw	a1,4(s6)
    6004:	8e42000c 	lw	v0,12(s2)
    6008:	2c420002 	sltiu	v0,v0,2
    600c:	1440000e 	bnez	v0,6048 <e1000_alloc_rx_buffers+0x218>
    6010:	3262ff00 	andi	v0,s3,0xff00
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6014:	00021200 	sll	v0,v0,0x8
    6018:	00131e00 	sll	v1,s3,0x18
    601c:	026d2024 	and	a0,s3,t5
    6020:	00621825 	or	v1,v1,v0
    6024:	00042202 	srl	a0,a0,0x8
    6028:	8e450008 	lw	a1,8(s2)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    602c:	027e1024 	and	v0,s3,s8
    6030:	00641825 	or	v1,v1,a0
    6034:	00021602 	srl	v0,v0,0x18
    6038:	00621825 	or	v1,v1,v0

        /* move tail */
        E1000_WRITE_REG(&adapter->shared, RDT, i);
    603c:	aca32818 	sw	v1,10264(a1)
    6040:	0800181d 	j	6074 <e1000_alloc_rx_buffers+0x244>
    6044:	00000000 	nop
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6048:	00021200 	sll	v0,v0,0x8
    604c:	00131e00 	sll	v1,s3,0x18
    6050:	026d2024 	and	a0,s3,t5
    6054:	00621825 	or	v1,v1,v0
    6058:	00042202 	srl	a0,a0,0x8
    605c:	8e450008 	lw	a1,8(s2)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6060:	027e1024 	and	v0,s3,s8
    6064:	00641825 	or	v1,v1,a0
    6068:	00021602 	srl	v0,v0,0x18
    606c:	00621825 	or	v1,v1,v0
    6070:	aca30128 	sw	v1,296(a1)
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    6074:	c2a20000 	ll	v0,0(s5)
    6078:	00571023 	subu	v0,v0,s7
    607c:	e2a20000 	sc	v0,0(s5)
    6080:	1040fffc 	beqz	v0,6074 <e1000_alloc_rx_buffers+0x244>
    6084:	00000000 	nop

        atomic_dec(&adapter->rx_ring.unused);

        i = (i + 1) % adapter->rx_ring.count;
    6088:	8e43011c 	lw	v1,284(s2)
    608c:	26640001 	addiu	a0,s3,1
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    6090:	24020002 	li	v0,2
    6094:	0083001b 	divu	zero,a0,v1
    6098:	50600001 	beqzl	v1,60a0 <e1000_alloc_rx_buffers+0x270>
    609c:	0007000d 	break	0x7
    60a0:	00008010 	mfhi	s0
    60a4:	02009821 	move	s3,s0
    60a8:	00000000 	nop
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    60ac:	c2840000 	ll	a0,0(s4)
    60b0:	00821825 	or	v1,a0,v0
    60b4:	00621826 	xor	v1,v1,v0
    60b8:	e2830000 	sc	v1,0(s4)
    60bc:	1060fffb 	beqz	v1,60ac <e1000_alloc_rx_buffers+0x27c>
    60c0:	00821824 	and	v1,a0,v0

        if(test_and_clear_bit(E1000_RX_REFILL, &adapter->flags)) {
    60c4:	5060000c 	beqzl	v1,60f8 <e1000_alloc_rx_buffers+0x2c8>
    60c8:	8e42012c 	lw	v0,300(s2)
            /* Trigger Soft Interrupt */
            E1000_WRITE_REG(&adapter->shared, ICS, E1000_ICS_RXT0);
    60cc:	8e42000c 	lw	v0,12(s2)
    60d0:	2c420002 	sltiu	v0,v0,2
    60d4:	14400005 	bnez	v0,60ec <e1000_alloc_rx_buffers+0x2bc>
    60d8:	8e420008 	lw	v0,8(s2)
    60dc:	3c038000 	lui	v1,0x8000
    60e0:	ac4300c8 	sw	v1,200(v0)
    60e4:	0800183e 	j	60f8 <e1000_alloc_rx_buffers+0x2c8>
    60e8:	8e42012c 	lw	v0,300(s2)
    60ec:	3c048000 	lui	a0,0x8000
    60f0:	ac4400c8 	sw	a0,200(v0)
        }
    }
    60f4:	8e42012c 	lw	v0,300(s2)
    60f8:	00101840 	sll	v1,s0,0x1
    60fc:	00701821 	addu	v1,v1,s0
    6100:	000318c0 	sll	v1,v1,0x3
    6104:	00621821 	addu	v1,v1,v0
    6108:	8c640000 	lw	a0,0(v1)
    610c:	5080ff68 	beqzl	a0,5eb0 <e1000_alloc_rx_buffers+0x80>
    6110:	8e4400b8 	lw	a0,184(s2)

    adapter->rx_ring.next_to_use = i;
    6114:	ae530124 	sw	s3,292(s2)

    spin_unlock(&adapter->rx_fill_lock);
    return;
}
    6118:	8fbf0044 	lw	ra,68(sp)
    611c:	8fbe0040 	lw	s8,64(sp)
    6120:	8fb7003c 	lw	s7,60(sp)
    6124:	8fb60038 	lw	s6,56(sp)
    6128:	8fb50034 	lw	s5,52(sp)
    612c:	8fb40030 	lw	s4,48(sp)
    6130:	8fb3002c 	lw	s3,44(sp)
    6134:	8fb20028 	lw	s2,40(sp)
    6138:	8fb10024 	lw	s1,36(sp)
    613c:	8fb00020 	lw	s0,32(sp)
    6140:	03e00008 	jr	ra
    6144:	27bd0048 	addiu	sp,sp,72

00006148 <e1000_ioctl>:
    6148:	27bdffe8 	addiu	sp,sp,-24

/**
 * e1000_ioctl - 
 * @netdev:
 * @ifreq:
 * @cmd:
 **/

int
e1000_ioctl(struct net_device *netdev,
            struct ifreq *ifr,
            int cmd)
{
#ifdef IANS
    IANS_BD_PARAM_HEADER *header;
#endif

    E1000_DBG("e1000_do_ioctl\n");

    switch (cmd) {
    614c:	34028946 	li	v0,0x8946
    6150:	afbf0010 	sw	ra,16(sp)

#ifdef IANS
    case IANS_BASE_SIOC:
        header = (IANS_BD_PARAM_HEADER *) ifr->ifr_data;
        if((header->Opcode != IANS_OP_EXT_GET_STATUS) &&
           (!capable(CAP_NET_ADMIN)))
            return -EPERM;
        return bd_ans_os_Ioctl(netdev, ifr, cmd);
        break;
#endif

#ifdef IDIAG
    case IDIAG_PRO_BASE_SIOC:
        if(!capable(CAP_NET_ADMIN))
            return -EPERM;

#ifdef DIAG_DEBUG
        printk("Entering diagnostics\n");
#endif
        e1000_diag_ioctl(netdev, ifr);
        break;
#endif /* IDIAG */

#ifdef SIOCETHTOOL
    case SIOCETHTOOL:

        return e1000_ethtool_ioctl(netdev, ifr);
    6154:	3c090000 	lui	t1,0x0
    6158:	25296dd8 	addiu	t1,t1,28120
    615c:	340389f2 	li	v1,0x89f2
    6160:	00804021 	move	t0,a0
    6164:	10c20013 	beq	a2,v0,61b4 <e1000_ioctl+0x6c>
    6168:	00a03821 	move	a3,a1
    616c:	14c30018 	bne	a2,v1,61d0 <e1000_ioctl+0x88>
    6170:	2402ff86 	li	v0,-122

static inline int capable(int cap)
{
#if 1 /* ok now */
	if (cap_raised(current->cap_effective, cap))
    6174:	8f8301d4 	lw	v1,468(gp)
    6178:	30631000 	andi	v1,v1,0x1000
#else
	if (cap_is_fs_cap(cap) ? current->fsuid == 0 : current->euid == 0)
#endif
	{
		current->flags |= PF_SUPERPRIV;
		return 1;
    617c:	24060001 	li	a2,1
    6180:	3c070000 	lui	a3,0x0
    6184:	24e70000 	addiu	a3,a3,0

static inline int capable(int cap)
{
#if 1 /* ok now */
	if (cap_raised(current->cap_effective, cap))
    6188:	10600005 	beqz	v1,61a0 <e1000_ioctl+0x58>
    618c:	2402ffff 	li	v0,-1
#else
	if (cap_is_fs_cap(cap) ? current->fsuid == 0 : current->euid == 0)
#endif
	{
		current->flags |= PF_SUPERPRIV;
    6190:	8f830004 	lw	v1,4(gp)
    6194:	34630100 	ori	v1,v1,0x100
		return 1;
    6198:	08001869 	j	61a4 <e1000_ioctl+0x5c>
    619c:	af830004 	sw	v1,4(gp)
	}
	return 0;
    61a0:	00003021 	move	a2,zero
    61a4:	14c00007 	bnez	a2,61c4 <e1000_ioctl+0x7c>
    61a8:	8fbf0010 	lw	ra,16(sp)
    61ac:	08001875 	j	61d4 <e1000_ioctl+0x8c>
    61b0:	00000000 	nop
    61b4:	0120f809 	jalr	t1
    61b8:	00000000 	nop
    61bc:	08001875 	j	61d4 <e1000_ioctl+0x8c>
    61c0:	8fbf0010 	lw	ra,16(sp)
    61c4:	00e0f809 	jalr	a3
    61c8:	00000000 	nop

        break;
#endif

    default:
        return -EOPNOTSUPP;
    }

    return 0;
    61cc:	00001021 	move	v0,zero
}
    61d0:	8fbf0010 	lw	ra,16(sp)
    61d4:	03e00008 	jr	ra
    61d8:	27bd0018 	addiu	sp,sp,24

000061dc <e1000_hibernate_adapter>:
    61dc:	27bdffe0 	addiu	sp,sp,-32
    61e0:	afb20018 	sw	s2,24(sp)
    61e4:	afbf001c 	sw	ra,28(sp)
    61e8:	afb10014 	sw	s1,20(sp)
    61ec:	afb00010 	sw	s0,16(sp)
    61f0:	00809021 	move	s2,a0

/**
 * e1000_rx_checksum - Receive Checksum Offload for 82543
 * @adapter: board private structure
 * @rx_desc: receive descriptor
 * @sk_buff: socket buffer with received data
 **/

static inline void
e1000_rx_checksum(struct e1000_adapter *adapter,
                  struct e1000_rx_desc *rx_desc,
                  struct sk_buff *skb)
{
    /* 82543 or newer only */
    if((adapter->shared.mac_type < e1000_82543) ||
       /* Ignore Checksum bit is set */
       (rx_desc->status & E1000_RXD_STAT_IXSM) ||
       /* TCP Checksum has not been calculated */
       (!(rx_desc->status & E1000_RXD_STAT_TCPCS))) {

        skb->ip_summed = CHECKSUM_NONE;
        return;
    }

    /* At this point we know the hardware did the TCP checksum */
    /* now look at the TCP checksum error bit */
    if(rx_desc->errors & E1000_RXD_ERR_TCPE) {
        /* let the stack verify checksum errors */
        skb->ip_summed = CHECKSUM_NONE;
        adapter->XsumRXError++;
    } else {
        /* TCP checksum is good */
        skb->ip_summed = CHECKSUM_UNNECESSARY;
        adapter->XsumRXGood++;
    }

    return;
}

void
e1000_hibernate_adapter(struct net_device *netdev)
{
    uint32_t icr;
    struct e1000_adapter *adapter = netdev->priv;
    61f4:	8e500064 	lw	s0,100(s2)
    61f8:	8e02000c 	lw	v0,12(s0)
    61fc:	2c420002 	sltiu	v0,v0,2
    6200:	8e030008 	lw	v1,8(s0)
    6204:	2402ffff 	li	v0,-1
    6208:	ac6200d8 	sw	v0,216(v1)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    620c:	c242002c 	ll	v0,44(s2)
    6210:	34420001 	ori	v0,v0,0x1
    6214:	e242002c 	sc	v0,44(s2)
    6218:	1040fffc 	beqz	v0,620c <e1000_hibernate_adapter+0x30>
    621c:	00000000 	nop

    e1000_irq_disable(adapter);
    netif_stop_queue(netdev);
    adapter->shared.adapter_stopped = 0;
    e1000_adapter_stop(&adapter->shared);
    6220:	26110008 	addiu	s1,s0,8
    6224:	ae000064 	sw	zero,100(s0)
    6228:	3c030000 	lui	v1,0x0
    622c:	24630000 	addiu	v1,v1,0
    6230:	0060f809 	jalr	v1
    6234:	02202021 	move	a0,s1
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    6238:	8e02008c 	lw	v0,140(s0)
    623c:	30420001 	andi	v0,v0,0x1

    if(test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    6240:	10400021 	beqz	v0,62c8 <e1000_hibernate_adapter+0xec>
    6244:	24030001 	li	v1,1
 * Atomically adds @i to @v.  Note that the guaranteed useful range
 * of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_add(int i, atomic_t * v)
{
    6248:	260200d8 	addiu	v0,s0,216
	unsigned long temp;

	__asm__ __volatile__(
    624c:	c0440000 	ll	a0,0(v0)
    6250:	00832021 	addu	a0,a0,v1
    6254:	e0440000 	sc	a0,0(v0)
    6258:	1080fffc 	beqz	a0,624c <e1000_hibernate_adapter+0x70>
    625c:	00000000 	nop

        /* Disable tasklet only when interface is opened. */
        tasklet_disable(&adapter->rx_fill_tasklet);

        /* clean out old buffers */
        e1000_clean_rx_ring(adapter);
    6260:	3c020000 	lui	v0,0x0
    6264:	244228d8 	addiu	v0,v0,10456
    6268:	0040f809 	jalr	v0
    626c:	02002021 	move	a0,s0
        e1000_clean_tx_ring(adapter);
    6270:	3c020000 	lui	v0,0x0
    6274:	24422720 	addiu	v0,v0,10016
    6278:	0040f809 	jalr	v0
    627c:	02002021 	move	a0,s0

        /* Delete watchdog timer */
        del_timer(&adapter->timer_id);
    6280:	3c020000 	lui	v0,0x0
    6284:	24420000 	addiu	v0,v0,0
    6288:	0040f809 	jalr	v0
    628c:	26040094 	addiu	a0,s0,148
    6290:	8e03000c 	lw	v1,12(s0)
    6294:	2c630002 	sltiu	v1,v1,2
    6298:	8e230000 	lw	v1,0(s1)
    629c:	2402ffff 	li	v0,-1
    62a0:	ac6200d8 	sw	v0,216(v1)

        /* Unhook irq */
        e1000_irq_disable(adapter);
    62a4:	8e02000c 	lw	v0,12(s0)
    62a8:	2c420002 	sltiu	v0,v0,2
        icr = E1000_READ_REG(&adapter->shared, ICR);
    62ac:	8e020008 	lw	v0,8(s0)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    62b0:	8c4300c0 	lw	v1,192(v0)
        free_irq(netdev->irq, netdev);
    62b4:	8e440024 	lw	a0,36(s2)
    62b8:	3c020000 	lui	v0,0x0
    62bc:	24420000 	addiu	v0,v0,0
    62c0:	0040f809 	jalr	v0
    62c4:	02402821 	move	a1,s2
    }
}
    62c8:	8fbf001c 	lw	ra,28(sp)
    62cc:	8fb20018 	lw	s2,24(sp)
    62d0:	8fb10014 	lw	s1,20(sp)
    62d4:	8fb00010 	lw	s0,16(sp)
    62d8:	03e00008 	jr	ra
    62dc:	27bd0020 	addiu	sp,sp,32

000062e0 <e1000_wakeup_adapter>:
    62e0:	27bdffd8 	addiu	sp,sp,-40
    62e4:	afb20020 	sw	s2,32(sp)
    62e8:	afb1001c 	sw	s1,28(sp)
    62ec:	afbf0024 	sw	ra,36(sp)
    62f0:	afb00018 	sw	s0,24(sp)
    62f4:	00809021 	move	s2,a0

void
e1000_wakeup_adapter(struct net_device *netdev)
{
    uint32_t icr;
    struct e1000_adapter *adapter = netdev->priv;
    62f8:	8e500064 	lw	s0,100(s2)

    adapter->shared.adapter_stopped = 0;
    e1000_adapter_stop(&adapter->shared);
    62fc:	3c030000 	lui	v1,0x0
    6300:	24630000 	addiu	v1,v1,0
    6304:	26110008 	addiu	s1,s0,8
    6308:	02202021 	move	a0,s1
    630c:	0060f809 	jalr	v1
    6310:	ae000064 	sw	zero,100(s0)
    adapter->shared.adapter_stopped = 0;
    adapter->shared.fc = adapter->shared.original_fc;
    6314:	8e020030 	lw	v0,48(s0)
    6318:	ae000064 	sw	zero,100(s0)
    631c:	ae020018 	sw	v0,24(s0)

    if(!e1000_init_hw(&adapter->shared))
    6320:	3c020000 	lui	v0,0x0
    6324:	24420000 	addiu	v0,v0,0
    6328:	0040f809 	jalr	v0
    632c:	02202021 	move	a0,s1
    6330:	54400008 	bnezl	v0,6354 <e1000_wakeup_adapter+0x74>
    6334:	8e02008c 	lw	v0,140(s0)
        printk("Hardware Init Failed at wakeup\n");
    6338:	3c040000 	lui	a0,0x0
    633c:	24840db0 	addiu	a0,a0,3504
    6340:	3c020000 	lui	v0,0x0
    6344:	24420000 	addiu	v0,v0,0
    6348:	0040f809 	jalr	v0
    634c:	00000000 	nop
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    6350:	8e02008c 	lw	v0,140(s0)
    6354:	30420001 	andi	v0,v0,0x1

    if(test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    6358:	10400059 	beqz	v0,64c0 <e1000_wakeup_adapter+0x1e0>
    635c:	8fbf0024 	lw	ra,36(sp)

        /* Setup Rctl */
        e1000_setup_rctl(adapter);
    6360:	3c020000 	lui	v0,0x0
    6364:	24422308 	addiu	v0,v0,8968
    6368:	0040f809 	jalr	v0
    636c:	02002021 	move	a0,s0
        e1000_configure_rx(adapter);
    6370:	3c020000 	lui	v0,0x0
    6374:	244223a8 	addiu	v0,v0,9128
    6378:	0040f809 	jalr	v0
    637c:	02002021 	move	a0,s0
        e1000_alloc_rx_buffers((unsigned long) adapter);
    6380:	3c020000 	lui	v0,0x0
    6384:	24425e30 	addiu	v0,v0,24112
    6388:	0040f809 	jalr	v0
    638c:	02002021 	move	a0,s0
        e1000_set_multi(netdev);
    6390:	3c020000 	lui	v0,0x0
    6394:	24420000 	addiu	v0,v0,0
    6398:	0040f809 	jalr	v0
    639c:	02402021 	move	a0,s2
        e1000_configure_tx(adapter);
    63a0:	3c020000 	lui	v0,0x0
    63a4:	24421f60 	addiu	v0,v0,8032
    63a8:	0040f809 	jalr	v0
    63ac:	02002021 	move	a0,s0

extern void it_real_fn(unsigned long);

static inline void init_timer(struct timer_list * timer)
{
    63b0:	26040094 	addiu	a0,s0,148

#ifdef IANS
        if((IANS_BD_TAGGING_MODE) (ANS_PRIVATE_DATA_FIELD(adapter)->tag_mode)
           != IANS_BD_TAGGING_NONE)
            bd_ans_hw_EnableVLAN(adapter);
#endif

        /* Set the watchdog timer for 2 seconds */
        init_timer(&adapter->timer_id);
        adapter->timer_id.function = &e1000_watchdog;
    63b4:	3c020000 	lui	v0,0x0
    63b8:	24420000 	addiu	v0,v0,0
extern void it_real_fn(unsigned long);

static inline void init_timer(struct timer_list * timer)
{
	timer->list.next = timer->list.prev = NULL;
    63bc:	ac800004 	sw	zero,4(a0)
    63c0:	ac800000 	sw	zero,0(a0)
    63c4:	ae0200a4 	sw	v0,164(s0)
        adapter->timer_id.data = (unsigned long) netdev;
    63c8:	ae1200a0 	sw	s2,160(s0)
        mod_timer(&adapter->timer_id, (jiffies + 2 * HZ));
    63cc:	3c050000 	lui	a1,0x0
    63d0:	8ca50000 	lw	a1,0(a1)
    63d4:	3c020000 	lui	v0,0x0
    63d8:	24420000 	addiu	v0,v0,0
    63dc:	0040f809 	jalr	v0
    63e0:	24a500c8 	addiu	a1,a1,200
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    63e4:	260300d8 	addiu	v1,s0,216
    63e8:	24020001 	li	v0,1
	unsigned long temp;

	__asm__ __volatile__(
    63ec:	c0650000 	ll	a1,0(v1)
    63f0:	00a22823 	subu	a1,a1,v0
    63f4:	e0650000 	sc	a1,0(v1)
    63f8:	10a0fffc 	beqz	a1,63ec <e1000_wakeup_adapter+0x10c>
    63fc:	00000000 	nop
    6400:	8e04000c 	lw	a0,12(s0)
    6404:	2c840002 	sltiu	a0,a0,2
    6408:	8e230000 	lw	v1,0(s1)
    640c:	2402ffff 	li	v0,-1
    6410:	ac6200d8 	sw	v0,216(v1)

        tasklet_enable(&adapter->rx_fill_tasklet);

        /* Hook irq */
        e1000_irq_disable(adapter);
    6414:	8e02000c 	lw	v0,12(s0)
    6418:	2c420002 	sltiu	v0,v0,2
        icr = E1000_READ_REG(&adapter->shared, ICR);
    641c:	8e020008 	lw	v0,8(s0)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    6420:	8c4300c0 	lw	v1,192(v0)
        if(request_irq
    6424:	8e440024 	lw	a0,36(s2)
    6428:	3c050000 	lui	a1,0x0
    642c:	24a50000 	addiu	a1,a1,0
    6430:	3c070000 	lui	a3,0x0
    6434:	24e70000 	addiu	a3,a3,0
    6438:	3c060200 	lui	a2,0x200
    643c:	3c020000 	lui	v0,0x0
    6440:	24420000 	addiu	v0,v0,0
    6444:	0040f809 	jalr	v0
    6448:	afb20010 	sw	s2,16(sp)
    644c:	50400008 	beqzl	v0,6470 <e1000_wakeup_adapter+0x190>
    6450:	8e02000c 	lw	v0,12(s0)
           (netdev->irq, &e1000_intr, SA_SHIRQ, e1000_driver_name, netdev) != 0)
            printk(KERN_ERR "e1000: Unable to hook irq.\n");
    6454:	3c040000 	lui	a0,0x0
    6458:	24840dd0 	addiu	a0,a0,3536
    645c:	3c020000 	lui	v0,0x0
    6460:	24420000 	addiu	v0,v0,0
    6464:	0040f809 	jalr	v0
    6468:	00000000 	nop
    646c:	8e02000c 	lw	v0,12(s0)
    6470:	2c420002 	sltiu	v0,v0,2
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    6474:	8e0500cc 	lw	a1,204(s0)
    6478:	8e060008 	lw	a2,8(s0)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    647c:	30a4ff00 	andi	a0,a1,0xff00
    6480:	00051600 	sll	v0,a1,0x18
    6484:	00051a02 	srl	v1,a1,0x8
    6488:	00042200 	sll	a0,a0,0x8
    648c:	00441025 	or	v0,v0,a0
    6490:	3063ff00 	andi	v1,v1,0xff00
    6494:	00431025 	or	v0,v0,v1
    6498:	00052e02 	srl	a1,a1,0x18
    649c:	00451025 	or	v0,v0,a1
    64a0:	acc200d0 	sw	v0,208(a2)
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    64a4:	c242002c 	ll	v0,44(s2)
    64a8:	2401fffe 	li	at,-2
    64ac:	00411024 	and	v0,v0,at
    64b0:	e242002c 	sc	v0,44(s2)
    64b4:	1040fffb 	beqz	v0,64a4 <e1000_wakeup_adapter+0x1c4>
    64b8:	00000000 	nop

        e1000_irq_enable(adapter);
        netif_start_queue(netdev);
    }
}
    64bc:	8fbf0024 	lw	ra,36(sp)
    64c0:	8fb20020 	lw	s2,32(sp)
    64c4:	8fb1001c 	lw	s1,28(sp)
    64c8:	8fb00018 	lw	s0,24(sp)
    64cc:	03e00008 	jr	ra
    64d0:	27bd0028 	addiu	sp,sp,40

000064d4 <e1000_xmit_lbtest_frame>:
    64d4:	27bdffd8 	addiu	sp,sp,-40
    64d8:	afb40020 	sw	s4,32(sp)
    64dc:	afb3001c 	sw	s3,28(sp)
    64e0:	afb20018 	sw	s2,24(sp)
    64e4:	afb10014 	sw	s1,20(sp)
    64e8:	afbf0024 	sw	ra,36(sp)
    64ec:	afb00010 	sw	s0,16(sp)
    64f0:	00a09821 	move	s3,a1

#ifdef IDIAG
int
e1000_xmit_lbtest_frame(struct sk_buff *skb,
                        struct e1000_adapter *adapter)
{
    /*struct e1000_adapter *adapter = netdev->priv; */
    struct pci_dev *pdev = adapter->pdev;
    struct e1000_tx_desc *tx_desc;
    int i;

    i = adapter->tx_ring.next_to_use;
    64f4:	8e6600f8 	lw	a2,248(s3)
    tx_desc = E1000_TX_DESC(adapter->tx_ring, i);

    adapter->tx_ring.buffer_info[i].skb = skb;
    64f8:	8e630100 	lw	v1,256(s3)
    64fc:	00809021 	move	s2,a0
    6500:	00068840 	sll	s1,a2,0x1
    6504:	02268821 	addu	s1,s1,a2
    6508:	001188c0 	sll	s1,s1,0x3
    650c:	02231821 	addu	v1,s1,v1
    6510:	8e6700e4 	lw	a3,228(s3)
    6514:	ac720000 	sw	s2,0(v1)
    adapter->tx_ring.buffer_info[i].length = skb->len;
    6518:	8e620100 	lw	v0,256(s3)
    651c:	8e44005c 	lw	a0,92(s2)
    6520:	00063100 	sll	a2,a2,0x4
    6524:	02221021 	addu	v0,s1,v0
    6528:	ac440010 	sw	a0,16(v0)
    adapter->tx_ring.buffer_info[i].dma =
    652c:	8e430080 	lw	v1,128(s2)
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    6530:	3c040000 	lui	a0,0x0
    6534:	8c840000 	lw	a0,0(a0)
    6538:	8e45005c 	lw	a1,92(s2)
    653c:	3c028000 	lui	v0,0x8000
    6540:	00431021 	addu	v0,v0,v1
    6544:	00021302 	srl	v0,v0,0xc
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    6548:	00021180 	sll	v0,v0,0x6
    654c:	00e6a021 	addu	s4,a3,a2
 */
static inline dma_addr_t pci_map_page(struct pci_dev *hwdev, struct page *page,
				      unsigned long offset, size_t size,
                                      int direction)
{
    6550:	00441021 	addu	v0,v0,a0
    6554:	30630fff 	andi	v1,v1,0xfff

	if (direction == PCI_DMA_NONE)
		BUG();

	addr = (unsigned long) page_address(page);
    6558:	8c500038 	lw	s0,56(v0)
	addr += offset;
#ifdef CONFIG_NONCOHERENT_IO
	dma_cache_wback_inv(addr, size);
    655c:	3c060000 	lui	a2,0x0
    6560:	8cc60000 	lw	a2,0(a2)
    6564:	02038021 	addu	s0,s0,v1
    6568:	00c0f809 	jalr	a2
    656c:	02002021 	move	a0,s0
        pci_map_page(pdev, virt_to_page(skb->data),
                     (unsigned long) skb->data & ~PAGE_MASK, skb->len,
                     PCI_DMA_TODEVICE);
    6570:	8e650100 	lw	a1,256(s3)
 * IO bus memory addresses are also 1:1 with the physical address
 */
static inline unsigned long virt_to_bus(volatile void * address)
{
	return PHYSADDR(address);
    6574:	3c041fff 	lui	a0,0x1fff
    6578:	3484ffff 	ori	a0,a0,0xffff
    657c:	02041824 	and	v1,s0,a0
    6580:	02252821 	addu	a1,s1,a1
    6584:	00001021 	move	v0,zero
    6588:	aca20008 	sw	v0,8(a1)
    658c:	aca3000c 	sw	v1,12(a1)
    6590:	8e640100 	lw	a0,256(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6594:	3c0d00ff 	lui	t5,0xff
    6598:	02248821 	addu	s1,s1,a0
static __inline__ __const__ __u64 __fswab64(__u64 x)
{
#  ifdef __SWAB_64_THRU_32__
	__u32 h = x >> 32;
        __u32 l = x & ((1ULL<<32)-1);
    659c:	8e2b000c 	lw	t3,12(s1)
    65a0:	8e2c0008 	lw	t4,8(s1)
        return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h)));
    65a4:	00002021 	move	a0,zero
    65a8:	3166ff00 	andi	a2,t3,0xff00
    65ac:	016d4024 	and	t0,t3,t5
    65b0:	00063200 	sll	a2,a2,0x8
    65b4:	000b5600 	sll	t2,t3,0x18
    65b8:	3189ff00 	andi	t1,t4,0xff00
    65bc:	01465025 	or	t2,t2,a2
    65c0:	000c3e00 	sll	a3,t4,0x18
    65c4:	018d3024 	and	a2,t4,t5
    65c8:	00084202 	srl	t0,t0,0x8
    65cc:	00094a00 	sll	t1,t1,0x8
    65d0:	00063202 	srl	a2,a2,0x8
    65d4:	01485025 	or	t2,t2,t0
    65d8:	00e93825 	or	a3,a3,t1
    65dc:	000b5e02 	srl	t3,t3,0x18
    65e0:	00e63825 	or	a3,a3,a2
    65e4:	014b1825 	or	v1,t2,t3
    65e8:	000c6602 	srl	t4,t4,0x18
    65ec:	00ec2825 	or	a1,a3,t4
    65f0:	00031000 	sll	v0,v1,0x0
    65f4:	00001821 	move	v1,zero
    65f8:	00441025 	or	v0,v0,a0
    65fc:	00651825 	or	v1,v1,a1

    tx_desc->buffer_addr = cpu_to_le64(adapter->tx_ring.buffer_info[i].dma);
    6600:	ae820000 	sw	v0,0(s4)
    6604:	ae830004 	sw	v1,4(s4)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    6608:	8e44005c 	lw	a0,92(s2)
    tx_desc->lower.data = cpu_to_le32(skb->len);

    /* zero out the status field in the descriptor */

    tx_desc->upper.data = 0;

    tx_desc->lower.data |= E1000_TXD_CMD_EOP;
    660c:	3c050100 	lui	a1,0x100
    tx_desc->lower.data |= E1000_TXD_CMD_IFCS;
    6610:	3c060200 	lui	a2,0x200
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6614:	3083ff00 	andi	v1,a0,0xff00
    6618:	00031a00 	sll	v1,v1,0x8
    661c:	008d6824 	and	t5,a0,t5
    6620:	00041600 	sll	v0,a0,0x18
    6624:	00431025 	or	v0,v0,v1
    6628:	000d6a02 	srl	t5,t5,0x8
    662c:	00042602 	srl	a0,a0,0x18
    6630:	004d1025 	or	v0,v0,t5
    6634:	00441025 	or	v0,v0,a0
    6638:	00451025 	or	v0,v0,a1
    663c:	00461025 	or	v0,v0,a2
    tx_desc->lower.data |= E1000_TXD_CMD_IDE;
    6640:	3c038000 	lui	v1,0x8000
    6644:	00432025 	or	a0,v0,v1
    6648:	ae80000c 	sw	zero,12(s4)
    664c:	ae840008 	sw	a0,8(s4)

    if(adapter->shared.report_tx_early == 1)
    6650:	8e63006c 	lw	v1,108(s3)
    6654:	24020001 	li	v0,1
    6658:	54620002 	bnel	v1,v0,6664 <e1000_xmit_lbtest_frame+0x190>
    665c:	3c021000 	lui	v0,0x1000
        tx_desc->lower.data |= E1000_TXD_CMD_RS;
    6660:	3c020800 	lui	v0,0x800
    else
        tx_desc->lower.data |= E1000_TXD_CMD_RPS;
    6664:	00821025 	or	v0,a0,v0
    6668:	ae820008 	sw	v0,8(s4)

    /* Move the HW Tx Tail Pointer */

    adapter->tx_ring.next_to_use++;
    666c:	8e6200f8 	lw	v0,248(s3)
    adapter->tx_ring.next_to_use %= adapter->tx_ring.count;
    6670:	8e6300f0 	lw	v1,240(s3)
    6674:	24420001 	addiu	v0,v0,1
    6678:	0043001b 	divu	zero,v0,v1
    667c:	ae6200f8 	sw	v0,248(s3)
    6680:	50600001 	beqzl	v1,6688 <e1000_xmit_lbtest_frame+0x1b4>
    6684:	0007000d 	break	0x7
    6688:	8e62000c 	lw	v0,12(s3)
    668c:	2c420002 	sltiu	v0,v0,2
    6690:	00003010 	mfhi	a2
    6694:	1440000e 	bnez	v0,66d0 <e1000_xmit_lbtest_frame+0x1fc>
    6698:	ae6600f8 	sw	a2,248(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    669c:	30c3ff00 	andi	v1,a2,0xff00
    66a0:	00031a00 	sll	v1,v1,0x8
    66a4:	00061600 	sll	v0,a2,0x18
    66a8:	00062202 	srl	a0,a2,0x8
    66ac:	00431025 	or	v0,v0,v1
    66b0:	3084ff00 	andi	a0,a0,0xff00
    66b4:	8e650008 	lw	a1,8(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    66b8:	00441025 	or	v0,v0,a0
    66bc:	00061e02 	srl	v1,a2,0x18
    66c0:	00431025 	or	v0,v0,v1

    E1000_WRITE_REG(&adapter->shared, TDT, adapter->tx_ring.next_to_use);
    66c4:	aca23818 	sw	v0,14360(a1)
    66c8:	080019bf 	j	66fc <e1000_xmit_lbtest_frame+0x228>
    66cc:	00000000 	nop
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    66d0:	30c3ff00 	andi	v1,a2,0xff00
    66d4:	00031a00 	sll	v1,v1,0x8
    66d8:	00061600 	sll	v0,a2,0x18
    66dc:	00062202 	srl	a0,a2,0x8
    66e0:	00431025 	or	v0,v0,v1
    66e4:	3084ff00 	andi	a0,a0,0xff00
    66e8:	8e650008 	lw	a1,8(s3)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    66ec:	00441025 	or	v0,v0,a0
    66f0:	00061e02 	srl	v1,a2,0x18
    66f4:	00431025 	or	v0,v0,v1
    66f8:	aca20438 	sw	v0,1080(a1)
    mdelay(10);
    66fc:	3c040000 	lui	a0,0x0
    6700:	8c840000 	lw	a0,0(a0)
    6704:	3c031999 	lui	v1,0x1999
    6708:	24050009 	li	a1,9
    670c:	346396c0 	ori	v1,v1,0x96c0
    6710:	2406ffff 	li	a2,-1
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
	__asm__("multu\t%2,%3"
    6714:	00640019 	multu	v1,a0
    6718:	00001010 	mfhi	v0
	...
    6724:	1440ffff 	bnez	v0,6724 <e1000_xmit_lbtest_frame+0x250>
    6728:	2442ffff 	addiu	v0,v0,-1
    672c:	24a5ffff 	addiu	a1,a1,-1
    6730:	14a6fff8 	bne	a1,a2,6714 <e1000_xmit_lbtest_frame+0x240>
    6734:	266200f4 	addiu	v0,s3,244
 * Atomically subtracts @i from @v.  Note that the guaranteed
 * useful range of an atomic_t is only 24 bits.
 */
extern __inline__ void atomic_sub(int i, atomic_t * v)
{
    6738:	24030001 	li	v1,1
	unsigned long temp;

	__asm__ __volatile__(
    673c:	c0450000 	ll	a1,0(v0)
    6740:	00a32823 	subu	a1,a1,v1
    6744:	e0450000 	sc	a1,0(v0)
    6748:	10a0fffc 	beqz	a1,673c <e1000_xmit_lbtest_frame+0x268>
    674c:	00000000 	nop

    atomic_dec(&adapter->tx_ring.unused);

    if(atomic_read(&adapter->tx_ring.unused) <= 1) {
    6750:	8c440000 	lw	a0,0(v0)
    6754:	28840002 	slti	a0,a0,2
    6758:	50800005 	beqzl	a0,6770 <e1000_xmit_lbtest_frame+0x29c>
    675c:	24020001 	li	v0,1

        /* this driver never actually drops transmits,
         * so use tx_dropped count to indicate the number of times
         * netif_stop_queue is called due to no available descriptors
         */

        adapter->net_stats.tx_dropped++;
    6760:	8e63016c 	lw	v1,364(s3)
        return (0);
    6764:	00001021 	move	v0,zero
    6768:	24630001 	addiu	v1,v1,1
    676c:	ae63016c 	sw	v1,364(s3)
    }
    return (1);
}
    6770:	8fbf0024 	lw	ra,36(sp)
    6774:	8fb40020 	lw	s4,32(sp)
    6778:	8fb3001c 	lw	s3,28(sp)
    677c:	8fb20018 	lw	s2,24(sp)
    6780:	8fb10014 	lw	s1,20(sp)
    6784:	8fb00010 	lw	s0,16(sp)
    6788:	03e00008 	jr	ra
    678c:	27bd0028 	addiu	sp,sp,40

00006790 <e1000_rcv_lbtest_frame>:

int
e1000_rcv_lbtest_frame(struct e1000_adapter *adapter,
                       unsigned int frame_size)
{
    struct pci_dev *pdev = adapter->pdev;
    struct e1000_rx_desc *rx_desc;
    int i, j = 0, rcved_pkt = 0;
    uint32_t Length;
    struct sk_buff *skb;

    mdelay(500);
    6790:	3c060000 	lui	a2,0x0
    6794:	8cc60000 	lw	a2,0(a2)
    6798:	27bdffb8 	addiu	sp,sp,-72
    679c:	3c031999 	lui	v1,0x1999
    67a0:	afbe0040 	sw	s8,64(sp)
    67a4:	afa5004c 	sw	a1,76(sp)
    67a8:	0080f021 	move	s8,a0
    67ac:	afbf0044 	sw	ra,68(sp)
    67b0:	afb7003c 	sw	s7,60(sp)
    67b4:	afb60038 	sw	s6,56(sp)
    67b8:	afb50034 	sw	s5,52(sp)
    67bc:	afb40030 	sw	s4,48(sp)
    67c0:	afb3002c 	sw	s3,44(sp)
    67c4:	afb20028 	sw	s2,40(sp)
    67c8:	afb10024 	sw	s1,36(sp)
    67cc:	afb00020 	sw	s0,32(sp)
    67d0:	afa00010 	sw	zero,16(sp)
    67d4:	00003821 	move	a3,zero
    67d8:	240401f3 	li	a0,499
    67dc:	346396c0 	ori	v1,v1,0x96c0
    67e0:	2405ffff 	li	a1,-1
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
	__asm__("multu\t%2,%3"
    67e4:	00660019 	multu	v1,a2
    67e8:	00001010 	mfhi	v0
	...
    67f4:	1440ffff 	bnez	v0,67f4 <e1000_rcv_lbtest_frame+0x64>
    67f8:	2442ffff 	addiu	v0,v0,-1
    67fc:	2484ffff 	addiu	a0,a0,-1
    6800:	1485fff8 	bne	a0,a1,67e4 <e1000_rcv_lbtest_frame+0x54>
    6804:	00000000 	nop
    i = adapter->rx_ring.next_to_clean;
    6808:	8fd20128 	lw	s2,296(s8)
    rx_desc = E1000_RX_DESC(adapter->rx_ring, i);
    680c:	8fc40110 	lw	a0,272(s8)
    6810:	00121900 	sll	v1,s2,0x4
    6814:	0083b021 	addu	s6,a0,v1

    while(rx_desc->status & E1000_RXD_STAT_DD) {
    6818:	92c2000c 	lbu	v0,12(s6)
    681c:	30420001 	andi	v0,v0,0x1
    6820:	1040005e 	beqz	v0,699c <e1000_rcv_lbtest_frame+0x20c>
    6824:	3c157fff 	lui	s5,0x7fff
    6828:	24130001 	li	s3,1
    682c:	27d40120 	addiu	s4,s8,288
    6830:	36b5f1c0 	ori	s5,s5,0xf1c0
        Length = le16_to_cpu(rx_desc->length) - CRC_LENGTH;
        skb = adapter->rx_ring.buffer_info[i].skb;
    6834:	8fc3012c 	lw	v1,300(s8)
    6838:	00121040 	sll	v0,s2,0x1
    683c:	00521021 	addu	v0,v0,s2
    6840:	0002b8c0 	sll	s7,v0,0x3
    6844:	02e31821 	addu	v1,s7,v1
    6848:	8c710000 	lw	s1,0(v1)

        /* Snoop the packet for pattern */
        rcved_pkt = e1000_check_lbtest_frame(skb, frame_size);
    684c:	8fa5004c 	lw	a1,76(sp)
    6850:	3c020000 	lui	v0,0x0
    6854:	24426d8c 	addiu	v0,v0,28044
    6858:	0040f809 	jalr	v0
    685c:	02202021 	move	a0,s1
    6860:	00403821 	move	a3,v0
	return result;
}

extern __inline__ int atomic_sub_return(int i, atomic_t * v)
{
    6864:	26220070 	addiu	v0,s1,112
	unsigned long temp, result;

	__asm__ __volatile__(
    6868:	c0440000 	ll	a0,0(v0)
    686c:	00931823 	subu	v1,a0,s3
    6870:	e0430000 	sc	v1,0(v0)
    6874:	1060fffc 	beqz	v1,6868 <e1000_rcv_lbtest_frame+0xd8>
    6878:	00931823 	subu	v1,a0,s3
 * is executing from interrupt context.
 */
static inline void dev_kfree_skb_irq(struct sk_buff *skb)
{
	if (atomic_dec_and_test(&skb->users)) {
    687c:	5460001f 	bnezl	v1,68fc <e1000_rcv_lbtest_frame+0x16c>
    6880:	8fc2012c 	lw	v0,300(s8)
		int cpu =smp_processor_id();
		unsigned long flags;

		local_irq_save(flags);
    6884:	40106000 	mfc0	s0,$12
    6888:	00000000 	nop
    688c:	36010001 	ori	at,s0,0x1
    6890:	38210001 	xori	at,at,0x1
    6894:	40816000 	mtc0	at,$12
    6898:	00000040 	sll	zero,zero,0x1
    689c:	00000040 	sll	zero,zero,0x1
    68a0:	00000040 	sll	zero,zero,0x1
		skb->next = softnet_data[cpu].completion_queue;
    68a4:	3c030000 	lui	v1,0x0
    68a8:	8c630020 	lw	v1,32(v1)
		softnet_data[cpu].completion_queue = skb;
		cpu_raise_softirq(cpu, NET_TX_SOFTIRQ);
    68ac:	00002021 	move	a0,zero
    68b0:	24050001 	li	a1,1
    68b4:	ae230000 	sw	v1,0(s1)
    68b8:	3c020000 	lui	v0,0x0
    68bc:	24420000 	addiu	v0,v0,0
    68c0:	3c010000 	lui	at,0x0
    68c4:	ac310020 	sw	s1,32(at)
    68c8:	0040f809 	jalr	v0
    68cc:	afa70018 	sw	a3,24(sp)
		local_irq_restore(flags);
    68d0:	40016000 	mfc0	at,$12
    68d4:	32100001 	andi	s0,s0,0x1
    68d8:	34210001 	ori	at,at,0x1
    68dc:	38210001 	xori	at,at,0x1
    68e0:	02018025 	or	s0,s0,at
    68e4:	40906000 	mtc0	s0,$12
	...
    68f4:	8fa70018 	lw	a3,24(sp)

        pci_unmap_single(pdev, adapter->rx_ring.buffer_info[i].dma,
                         adapter->rx_ring.buffer_info[i].length,
                         PCI_DMA_FROMDEVICE);

        dev_kfree_skb_irq(skb);
        adapter->rx_ring.buffer_info[i].skb = NULL;
    68f8:	8fc2012c 	lw	v0,300(s8)
    68fc:	02e21021 	addu	v0,s7,v0
    6900:	ac400000 	sw	zero,0(v0)

        rx_desc->status = 0;
    6904:	a2c0000c 	sb	zero,12(s6)
extern __inline__ void atomic_add(int i, atomic_t * v)
{
	unsigned long temp;

	__asm__ __volatile__(
    6908:	c2830000 	ll	v1,0(s4)
    690c:	00731821 	addu	v1,v1,s3
    6910:	e2830000 	sc	v1,0(s4)
    6914:	1060fffc 	beqz	v1,6908 <e1000_rcv_lbtest_frame+0x178>
    6918:	00000000 	nop
        atomic_inc(&adapter->rx_ring.unused);

        i++;
        i %= adapter->rx_ring.count;
    691c:	8fc2011c 	lw	v0,284(s8)
    6920:	26520001 	addiu	s2,s2,1
        rx_desc = E1000_RX_DESC(adapter->rx_ring, i);

        if(rcved_pkt)
            break;

        /* waited enough */
        if(j++ >= adapter->rx_ring.count)
    6924:	8fa30010 	lw	v1,16(sp)
    6928:	0242001b 	divu	zero,s2,v0
    692c:	50400001 	beqzl	v0,6934 <e1000_rcv_lbtest_frame+0x1a4>
    6930:	0007000d 	break	0x7
    6934:	8fc50110 	lw	a1,272(s8)
    6938:	0062302b 	sltu	a2,v1,v0
    693c:	00601021 	move	v0,v1
    6940:	24420001 	addiu	v0,v0,1
    6944:	afa20010 	sw	v0,16(sp)
    6948:	00001021 	move	v0,zero
    694c:	00002010 	mfhi	a0
    6950:	00809021 	move	s2,a0
    6954:	00000000 	nop
    6958:	00121900 	sll	v1,s2,0x4
    695c:	14e0000f 	bnez	a3,699c <e1000_rcv_lbtest_frame+0x20c>
    6960:	00a3b021 	addu	s6,a1,v1
    6964:	10c00010 	beqz	a2,69a8 <e1000_rcv_lbtest_frame+0x218>
    6968:	8fbf0044 	lw	ra,68(sp)
 * first constant multiplications gets optimized away if the delay is
 * a constant)
 */
extern __inline__ void __udelay(unsigned long usecs, unsigned long lpj)
{
    696c:	3c020000 	lui	v0,0x0
    6970:	8c420000 	lw	v0,0(v0)
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
	__asm__("multu\t%2,%3"
    6974:	02a20019 	multu	s5,v0
    6978:	00001010 	mfhi	v0
	...
    6984:	1440ffff 	bnez	v0,6984 <e1000_rcv_lbtest_frame+0x1f4>
    6988:	2442ffff 	addiu	v0,v0,-1
            return 0;

        mdelay(5);

    }
    698c:	92c3000c 	lbu	v1,12(s6)
    6990:	30630001 	andi	v1,v1,0x1
    6994:	5460ffa8 	bnezl	v1,6838 <e1000_rcv_lbtest_frame+0xa8>
    6998:	8fc3012c 	lw	v1,300(s8)

    adapter->rx_ring.next_to_clean = i;
    699c:	afd20128 	sw	s2,296(s8)

    return (rcved_pkt);
    69a0:	00e01021 	move	v0,a3

}
    69a4:	8fbf0044 	lw	ra,68(sp)
    69a8:	8fbe0040 	lw	s8,64(sp)
    69ac:	8fb7003c 	lw	s7,60(sp)
    69b0:	8fb60038 	lw	s6,56(sp)
    69b4:	8fb50034 	lw	s5,52(sp)
    69b8:	8fb40030 	lw	s4,48(sp)
    69bc:	8fb3002c 	lw	s3,44(sp)
    69c0:	8fb20028 	lw	s2,40(sp)
    69c4:	8fb10024 	lw	s1,36(sp)
    69c8:	8fb00020 	lw	s0,32(sp)
    69cc:	03e00008 	jr	ra
    69d0:	27bd0048 	addiu	sp,sp,72

000069d4 <e1000_selective_wakeup_adapter>:
    69d4:	27bdffe0 	addiu	sp,sp,-32
    69d8:	afb10014 	sw	s1,20(sp)
    69dc:	afbf0018 	sw	ra,24(sp)
    69e0:	afb00010 	sw	s0,16(sp)

void
e1000_selective_wakeup_adapter(struct net_device *netdev)
{
    struct e1000_adapter *adapter = netdev->priv;
    69e4:	8c900064 	lw	s0,100(a0)
    uint32_t ctrl, txcw;

    e1000_init_hw(&adapter->shared);
    69e8:	3c020000 	lui	v0,0x0
    69ec:	24420000 	addiu	v0,v0,0
    69f0:	26110008 	addiu	s1,s0,8
    69f4:	0040f809 	jalr	v0
    69f8:	02202021 	move	a0,s1

    if((adapter->link_active == FALSE) &&
    69fc:	8e0300b0 	lw	v1,176(s0)
    6a00:	14600048 	bnez	v1,6b24 <e1000_selective_wakeup_adapter+0x150>
    6a04:	2604008c 	addiu	a0,s0,140
    6a08:	8e0a000c 	lw	t2,12(s0)
    6a0c:	24020002 	li	v0,2
    6a10:	55420045 	bnel	t2,v0,6b28 <e1000_selective_wakeup_adapter+0x154>
    6a14:	8c820000 	lw	v0,0(a0)
       (adapter->shared.mac_type == e1000_82543)) {

        txcw = E1000_READ_REG(&adapter->shared, TXCW);
    6a18:	8e220000 	lw	v0,0(s1)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6a1c:	3c0700ff 	lui	a3,0xff
        ctrl = E1000_READ_REG(&adapter->shared, CTRL);
    6a20:	2d4a0002 	sltiu	t2,t2,2
    6a24:	00405821 	move	t3,v0
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    6a28:	8c480178 	lw	t0,376(v0)
    6a2c:	8d690000 	lw	t1,0(t3)
	return __arch__swab32(x);
    6a30:	3104ff00 	andi	a0,t0,0xff00
    6a34:	3125ff00 	andi	a1,t1,0xff00
    6a38:	01273024 	and	a2,t1,a3
    6a3c:	00081e00 	sll	v1,t0,0x18
    6a40:	01073824 	and	a3,t0,a3
    6a44:	00091600 	sll	v0,t1,0x18
    6a48:	00042200 	sll	a0,a0,0x8
    6a4c:	00052a00 	sll	a1,a1,0x8
    6a50:	00063202 	srl	a2,a2,0x8
    6a54:	00641825 	or	v1,v1,a0
    6a58:	00451025 	or	v0,v0,a1
    6a5c:	00073a02 	srl	a3,a3,0x8
    6a60:	00671825 	or	v1,v1,a3
    6a64:	00461025 	or	v0,v0,a2
    6a68:	00084602 	srl	t0,t0,0x18
    6a6c:	00094e02 	srl	t1,t1,0x18
    6a70:	00681825 	or	v1,v1,t0
    6a74:	00493025 	or	a2,v0,t1
        E1000_WRITE_REG(&adapter->shared, TXCW, txcw & ~E1000_TXCW_ANE);
    6a78:	3c047fff 	lui	a0,0x7fff
    6a7c:	3484ffff 	ori	a0,a0,0xffff
    6a80:	00642024 	and	a0,v1,a0
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6a84:	3065ff00 	andi	a1,v1,0xff00
    6a88:	00031600 	sll	v0,v1,0x18
    6a8c:	00052a00 	sll	a1,a1,0x8
    6a90:	00041a02 	srl	v1,a0,0x8
    6a94:	00451025 	or	v0,v0,a1
    6a98:	3063ff00 	andi	v1,v1,0xff00
    6a9c:	00431025 	or	v0,v0,v1
    6aa0:	00042602 	srl	a0,a0,0x18
    6aa4:	00441025 	or	v0,v0,a0
    6aa8:	ad620178 	sw	v0,376(t3)
    6aac:	8e02000c 	lw	v0,12(s0)
    6ab0:	2c420002 	sltiu	v0,v0,2
        E1000_WRITE_REG(&adapter->shared, CTRL,
    6ab4:	34c500c1 	ori	a1,a2,0xc1
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6ab8:	30a3ff00 	andi	v1,a1,0xff00
    6abc:	00031a00 	sll	v1,v1,0x8
    6ac0:	00051600 	sll	v0,a1,0x18
    6ac4:	00052202 	srl	a0,a1,0x8
    6ac8:	00431025 	or	v0,v0,v1
    6acc:	3084ff00 	andi	a0,a0,0xff00
    6ad0:	8e030008 	lw	v1,8(s0)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6ad4:	00441025 	or	v0,v0,a0
    6ad8:	00052e02 	srl	a1,a1,0x18
    6adc:	00451025 	or	v0,v0,a1
    6ae0:	ac620000 	sw	v0,0(v1)
                        (ctrl | E1000_CTRL_SLU | E1000_CTRL_ILOS |
                         E1000_CTRL_FD));
        mdelay(20);
    6ae4:	3c040000 	lui	a0,0x0
    6ae8:	8c840000 	lw	a0,0(a0)
    6aec:	3c031999 	lui	v1,0x1999
    6af0:	24050013 	li	a1,19
    6af4:	346396c0 	ori	v1,v1,0x96c0
    6af8:	2406ffff 	li	a2,-1
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
	__asm__("multu\t%2,%3"
    6afc:	00640019 	multu	v1,a0
    6b00:	00001010 	mfhi	v0
	...
    6b0c:	1440ffff 	bnez	v0,6b0c <e1000_selective_wakeup_adapter+0x138>
    6b10:	2442ffff 	addiu	v0,v0,-1
    6b14:	24a5ffff 	addiu	a1,a1,-1
    6b18:	14a6fff8 	bne	a1,a2,6afc <e1000_selective_wakeup_adapter+0x128>
    6b1c:	00000000 	nop
 * @nr: bit number to test
 * @addr: Address to start counting from
 */
extern __inline__ int test_bit(int nr, volatile void *addr)
{
    6b20:	2604008c 	addiu	a0,s0,140
	return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
    6b24:	8c820000 	lw	v0,0(a0)
    6b28:	30420001 	andi	v0,v0,0x1
    }

    if(!test_bit(E1000_BOARD_OPEN, &adapter->flags)) {
    6b2c:	14400013 	bnez	v0,6b7c <e1000_selective_wakeup_adapter+0x1a8>
    6b30:	00000000 	nop
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    6b34:	c0820000 	ll	v0,0(a0)
    6b38:	34420001 	ori	v0,v0,0x1
    6b3c:	e0820000 	sc	v0,0(a0)
    6b40:	1040fffc 	beqz	v0,6b34 <e1000_selective_wakeup_adapter+0x160>
    6b44:	00000000 	nop
    6b48:	c0830000 	ll	v1,0(a0)
    6b4c:	34630004 	ori	v1,v1,0x4
    6b50:	e0830000 	sc	v1,0(a0)
    6b54:	1060fffc 	beqz	v1,6b48 <e1000_selective_wakeup_adapter+0x174>
    6b58:	00000000 	nop
        set_bit(E1000_BOARD_OPEN, &adapter->flags);
        set_bit(E1000_DIAG_OPEN, &adapter->flags);
        e1000_setup_tx_resources(adapter);
    6b5c:	3c020000 	lui	v0,0x0
    6b60:	24421e60 	addiu	v0,v0,7776
    6b64:	0040f809 	jalr	v0
    6b68:	02002021 	move	a0,s0
        e1000_setup_rx_resources(adapter);
    6b6c:	3c020000 	lui	v0,0x0
    6b70:	24422208 	addiu	v0,v0,8712
    6b74:	0040f809 	jalr	v0
    6b78:	02002021 	move	a0,s0
    }
    e1000_setup_rctl(adapter);
    6b7c:	3c020000 	lui	v0,0x0
    6b80:	24422308 	addiu	v0,v0,8968
    6b84:	0040f809 	jalr	v0
    6b88:	02002021 	move	a0,s0
    e1000_configure_rx(adapter);
    6b8c:	3c020000 	lui	v0,0x0
    6b90:	244223a8 	addiu	v0,v0,9128
    6b94:	0040f809 	jalr	v0
    6b98:	02002021 	move	a0,s0
    e1000_alloc_rx_buffers((unsigned long) adapter);
    6b9c:	3c020000 	lui	v0,0x0
    6ba0:	24425e30 	addiu	v0,v0,24112
    6ba4:	0040f809 	jalr	v0
    6ba8:	02002021 	move	a0,s0
    e1000_configure_tx(adapter);
    6bac:	3c020000 	lui	v0,0x0
    6bb0:	24421f60 	addiu	v0,v0,8032
    6bb4:	0040f809 	jalr	v0
    6bb8:	02002021 	move	a0,s0
}
    6bbc:	8fbf0018 	lw	ra,24(sp)
    6bc0:	8fb10014 	lw	s1,20(sp)
    6bc4:	8fb00010 	lw	s0,16(sp)
    6bc8:	03e00008 	jr	ra
    6bcc:	27bd0020 	addiu	sp,sp,32

00006bd0 <e1000_selective_hibernate_adapter>:
    6bd0:	27bdffe0 	addiu	sp,sp,-32
    6bd4:	afbf0018 	sw	ra,24(sp)
    6bd8:	afb10014 	sw	s1,20(sp)
    6bdc:	afb00010 	sw	s0,16(sp)

void
e1000_selective_hibernate_adapter(struct net_device *netdev)
{
    struct e1000_adapter *adapter = netdev->priv;
    6be0:	8c910064 	lw	s1,100(a0)
    uint32_t ctrl, txcw;

    if((adapter->link_active == FALSE) &&
    6be4:	8e2200b0 	lw	v0,176(s1)
    6be8:	14400043 	bnez	v0,6cf8 <e1000_selective_hibernate_adapter+0x128>
    6bec:	24020002 	li	v0,2
    6bf0:	8e2a000c 	lw	t2,12(s1)
    6bf4:	15420040 	bne	t2,v0,6cf8 <e1000_selective_hibernate_adapter+0x128>
    6bf8:	3c0700ff 	lui	a3,0xff
       (adapter->shared.mac_type == e1000_82543)) {

        txcw = E1000_READ_REG(&adapter->shared, TXCW);
    6bfc:	8e2b0008 	lw	t3,8(s1)
        ctrl = E1000_READ_REG(&adapter->shared, CTRL);
        ctrl &= ~E1000_CTRL_SLU & ~E1000_CTRL_ILOS;
    6c00:	2d4a0002 	sltiu	t2,t2,2
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    6c04:	8d690178 	lw	t1,376(t3)
    6c08:	8d620000 	lw	v0,0(t3)
	return __arch__swab32(x);
    6c0c:	3124ff00 	andi	a0,t1,0xff00
    6c10:	3045ff00 	andi	a1,v0,0xff00
    6c14:	00474024 	and	t0,v0,a3
    6c18:	00093600 	sll	a2,t1,0x18
    6c1c:	01273824 	and	a3,t1,a3
    6c20:	00021e00 	sll	v1,v0,0x18
    6c24:	00042200 	sll	a0,a0,0x8
    6c28:	00052a00 	sll	a1,a1,0x8
    6c2c:	00073a02 	srl	a3,a3,0x8
    6c30:	00c43025 	or	a2,a2,a0
    6c34:	00651825 	or	v1,v1,a1
    6c38:	00084202 	srl	t0,t0,0x8
    6c3c:	00021602 	srl	v0,v0,0x18
    6c40:	00c73025 	or	a2,a2,a3
    6c44:	00681825 	or	v1,v1,t0
    6c48:	00094e02 	srl	t1,t1,0x18
    6c4c:	3042003f 	andi	v0,v0,0x3f
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6c50:	00c93025 	or	a2,a2,t1
    6c54:	00433825 	or	a3,v0,v1
        E1000_WRITE_REG(&adapter->shared, TXCW, txcw | E1000_TXCW_ANE);
    6c58:	3c038000 	lui	v1,0x8000
    6c5c:	00c31825 	or	v1,a2,v1
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6c60:	3065ff00 	andi	a1,v1,0xff00
    6c64:	00031600 	sll	v0,v1,0x18
    6c68:	00032202 	srl	a0,v1,0x8
    6c6c:	00052a00 	sll	a1,a1,0x8
    6c70:	00451025 	or	v0,v0,a1
    6c74:	3084ff00 	andi	a0,a0,0xff00
    6c78:	00441025 	or	v0,v0,a0
    6c7c:	00031e02 	srl	v1,v1,0x18
    6c80:	00431025 	or	v0,v0,v1
    6c84:	ad620178 	sw	v0,376(t3)
    6c88:	8e22000c 	lw	v0,12(s1)
    6c8c:	2c420002 	sltiu	v0,v0,2
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6c90:	30e3ff00 	andi	v1,a3,0xff00
    6c94:	00031a00 	sll	v1,v1,0x8
    6c98:	00071600 	sll	v0,a3,0x18
    6c9c:	00072202 	srl	a0,a3,0x8
    6ca0:	00431025 	or	v0,v0,v1
    6ca4:	3084ff00 	andi	a0,a0,0xff00
        E1000_WRITE_REG(&adapter->shared, CTRL, ctrl);
    6ca8:	8e250008 	lw	a1,8(s1)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    6cac:	00441025 	or	v0,v0,a0
    6cb0:	00071e02 	srl	v1,a3,0x18
    6cb4:	00431025 	or	v0,v0,v1
    6cb8:	aca20000 	sw	v0,0(a1)
        mdelay(20);
    6cbc:	3c040000 	lui	a0,0x0
    6cc0:	8c840000 	lw	a0,0(a0)
    6cc4:	3c031999 	lui	v1,0x1999
    6cc8:	24050013 	li	a1,19
    6ccc:	346396c0 	ori	v1,v1,0x96c0
    6cd0:	2406ffff 	li	a2,-1
{
	unsigned long lo;

	usecs *= 0x00068db8;		/* 2**32 / (1000000 / HZ) */
	__asm__("multu\t%2,%3"
    6cd4:	00640019 	multu	v1,a0
    6cd8:	00001010 	mfhi	v0
	...
    6ce4:	1440ffff 	bnez	v0,6ce4 <e1000_selective_hibernate_adapter+0x114>
    6ce8:	2442ffff 	addiu	v0,v0,-1
    6cec:	24a5ffff 	addiu	a1,a1,-1
    6cf0:	14a6fff8 	bne	a1,a2,6cd4 <e1000_selective_hibernate_adapter+0x104>
    6cf4:	00000000 	nop
    }
    /* clean out old buffers */
    e1000_clean_rx_ring(adapter);
    6cf8:	3c020000 	lui	v0,0x0
    6cfc:	244228d8 	addiu	v0,v0,10456
    6d00:	0040f809 	jalr	v0
    6d04:	02202021 	move	a0,s1
    e1000_clean_tx_ring(adapter);
    6d08:	3c020000 	lui	v0,0x0
    6d0c:	24422720 	addiu	v0,v0,10016
    6d10:	0040f809 	jalr	v0
    6d14:	02202021 	move	a0,s1
 * It also implies a memory barrier.
 */
extern __inline__ int
test_and_clear_bit(int nr, volatile void *addr)
{
    6d18:	2630008c 	addiu	s0,s1,140
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp, res;

	__asm__ __volatile__(
    6d1c:	24020004 	li	v0,4
    6d20:	c2040000 	ll	a0,0(s0)
    6d24:	00821825 	or	v1,a0,v0
    6d28:	00621826 	xor	v1,v1,v0
    6d2c:	e2030000 	sc	v1,0(s0)
    6d30:	1060fffb 	beqz	v1,6d20 <e1000_selective_hibernate_adapter+0x150>
    6d34:	00821824 	and	v1,a0,v0
    if(test_and_clear_bit(E1000_DIAG_OPEN, &adapter->flags)) {
    6d38:	10600010 	beqz	v1,6d7c <e1000_selective_hibernate_adapter+0x1ac>
    6d3c:	8fbf0018 	lw	ra,24(sp)
        e1000_free_tx_resources(adapter);
    6d40:	3c020000 	lui	v0,0x0
    6d44:	244226b4 	addiu	v0,v0,9908
    6d48:	0040f809 	jalr	v0
    6d4c:	02202021 	move	a0,s1
        e1000_free_rx_resources(adapter);
    6d50:	3c020000 	lui	v0,0x0
    6d54:	2442284c 	addiu	v0,v0,10316
    6d58:	0040f809 	jalr	v0
    6d5c:	02202021 	move	a0,s1
{
	unsigned long *m = ((unsigned long *) addr) + (nr >> 5);
	unsigned long temp;

	__asm__ __volatile__(
    6d60:	c2030000 	ll	v1,0(s0)
    6d64:	2401fffe 	li	at,-2
    6d68:	00611824 	and	v1,v1,at
    6d6c:	e2030000 	sc	v1,0(s0)
    6d70:	1060fffb 	beqz	v1,6d60 <e1000_selective_hibernate_adapter+0x190>
    6d74:	00000000 	nop
        clear_bit(E1000_BOARD_OPEN, &adapter->flags);
    }
}
    6d78:	8fbf0018 	lw	ra,24(sp)
    6d7c:	8fb10014 	lw	s1,20(sp)
    6d80:	8fb00010 	lw	s0,16(sp)
    6d84:	03e00008 	jr	ra
    6d88:	27bd0020 	addiu	sp,sp,32

00006d8c <e1000_check_lbtest_frame>:

static int
e1000_check_lbtest_frame(struct sk_buff *skb,
                         unsigned int frame_size)
{
    frame_size = (frame_size % 2) ? (frame_size - 1) : frame_size;
    if(*(skb->data + 3) == 0xFF) {
    6d8c:	8c860080 	lw	a2,128(a0)
    6d90:	30a20001 	andi	v0,a1,0x1
    6d94:	00a22823 	subu	a1,a1,v0
    6d98:	90c40003 	lbu	a0,3(a2)
        if((*(skb->data + frame_size / 2 + 10) == 0xBE) &&
    6d9c:	00052842 	srl	a1,a1,0x1
    6da0:	240300ff 	li	v1,255
    6da4:	240700be 	li	a3,190
    6da8:	14830008 	bne	a0,v1,6dcc <e1000_check_lbtest_frame+0x40>
    6dac:	00c53021 	addu	a2,a2,a1
    6db0:	90c3000a 	lbu	v1,10(a2)
    6db4:	240400af 	li	a0,175
    6db8:	14670004 	bne	v1,a3,6dcc <e1000_check_lbtest_frame+0x40>
    6dbc:	24020001 	li	v0,1
    6dc0:	90c3000c 	lbu	v1,12(a2)
    6dc4:	10640002 	beq	v1,a0,6dd0 <e1000_check_lbtest_frame+0x44>
    6dc8:	00000000 	nop
           (*(skb->data + frame_size / 2 + 12) == 0xAF)) {
            return 1;
        }
    }
    return 0;
    6dcc:	00001021 	move	v0,zero
}
    6dd0:	03e00008 	jr	ra
    6dd4:	00000000 	nop

00006dd8 <e1000_ethtool_ioctl>:
    6dd8:	27bdfeb8 	addiu	sp,sp,-328
    6ddc:	afb5013c 	sw	s5,316(sp)
    6de0:	afb40138 	sw	s4,312(sp)
    6de4:	afb30134 	sw	s3,308(sp)
    6de8:	afb1012c 	sw	s1,300(sp)
    6dec:	afbf0140 	sw	ra,320(sp)
    6df0:	afb20130 	sw	s2,304(sp)
    6df4:	afb00128 	sw	s0,296(sp)
    6df8:	00a09821 	move	s3,a1
#endif /* IDIAG */

#ifdef SIOCETHTOOL
/**
 * e1000_ethtool_ioctl - Ethtool Ioctl Support 
 * @netdev: net device structure 
 * @ifr: interface request structure 
 **/

static int
e1000_ethtool_ioctl(struct net_device *netdev,
                    struct ifreq *ifr)
{
    struct ethtool_cmd eth_cmd;
    struct e1000_adapter *adapter = netdev->priv;
    boolean_t re_initiate = FALSE;

#ifdef ETHTOOL_GLINK
    struct ethtool_value eth_e1000_linkinfo;
#endif
#ifdef ETHTOOL_GDRVINFO
    struct ethtool_drvinfo eth_e1000_info;
#endif
#ifdef ETHTOOL_GWOL
    struct ethtool_wolinfo eth_e1000_wolinfo;
#endif

    /* Get the data structure */
    if(copy_from_user(&eth_cmd, ifr->ifr_data, sizeof(eth_cmd)))
    6dfc:	8e650010 	lw	a1,16(s3)
    6e00:	8f8303bc 	lw	v1,956(gp)
    6e04:	0080a821 	move	s5,a0
    6e08:	24a2002c 	addiu	v0,a1,44
    6e0c:	00a21025 	or	v0,a1,v0
    6e10:	00621824 	and	v1,v1,v0
    6e14:	8eb20064 	lw	s2,100(s5)
    6e18:	00008821 	move	s1,zero
    6e1c:	27b40010 	addiu	s4,sp,16
    6e20:	04600006 	bltz	v1,6e3c <e1000_ethtool_ioctl+0x64>
    6e24:	2406002c 	li	a2,44
    6e28:	02802021 	move	a0,s4
    6e2c:	3c010000 	lui	at,0x0
    6e30:	24210000 	addiu	at,at,0
    6e34:	0020f809 	jalr	at
    6e38:	00a60821 	addu	at,a1,a2
    6e3c:	14c00162 	bnez	a2,73c8 <e1000_ethtool_ioctl+0x5f0>
    6e40:	2402fff2 	li	v0,-14
        return -EFAULT;

    switch (eth_cmd.cmd) {
    6e44:	8fa20010 	lw	v0,16(sp)
    6e48:	2442ffff 	addiu	v0,v0,-1
    6e4c:	2c43000a 	sltiu	v1,v0,10
    6e50:	5060015d 	beqzl	v1,73c8 <e1000_ethtool_ioctl+0x5f0>
    6e54:	2402ff86 	li	v0,-122
    6e58:	00021080 	sll	v0,v0,0x2
    6e5c:	3c030000 	lui	v1,0x0
    6e60:	00621821 	addu	v1,v1,v0
    6e64:	8c630f48 	lw	v1,3912(v1)
    6e68:	00600008 	jr	v1
    6e6c:	00000000 	nop
        /* Get the information */
    case ETHTOOL_GSET:
        if(adapter->shared.media_type == e1000_media_type_copper) {
    6e70:	8e420010 	lw	v0,16(s2)
    6e74:	1440000c 	bnez	v0,6ea8 <e1000_ethtool_ioctl+0xd0>
    6e78:	24030440 	li	v1,1088
            eth_cmd.supported = E1000_ETHTOOL_COPPER_INTERFACE_SUPPORTS;
    6e7c:	2404026f 	li	a0,623
            eth_cmd.advertising = E1000_ETHTOOL_COPPER_INTERFACE_ADVERTISE;
            eth_cmd.port = PORT_MII;
    6e80:	24020002 	li	v0,2
    6e84:	afa40018 	sw	a0,24(sp)
    6e88:	a3a2001f 	sb	v0,31(sp)
    6e8c:	afa40014 	sw	a0,20(sp)
            eth_cmd.phy_address = adapter->shared.phy_addr;
    6e90:	9243002f 	lbu	v1,47(s2)
    6e94:	a3a30020 	sb	v1,32(sp)
            eth_cmd.transceiver =
    6e98:	8e42000c 	lw	v0,12(s2)
    6e9c:	2c420003 	sltiu	v0,v0,3
                (adapter->shared.mac_type >
                 e1000_82543) ? XCVR_INTERNAL : XCVR_EXTERNAL;
        } else {
    6ea0:	08001bae 	j	6eb8 <e1000_ethtool_ioctl+0xe0>
    6ea4:	a3a20021 	sb	v0,33(sp)
            eth_cmd.supported = E1000_ETHTOOL_FIBER_INTERFACE_SUPPORTS;
            eth_cmd.advertising = E1000_ETHTOOL_FIBER_INTERFACE_ADVERTISE;
            eth_cmd.port = PORT_FIBRE;
    6ea8:	24020003 	li	v0,3
    6eac:	afa30018 	sw	v1,24(sp)
    6eb0:	a3a2001f 	sb	v0,31(sp)
    6eb4:	afa30014 	sw	v1,20(sp)
        }

        if(adapter->link_active == TRUE) {
    6eb8:	8e4300b0 	lw	v1,176(s2)
    6ebc:	24020001 	li	v0,1
    6ec0:	54620010 	bnel	v1,v0,6f04 <e1000_ethtool_ioctl+0x12c>
    6ec4:	a7a0001c 	sh	zero,28(sp)
            e1000_get_speed_and_duplex(&adapter->shared, &adapter->link_speed,
    6ec8:	265000b4 	addiu	s0,s2,180
    6ecc:	265100b6 	addiu	s1,s2,182
    6ed0:	3c020000 	lui	v0,0x0
    6ed4:	24420000 	addiu	v0,v0,0
    6ed8:	26440008 	addiu	a0,s2,8
    6edc:	02002821 	move	a1,s0
    6ee0:	0040f809 	jalr	v0
    6ee4:	02203021 	move	a2,s1
                                       &adapter->link_duplex);
            eth_cmd.speed = adapter->link_speed;
    6ee8:	96030000 	lhu	v1,0(s0)
    6eec:	a7a3001c 	sh	v1,28(sp)
            eth_cmd.duplex =
    6ef0:	96220000 	lhu	v0,0(s1)
    6ef4:	38420002 	xori	v0,v0,0x2
    6ef8:	2c420001 	sltiu	v0,v0,1
                (adapter->link_duplex ==
                 FULL_DUPLEX) ? DUPLEX_FULL : DUPLEX_HALF;
        } else {
    6efc:	08001bc2 	j	6f08 <e1000_ethtool_ioctl+0x130>
    6f00:	a3a2001e 	sb	v0,30(sp)
            eth_cmd.speed = 0;
            eth_cmd.duplex = 0;
    6f04:	a3a0001e 	sb	zero,30(sp)
        }

        if(adapter->shared.autoneg)
    6f08:	92420078 	lbu	v0,120(s2)
    6f0c:	10400003 	beqz	v0,6f1c <e1000_ethtool_ioctl+0x144>
    6f10:	24020001 	li	v0,1
            eth_cmd.autoneg = AUTONEG_ENABLE;
    6f14:	08001bc8 	j	6f20 <e1000_ethtool_ioctl+0x148>
    6f18:	a3a20022 	sb	v0,34(sp)
        else
            eth_cmd.autoneg = AUTONEG_DISABLE;
    6f1c:	a3a00022 	sb	zero,34(sp)

        if(copy_to_user(ifr->ifr_data, &eth_cmd, sizeof(eth_cmd)))
    6f20:	8e640010 	lw	a0,16(s3)
    6f24:	8f8303bc 	lw	v1,956(gp)
    6f28:	2482002c 	addiu	v0,a0,44
    6f2c:	00821025 	or	v0,a0,v0
    6f30:	00621824 	and	v1,v1,v0
    6f34:	0460011d 	bltz	v1,73ac <e1000_ethtool_ioctl+0x5d4>
    6f38:	2406002c 	li	a2,44
    6f3c:	02802821 	move	a1,s4
    6f40:	3c010000 	lui	at,0x0
    6f44:	24210000 	addiu	at,at,0
    6f48:	0020f809 	jalr	at
    6f4c:	00000000 	nop
            return -EFAULT;
    6f50:	08001ceb 	j	73ac <e1000_ethtool_ioctl+0x5d4>
    6f54:	00000000 	nop

static inline int capable(int cap)
{
#if 1 /* ok now */
	if (cap_raised(current->cap_effective, cap))
    6f58:	8f8201d4 	lw	v0,468(gp)
    6f5c:	30421000 	andi	v0,v0,0x1000
    6f60:	10400005 	beqz	v0,6f78 <e1000_ethtool_ioctl+0x1a0>
    6f64:	24030001 	li	v1,1
#else
	if (cap_is_fs_cap(cap) ? current->fsuid == 0 : current->euid == 0)
#endif
	{
		current->flags |= PF_SUPERPRIV;
    6f68:	8f820004 	lw	v0,4(gp)
    6f6c:	34420100 	ori	v0,v0,0x100
		return 1;
    6f70:	08001bdf 	j	6f7c <e1000_ethtool_ioctl+0x1a4>
    6f74:	af820004 	sw	v0,4(gp)
	}
	return 0;
    6f78:	00001821 	move	v1,zero

        break;

        /* set information */
    case ETHTOOL_SSET:
        /* need proper permission to do set */
        if(!capable(CAP_NET_ADMIN))
    6f7c:	10600112 	beqz	v1,73c8 <e1000_ethtool_ioctl+0x5f0>
    6f80:	2402ffff 	li	v0,-1
            return -EPERM;

        /* Cannot Force speed/duplex and at the same time autoneg.
         * Autoneg will override forcing. 
         * For example to force speed/duplex pass in 
         *  'speed 100 duplex half autoneg off'
         * pass in 'autoneg on' to start autoneg.
         */
        printk("e1000: Requested link to be forced to %d Speed, %s Duplex "
    6f84:	93a2001e 	lbu	v0,30(sp)
    6f88:	3c060000 	lui	a2,0x0
    6f8c:	24c60284 	addiu	a2,a2,644
    6f90:	14400003 	bnez	v0,6fa0 <e1000_ethtool_ioctl+0x1c8>
    6f94:	97a5001c 	lhu	a1,28(sp)
    6f98:	3c060000 	lui	a2,0x0
    6f9c:	24c6028c 	addiu	a2,a2,652
    6fa0:	93a20022 	lbu	v0,34(sp)
    6fa4:	3c070000 	lui	a3,0x0
    6fa8:	24e70e30 	addiu	a3,a3,3632
    6fac:	14400003 	bnez	v0,6fbc <e1000_ethtool_ioctl+0x1e4>
    6fb0:	00000000 	nop
    6fb4:	3c070000 	lui	a3,0x0
    6fb8:	24e70e44 	addiu	a3,a3,3652
    6fbc:	3c040000 	lui	a0,0x0
    6fc0:	24840df0 	addiu	a0,a0,3568
    6fc4:	3c100000 	lui	s0,0x0
    6fc8:	26100000 	addiu	s0,s0,0
    6fcc:	0200f809 	jalr	s0
    6fd0:	00000000 	nop
               "%s\n", eth_cmd.speed, (eth_cmd.duplex ? "Full" : "Half"),
               (eth_cmd.autoneg ? "and Autonegotiate" : "."));

        if(eth_cmd.autoneg && eth_cmd.speed)
    6fd4:	93a30022 	lbu	v1,34(sp)
    6fd8:	10600016 	beqz	v1,7034 <e1000_ethtool_ioctl+0x25c>
    6fdc:	97a2001c 	lhu	v0,28(sp)
    6fe0:	10400006 	beqz	v0,6ffc <e1000_ethtool_ioctl+0x224>
    6fe4:	00000000 	nop
            printk("e1000: Autoneg request will over-ride speed forcing\n");
    6fe8:	3c040000 	lui	a0,0x0
    6fec:	24840e48 	addiu	a0,a0,3656
    6ff0:	0200f809 	jalr	s0
    6ff4:	00000000 	nop
    6ff8:	93a30022 	lbu	v1,34(sp)

        /* if not in autoneg mode and have been asked to enable autoneg */
        if(eth_cmd.autoneg) {
    6ffc:	1060000d 	beqz	v1,7034 <e1000_ethtool_ioctl+0x25c>
    7000:	97a2001c 	lhu	v0,28(sp)
            if(adapter->shared.autoneg &&
    7004:	92420078 	lbu	v0,120(s2)
    7008:	10400004 	beqz	v0,701c <e1000_ethtool_ioctl+0x244>
    700c:	2403002f 	li	v1,47
    7010:	96440048 	lhu	a0,72(s2)
    7014:	108300ec 	beq	a0,v1,73c8 <e1000_ethtool_ioctl+0x5f0>
    7018:	00001021 	move	v0,zero
               adapter->shared.autoneg_advertised == AUTONEG_ADV_DEFAULT)
                /* If already in Autoneg */
                return 0;
            else {
                adapter->shared.autoneg = 1;
    701c:	24030001 	li	v1,1
                adapter->shared.autoneg_advertised = AUTONEG_ADV_DEFAULT;
    7020:	2402002f 	li	v0,47
    7024:	a6420048 	sh	v0,72(s2)
    7028:	a2430078 	sb	v1,120(s2)
                re_initiate = TRUE;
            }
        }
    702c:	08001c6c 	j	71b0 <e1000_ethtool_ioctl+0x3d8>
    7030:	24110001 	li	s1,1
        /* Force link to whatever speed and duplex */
        /* Also turning off Autoneg in case of non-gig speeds */
        else if(eth_cmd.speed) {
    7034:	1040005e 	beqz	v0,71b0 <e1000_ethtool_ioctl+0x3d8>
    7038:	00402021 	move	a0,v0
            /* Check for invalid request */
            if(((eth_cmd.speed != SPEED_10) && (eth_cmd.speed != SPEED_100) &&
    703c:	3883000a 	xori	v1,a0,0xa
    7040:	38820064 	xori	v0,a0,0x64
    7044:	0003182b 	sltu	v1,zero,v1
    7048:	0002102b 	sltu	v0,zero,v0
    704c:	00621824 	and	v1,v1,v0
    7050:	10600003 	beqz	v1,7060 <e1000_ethtool_ioctl+0x288>
    7054:	240203e8 	li	v0,1000
    7058:	148200db 	bne	a0,v0,73c8 <e1000_ethtool_ioctl+0x5f0>
    705c:	2402ffea 	li	v0,-22
    7060:	93a2001e 	lbu	v0,30(sp)
    7064:	2c420002 	sltiu	v0,v0,2
    7068:	104000d7 	beqz	v0,73c8 <e1000_ethtool_ioctl+0x5f0>
    706c:	2402ffea 	li	v0,-22
    7070:	8e430010 	lw	v1,16(s2)
    7074:	24020001 	li	v0,1
    7078:	10620063 	beq	v1,v0,7208 <e1000_ethtool_ioctl+0x430>
    707c:	265000b4 	addiu	s0,s2,180
                (eth_cmd.speed != SPEED_1000)) ||
               ((eth_cmd.duplex != DUPLEX_HALF) &&
                (eth_cmd.duplex != DUPLEX_FULL)) ||
               (adapter->shared.media_type == e1000_media_type_fiber))
                return -EINVAL;

            e1000_get_speed_and_duplex(&adapter->shared, &adapter->link_speed,
    7080:	265100b6 	addiu	s1,s2,182
    7084:	26440008 	addiu	a0,s2,8
    7088:	02002821 	move	a1,s0
    708c:	3c020000 	lui	v0,0x0
    7090:	24420000 	addiu	v0,v0,0
    7094:	0040f809 	jalr	v0
    7098:	02203021 	move	a2,s1
                                       &adapter->link_duplex);
            /* If we are already forced to requested speed and duplex
             * Donot do anything, just return
             */
            if(!adapter->shared.autoneg &&
    709c:	92430078 	lbu	v1,120(s2)
    70a0:	5460000b 	bnezl	v1,70d0 <e1000_ethtool_ioctl+0x2f8>
    70a4:	a2400078 	sb	zero,120(s2)
    70a8:	96030000 	lhu	v1,0(s0)
    70ac:	97a2001c 	lhu	v0,28(sp)
    70b0:	54620007 	bnel	v1,v0,70d0 <e1000_ethtool_ioctl+0x2f8>
    70b4:	a2400078 	sb	zero,120(s2)
    70b8:	93a3001e 	lbu	v1,30(sp)
    70bc:	96240000 	lhu	a0,0(s1)
    70c0:	24630001 	addiu	v1,v1,1
    70c4:	108300c0 	beq	a0,v1,73c8 <e1000_ethtool_ioctl+0x5f0>
    70c8:	00001021 	move	v0,zero
               (adapter->link_speed == eth_cmd.speed) &&
               (adapter->link_duplex == (eth_cmd.duplex + 1)))

                return 0;

            adapter->shared.autoneg = 0;
    70cc:	a2400078 	sb	zero,120(s2)
            adapter->shared.autoneg_advertised = 0;
    70d0:	a6400048 	sh	zero,72(s2)
            re_initiate = TRUE;
            switch (eth_cmd.speed + eth_cmd.duplex) {
    70d4:	97a2001c 	lhu	v0,28(sp)
    70d8:	93a3001e 	lbu	v1,30(sp)
    70dc:	24040064 	li	a0,100
    70e0:	00431821 	addu	v1,v0,v1
    70e4:	1064001a 	beq	v1,a0,7150 <e1000_ethtool_ioctl+0x378>
    70e8:	24110001 	li	s1,1
    70ec:	28620065 	slti	v0,v1,101
    70f0:	10400008 	beqz	v0,7114 <e1000_ethtool_ioctl+0x33c>
    70f4:	240203e8 	li	v0,1000
    70f8:	2402000a 	li	v0,10
    70fc:	10620012 	beq	v1,v0,7148 <e1000_ethtool_ioctl+0x370>
    7100:	2402000b 	li	v0,11
    7104:	10620015 	beq	v1,v0,715c <e1000_ethtool_ioctl+0x384>
    7108:	24030001 	li	v1,1
    710c:	08001c6a 	j	71a8 <e1000_ethtool_ioctl+0x3d0>
    7110:	24020020 	li	v0,32
    7114:	10620016 	beq	v1,v0,7170 <e1000_ethtool_ioctl+0x398>
    7118:	286203e9 	slti	v0,v1,1001
    711c:	10400006 	beqz	v0,7138 <e1000_ethtool_ioctl+0x360>
    7120:	240203e9 	li	v0,1001
    7124:	24020065 	li	v0,101
    7128:	1062000e 	beq	v1,v0,7164 <e1000_ethtool_ioctl+0x38c>
    712c:	24030001 	li	v1,1
    7130:	08001c6a 	j	71a8 <e1000_ethtool_ioctl+0x3d0>
    7134:	24020020 	li	v0,32
    7138:	10620013 	beq	v1,v0,7188 <e1000_ethtool_ioctl+0x3b0>
    713c:	24030001 	li	v1,1
    7140:	08001c6a 	j	71a8 <e1000_ethtool_ioctl+0x3d0>
    7144:	24020020 	li	v0,32
            case (SPEED_10 + DUPLEX_HALF):
                adapter->shared.forced_speed_duplex = e1000_10_half;
                break;
    7148:	08001c6c 	j	71b0 <e1000_ethtool_ioctl+0x3d8>
    714c:	a240007a 	sb	zero,122(s2)
            case (SPEED_100 + DUPLEX_HALF):
                adapter->shared.forced_speed_duplex = e1000_100_half;
    7150:	24020002 	li	v0,2
                break;
    7154:	08001c6c 	j	71b0 <e1000_ethtool_ioctl+0x3d8>
    7158:	a242007a 	sb	v0,122(s2)
            case (SPEED_10 + DUPLEX_FULL):
                adapter->shared.forced_speed_duplex = e1000_10_full;
                break;
    715c:	08001c6c 	j	71b0 <e1000_ethtool_ioctl+0x3d8>
    7160:	a251007a 	sb	s1,122(s2)
            case (SPEED_100 + DUPLEX_FULL):
                adapter->shared.forced_speed_duplex = e1000_100_full;
    7164:	24020003 	li	v0,3
                break;
    7168:	08001c6c 	j	71b0 <e1000_ethtool_ioctl+0x3d8>
    716c:	a242007a 	sb	v0,122(s2)
            case (SPEED_1000 + DUPLEX_HALF):
                printk("Half Duplex is not supported at 1000 Mbps\n");
    7170:	3c040000 	lui	a0,0x0
    7174:	24840e80 	addiu	a0,a0,3712
    7178:	3c020000 	lui	v0,0x0
    717c:	24420000 	addiu	v0,v0,0
    7180:	0040f809 	jalr	v0
    7184:	00000000 	nop
            case (SPEED_1000 + DUPLEX_FULL):
                printk("Using Auto-neg at 1000 Mbps Full Duplex\n");
    7188:	3c040000 	lui	a0,0x0
    718c:	24840eac 	addiu	a0,a0,3756
    7190:	3c020000 	lui	v0,0x0
    7194:	24420000 	addiu	v0,v0,0
    7198:	0040f809 	jalr	v0
    719c:	00000000 	nop
            default:
                adapter->shared.autoneg = 1;
    71a0:	24030001 	li	v1,1
                adapter->shared.autoneg_advertised = ADVERTISE_1000_FULL;
    71a4:	24020020 	li	v0,32
    71a8:	a6420048 	sh	v0,72(s2)
    71ac:	a2430078 	sb	v1,120(s2)
                break;
            }
        }

        /* End of force */
        /* Put the adapter to new settings */
        if(re_initiate == TRUE) {
    71b0:	24020001 	li	v0,1
    71b4:	56220005 	bnel	s1,v0,71cc <e1000_ethtool_ioctl+0x3f4>
    71b8:	93a20022 	lbu	v0,34(sp)
            e1000_hibernate_adapter(netdev);
    71bc:	3c020000 	lui	v0,0x0
    71c0:	24420000 	addiu	v0,v0,0
            e1000_wakeup_adapter(netdev);
        } else if(!eth_cmd.autoneg && !eth_cmd.speed) {
    71c4:	08001c96 	j	7258 <e1000_ethtool_ioctl+0x480>
    71c8:	02a02021 	move	a0,s5
    71cc:	1440007e 	bnez	v0,73c8 <e1000_ethtool_ioctl+0x5f0>
    71d0:	2402ff86 	li	v0,-122
    71d4:	97a2001c 	lhu	v0,28(sp)
    71d8:	5440007b 	bnezl	v0,73c8 <e1000_ethtool_ioctl+0x5f0>
    71dc:	2402ff86 	li	v0,-122
            printk("Cannot turn off autoneg without "
    71e0:	3c040000 	lui	a0,0x0
    71e4:	24840ed8 	addiu	a0,a0,3800
    71e8:	3c100000 	lui	s0,0x0
    71ec:	26100000 	addiu	s0,s0,0
    71f0:	0200f809 	jalr	s0
    71f4:	00000000 	nop
                   "knowing what speed to force the link\n");
            printk("Speed specified was %dMbps\n", eth_cmd.speed);
    71f8:	3c040000 	lui	a0,0x0
    71fc:	24840f20 	addiu	a0,a0,3872
    7200:	0200f809 	jalr	s0
    7204:	97a5001c 	lhu	a1,28(sp)
            return -EINVAL;
    7208:	08001cf2 	j	73c8 <e1000_ethtool_ioctl+0x5f0>
    720c:	2402ffea 	li	v0,-22

static inline int capable(int cap)
{
#if 1 /* ok now */
	if (cap_raised(current->cap_effective, cap))
    7210:	8f8201d4 	lw	v0,468(gp)
    7214:	30421000 	andi	v0,v0,0x1000
    7218:	10400005 	beqz	v0,7230 <e1000_ethtool_ioctl+0x458>
    721c:	24030001 	li	v1,1
#else
	if (cap_is_fs_cap(cap) ? current->fsuid == 0 : current->euid == 0)
#endif
	{
		current->flags |= PF_SUPERPRIV;
    7220:	8f820004 	lw	v0,4(gp)
    7224:	34420100 	ori	v0,v0,0x100
		return 1;
    7228:	08001c8d 	j	7234 <e1000_ethtool_ioctl+0x45c>
    722c:	af820004 	sw	v0,4(gp)
	}
	return 0;
    7230:	00001821 	move	v1,zero
        }
        /* We donot support setting of 
         * whatever else that was requested */
        else
            return -EOPNOTSUPP;

        break;

#ifdef ETHTOOL_NWAY_RST
    case ETHTOOL_NWAY_RST:
        /* need proper permission to restart auto-negotiation */
        if(!capable(CAP_NET_ADMIN))
    7234:	10600064 	beqz	v1,73c8 <e1000_ethtool_ioctl+0x5f0>
    7238:	2402ffff 	li	v0,-1
            return -EPERM;

        adapter->shared.autoneg = 1;
    723c:	24030001 	li	v1,1
        adapter->shared.autoneg_advertised = AUTONEG_ADV_DEFAULT;
    7240:	2402002f 	li	v0,47
    7244:	a6420048 	sh	v0,72(s2)
        e1000_hibernate_adapter(netdev);
    7248:	02a02021 	move	a0,s5
    724c:	3c020000 	lui	v0,0x0
    7250:	24420000 	addiu	v0,v0,0
    7254:	a2430078 	sb	v1,120(s2)
    7258:	0040f809 	jalr	v0
    725c:	00000000 	nop
        e1000_wakeup_adapter(netdev);
    7260:	3c020000 	lui	v0,0x0
    7264:	24420000 	addiu	v0,v0,0
    7268:	0040f809 	jalr	v0
    726c:	02a02021 	move	a0,s5

        break;
    7270:	08001cf2 	j	73c8 <e1000_ethtool_ioctl+0x5f0>
    7274:	00001021 	move	v0,zero
#endif

#ifdef ETHTOOL_GLINK
    case ETHTOOL_GLINK:
        eth_e1000_linkinfo.data = adapter->link_active;
    7278:	8e4200b0 	lw	v0,176(s2)
        if(copy_to_user(ifr->ifr_data, &eth_e1000_linkinfo, sizeof(eth_e1000_linkinfo)))
    727c:	8e640010 	lw	a0,16(s3)
    7280:	27a50040 	addiu	a1,sp,64
    7284:	afa20044 	sw	v0,68(sp)
    7288:	8f8303bc 	lw	v1,956(gp)
    728c:	24820008 	addiu	v0,a0,8
    7290:	00821025 	or	v0,a0,v0
    7294:	00621824 	and	v1,v1,v0
    7298:	04600044 	bltz	v1,73ac <e1000_ethtool_ioctl+0x5d4>
    729c:	24060008 	li	a2,8
    72a0:	3c010000 	lui	at,0x0
    72a4:	24210000 	addiu	at,at,0
    72a8:	0020f809 	jalr	at
    72ac:	00000000 	nop
            return -EFAULT;
    72b0:	08001ceb 	j	73ac <e1000_ethtool_ioctl+0x5d4>
    72b4:	00000000 	nop
        break;
#endif

#ifdef ETHTOOL_GDRVINFO
    case ETHTOOL_GDRVINFO:
        strcpy(eth_e1000_info.driver, e1000_driver_name);
    72b8:	27a3004c 	addiu	v1,sp,76
    72bc:	3c020000 	lui	v0,0x0
    72c0:	24420000 	addiu	v0,v0,0
extern __inline__ char *strcpy(char *__dest, __const__ char *__src)
{
  char *__xdest = __dest;

  __asm__ __volatile__(
    72c4:	90410000 	lbu	at,0(v0)
    72c8:	24420001 	addiu	v0,v0,1
    72cc:	a0610000 	sb	at,0(v1)
    72d0:	1420fffc 	bnez	at,72c4 <e1000_ethtool_ioctl+0x4ec>
    72d4:	24630001 	addiu	v1,v1,1
        strcpy(eth_e1000_info.version, e1000_driver_version);
    72d8:	27a4006c 	addiu	a0,sp,108
    72dc:	3c020000 	lui	v0,0x0
    72e0:	24420000 	addiu	v0,v0,0
extern __inline__ char *strcpy(char *__dest, __const__ char *__src)
{
  char *__xdest = __dest;

  __asm__ __volatile__(
    72e4:	90410000 	lbu	at,0(v0)
    72e8:	24420001 	addiu	v0,v0,1
    72ec:	a0810000 	sb	at,0(a0)
    72f0:	1420fffc 	bnez	at,72e4 <e1000_ethtool_ioctl+0x50c>
    72f4:	24840001 	addiu	a0,a0,1
        strcpy(eth_e1000_info.fw_version, "None");
    72f8:	27a3008c 	addiu	v1,sp,140
    72fc:	3c020000 	lui	v0,0x0
    7300:	24420f3c 	addiu	v0,v0,3900
extern __inline__ char *strcpy(char *__dest, __const__ char *__src)
{
  char *__xdest = __dest;

  __asm__ __volatile__(
    7304:	90410000 	lbu	at,0(v0)
    7308:	24420001 	addiu	v0,v0,1
    730c:	a0610000 	sb	at,0(v1)
    7310:	1420fffc 	bnez	at,7304 <e1000_ethtool_ioctl+0x52c>
    7314:	24630001 	addiu	v1,v1,1
        strcpy(eth_e1000_info.bus_info, adapter->pdev->slot_name);
    7318:	8e44014c 	lw	a0,332(s2)
    731c:	27a200ac 	addiu	v0,sp,172
    7320:	24840270 	addiu	a0,a0,624
extern __inline__ char *strcpy(char *__dest, __const__ char *__src)
{
  char *__xdest = __dest;

  __asm__ __volatile__(
    7324:	90810000 	lbu	at,0(a0)
    7328:	24840001 	addiu	a0,a0,1
    732c:	a0410000 	sb	at,0(v0)
    7330:	1420fffc 	bnez	at,7324 <e1000_ethtool_ioctl+0x54c>
    7334:	24420001 	addiu	v0,v0,1
        if(copy_to_user(ifr->ifr_data, &eth_e1000_info, sizeof(eth_e1000_info)))
    7338:	8e640010 	lw	a0,16(s3)
    733c:	8f8303bc 	lw	v1,956(gp)
    7340:	27a50048 	addiu	a1,sp,72
    7344:	248200c4 	addiu	v0,a0,196
    7348:	00821025 	or	v0,a0,v0
    734c:	00621824 	and	v1,v1,v0
    7350:	04600016 	bltz	v1,73ac <e1000_ethtool_ioctl+0x5d4>
    7354:	240600c4 	li	a2,196
    7358:	3c010000 	lui	at,0x0
    735c:	24210000 	addiu	at,at,0
    7360:	0020f809 	jalr	at
    7364:	00000000 	nop
            return -EFAULT;
    7368:	08001ceb 	j	73ac <e1000_ethtool_ioctl+0x5d4>
    736c:	00000000 	nop
        break;
#endif

#ifdef ETHTOOL_GWOL
    case ETHTOOL_GWOL:
        eth_e1000_wolinfo.supported = eth_e1000_wolinfo.wolopts = WAKE_MAGIC;
        if(copy_to_user
    7370:	8e640010 	lw	a0,16(s3)
    7374:	24020020 	li	v0,32
    7378:	afa20114 	sw	v0,276(sp)
    737c:	afa20118 	sw	v0,280(sp)
    7380:	8f8303bc 	lw	v1,956(gp)
    7384:	24820014 	addiu	v0,a0,20
    7388:	00821025 	or	v0,a0,v0
    738c:	00621824 	and	v1,v1,v0
    7390:	27a50110 	addiu	a1,sp,272
    7394:	04600005 	bltz	v1,73ac <e1000_ethtool_ioctl+0x5d4>
    7398:	24060014 	li	a2,20
    739c:	3c010000 	lui	at,0x0
    73a0:	24210000 	addiu	at,at,0
    73a4:	0020f809 	jalr	at
    73a8:	00000000 	nop
    73ac:	10c00005 	beqz	a2,73c4 <e1000_ethtool_ioctl+0x5ec>
    73b0:	2402fff2 	li	v0,-14
           (ifr->ifr_data, &eth_e1000_wolinfo, sizeof(eth_e1000_wolinfo)))
            return -EFAULT;
    73b4:	08001cf3 	j	73cc <e1000_ethtool_ioctl+0x5f4>
    73b8:	8fbf0140 	lw	ra,320(sp)
        break;
#endif

    default:
        return -EOPNOTSUPP;
    73bc:	08001cf2 	j	73c8 <e1000_ethtool_ioctl+0x5f0>
    73c0:	2402ff86 	li	v0,-122
    }

    return 0;
    73c4:	00001021 	move	v0,zero

}
    73c8:	8fbf0140 	lw	ra,320(sp)
    73cc:	8fb5013c 	lw	s5,316(sp)
    73d0:	8fb40138 	lw	s4,312(sp)
    73d4:	8fb30134 	lw	s3,308(sp)
    73d8:	8fb20130 	lw	s2,304(sp)
    73dc:	8fb1012c 	lw	s1,300(sp)
    73e0:	8fb00128 	lw	s0,296(sp)
    73e4:	03e00008 	jr	ra
    73e8:	27bd0148 	addiu	sp,sp,328

000073ec <e1000_enable_WOL>:
    73ec:	00804021 	move	t0,a0
#endif /* SIOCETHTOOL */

/**
 * e1000_enable_WOL - Wake On Lan Support (Magic Pkt)
 * @adapter: Adapter structure 
 **/

static void
e1000_enable_WOL(struct e1000_adapter *adapter)
{
    uint32_t wuc_val;

    if(adapter->shared.mac_type <= e1000_82543)
    73f0:	8d06000c 	lw	a2,12(t0)
    73f4:	2cc20003 	sltiu	v0,a2,3
    73f8:	1440001f 	bnez	v0,7478 <e1000_enable_WOL+0x8c>
    73fc:	2cc20002 	sltiu	v0,a2,2
        return;

    /* Set up Wake-Up Ctrl reg */
    wuc_val = E1000_READ_REG(&adapter->shared, WUC);
    7400:	8d070008 	lw	a3,8(t0)
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    7404:	8ce55800 	lw	a1,22528(a3)
	return __arch__swab32(x);
    7408:	30a3ff00 	andi	v1,a1,0xff00
    740c:	00052600 	sll	a0,a1,0x18
    7410:	00051202 	srl	v0,a1,0x8
    7414:	00031a00 	sll	v1,v1,0x8
    7418:	00832025 	or	a0,a0,v1
    741c:	3042ff00 	andi	v0,v0,0xff00
    7420:	00822025 	or	a0,a0,v0
    7424:	00052e02 	srl	a1,a1,0x18
    7428:	00852825 	or	a1,a0,a1
    wuc_val &= ~(E1000_WUC_APME | E1000_WUC_APMPME);
    742c:	2402fff6 	li	v0,-10
    7430:	00a22824 	and	a1,a1,v0
    wuc_val |= (E1000_WUC_PME_STATUS | E1000_WUC_PME_EN);
    7434:	2cc30002 	sltiu	v1,a2,2
    7438:	34a50006 	ori	a1,a1,0x6
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    743c:	30a4ff00 	andi	a0,a1,0xff00
    7440:	00042200 	sll	a0,a0,0x8
    7444:	00051600 	sll	v0,a1,0x18
    7448:	00051a02 	srl	v1,a1,0x8
    744c:	00441025 	or	v0,v0,a0
    7450:	3063ff00 	andi	v1,v1,0xff00
    7454:	00431025 	or	v0,v0,v1
    7458:	00052602 	srl	a0,a1,0x18
    745c:	00441025 	or	v0,v0,a0

    E1000_WRITE_REG(&adapter->shared, WUC, wuc_val);
    7460:	ace25800 	sw	v0,22528(a3)
    7464:	8d02000c 	lw	v0,12(t0)
    7468:	2c420002 	sltiu	v0,v0,2

    /* Set up Wake-up Filter */
    E1000_WRITE_REG(&adapter->shared, WUFC, E1000_WUFC_MAG);

    return;
}
    746c:	8d030008 	lw	v1,8(t0)
    7470:	3c020200 	lui	v0,0x200
    7474:	ac625808 	sw	v0,22536(v1)
    7478:	03e00008 	jr	ra
    747c:	00000000 	nop

00007480 <e1000_write_pci_cfg>:
    7480:	27bdffe8 	addiu	sp,sp,-24
    7484:	afbf0010 	sw	ra,16(sp)

/**
 * e1000_write_pci_cg -
 * @shared:
 * @reg:
 * @value:
 **/

void
e1000_write_pci_cfg(struct e1000_shared_adapter *shared,
                    uint32_t reg,
                    uint16_t *value)
{
    struct e1000_adapter *adapter = (struct e1000_adapter *) shared->back;
    7488:	8c82000c 	lw	v0,12(a0)

    pci_write_config_word(adapter->pdev, reg, *value);
    748c:	8c44014c 	lw	a0,332(v0)
    7490:	3c020000 	lui	v0,0x0
    7494:	24420000 	addiu	v0,v0,0
    7498:	0040f809 	jalr	v0
    749c:	94c60000 	lhu	a2,0(a2)
    return;
}
    74a0:	8fbf0010 	lw	ra,16(sp)
    74a4:	03e00008 	jr	ra
    74a8:	27bd0018 	addiu	sp,sp,24

000074ac <e1000_irq_enable>:
    74ac:	8c82000c 	lw	v0,12(a0)
    74b0:	2c420002 	sltiu	v0,v0,2
	__arch__swab16s(addr);
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
    74b4:	8c8500cc 	lw	a1,204(a0)
    74b8:	8c860008 	lw	a2,8(a0)
}

static __inline__ __const__ __u32 __fswab32(__u32 x)
{
	return __arch__swab32(x);
    74bc:	30a4ff00 	andi	a0,a1,0xff00
    74c0:	00051600 	sll	v0,a1,0x18
    74c4:	00051a02 	srl	v1,a1,0x8
    74c8:	00042200 	sll	a0,a0,0x8
    74cc:	00441025 	or	v0,v0,a0
    74d0:	3063ff00 	andi	v1,v1,0xff00
    74d4:	00431025 	or	v0,v0,v1
    74d8:	00052e02 	srl	a1,a1,0x18
    74dc:	00451025 	or	v0,v0,a1
    74e0:	acc200d0 	sw	v0,208(a2)
    74e4:	03e00008 	jr	ra
    74e8:	00000000 	nop

000074ec <e1000_rx_checksum>:
    74ec:	00803821 	move	a3,a0
    74f0:	8ce2000c 	lw	v0,12(a3)
    74f4:	2c420002 	sltiu	v0,v0,2
    74f8:	14400006 	bnez	v0,7514 <e1000_rx_checksum+0x28>
    74fc:	3c042000 	lui	a0,0x2000
    7500:	8ca2000c 	lw	v0,12(a1)
    7504:	3c032400 	lui	v1,0x2400
    7508:	00431024 	and	v0,v0,v1
    750c:	50440003 	beql	v0,a0,751c <e1000_rx_checksum+0x30>
    7510:	90a2000d 	lbu	v0,13(a1)
    7514:	03e00008 	jr	ra
    7518:	a0c0006b 	sb	zero,107(a2)
    751c:	30420020 	andi	v0,v0,0x20
    7520:	1040000b 	beqz	v0,7550 <e1000_rx_checksum+0x64>
    7524:	24020002 	li	v0,2
    7528:	a0c0006b 	sb	zero,107(a2)
    752c:	8ce20140 	lw	v0,320(a3)
    7530:	8ce30144 	lw	v1,324(a3)
    7534:	24630001 	addiu	v1,v1,1
    7538:	2c640001 	sltiu	a0,v1,1
    753c:	00441021 	addu	v0,v0,a0
    7540:	ace20140 	sw	v0,320(a3)
    7544:	ace30144 	sw	v1,324(a3)
    7548:	03e00008 	jr	ra
    754c:	00000000 	nop
    7550:	a0c2006b 	sb	v0,107(a2)
    7554:	8ce40138 	lw	a0,312(a3)
    7558:	8ce5013c 	lw	a1,316(a3)
    755c:	24a50001 	addiu	a1,a1,1
    7560:	2ca20001 	sltiu	v0,a1,1
    7564:	00822021 	addu	a0,a0,v0
    7568:	ace40138 	sw	a0,312(a3)
    756c:	ace5013c 	sw	a1,316(a3)
    7570:	03e00008 	jr	ra
	...

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2002-02-26 21:30 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2002-02-23  1:57 Is this a toolchain bug? Matthew Dharm
2002-02-24  2:06 ` Daniel Jacobowitz
2002-02-25  2:30   ` Matthew Dharm
2002-02-25 18:36 ` Kevin Paul Herbert
2002-02-25 19:54   ` Matthew Dharm
2002-02-25 20:30   ` Matthew Dharm
2002-02-26  1:13     ` Daniel Jacobowitz
2002-02-26  1:18       ` Matthew Dharm
2002-02-26 10:31     ` Tommy S. Christensen
2002-02-26 20:29       ` Matthew Dharm

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox